From 26457ea5cb20862d232e6e5fa4dbdeac5d444bf1 Mon Sep 17 00:00:00 2001 From: Vladimir Mihailenco Date: Tue, 30 Nov 2021 13:46:21 +0200 Subject: [PATCH] fix: don't append CASCADE by default in drop table/column queries --- db.go | 2 +- internal/dbtest/testdata/snapshots/TestQuery-pg-34 | 2 +- internal/dbtest/testdata/snapshots/TestQuery-pg-42 | 2 +- internal/dbtest/testdata/snapshots/TestQuery-pg-45 | 2 +- internal/dbtest/testdata/snapshots/TestQuery-pgx-34 | 2 +- internal/dbtest/testdata/snapshots/TestQuery-pgx-42 | 2 +- internal/dbtest/testdata/snapshots/TestQuery-pgx-45 | 2 +- query_base.go | 6 ++++-- query_index_drop.go | 5 +++++ query_table_drop.go | 5 +++++ query_table_truncate.go | 5 +++++ 11 files changed, 26 insertions(+), 9 deletions(-) diff --git a/db.go b/db.go index a83b07d3..83328015 100644 --- a/db.go +++ b/db.go @@ -125,7 +125,7 @@ func (db *DB) NewDropColumn() *DropColumnQuery { func (db *DB) ResetModel(ctx context.Context, models ...interface{}) error { for _, model := range models { - if _, err := db.NewDropTable().Model(model).IfExists().Exec(ctx); err != nil { + if _, err := db.NewDropTable().Model(model).IfExists().Cascade().Exec(ctx); err != nil { return err } if _, err := db.NewCreateTable().Model(model).Exec(ctx); err != nil { diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pg-34 b/internal/dbtest/testdata/snapshots/TestQuery-pg-34 index ee070522..dee321e7 100644 --- a/internal/dbtest/testdata/snapshots/TestQuery-pg-34 +++ b/internal/dbtest/testdata/snapshots/TestQuery-pg-34 @@ -1 +1 @@ -DROP TABLE "models" CASCADE +DROP TABLE "models" diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pg-42 b/internal/dbtest/testdata/snapshots/TestQuery-pg-42 index 7c1d4a9e..9d009360 100644 --- a/internal/dbtest/testdata/snapshots/TestQuery-pg-42 +++ b/internal/dbtest/testdata/snapshots/TestQuery-pg-42 @@ -1 +1 @@ -DROP INDEX CONCURRENTLY IF EXISTS title_idx CASCADE +DROP INDEX CONCURRENTLY IF EXISTS title_idx diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pg-45 b/internal/dbtest/testdata/snapshots/TestQuery-pg-45 index 4bf9ef42..ec35dbce 100644 --- a/internal/dbtest/testdata/snapshots/TestQuery-pg-45 +++ b/internal/dbtest/testdata/snapshots/TestQuery-pg-45 @@ -1 +1 @@ -TRUNCATE TABLE "models" RESTART IDENTITY CASCADE +TRUNCATE TABLE "models" RESTART IDENTITY diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pgx-34 b/internal/dbtest/testdata/snapshots/TestQuery-pgx-34 index ee070522..dee321e7 100644 --- a/internal/dbtest/testdata/snapshots/TestQuery-pgx-34 +++ b/internal/dbtest/testdata/snapshots/TestQuery-pgx-34 @@ -1 +1 @@ -DROP TABLE "models" CASCADE +DROP TABLE "models" diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pgx-42 b/internal/dbtest/testdata/snapshots/TestQuery-pgx-42 index 7c1d4a9e..9d009360 100644 --- a/internal/dbtest/testdata/snapshots/TestQuery-pgx-42 +++ b/internal/dbtest/testdata/snapshots/TestQuery-pgx-42 @@ -1 +1 @@ -DROP INDEX CONCURRENTLY IF EXISTS title_idx CASCADE +DROP INDEX CONCURRENTLY IF EXISTS title_idx diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pgx-45 b/internal/dbtest/testdata/snapshots/TestQuery-pgx-45 index 4bf9ef42..ec35dbce 100644 --- a/internal/dbtest/testdata/snapshots/TestQuery-pgx-45 +++ b/internal/dbtest/testdata/snapshots/TestQuery-pgx-45 @@ -1 +1 @@ -TRUNCATE TABLE "models" RESTART IDENTITY CASCADE +TRUNCATE TABLE "models" RESTART IDENTITY diff --git a/query_base.go b/query_base.go index 4cf31d04..acf1ba0e 100644 --- a/query_base.go +++ b/query_base.go @@ -951,6 +951,7 @@ func (q setQuery) appendSet(fmter schema.Formatter, b []byte) (_ []byte, err err //------------------------------------------------------------------------------ type cascadeQuery struct { + cascade bool restrict bool } @@ -958,10 +959,11 @@ func (q cascadeQuery) appendCascade(fmter schema.Formatter, b []byte) []byte { if !fmter.HasFeature(feature.TableCascade) { return b } + if q.cascade { + b = append(b, " CASCADE"...) + } if q.restrict { b = append(b, " RESTRICT"...) - } else { - b = append(b, " CASCADE"...) } return b } diff --git a/query_index_drop.go b/query_index_drop.go index 2a641a28..d8b42356 100644 --- a/query_index_drop.go +++ b/query_index_drop.go @@ -50,6 +50,11 @@ func (q *DropIndexQuery) IfExists() *DropIndexQuery { return q } +func (q *DropIndexQuery) Cascade() *DropIndexQuery { + q.cascade = true + return q +} + func (q *DropIndexQuery) Restrict() *DropIndexQuery { q.restrict = true return q diff --git a/query_table_drop.go b/query_table_drop.go index 8192bd54..ca8182ff 100644 --- a/query_table_drop.go +++ b/query_table_drop.go @@ -61,6 +61,11 @@ func (q *DropTableQuery) IfExists() *DropTableQuery { return q } +func (q *DropTableQuery) Cascade() *DropTableQuery { + q.cascade = true + return q +} + func (q *DropTableQuery) Restrict() *DropTableQuery { q.restrict = true return q diff --git a/query_table_truncate.go b/query_table_truncate.go index 765afde9..13b28b5e 100644 --- a/query_table_truncate.go +++ b/query_table_truncate.go @@ -57,6 +57,11 @@ func (q *TruncateTableQuery) ContinueIdentity() *TruncateTableQuery { return q } +func (q *TruncateTableQuery) Cascade() *TruncateTableQuery { + q.cascade = true + return q +} + func (q *TruncateTableQuery) Restrict() *TruncateTableQuery { q.restrict = true return q