snapshot of https://github.com/sqlc-dev/sqlc.git (main, 2026-09-16; blobs > 131072B omitted)
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
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
This commit is contained in:
170
internal/engine/postgresql/catalog_test.go
Normal file
170
internal/engine/postgresql/catalog_test.go
Normal file
@@ -0,0 +1,170 @@
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user