Skip to content

Commit 81b15a3

Browse files
authored
fix: Do not throw error when IF NOT EXISTS is used on ADD COLUMN (#2092)
1 parent 8644195 commit 81b15a3

File tree

19 files changed

+243
-1
lines changed

19 files changed

+243
-1
lines changed

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/pgx/v4/go/db.go

+32
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/pgx/v4/go/models.go

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/pgx/v4/go/query.sql.go

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: Placeholder :exec
2+
SELECT 1;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
CREATE TABLE foo (bar text NOT NULL, baz text NOT NULL);
2+
ALTER TABLE foo ADD COLUMN IF NOT EXISTS bar text;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"sql_package": "pgx/v4",
8+
"name": "querytest",
9+
"schema": "schema.sql",
10+
"queries": "query.sql"
11+
}
12+
]
13+
}

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/pgx/v5/go/db.go

+32
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/pgx/v5/go/models.go

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/pgx/v5/go/query.sql.go

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: Placeholder :exec
2+
SELECT 1;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
CREATE TABLE foo (bar text NOT NULL, baz text NOT NULL);
2+
ALTER TABLE foo ADD COLUMN IF NOT EXISTS bar text;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"sql_package": "pgx/v5",
8+
"name": "querytest",
9+
"schema": "schema.sql",
10+
"queries": "query.sql"
11+
}
12+
]
13+
}

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/stdlib/go/db.go

+31
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/stdlib/go/models.go

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_alter_table_add_column_if_not_exists/postgresql/stdlib/go/query.sql.go

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: Placeholder :exec
2+
SELECT 1;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
CREATE TABLE foo (bar text NOT NULL, baz text NOT NULL);
2+
ALTER TABLE foo ADD COLUMN IF NOT EXISTS bar text;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"name": "querytest",
8+
"schema": "schema.sql",
9+
"queries": "query.sql"
10+
}
11+
]
12+
}

internal/sql/catalog/table.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,13 @@ func (table *Table) isExistColumn(cmd *ast.AlterTableCmd) (int, error) {
3434
func (table *Table) addColumn(cmd *ast.AlterTableCmd) error {
3535
for _, c := range table.Columns {
3636
if c.Name == cmd.Def.Colname {
37-
return sqlerr.ColumnExists(table.Rel.Name, c.Name)
37+
if !cmd.MissingOk {
38+
return sqlerr.ColumnExists(table.Rel.Name, cmd.Def.Colname)
39+
}
40+
return nil
3841
}
3942
}
43+
4044
table.Columns = append(table.Columns, &Column{
4145
Name: cmd.Def.Colname,
4246
Type: *cmd.Def.TypeName,

0 commit comments

Comments
 (0)