From 7bbc905f0850735504c477ed6d3cd4f4ac079da8 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 23 Sep 2021 08:16:28 -0700 Subject: [PATCH] fix(engine/postgresql): jsonb_build_object Update the function signature of jsonb_build_object and jsonb_build_array with variadic arguments. --- .../json_build/postgresql/pgx/go/query.sql.go | 60 +++++++++++++++++++ .../json_build/postgresql/pgx/query.sql | 16 +++++ .../postgresql/stdlib/go/query.sql.go | 60 +++++++++++++++++++ .../json_build/postgresql/stdlib/query.sql | 16 +++++ internal/engine/postgresql/pg_catalog.go | 18 ++++-- 5 files changed, 166 insertions(+), 4 deletions(-) diff --git a/internal/endtoend/testdata/json_build/postgresql/pgx/go/query.sql.go b/internal/endtoend/testdata/json_build/postgresql/pgx/go/query.sql.go index 5f789c6f7d..d4272b8405 100644 --- a/internal/endtoend/testdata/json_build/postgresql/pgx/go/query.sql.go +++ b/internal/endtoend/testdata/json_build/postgresql/pgx/go/query.sql.go @@ -9,6 +9,66 @@ import ( "github.com/jackc/pgtype" ) +const selectJSONBBuildArray = `-- name: SelectJSONBBuildArray :one +SELECT + jsonb_build_array(), + jsonb_build_array(1), + jsonb_build_array(1, 2), + jsonb_build_array(1, 2, 'foo'), + jsonb_build_array(1, 2, 'foo', 4) +` + +type SelectJSONBBuildArrayRow struct { + JsonbBuildArray pgtype.JSONB + JsonbBuildArray_2 pgtype.JSONB + JsonbBuildArray_3 pgtype.JSONB + JsonbBuildArray_4 pgtype.JSONB + JsonbBuildArray_5 pgtype.JSONB +} + +func (q *Queries) SelectJSONBBuildArray(ctx context.Context) (SelectJSONBBuildArrayRow, error) { + row := q.db.QueryRow(ctx, selectJSONBBuildArray) + var i SelectJSONBBuildArrayRow + err := row.Scan( + &i.JsonbBuildArray, + &i.JsonbBuildArray_2, + &i.JsonbBuildArray_3, + &i.JsonbBuildArray_4, + &i.JsonbBuildArray_5, + ) + return i, err +} + +const selectJSONBBuildObject = `-- name: SelectJSONBBuildObject :one +SELECT + jsonb_build_object(), + jsonb_build_object('foo'), + jsonb_build_object('foo', 1), + jsonb_build_object('foo', 1, 2), + jsonb_build_object('foo', 1, 2, 'bar') +` + +type SelectJSONBBuildObjectRow struct { + JsonbBuildObject pgtype.JSONB + JsonbBuildObject_2 pgtype.JSONB + JsonbBuildObject_3 pgtype.JSONB + JsonbBuildObject_4 pgtype.JSONB + JsonbBuildObject_5 pgtype.JSONB +} + +func (q *Queries) SelectJSONBBuildObject(ctx context.Context) (SelectJSONBBuildObjectRow, error) { + row := q.db.QueryRow(ctx, selectJSONBBuildObject) + var i SelectJSONBBuildObjectRow + err := row.Scan( + &i.JsonbBuildObject, + &i.JsonbBuildObject_2, + &i.JsonbBuildObject_3, + &i.JsonbBuildObject_4, + &i.JsonbBuildObject_5, + ) + return i, err +} + const selectJSONBuildArray = `-- name: SelectJSONBuildArray :one SELECT json_build_array(), diff --git a/internal/endtoend/testdata/json_build/postgresql/pgx/query.sql b/internal/endtoend/testdata/json_build/postgresql/pgx/query.sql index 7b8321b25e..160eab53ff 100644 --- a/internal/endtoend/testdata/json_build/postgresql/pgx/query.sql +++ b/internal/endtoend/testdata/json_build/postgresql/pgx/query.sql @@ -13,3 +13,19 @@ SELECT json_build_array(1, 2), json_build_array(1, 2, 'foo'), json_build_array(1, 2, 'foo', 4); + +-- name: SelectJSONBBuildObject :one +SELECT + jsonb_build_object(), + jsonb_build_object('foo'), + jsonb_build_object('foo', 1), + jsonb_build_object('foo', 1, 2), + jsonb_build_object('foo', 1, 2, 'bar'); + +-- name: SelectJSONBBuildArray :one +SELECT + jsonb_build_array(), + jsonb_build_array(1), + jsonb_build_array(1, 2), + jsonb_build_array(1, 2, 'foo'), + jsonb_build_array(1, 2, 'foo', 4); diff --git a/internal/endtoend/testdata/json_build/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/json_build/postgresql/stdlib/go/query.sql.go index 5be6c2aae8..d5fadab1ed 100644 --- a/internal/endtoend/testdata/json_build/postgresql/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/json_build/postgresql/stdlib/go/query.sql.go @@ -8,6 +8,66 @@ import ( "encoding/json" ) +const selectJSONBBuildArray = `-- name: SelectJSONBBuildArray :one +SELECT + jsonb_build_array(), + jsonb_build_array(1), + jsonb_build_array(1, 2), + jsonb_build_array(1, 2, 'foo'), + jsonb_build_array(1, 2, 'foo', 4) +` + +type SelectJSONBBuildArrayRow struct { + JsonbBuildArray json.RawMessage + JsonbBuildArray_2 json.RawMessage + JsonbBuildArray_3 json.RawMessage + JsonbBuildArray_4 json.RawMessage + JsonbBuildArray_5 json.RawMessage +} + +func (q *Queries) SelectJSONBBuildArray(ctx context.Context) (SelectJSONBBuildArrayRow, error) { + row := q.db.QueryRowContext(ctx, selectJSONBBuildArray) + var i SelectJSONBBuildArrayRow + err := row.Scan( + &i.JsonbBuildArray, + &i.JsonbBuildArray_2, + &i.JsonbBuildArray_3, + &i.JsonbBuildArray_4, + &i.JsonbBuildArray_5, + ) + return i, err +} + +const selectJSONBBuildObject = `-- name: SelectJSONBBuildObject :one +SELECT + jsonb_build_object(), + jsonb_build_object('foo'), + jsonb_build_object('foo', 1), + jsonb_build_object('foo', 1, 2), + jsonb_build_object('foo', 1, 2, 'bar') +` + +type SelectJSONBBuildObjectRow struct { + JsonbBuildObject json.RawMessage + JsonbBuildObject_2 json.RawMessage + JsonbBuildObject_3 json.RawMessage + JsonbBuildObject_4 json.RawMessage + JsonbBuildObject_5 json.RawMessage +} + +func (q *Queries) SelectJSONBBuildObject(ctx context.Context) (SelectJSONBBuildObjectRow, error) { + row := q.db.QueryRowContext(ctx, selectJSONBBuildObject) + var i SelectJSONBBuildObjectRow + err := row.Scan( + &i.JsonbBuildObject, + &i.JsonbBuildObject_2, + &i.JsonbBuildObject_3, + &i.JsonbBuildObject_4, + &i.JsonbBuildObject_5, + ) + return i, err +} + const selectJSONBuildArray = `-- name: SelectJSONBuildArray :one SELECT json_build_array(), diff --git a/internal/endtoend/testdata/json_build/postgresql/stdlib/query.sql b/internal/endtoend/testdata/json_build/postgresql/stdlib/query.sql index 7b8321b25e..160eab53ff 100644 --- a/internal/endtoend/testdata/json_build/postgresql/stdlib/query.sql +++ b/internal/endtoend/testdata/json_build/postgresql/stdlib/query.sql @@ -13,3 +13,19 @@ SELECT json_build_array(1, 2), json_build_array(1, 2, 'foo'), json_build_array(1, 2, 'foo', 4); + +-- name: SelectJSONBBuildObject :one +SELECT + jsonb_build_object(), + jsonb_build_object('foo'), + jsonb_build_object('foo', 1), + jsonb_build_object('foo', 1, 2), + jsonb_build_object('foo', 1, 2, 'bar'); + +-- name: SelectJSONBBuildArray :one +SELECT + jsonb_build_array(), + jsonb_build_array(1), + jsonb_build_array(1, 2), + jsonb_build_array(1, 2, 'foo'), + jsonb_build_array(1, 2, 'foo', 4); diff --git a/internal/engine/postgresql/pg_catalog.go b/internal/engine/postgresql/pg_catalog.go index 21d5f09f0a..f0a5bf92fa 100644 --- a/internal/engine/postgresql/pg_catalog.go +++ b/internal/engine/postgresql/pg_catalog.go @@ -11910,13 +11910,23 @@ func genPGCatalog() *catalog.Schema { ReturnType: &ast.TypeName{Name: "integer"}, }, { - Name: "jsonb_build_array", - Args: []*catalog.Argument{}, + Name: "jsonb_build_array", + Args: []*catalog.Argument{ + { + Type: &ast.TypeName{Name: "any"}, + Mode: ast.FuncParamVariadic, + }, + }, ReturnType: &ast.TypeName{Name: "jsonb"}, }, { - Name: "jsonb_build_object", - Args: []*catalog.Argument{}, + Name: "jsonb_build_object", + Args: []*catalog.Argument{ + { + Type: &ast.TypeName{Name: "any"}, + Mode: ast.FuncParamVariadic, + }, + }, ReturnType: &ast.TypeName{Name: "jsonb"}, }, {