Files
upstream-mirror 0f4df23290
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
snapshot of https://github.com/sqlc-dev/sqlc.git (main, 2026-09-16; blobs > 131072B omitted)
2026-09-16 02:17:34 +05:00

171 lines
2.8 KiB
Go

package postgresql
import (
"errors"
"strconv"
"strings"
"testing"
"github.com/sqlc-dev/sqlc/internal/sql/sqlerr"
"github.com/google/go-cmp/cmp"
)
func TestUpdateErrors(t *testing.T) {
p := NewParser()
for i, tc := range []struct {
stmt string
err *sqlerr.Error
}{
{
`
CREATE TABLE foo ();
CREATE TABLE foo ();
`,
sqlerr.RelationExists("foo"),
},
{
`
CREATE TYPE foo AS ENUM ('bar');
CREATE TYPE foo AS ENUM ('bar');
`,
sqlerr.TypeExists("foo"),
},
{
`
DROP TABLE foo;
`,
sqlerr.RelationNotFound("foo"),
},
{
`
DROP TYPE foo;
`,
sqlerr.TypeNotFound("foo"),
},
{
`
CREATE TABLE foo ();
CREATE TABLE bar ();
ALTER TABLE foo RENAME TO bar;
`,
sqlerr.RelationExists("bar"),
},
{
`
ALTER TABLE foo RENAME TO bar;
`,
sqlerr.RelationNotFound("foo"),
},
{
`
CREATE TABLE foo ();
ALTER TABLE foo ADD COLUMN bar text;
ALTER TABLE foo ADD COLUMN bar text;
`,
sqlerr.ColumnExists("foo", "bar"),
},
{
`
CREATE TABLE foo ();
ALTER TABLE foo DROP COLUMN bar;
`,
sqlerr.ColumnNotFound("foo", "bar"),
},
{
`
CREATE TABLE foo ();
ALTER TABLE foo ALTER COLUMN bar SET NOT NULL;
`,
sqlerr.ColumnNotFound("foo", "bar"),
},
{
`
CREATE TABLE foo ();
ALTER TABLE foo ALTER COLUMN bar DROP NOT NULL;
`,
sqlerr.ColumnNotFound("foo", "bar"),
},
{
`
CREATE SCHEMA foo;
CREATE SCHEMA foo;
`,
sqlerr.SchemaExists("foo"),
},
{
`
ALTER TABLE foo.baz SET SCHEMA bar;
`,
sqlerr.SchemaNotFound("foo"),
},
{
`
CREATE SCHEMA foo;
ALTER TABLE foo.baz SET SCHEMA bar;
`,
sqlerr.RelationNotFound("baz"),
},
{
`
CREATE SCHEMA foo;
CREATE TABLE foo.baz ();
ALTER TABLE foo.baz SET SCHEMA bar;
`,
sqlerr.SchemaNotFound("bar"),
},
{
`
DROP SCHEMA bar;
`,
sqlerr.SchemaNotFound("bar"),
},
{
`
ALTER TABLE foo RENAME bar TO baz;
`,
sqlerr.RelationNotFound("foo"),
},
{
`
CREATE TABLE foo ();
ALTER TABLE foo RENAME bar TO baz;
`,
sqlerr.ColumnNotFound("foo", "bar"),
},
{
`
CREATE TABLE foo (bar text, baz text);
ALTER TABLE foo RENAME bar TO baz;
`,
sqlerr.ColumnExists("foo", "baz"),
},
} {
test := tc
t.Run(strconv.Itoa(i), func(t *testing.T) {
stmts, err := p.Parse(strings.NewReader(test.stmt))
if err != nil {
t.Log(test.stmt)
t.Fatal(err)
}
c := NewCatalog()
err = c.Build(stmts)
if err == nil {
t.Log(test.stmt)
t.Fatal("err was nil")
}
var actual *sqlerr.Error
if !errors.As(err, &actual) {
t.Fatalf("err is not *sqlerr.Error: %#v", err)
}
if diff := cmp.Diff(test.err.Error(), actual.Error()); diff != "" {
t.Log(test.stmt)
t.Errorf("error mismatch: \n%s", diff)
}
})
}
}