diff --git a/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/db.go b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/db.go new file mode 100644 index 0000000000..36ef5f4f45 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 + +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_change_column/mysql/go/models.go b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/models.go new file mode 100644 index 0000000000..c6ada582c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 + +package querytest + +import ( + "database/sql" +) + +type Foo struct { + Baz sql.NullString +} diff --git a/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/query.sql.go new file mode 100644 index 0000000000..6070d0b2f4 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 +// 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_change_column/mysql/query.sql b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/query.sql new file mode 100644 index 0000000000..bb628f9251 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/query.sql @@ -0,0 +1,2 @@ +/* name: Placeholder :exec */ +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/schema.sql b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/schema.sql new file mode 100644 index 0000000000..df60e48b23 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (bar text); +ALTER TABLE foo CHANGE COLUMN bar baz text; diff --git a/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/sqlc.json new file mode 100644 index 0000000000..e41c39e8b3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_change_column/mysql/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "mysql", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/engine/dolphin/convert.go b/internal/engine/dolphin/convert.go index 053b1f549c..632b38ea1f 100644 --- a/internal/engine/dolphin/convert.go +++ b/internal/engine/dolphin/convert.go @@ -68,7 +68,29 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node { }) case pcast.AlterTableChangeColumn: - // spew.Dump("change column", spec) + oldName := spec.OldColumnName.String() + alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{ + Name: &oldName, + Subtype: ast.AT_DropColumn, + }) + + for _, def := range spec.NewColumns { + name := def.Name.String() + columnDef := ast.ColumnDef{ + Colname: def.Name.String(), + TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)}, + IsNotNull: isNotNull(def), + } + if def.Tp.Flen >= 0 { + length := def.Tp.Flen + columnDef.Length = &length + } + alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{ + Name: &name, + Subtype: ast.AT_AddColumn, + Def: &columnDef, + }) + } case pcast.AlterTableModifyColumn: for _, def := range spec.NewColumns {