From 400631a8b1cd5bc91e98805f1dbcb498592409b2 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 26 Jul 2023 09:10:04 -0700 Subject: [PATCH 1/5] WIP --- .../postgresql/pgx/v4/go/db.go | 32 +++++++++++++++++++ .../postgresql/pgx/v4/go/models.go | 11 +++++++ .../postgresql/pgx/v4/go/query.sql.go | 19 +++++++++++ .../postgresql/pgx/v4/query.sql | 2 ++ .../postgresql/pgx/v4/schema.sql | 1 + .../postgresql/pgx/v4/sqlc.json | 13 ++++++++ .../postgresql/pgx/v5/go/db.go | 32 +++++++++++++++++++ .../postgresql/pgx/v5/go/models.go | 11 +++++++ .../postgresql/pgx/v5/go/query.sql.go | 19 +++++++++++ .../postgresql/pgx/v5/query.sql | 2 ++ .../postgresql/pgx/v5/schema.sql | 1 + .../postgresql/pgx/v5/sqlc.json | 13 ++++++++ .../postgresql/stdlib/go/db.go | 31 ++++++++++++++++++ .../postgresql/stdlib/go/models.go | 11 +++++++ .../postgresql/stdlib/go/query.sql.go | 19 +++++++++++ .../postgresql/stdlib/query.sql | 2 ++ .../postgresql/stdlib/schema.sql | 7 ++++ .../postgresql/stdlib/sqlc.json | 12 +++++++ internal/engine/postgresql/convert.go | 1 + internal/sql/catalog/catalog.go | 2 ++ internal/sql/catalog/table.go | 12 ++++++- 21 files changed, 252 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/sqlc.json diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/db.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/db.go new file mode 100644 index 0000000000..f3f26ec6fb --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 + +package querytest + +import ( + "context" + + "github.com/jackc/pgconn" + "github.com/jackc/pgx/v4" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go new file mode 100644 index 0000000000..e75a575711 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 + +package querytest + +import () + +type Foo struct { + Baz string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/query.sql.go new file mode 100644 index 0000000000..45a2497f9c --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.Exec(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/query.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql new file mode 100644 index 0000000000..555fa9b955 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql @@ -0,0 +1 @@ +ALTER TABLE IF EXISTS foo RENAME COLUMN bar TO baz; diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/sqlc.json new file mode 100644 index 0000000000..d1244c9e7a --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v4", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/db.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/db.go new file mode 100644 index 0000000000..4964d6b58c --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go new file mode 100644 index 0000000000..e75a575711 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 + +package querytest + +import () + +type Foo struct { + Baz string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/query.sql.go new file mode 100644 index 0000000000..45a2497f9c --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.Exec(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/query.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql new file mode 100644 index 0000000000..555fa9b955 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql @@ -0,0 +1 @@ +ALTER TABLE IF EXISTS foo RENAME COLUMN bar TO baz; diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/sqlc.json new file mode 100644 index 0000000000..32ede07158 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v5", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/db.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/db.go new file mode 100644 index 0000000000..fb6ae669f6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go new file mode 100644 index 0000000000..e75a575711 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 + +package querytest + +import () + +type Foo struct { + Baz string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/query.sql.go new file mode 100644 index 0000000000..a5a3ca6bba --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/query.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql new file mode 100644 index 0000000000..1158b96edb --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql @@ -0,0 +1,7 @@ +ALTER TABLE IF EXISTS foo ADD COLUMN bar integer; +ALTER TABLE IF EXISTS foo RENAME COLUMN bar TO baz; +ALTER TABLE IF EXISTS foo RENAME CONSTRAINT bar TO baz; +ALTER TABLE IF EXISTS foo RENAME TO bar; +ALTER TABLE IF EXISTS foo SET SCHEMA bar; +ALTER TABLE IF EXISTS foo ATTACH PARTITION partition_name DEFAULT; +ALTER TABLE IF EXISTS foo DETACH PARTITION partition_name; \ No newline at end of file diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/sqlc.json new file mode 100644 index 0000000000..f717ca2e66 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/engine/postgresql/convert.go b/internal/engine/postgresql/convert.go index 60dac94a4b..6d44680a0e 100644 --- a/internal/engine/postgresql/convert.go +++ b/internal/engine/postgresql/convert.go @@ -554,6 +554,7 @@ func convertAlterTableStmt(n *pg.AlterTableStmt) *ast.AlterTableStmt { if n == nil { return nil } + fmt.Println("alter table", n) return &ast.AlterTableStmt{ Relation: convertRangeVar(n.Relation), Cmds: convertSlice(n.Cmds), diff --git a/internal/sql/catalog/catalog.go b/internal/sql/catalog/catalog.go index 7417f60a8b..e9575a30e3 100644 --- a/internal/sql/catalog/catalog.go +++ b/internal/sql/catalog/catalog.go @@ -1,6 +1,7 @@ package catalog import ( + "github.com/kyleconroy/sqlc/internal/debug" "github.com/kyleconroy/sqlc/internal/sql/ast" ) @@ -46,6 +47,7 @@ func (c *Catalog) Update(stmt ast.Statement, colGen columnGenerator) error { if stmt.Raw == nil { return nil } + debug.Dump("update", stmt) var err error switch n := stmt.Raw.Stmt.(type) { diff --git a/internal/sql/catalog/table.go b/internal/sql/catalog/table.go index f4dbb78378..2ebc6281b3 100644 --- a/internal/sql/catalog/table.go +++ b/internal/sql/catalog/table.go @@ -18,6 +18,16 @@ type Table struct { Comment string } +func exists(err error, missingOK bool) error { + var serr *sqlerr.Error + if errors.As(err, &serr) { + if serr.Err == sqlerr.NotFound && missingOK { + return nil + } + } + return err +} + func (table *Table) isExistColumn(cmd *ast.AlterTableCmd) (int, error) { for i, c := range table.Columns { if c.Name == *cmd.Name { @@ -167,7 +177,7 @@ func (c *Catalog) alterTable(stmt *ast.AlterTableStmt) error { } _, table, err := c.getTable(stmt.Table) if err != nil { - return err + return exists(err, stmt.MissingOk) } for _, item := range stmt.Cmds.Items { switch cmd := item.(type) { From aec4c85ca1b97471f3ff8e664fdb7c145482994c Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Fri, 28 Jul 2023 15:36:00 -0700 Subject: [PATCH 2/5] feat(sql/catalog): ALTER TABLE IF EXISTS --- internal/engine/postgresql/parse.go | 18 +++++++++++------- .../sql/ast/alter_table_set_schema_stmt.go | 1 + internal/sql/ast/rename_column_stmt.go | 7 ++++--- internal/sql/ast/rename_table_stmt.go | 5 +++-- internal/sql/catalog/table.go | 12 ++++++------ 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/internal/engine/postgresql/parse.go b/internal/engine/postgresql/parse.go index fa1a54a911..e2ccac229b 100644 --- a/internal/engine/postgresql/parse.go +++ b/internal/engine/postgresql/parse.go @@ -241,6 +241,7 @@ func translate(node *nodes.Node) (ast.Node, error) { return &ast.AlterTableSetSchemaStmt{ Table: rel.TableName(), NewSchema: makeString(n.Newschema), + MissingOk: n.MissingOk, }, nil case nodes.ObjectType_OBJECT_TYPE: @@ -259,8 +260,9 @@ func translate(node *nodes.Node) (ast.Node, error) { n := inner.AlterTableStmt rel := parseRelationFromRangeVar(n.Relation) at := &ast.AlterTableStmt{ - Table: rel.TableName(), - Cmds: &ast.List{}, + Table: rel.TableName(), + Cmds: &ast.List{}, + MissingOk: n.MissingOk, } for _, cmd := range n.Cmds { switch cmdOneOf := cmd.Node.(type) { @@ -600,16 +602,18 @@ func translate(node *nodes.Node) (ast.Node, error) { case nodes.ObjectType_OBJECT_COLUMN: rel := parseRelationFromRangeVar(n.Relation) return &ast.RenameColumnStmt{ - Table: rel.TableName(), - Col: &ast.ColumnRef{Name: n.Subname}, - NewName: makeString(n.Newname), + Table: rel.TableName(), + Col: &ast.ColumnRef{Name: n.Subname}, + NewName: makeString(n.Newname), + MissingOk: n.MissingOk, }, nil case nodes.ObjectType_OBJECT_TABLE: rel := parseRelationFromRangeVar(n.Relation) return &ast.RenameTableStmt{ - Table: rel.TableName(), - NewName: makeString(n.Newname), + Table: rel.TableName(), + NewName: makeString(n.Newname), + MissingOk: n.MissingOk, }, nil case nodes.ObjectType_OBJECT_TYPE: diff --git a/internal/sql/ast/alter_table_set_schema_stmt.go b/internal/sql/ast/alter_table_set_schema_stmt.go index 51ca9f5bef..890cb3e5e8 100644 --- a/internal/sql/ast/alter_table_set_schema_stmt.go +++ b/internal/sql/ast/alter_table_set_schema_stmt.go @@ -3,6 +3,7 @@ package ast type AlterTableSetSchemaStmt struct { Table *TableName NewSchema *string + MissingOk bool } func (n *AlterTableSetSchemaStmt) Pos() int { diff --git a/internal/sql/ast/rename_column_stmt.go b/internal/sql/ast/rename_column_stmt.go index e85c91e673..498b89d6ef 100644 --- a/internal/sql/ast/rename_column_stmt.go +++ b/internal/sql/ast/rename_column_stmt.go @@ -1,9 +1,10 @@ package ast type RenameColumnStmt struct { - Table *TableName - Col *ColumnRef - NewName *string + Table *TableName + Col *ColumnRef + NewName *string + MissingOk bool } func (n *RenameColumnStmt) Pos() int { diff --git a/internal/sql/ast/rename_table_stmt.go b/internal/sql/ast/rename_table_stmt.go index 53464c7795..b879ddb0b7 100644 --- a/internal/sql/ast/rename_table_stmt.go +++ b/internal/sql/ast/rename_table_stmt.go @@ -1,8 +1,9 @@ package ast type RenameTableStmt struct { - Table *TableName - NewName *string + Table *TableName + NewName *string + MissingOk bool } func (n *RenameTableStmt) Pos() int { diff --git a/internal/sql/catalog/table.go b/internal/sql/catalog/table.go index 2ebc6281b3..2a688556d6 100644 --- a/internal/sql/catalog/table.go +++ b/internal/sql/catalog/table.go @@ -18,7 +18,7 @@ type Table struct { Comment string } -func exists(err error, missingOK bool) error { +func checkMissing(err error, missingOK bool) error { var serr *sqlerr.Error if errors.As(err, &serr) { if serr.Err == sqlerr.NotFound && missingOK { @@ -177,7 +177,7 @@ func (c *Catalog) alterTable(stmt *ast.AlterTableStmt) error { } _, table, err := c.getTable(stmt.Table) if err != nil { - return exists(err, stmt.MissingOk) + return checkMissing(err, stmt.MissingOk) } for _, item := range stmt.Cmds.Items { switch cmd := item.(type) { @@ -216,11 +216,11 @@ func (c *Catalog) alterTableSetSchema(stmt *ast.AlterTableSetSchemaStmt) error { } oldSchema, err := c.getSchema(ns) if err != nil { - return err + return checkMissing(err, stmt.MissingOk) } tbl, idx, err := oldSchema.getTable(stmt.Table) if err != nil { - return err + return checkMissing(err, stmt.MissingOk) } tbl.Rel.Schema = *stmt.NewSchema newSchema, err := c.getSchema(*stmt.NewSchema) @@ -364,7 +364,7 @@ func (c *Catalog) dropTable(stmt *ast.DropTableStmt) error { func (c *Catalog) renameColumn(stmt *ast.RenameColumnStmt) error { _, tbl, err := c.getTable(stmt.Table) if err != nil { - return err + return checkMissing(err, stmt.MissingOk) } idx := -1 for i := range tbl.Columns { @@ -385,7 +385,7 @@ func (c *Catalog) renameColumn(stmt *ast.RenameColumnStmt) error { func (c *Catalog) renameTable(stmt *ast.RenameTableStmt) error { sch, tbl, err := c.getTable(stmt.Table) if err != nil { - return err + return checkMissing(err, stmt.MissingOk) } if _, _, err := sch.getTable(&ast.TableName{Name: *stmt.NewName}); err == nil { return sqlerr.RelationExists(*stmt.NewName) From d59805d3992d33cf2aebe5b39d1b6cf479f77a89 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Fri, 28 Jul 2023 15:36:23 -0700 Subject: [PATCH 3/5] Fix test data --- .../postgresql/pgx/v4/go/models.go | 4 ---- .../postgresql/pgx/v4/schema.sql | 8 +++++++- .../postgresql/pgx/v5/go/models.go | 4 ---- .../postgresql/pgx/v5/schema.sql | 8 +++++++- .../postgresql/stdlib/go/models.go | 4 ---- .../postgresql/stdlib/schema.sql | 12 ++++++------ 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go index e75a575711..90d1991962 100644 --- a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Baz string -} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql index 555fa9b955..43a3e75aa4 100644 --- a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v4/schema.sql @@ -1 +1,7 @@ -ALTER TABLE IF EXISTS foo RENAME COLUMN bar TO baz; +ALTER TABLE IF EXISTS foo ADD COLUMN bar integer; +ALTER TABLE IF EXISTS bar RENAME COLUMN bar TO baz; +ALTER TABLE IF EXISTS bat RENAME CONSTRAINT bar TO baz; +ALTER TABLE IF EXISTS baz RENAME TO bar; +ALTER TABLE IF EXISTS goo SET SCHEMA bar; +ALTER TABLE IF EXISTS gob ATTACH PARTITION partition_name DEFAULT; +ALTER TABLE IF EXISTS doo DETACH PARTITION partition_name; \ No newline at end of file diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go index e75a575711..90d1991962 100644 --- a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Baz string -} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql index 555fa9b955..43a3e75aa4 100644 --- a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/pgx/v5/schema.sql @@ -1 +1,7 @@ -ALTER TABLE IF EXISTS foo RENAME COLUMN bar TO baz; +ALTER TABLE IF EXISTS foo ADD COLUMN bar integer; +ALTER TABLE IF EXISTS bar RENAME COLUMN bar TO baz; +ALTER TABLE IF EXISTS bat RENAME CONSTRAINT bar TO baz; +ALTER TABLE IF EXISTS baz RENAME TO bar; +ALTER TABLE IF EXISTS goo SET SCHEMA bar; +ALTER TABLE IF EXISTS gob ATTACH PARTITION partition_name DEFAULT; +ALTER TABLE IF EXISTS doo DETACH PARTITION partition_name; \ No newline at end of file diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go index e75a575711..90d1991962 100644 --- a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Baz string -} diff --git a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql index 1158b96edb..43a3e75aa4 100644 --- a/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql +++ b/internal/endtoend/testdata/ddl_alter_table_if_exists/postgresql/stdlib/schema.sql @@ -1,7 +1,7 @@ ALTER TABLE IF EXISTS foo ADD COLUMN bar integer; -ALTER TABLE IF EXISTS foo RENAME COLUMN bar TO baz; -ALTER TABLE IF EXISTS foo RENAME CONSTRAINT bar TO baz; -ALTER TABLE IF EXISTS foo RENAME TO bar; -ALTER TABLE IF EXISTS foo SET SCHEMA bar; -ALTER TABLE IF EXISTS foo ATTACH PARTITION partition_name DEFAULT; -ALTER TABLE IF EXISTS foo DETACH PARTITION partition_name; \ No newline at end of file +ALTER TABLE IF EXISTS bar RENAME COLUMN bar TO baz; +ALTER TABLE IF EXISTS bat RENAME CONSTRAINT bar TO baz; +ALTER TABLE IF EXISTS baz RENAME TO bar; +ALTER TABLE IF EXISTS goo SET SCHEMA bar; +ALTER TABLE IF EXISTS gob ATTACH PARTITION partition_name DEFAULT; +ALTER TABLE IF EXISTS doo DETACH PARTITION partition_name; \ No newline at end of file From 28ce2c9d49a11c6504086440b11da6894e86bdc2 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Fri, 28 Jul 2023 15:38:32 -0700 Subject: [PATCH 4/5] Remove debug statements --- internal/sql/catalog/catalog.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/sql/catalog/catalog.go b/internal/sql/catalog/catalog.go index 402cf0a5da..278ea8797d 100644 --- a/internal/sql/catalog/catalog.go +++ b/internal/sql/catalog/catalog.go @@ -46,7 +46,6 @@ func (c *Catalog) Update(stmt ast.Statement, colGen columnGenerator) error { if stmt.Raw == nil { return nil } - debug.Dump("update", stmt) var err error switch n := stmt.Raw.Stmt.(type) { From 15667b7e854249541431a197258b6b769d3c3059 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Fri, 28 Jul 2023 15:39:37 -0700 Subject: [PATCH 5/5] Remove print statement --- internal/engine/postgresql/convert.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/engine/postgresql/convert.go b/internal/engine/postgresql/convert.go index f3a25c8799..38a5e62a26 100644 --- a/internal/engine/postgresql/convert.go +++ b/internal/engine/postgresql/convert.go @@ -554,7 +554,6 @@ func convertAlterTableStmt(n *pg.AlterTableStmt) *ast.AlterTableStmt { if n == nil { return nil } - fmt.Println("alter table", n) return &ast.AlterTableStmt{ Relation: convertRangeVar(n.Relation), Cmds: convertSlice(n.Cmds),