From 7a9591fd45e782cca2b0300de4c1165edbf89d1a Mon Sep 17 00:00:00 2001 From: Denis Makogon Date: Thu, 21 Sep 2017 00:52:33 +0300 Subject: [PATCH] Split queries to make them work on Postgres and MySQL Only SQLite supports multiple deletes in one transaction/statement, but other are not. --- api/datastore/sql/sql.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/api/datastore/sql/sql.go b/api/datastore/sql/sql.go index 62f1e0758..6cf36f45f 100644 --- a/api/datastore/sql/sql.go +++ b/api/datastore/sql/sql.go @@ -222,10 +222,7 @@ func (ds *sqlStore) UpdateApp(ctx context.Context, newapp *models.App) (*models. func (ds *sqlStore) RemoveApp(ctx context.Context, appName string) error { res, err := ds.db.ExecContext(ctx, ds.db.Rebind( - `DELETE FROM apps WHERE name = ?; - DELETE FROM logs WHERE app_name=?; - DELETE FROM calls WHERE app_name=?; - DELETE FROM routes WHERE app_name=?;`), appName, appName, appName, appName) + `DELETE FROM apps WHERE name = ?`), appName) if err != nil { return err } @@ -233,7 +230,21 @@ func (ds *sqlStore) RemoveApp(ctx context.Context, appName string) error { if err == sql.ErrNoRows { return models.ErrAppsNotFound } - return err + + deletes := []string{ + `DELETE FROM logs WHERE app_name=?`, + `DELETE FROM calls WHERE app_name=?`, + `DELETE FROM routes WHERE app_name=?`, + } + + for _, stmt := range deletes { + _, err = ds.db.ExecContext(ctx, ds.db.Rebind(stmt), appName) + if err != nil { + return err + } + } + + return nil } func (ds *sqlStore) GetApp(ctx context.Context, name string) (*models.App, error) {