From e85795cf4d04d0d7a90e391237ceded7a576e8ab Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 29 Jul 2020 11:34:09 -0700 Subject: [PATCH] sql/catalog: Fix comparison of pg_catalog types Fixes #538 --- .../testdata/ddl_create_func_exists/query.sql | 5 +++++ .../testdata/ddl_create_func_exists/sqlc.json | 11 +++++++++++ .../testdata/ddl_create_func_exists/stderr.txt | 2 ++ internal/sql/catalog/catalog.go | 12 +++++++++++- 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/ddl_create_func_exists/query.sql create mode 100644 internal/endtoend/testdata/ddl_create_func_exists/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_create_func_exists/stderr.txt diff --git a/internal/endtoend/testdata/ddl_create_func_exists/query.sql b/internal/endtoend/testdata/ddl_create_func_exists/query.sql new file mode 100644 index 0000000000..d4d665ee0e --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_func_exists/query.sql @@ -0,0 +1,5 @@ +CREATE FUNCTION f(x TIMESTAMPTZ) RETURNS void AS '' LANGUAGE sql; +CREATE FUNCTION f(x timestamp with time zone) RETURNS void AS '' LANGUAGE sql; + +-- name: F :one +SELECT f(1); diff --git a/internal/endtoend/testdata/ddl_create_func_exists/sqlc.json b/internal/endtoend/testdata/ddl_create_func_exists/sqlc.json new file mode 100644 index 0000000000..ac7c2ed829 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_func_exists/sqlc.json @@ -0,0 +1,11 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "querytest", + "schema": "query.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_create_func_exists/stderr.txt b/internal/endtoend/testdata/ddl_create_func_exists/stderr.txt new file mode 100644 index 0000000000..43aaefe6a8 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_func_exists/stderr.txt @@ -0,0 +1,2 @@ +# package querytest +query.sql:1:1: relation "f" already exists diff --git a/internal/sql/catalog/catalog.go b/internal/sql/catalog/catalog.go index 683a90cb19..5e520863db 100644 --- a/internal/sql/catalog/catalog.go +++ b/internal/sql/catalog/catalog.go @@ -92,7 +92,17 @@ func sameType(a, b *ast.TypeName) bool { if a.Catalog != b.Catalog { return false } - if a.Schema != b.Schema { + // The pg_catalog schema is searched by default, so take that into + // account when comparing schemas + aSchema := a.Schema + bSchema := b.Schema + if aSchema == "pg_catalog" { + aSchema = "" + } + if bSchema == "pg_catalog" { + bSchema = "" + } + if aSchema != bSchema { return false } if a.Name != b.Name {