From 49091fb9b59b27fd482e2c415defe7cd00289243 Mon Sep 17 00:00:00 2001 From: Andrew Benton Date: Mon, 16 Oct 2023 13:51:27 -0700 Subject: [PATCH 1/5] test: Add a test case for https://github.com/sqlc-dev/sqlc/issues/1745 --- internal/endtoend/testdata/select_system/issue.md | 1 + .../testdata/select_system/stdlib/query.sql | 2 ++ .../testdata/select_system/stdlib/schema.sql | 3 +++ .../testdata/select_system/stdlib/sqlc.yaml | 14 ++++++++++++++ 4 files changed, 20 insertions(+) create mode 100644 internal/endtoend/testdata/select_system/issue.md create mode 100644 internal/endtoend/testdata/select_system/stdlib/query.sql create mode 100644 internal/endtoend/testdata/select_system/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/select_system/stdlib/sqlc.yaml diff --git a/internal/endtoend/testdata/select_system/issue.md b/internal/endtoend/testdata/select_system/issue.md new file mode 100644 index 0000000000..7e536076fc --- /dev/null +++ b/internal/endtoend/testdata/select_system/issue.md @@ -0,0 +1 @@ +https://github.com/sqlc-dev/sqlc/issues/1745 diff --git a/internal/endtoend/testdata/select_system/stdlib/query.sql b/internal/endtoend/testdata/select_system/stdlib/query.sql new file mode 100644 index 0000000000..a6a7f98849 --- /dev/null +++ b/internal/endtoend/testdata/select_system/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: GetCtId :one +SELECT ctid FROM test; diff --git a/internal/endtoend/testdata/select_system/stdlib/schema.sql b/internal/endtoend/testdata/select_system/stdlib/schema.sql new file mode 100644 index 0000000000..7518997c95 --- /dev/null +++ b/internal/endtoend/testdata/select_system/stdlib/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE test ( + id INT +); diff --git a/internal/endtoend/testdata/select_system/stdlib/sqlc.yaml b/internal/endtoend/testdata/select_system/stdlib/sqlc.yaml new file mode 100644 index 0000000000..b9856fb8dd --- /dev/null +++ b/internal/endtoend/testdata/select_system/stdlib/sqlc.yaml @@ -0,0 +1,14 @@ +version: "2" +cloud: + project: "01HAQMMECEYQYKFJN8MP16QC41" +sql: + - engine: "postgresql" + schema: "schema.sql" + queries: "query.sql" + gen: + go: + package: "querytest" + out: "go" + sql_package: "database/sql" + database: + managed: true From db20797525a383999e4f0c099573e5a779efbdb6 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 17 Oct 2023 13:12:45 -0700 Subject: [PATCH 2/5] feat(postgresql): Support system columns --- .../testdata/select_system/pgx/go/db.go | 32 +++++++++++++++ .../testdata/select_system/pgx/go/models.go | 13 ++++++ .../select_system/pgx/go/query.sql.go | 41 +++++++++++++++++++ .../testdata/select_system/pgx/query.sql | 4 ++ .../testdata/select_system/pgx/schema.sql | 3 ++ .../testdata/select_system/pgx/sqlc.yaml | 14 +++++++ .../engine/postgresql/analyzer/analyze.go | 2 +- 7 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/select_system/pgx/go/db.go create mode 100644 internal/endtoend/testdata/select_system/pgx/go/models.go create mode 100644 internal/endtoend/testdata/select_system/pgx/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_system/pgx/query.sql create mode 100644 internal/endtoend/testdata/select_system/pgx/schema.sql create mode 100644 internal/endtoend/testdata/select_system/pgx/sqlc.yaml diff --git a/internal/endtoend/testdata/select_system/pgx/go/db.go b/internal/endtoend/testdata/select_system/pgx/go/db.go new file mode 100644 index 0000000000..8a010ccc48 --- /dev/null +++ b/internal/endtoend/testdata/select_system/pgx/go/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.22.0 + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_system/pgx/go/models.go b/internal/endtoend/testdata/select_system/pgx/go/models.go new file mode 100644 index 0000000000..b52387cf1a --- /dev/null +++ b/internal/endtoend/testdata/select_system/pgx/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.22.0 + +package querytest + +import ( + "github.com/jackc/pgx/v5/pgtype" +) + +type Test struct { + ID pgtype.Int4 +} diff --git a/internal/endtoend/testdata/select_system/pgx/go/query.sql.go b/internal/endtoend/testdata/select_system/pgx/go/query.sql.go new file mode 100644 index 0000000000..fadb461a63 --- /dev/null +++ b/internal/endtoend/testdata/select_system/pgx/go/query.sql.go @@ -0,0 +1,41 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.22.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v5/pgtype" +) + +const getSystemColumns = `-- name: GetSystemColumns :one +SELECT + tableoid, xmin, cmin, xmax, cmax, ctid +FROM test +` + +type GetSystemColumnsRow struct { + Tableoid pgtype.Uint32 + Xmin pgtype.Uint32 + Cmin pgtype.Uint32 + Xmax pgtype.Uint32 + Cmax pgtype.Uint32 + Ctid pgtype.TID +} + +func (q *Queries) GetSystemColumns(ctx context.Context) (GetSystemColumnsRow, error) { + row := q.db.QueryRow(ctx, getSystemColumns) + var i GetSystemColumnsRow + err := row.Scan( + &i.Tableoid, + &i.Xmin, + &i.Cmin, + &i.Xmax, + &i.Cmax, + &i.Ctid, + ) + return i, err +} diff --git a/internal/endtoend/testdata/select_system/pgx/query.sql b/internal/endtoend/testdata/select_system/pgx/query.sql new file mode 100644 index 0000000000..11ddeb7495 --- /dev/null +++ b/internal/endtoend/testdata/select_system/pgx/query.sql @@ -0,0 +1,4 @@ +-- name: GetSystemColumns :one +SELECT + tableoid, xmin, cmin, xmax, cmax, ctid +FROM test; diff --git a/internal/endtoend/testdata/select_system/pgx/schema.sql b/internal/endtoend/testdata/select_system/pgx/schema.sql new file mode 100644 index 0000000000..7518997c95 --- /dev/null +++ b/internal/endtoend/testdata/select_system/pgx/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE test ( + id INT +); diff --git a/internal/endtoend/testdata/select_system/pgx/sqlc.yaml b/internal/endtoend/testdata/select_system/pgx/sqlc.yaml new file mode 100644 index 0000000000..2f12715923 --- /dev/null +++ b/internal/endtoend/testdata/select_system/pgx/sqlc.yaml @@ -0,0 +1,14 @@ +version: "2" +cloud: + project: "01HAQMMECEYQYKFJN8MP16QC41" +sql: + - engine: "postgresql" + schema: "schema.sql" + queries: "query.sql" + gen: + go: + package: "querytest" + out: "go" + sql_package: "pgx/v5" + database: + managed: true diff --git a/internal/engine/postgresql/analyzer/analyze.go b/internal/engine/postgresql/analyzer/analyze.go index ab34eb348e..fe07b840e6 100644 --- a/internal/engine/postgresql/analyzer/analyze.go +++ b/internal/engine/postgresql/analyzer/analyze.go @@ -101,7 +101,7 @@ func (a *Analyzer) columnInfo(ctx context.Context, field pgconn.FieldDescription if ok { return cinfo.(*pgColumn), nil } - rows, err := a.pool.Query(ctx, columnQuery, field.TableOID, field.TableAttributeNumber) + rows, err := a.pool.Query(ctx, columnQuery, field.TableOID, int16(field.TableAttributeNumber)) if err != nil { return nil, err } From 0c9ff9110e7b2275ae4b81516d381a76449af4b5 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 17 Oct 2023 13:45:28 -0700 Subject: [PATCH 3/5] Remove stdlib --- .../testdata/select_system/stdlib/query.sql | 2 -- .../testdata/select_system/stdlib/schema.sql | 3 --- .../testdata/select_system/stdlib/sqlc.yaml | 14 -------------- 3 files changed, 19 deletions(-) delete mode 100644 internal/endtoend/testdata/select_system/stdlib/query.sql delete mode 100644 internal/endtoend/testdata/select_system/stdlib/schema.sql delete mode 100644 internal/endtoend/testdata/select_system/stdlib/sqlc.yaml diff --git a/internal/endtoend/testdata/select_system/stdlib/query.sql b/internal/endtoend/testdata/select_system/stdlib/query.sql deleted file mode 100644 index a6a7f98849..0000000000 --- a/internal/endtoend/testdata/select_system/stdlib/query.sql +++ /dev/null @@ -1,2 +0,0 @@ --- name: GetCtId :one -SELECT ctid FROM test; diff --git a/internal/endtoend/testdata/select_system/stdlib/schema.sql b/internal/endtoend/testdata/select_system/stdlib/schema.sql deleted file mode 100644 index 7518997c95..0000000000 --- a/internal/endtoend/testdata/select_system/stdlib/schema.sql +++ /dev/null @@ -1,3 +0,0 @@ -CREATE TABLE test ( - id INT -); diff --git a/internal/endtoend/testdata/select_system/stdlib/sqlc.yaml b/internal/endtoend/testdata/select_system/stdlib/sqlc.yaml deleted file mode 100644 index b9856fb8dd..0000000000 --- a/internal/endtoend/testdata/select_system/stdlib/sqlc.yaml +++ /dev/null @@ -1,14 +0,0 @@ -version: "2" -cloud: - project: "01HAQMMECEYQYKFJN8MP16QC41" -sql: - - engine: "postgresql" - schema: "schema.sql" - queries: "query.sql" - gen: - go: - package: "querytest" - out: "go" - sql_package: "database/sql" - database: - managed: true From 2b3d3fb2b78edb959eeb3ce6b1077e49a24ee8e6 Mon Sep 17 00:00:00 2001 From: Kyle Gray Date: Tue, 17 Oct 2023 16:31:54 -0700 Subject: [PATCH 4/5] Update sqlc.yaml --- internal/endtoend/testdata/select_system/pgx/sqlc.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/endtoend/testdata/select_system/pgx/sqlc.yaml b/internal/endtoend/testdata/select_system/pgx/sqlc.yaml index 2f12715923..5dc63e3f91 100644 --- a/internal/endtoend/testdata/select_system/pgx/sqlc.yaml +++ b/internal/endtoend/testdata/select_system/pgx/sqlc.yaml @@ -1,6 +1,4 @@ version: "2" -cloud: - project: "01HAQMMECEYQYKFJN8MP16QC41" sql: - engine: "postgresql" schema: "schema.sql" @@ -10,5 +8,3 @@ sql: package: "querytest" out: "go" sql_package: "pgx/v5" - database: - managed: true From 936b30af88277b084fcf475525e837af93d87e1d Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 18 Oct 2023 09:31:48 -0700 Subject: [PATCH 5/5] Add exec.json --- internal/endtoend/testdata/select_system/pgx/exec.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 internal/endtoend/testdata/select_system/pgx/exec.json diff --git a/internal/endtoend/testdata/select_system/pgx/exec.json b/internal/endtoend/testdata/select_system/pgx/exec.json new file mode 100644 index 0000000000..e5dfda7818 --- /dev/null +++ b/internal/endtoend/testdata/select_system/pgx/exec.json @@ -0,0 +1,3 @@ +{ + "contexts": ["managed-db"] +}