From 71de72f26f5c5b95b0b5127ce1cbbbc9562d5d40 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 15 Oct 2025 13:30:19 +0300 Subject: [PATCH 01/26] Endtoend tests: bunch of ydb e2e tests + some engine and types fixes --- internal/codegen/golang/gen.go | 3 + internal/codegen/golang/imports.go | 6 +- internal/codegen/golang/opts/options.go | 6 + internal/codegen/golang/query.go | 27 +- .../golang/templates/stdlib/queryCode.tmpl | 2 +- internal/codegen/golang/ydb_type.go | 32 +- .../testdata/alias/ydb/stdlib/go/db.go | 31 ++ .../testdata/alias/ydb/stdlib/go/models.go | 9 + .../testdata/alias/ydb/stdlib/go/query.sql.go | 22 + .../testdata/alias/ydb/stdlib/query.sql | 3 + .../testdata/alias/ydb/stdlib/schema.sql | 1 + .../testdata/alias/ydb/stdlib/sqlc.json | 12 + .../testdata/alias/ydb/ydb-go-sdk/go/db.go | 26 ++ .../alias/ydb/ydb-go-sdk/go/models.go | 9 + .../alias/ydb/ydb-go-sdk/go/query.sql.go | 40 ++ .../testdata/alias/ydb/ydb-go-sdk/query.sql | 6 + .../testdata/alias/ydb/ydb-go-sdk/schema.sql | 4 + .../testdata/alias/ydb/ydb-go-sdk/sqlc.json | 16 + .../testdata/array_in/ydb/stdlib/go/db.go | 31 ++ .../testdata/array_in/ydb/stdlib/go/models.go | 9 + .../array_in/ydb/stdlib/go/query.sql.go | 44 ++ .../testdata/array_in/ydb/stdlib/query.sql | 4 + .../testdata/array_in/ydb/stdlib/schema.sql | 1 + .../testdata/array_in/ydb/stdlib/sqlc.json | 12 + .../testdata/array_in/ydb/ydb-go-sdk/go/db.go | 26 ++ .../array_in/ydb/ydb-go-sdk/go/models.go | 9 + .../array_in/ydb/ydb-go-sdk/go/query.sql.go | 52 +++ .../array_in/ydb/ydb-go-sdk/query.sql | 4 + .../array_in/ydb/ydb-go-sdk/schema.sql | 1 + .../array_in/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/array_text/ydb-go-sdk/go/db.go | 26 ++ .../array_text/ydb-go-sdk/go/models.go | 9 + .../array_text/ydb-go-sdk/go/query.sql.go | 30 ++ .../testdata/array_text/ydb-go-sdk/query.sql | 2 + .../testdata/array_text/ydb-go-sdk/schema.sql | 1 + .../testdata/array_text/ydb-go-sdk/sqlc.json | 14 + .../testdata/datatype/ydb/ydb-go-sdk/go/db.go | 26 ++ .../datatype/ydb/ydb-go-sdk/go/models.go | 134 ++++++ .../datatype/ydb/ydb-go-sdk/go/query.sql.go | 30 ++ .../datatype/ydb/ydb-go-sdk/sql/boolean.sql | 14 + .../datatype/ydb/ydb-go-sdk/sql/character.sql | 17 + .../datatype/ydb/ydb-go-sdk/sql/datetime.sql | 36 ++ .../datatype/ydb/ydb-go-sdk/sql/json.sql | 18 + .../datatype/ydb/ydb-go-sdk/sql/numeric.sql | 61 +++ .../datatype/ydb/ydb-go-sdk/sql/query.sql | 3 + .../datatype/ydb/ydb-go-sdk/sql/uuid.sql | 14 + .../datatype/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/delete_from/ydb/sqlc.json | 12 + .../testdata/delete_from/ydb/stdlib/go/db.go | 31 ++ .../delete_from/ydb/stdlib/go/models.go | 9 + .../delete_from/ydb/stdlib/go/query.sql.go | 19 + .../testdata/delete_from/ydb/stdlib/query.sql | 2 + .../delete_from/ydb/stdlib/schema.sql | 4 + .../testdata/delete_from/ydb/stdlib/sqlc.json | 12 + .../delete_from/ydb/ydb-go-sdk/go/db.go | 26 ++ .../delete_from/ydb/ydb-go-sdk/go/models.go | 9 + .../ydb/ydb-go-sdk/go/query.sql.go | 30 ++ .../delete_from/ydb/ydb-go-sdk/query.sql | 2 + .../delete_from/ydb/ydb-go-sdk/schema.sql | 4 + .../delete_from/ydb/ydb-go-sdk/sqlc.json | 13 + .../insert_select/ydb/stdlib/go/db.go | 31 ++ .../insert_select/ydb/stdlib/go/models.go | 15 + .../insert_select/ydb/stdlib/go/query.sql.go | 26 ++ .../insert_select/ydb/stdlib/query.sql | 4 + .../insert_select/ydb/stdlib/schema.sql | 11 + .../insert_select/ydb/stdlib/sqlc.json | 12 + .../insert_select/ydb/ydb-go-sdk/go/db.go | 26 ++ .../insert_select/ydb/ydb-go-sdk/go/models.go | 15 + .../ydb/ydb-go-sdk/go/query.sql.go | 38 ++ .../insert_select/ydb/ydb-go-sdk/query.sql | 4 + .../insert_select/ydb/ydb-go-sdk/schema.sql | 11 + .../insert_select/ydb/ydb-go-sdk/sqlc.json | 13 + .../insert_values/ydb/stdlib/go/db.go | 31 ++ .../insert_values/ydb/stdlib/go/models.go | 10 + .../insert_values/ydb/stdlib/go/query.sql.go | 45 ++ .../insert_values/ydb/stdlib/query.sql | 5 + .../insert_values/ydb/stdlib/schema.sql | 1 + .../insert_values/ydb/stdlib/sqlc.json | 12 + .../insert_values/ydb/ydb-go-sdk/go/db.go | 26 ++ .../insert_values/ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/query.sql.go | 62 +++ .../insert_values/ydb/ydb-go-sdk/query.sql | 5 + .../insert_values/ydb/ydb-go-sdk/schema.sql | 1 + .../insert_values/ydb/ydb-go-sdk/sqlc.json | 13 + .../endtoend/testdata/join_full/ydb/go/db.go | 31 ++ .../testdata/join_full/ydb/go/models.go | 14 + .../testdata/join_full/ydb/go/query.sql.go | 46 ++ .../endtoend/testdata/join_full/ydb/query.sql | 5 + .../testdata/join_full/ydb/schema.sql | 12 + .../endtoend/testdata/join_full/ydb/sqlc.json | 14 + .../endtoend/testdata/join_inner/ydb/go/db.go | 31 ++ .../testdata/join_inner/ydb/go/models.go | 14 + .../testdata/join_inner/ydb/go/query.sql.go | 70 +++ .../testdata/join_inner/ydb/query.sql | 15 + .../testdata/join_inner/ydb/schema.sql | 14 + .../testdata/join_inner/ydb/sqlc.json | 16 + .../endtoend/testdata/join_left/ydb/go/db.go | 31 ++ .../testdata/join_left/ydb/go/models.go | 59 +++ .../testdata/join_left/ydb/go/query.sql.go | 409 ++++++++++++++++++ .../endtoend/testdata/join_left/ydb/query.sql | 43 ++ .../testdata/join_left/ydb/schema.sql | 60 +++ .../endtoend/testdata/join_left/ydb/sqlc.json | 16 + .../endtoend/testdata/join_right/ydb/go/db.go | 31 ++ .../testdata/join_right/ydb/go/models.go | 14 + .../testdata/join_right/ydb/go/query.sql.go | 46 ++ .../testdata/join_right/ydb/query.sql | 7 + .../testdata/join_right/ydb/schema.sql | 12 + .../testdata/join_right/ydb/sqlc.json | 14 + .../testdata/params_duplicate/ydb/go/db.go | 26 ++ .../params_duplicate/ydb/go/models.go | 11 + .../params_duplicate/ydb/go/query.sql.go | 109 +++++ .../testdata/params_duplicate/ydb/query.sql | 13 + .../testdata/params_duplicate/ydb/schema.sql | 6 + .../testdata/params_duplicate/ydb/sqlc.json | 13 + .../params_location/ydb/stdlib/go/db.go | 31 ++ .../params_location/ydb/stdlib/go/models.go | 23 + .../ydb/stdlib/go/query.sql.go | 258 +++++++++++ .../params_location/ydb/stdlib/query.sql | 43 ++ .../params_location/ydb/stdlib/schema.sql | 25 ++ .../params_location/ydb/stdlib/sqlc.json | 22 + .../params_location/ydb/ydb-go-sdk/go/db.go | 26 ++ .../ydb/ydb-go-sdk/go/models.go | 23 + .../ydb/ydb-go-sdk/go/query.sql.go | 299 +++++++++++++ .../params_location/ydb/ydb-go-sdk/query.sql | 43 ++ .../params_location/ydb/ydb-go-sdk/schema.sql | 25 ++ .../params_location/ydb/ydb-go-sdk/sqlc.json | 23 + .../testdata/params_two/ydb/stdlib/go/db.go | 31 ++ .../params_two/ydb/stdlib/go/models.go | 10 + .../params_two/ydb/stdlib/go/query.sql.go | 43 ++ .../testdata/params_two/ydb/stdlib/query.sql | 3 + .../testdata/params_two/ydb/stdlib/schema.sql | 5 + .../testdata/params_two/ydb/stdlib/sqlc.json | 12 + .../params_two/ydb/ydb-go-sdk/go/db.go | 26 ++ .../params_two/ydb/ydb-go-sdk/go/models.go | 10 + .../params_two/ydb/ydb-go-sdk/go/query.sql.go | 51 +++ .../params_two/ydb/ydb-go-sdk/query.sql | 3 + .../params_two/ydb/ydb-go-sdk/schema.sql | 5 + .../params_two/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/returning/ydb/stdlib/go/db.go | 31 ++ .../returning/ydb/stdlib/go/models.go | 10 + .../returning/ydb/stdlib/go/query.sql.go | 96 ++++ .../testdata/returning/ydb/stdlib/query.sql | 27 ++ .../testdata/returning/ydb/stdlib/schema.sql | 5 + .../testdata/returning/ydb/stdlib/sqlc.json | 12 + .../returning/ydb/ydb-go-sdk/go/db.go | 26 ++ .../returning/ydb/ydb-go-sdk/go/models.go | 10 + .../returning/ydb/ydb-go-sdk/go/query.sql.go | 162 +++++++ .../returning/ydb/ydb-go-sdk/query.sql | 27 ++ .../returning/ydb/ydb-go-sdk/schema.sql | 5 + .../returning/ydb/ydb-go-sdk/sqlc.json | 13 + .../select_distinct/ydb/stdlib/go/db.go | 31 ++ .../select_distinct/ydb/stdlib/go/models.go | 10 + .../ydb/stdlib/go/query.sql.go | 38 ++ .../select_distinct/ydb/stdlib/query.sql | 3 + .../select_distinct/ydb/stdlib/schema.sql | 1 + .../select_distinct/ydb/stdlib/sqlc.json | 12 + .../select_distinct/ydb/ydb-go-sdk/go/db.go | 26 ++ .../ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/query.sql.go | 40 ++ .../select_distinct/ydb/ydb-go-sdk/query.sql | 3 + .../select_distinct/ydb/ydb-go-sdk/schema.sql | 1 + .../select_distinct/ydb/ydb-go-sdk/sqlc.json | 13 + .../select_exists/ydb/stdlib/go/db.go | 31 ++ .../select_exists/ydb/stdlib/go/models.go | 9 + .../select_exists/ydb/stdlib/go/query.sql.go | 29 ++ .../select_exists/ydb/stdlib/query.sql | 10 + .../select_exists/ydb/stdlib/schema.sql | 1 + .../select_exists/ydb/stdlib/sqlc.json | 12 + .../select_exists/ydb/ydb-go-sdk/go/db.go | 26 ++ .../select_exists/ydb/ydb-go-sdk/go/models.go | 9 + .../ydb/ydb-go-sdk/go/query.sql.go | 43 ++ .../select_exists/ydb/ydb-go-sdk/query.sql | 10 + .../select_exists/ydb/ydb-go-sdk/schema.sql | 1 + .../select_exists/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/select_limit/ydb/stdlib/go/db.go | 31 ++ .../select_limit/ydb/stdlib/go/models.go | 9 + .../select_limit/ydb/stdlib/go/query.sql.go | 71 +++ .../select_limit/ydb/stdlib/query.sql | 8 + .../select_limit/ydb/stdlib/schema.sql | 2 + .../select_limit/ydb/stdlib/sqlc.json | 13 + .../select_limit/ydb/ydb-go-sdk/go/db.go | 26 ++ .../select_limit/ydb/ydb-go-sdk/go/models.go | 9 + .../ydb/ydb-go-sdk/go/query.sql.go | 82 ++++ .../select_limit/ydb/ydb-go-sdk/query.sql | 8 + .../select_limit/ydb/ydb-go-sdk/schema.sql | 2 + .../select_limit/ydb/ydb-go-sdk/sqlc.json | 14 + .../select_not_exists/ydb-go-sdk/go/db.go | 26 ++ .../select_not_exists/ydb-go-sdk/go/models.go | 9 + .../ydb-go-sdk/go/query.sql.go | 72 +++ .../select_not_exists/ydb-go-sdk/query.sql | 21 + .../select_not_exists/ydb-go-sdk/schema.sql | 1 + .../select_not_exists/ydb-go-sdk/sqlc.json | 15 + .../testdata/select_star/ydb/stdlib/go/db.go | 31 ++ .../select_star/ydb/stdlib/go/models.go | 12 + .../select_star/ydb/stdlib/go/query.sql.go | 69 +++ .../testdata/select_star/ydb/stdlib/query.sql | 5 + .../select_star/ydb/stdlib/schema.sql | 7 + .../testdata/select_star/ydb/stdlib/sqlc.json | 12 + .../select_star/ydb/ydb-go-sdk/go/db.go | 26 ++ .../select_star/ydb/ydb-go-sdk/go/models.go | 12 + .../ydb/ydb-go-sdk/go/query.sql.go | 70 +++ .../select_star/ydb/ydb-go-sdk/query.sql | 5 + .../select_star/ydb/ydb-go-sdk/schema.sql | 7 + .../select_star/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/sqlc_slice/ydb/stdlib/go/db.go | 31 ++ .../sqlc_slice/ydb/stdlib/go/models.go | 11 + .../sqlc_slice/ydb/stdlib/go/query.sql.go | 177 ++++++++ .../testdata/sqlc_slice/ydb/stdlib/query.sql | 25 ++ .../testdata/sqlc_slice/ydb/stdlib/schema.sql | 1 + .../testdata/sqlc_slice/ydb/stdlib/sqlc.json | 12 + .../sqlc_slice/ydb/ydb-go-sdk/go/db.go | 26 ++ .../sqlc_slice/ydb/ydb-go-sdk/go/models.go | 11 + .../sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go | 230 ++++++++++ .../sqlc_slice/ydb/ydb-go-sdk/query.sql | 25 ++ .../sqlc_slice/ydb/ydb-go-sdk/schema.sql | 1 + .../sqlc_slice/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/update_set/ydb/stdlib/go/db.go | 31 ++ .../update_set/ydb/stdlib/go/models.go | 10 + .../update_set/ydb/stdlib/go/query.sql.go | 24 + .../testdata/update_set/ydb/stdlib/query.sql | 2 + .../testdata/update_set/ydb/stdlib/schema.sql | 5 + .../testdata/update_set/ydb/stdlib/sqlc.json | 12 + .../update_set/ydb/ydb-go-sdk/go/db.go | 26 ++ .../update_set/ydb/ydb-go-sdk/go/models.go | 10 + .../update_set/ydb/ydb-go-sdk/go/query.sql.go | 36 ++ .../update_set/ydb/ydb-go-sdk/query.sql | 2 + .../update_set/ydb/ydb-go-sdk/schema.sql | 5 + .../update_set/ydb/ydb-go-sdk/sqlc.json | 13 + internal/engine/ydb/convert.go | 145 +++++-- 229 files changed, 6105 insertions(+), 37 deletions(-) create mode 100644 internal/endtoend/testdata/alias/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/alias/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/alias/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/alias/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/alias/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/alias/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/alias/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/alias/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/array_in/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/array_in/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/array_in/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/array_in/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/array_in/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/array_in/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/array_text/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/array_text/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/array_text/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/array_text/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/array_text/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/array_text/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/boolean.sql create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/character.sql create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/datetime.sql create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/json.sql create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/query.sql create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/uuid.sql create mode 100644 internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/delete_from/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/delete_from/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/delete_from/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/delete_from/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/delete_from/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/delete_from/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/delete_from/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/insert_select/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/insert_select/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/insert_select/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/insert_select/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/insert_select/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/insert_select/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/insert_values/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/insert_values/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/insert_values/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/insert_values/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/insert_values/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/insert_values/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/join_full/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_full/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_full/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_full/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_full/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_full/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_inner/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_inner/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_inner/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_inner/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_inner/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_inner/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_left/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_left/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_left/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_left/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_left/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_left/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_right/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_right/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_right/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_right/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_right/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_right/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/params_duplicate/ydb/go/db.go create mode 100644 internal/endtoend/testdata/params_duplicate/ydb/go/models.go create mode 100644 internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/params_duplicate/ydb/query.sql create mode 100644 internal/endtoend/testdata/params_duplicate/ydb/schema.sql create mode 100644 internal/endtoend/testdata/params_duplicate/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/params_location/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/params_location/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/params_location/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/params_location/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/params_two/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/params_two/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/params_two/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/params_two/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/params_two/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/params_two/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/returning/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/returning/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/returning/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/returning/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/returning/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/returning/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/returning/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/returning/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/returning/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/select_distinct/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/select_distinct/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/select_distinct/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_distinct/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/select_distinct/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/select_distinct/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/select_exists/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/select_exists/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_exists/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/select_exists/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/select_exists/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/select_limit/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/select_limit/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/select_limit/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_limit/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/select_limit/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/select_limit/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/select_not_exists/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/select_not_exists/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/select_star/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/select_star/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/select_star/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_star/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/select_star/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/select_star/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/update_set/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/update_set/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/update_set/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/update_set/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/update_set/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/update_set/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/sqlc.json diff --git a/internal/codegen/golang/gen.go b/internal/codegen/golang/gen.go index 4b48f34bde..aa5ac77895 100644 --- a/internal/codegen/golang/gen.go +++ b/internal/codegen/golang/gen.go @@ -218,6 +218,8 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum, } } + isYDBEngine := func() bool { return options.Engine == "ydb" } + funcMap := template.FuncMap{ "lowerTitle": sdk.LowerTitle, "comment": sdk.DoubleSlashComment, @@ -232,6 +234,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum, "emitPreparedQueries": tctx.codegenEmitPreparedQueries, "queryMethod": tctx.codegenQueryMethod, "queryRetval": tctx.codegenQueryRetval, + "isYDBEngine": isYDBEngine, } tmpl := template.Must( diff --git a/internal/codegen/golang/imports.go b/internal/codegen/golang/imports.go index 17e426b8f9..3a20a57e97 100644 --- a/internal/codegen/golang/imports.go +++ b/internal/codegen/golang/imports.go @@ -232,6 +232,10 @@ func buildImports(options *opts.Options, queries []Query, uses func(string) bool if uses("pgvector.Vector") && !overrideVector { pkg[ImportSpec{Path: "github.com/pgvector/pgvector-go"}] = struct{}{} } + _, overrideDecimal := overrideTypes["types.Decimal"] + if uses("types.Decimal") && !overrideDecimal { + pkg[ImportSpec{Path: "github.com/ydb-platform/ydb-go-sdk/v3/table/types"}] = struct{}{} + } // Custom imports for _, override := range options.Overrides { @@ -404,7 +408,7 @@ func (i *importer) queryImports(filename string) fileImports { } sqlpkg := parseDriver(i.Options.SqlPackage) - if sqlcSliceScan() && !sqlpkg.IsPGX() && !sqlpkg.IsYDBGoSDK() { + if sqlcSliceScan() && !sqlpkg.IsPGX() && !sqlpkg.IsYDBGoSDK() && i.Options.Engine != "ydb" { std["strings"] = struct{}{} } if sliceScan() && !sqlpkg.IsPGX() && !sqlpkg.IsYDBGoSDK() { diff --git a/internal/codegen/golang/opts/options.go b/internal/codegen/golang/opts/options.go index 0d5d51c2dd..c9f28bb1de 100644 --- a/internal/codegen/golang/opts/options.go +++ b/internal/codegen/golang/opts/options.go @@ -47,6 +47,7 @@ type Options struct { Initialisms *[]string `json:"initialisms,omitempty" yaml:"initialisms"` InitialismsMap map[string]struct{} `json:"-" yaml:"-"` + Engine string `json:"-" yaml:"-"` } type GlobalOptions struct { @@ -72,6 +73,11 @@ func Parse(req *plugin.GenerateRequest) (*Options, error) { } maps.Copy(options.Rename, global.Rename) } + + if req.Settings != nil { + options.Engine = req.Settings.Engine + } + return options, nil } diff --git a/internal/codegen/golang/query.go b/internal/codegen/golang/query.go index 3e789f4c60..f2a20652d7 100644 --- a/internal/codegen/golang/query.go +++ b/internal/codegen/golang/query.go @@ -307,7 +307,7 @@ func ydbBuilderMethodForColumnType(dbType string) string { return "Int32" case "uint16": return "Uint16" - case "int16", "smallserial","serial2": + case "int16", "smallserial", "serial2": return "Int16" case "uint8": return "Uint8" @@ -342,8 +342,18 @@ func ydbBuilderMethodForColumnType(dbType string) string { case "yson": return "YSON" + case "integer": // LIMIT/OFFSET parameters support + return "Uint64" + + case "Integer": // Invalid YDB type - fallback to Uint64 + return "Uint64" + //TODO: support other types default: + // Check for decimal types + if strings.HasPrefix(baseType, "decimal") { + return "Decimal" + } return "" } } @@ -405,6 +415,21 @@ func (v QueryValue) YDBParamsBuilder() string { isPtr := strings.HasPrefix(goType, "*") isArray := field.Column.IsArray || field.Column.IsSqlcSlice + if method == "Decimal" { + if isArray { + lines = append(lines, fmt.Sprintf("\tvar list = parameters.Param(%s).BeginList()", paramName)) + lines = append(lines, fmt.Sprintf("\tfor _, param := range %s {", variable)) + lines = append(lines, "\t\tlist = list.Add().Decimal(param.Bytes, param.Precision, param.Scale)") + lines = append(lines, "\t}") + lines = append(lines, "\tparameters = list.EndList()") + } else if isPtr { + lines = append(lines, fmt.Sprintf("\tparameters = parameters.Param(%s).BeginOptional().Decimal(&%s.Bytes, %s.Precision, %s.Scale).EndOptional()", paramName, variable, variable, variable)) + } else { + lines = append(lines, fmt.Sprintf("\tparameters = parameters.Param(%s).Decimal(%s.Bytes, %s.Precision, %s.Scale)", paramName, variable, variable, variable)) + } + return true + } + if isArray { lines = append(lines, fmt.Sprintf("\tvar list = parameters.Param(%s).BeginList()", paramName)) lines = append(lines, fmt.Sprintf("\tfor _, param := range %s {", variable)) diff --git a/internal/codegen/golang/templates/stdlib/queryCode.tmpl b/internal/codegen/golang/templates/stdlib/queryCode.tmpl index 1e7f4e22a4..2f29369fb5 100644 --- a/internal/codegen/golang/templates/stdlib/queryCode.tmpl +++ b/internal/codegen/golang/templates/stdlib/queryCode.tmpl @@ -125,7 +125,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{ dbarg }} {{.Arg.Pair}} {{end}} {{define "queryCodeStdExec"}} - {{- if .Arg.HasSqlcSlices }} + {{- if and (not isYDBEngine) .Arg.HasSqlcSlices }} query := {{.ConstantName}} var queryParams []interface{} {{- if .Arg.Struct }} diff --git a/internal/codegen/golang/ydb_type.go b/internal/codegen/golang/ydb_type.go index ada576795d..3abae72671 100644 --- a/internal/codegen/golang/ydb_type.go +++ b/internal/codegen/golang/ydb_type.go @@ -163,7 +163,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col } return "*string" - case "date", "date32", "datetime", "timestamp", "tzdate", "tztimestamp", "tzdatetime": + case "date", "date32", "datetime", "timestamp", "tzdate", "tztimestamp", "tzdatetime", "datetime64", "timestamp64", "tzdate32", "tzdatetime64", "tztimestamp64": if notNull { return "time.Time" } @@ -172,6 +172,15 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col } return "*time.Time" + case "interval", "interval64": + if notNull { + return "time.Duration" + } + if emitPointersForNull { + return "*time.Duration" + } + return "*time.Duration" + case "uuid": if notNull { return "uuid.UUID" @@ -197,7 +206,28 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col case "any": return "interface{}" + case "integer": + // integer type is used for LIMIT/OFFSET parameters - use uint64 for semantic correctness + if notNull { + return "uint64" + } + if emitPointersForNull { + return "*uint64" + } + return "*uint64" + default: + if strings.HasPrefix(columnType, "decimal") { + if notNull { + return "types.Decimal" + } + + if emitPointersForNull { + return "*types.Decimal" + } + return "*types.Decimal" + } + if debug.Active { log.Printf("unknown YDB type: %s\n", columnType) } diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/go/db.go b/internal/endtoend/testdata/alias/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/go/models.go b/internal/endtoend/testdata/alias/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..45be158460 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go @@ -0,0 +1,22 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const aliasBar = `-- name: AliasBar :one +SELECT id FROM bar AS b +WHERE b.id = $p0 +` + +func (q *Queries) AliasBar(ctx context.Context, p0 int32) (int32, error) { + row := q.db.QueryRowContext(ctx, aliasBar, p0) + var id int32 + err := row.Scan(&id) + return id, err +} diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/query.sql b/internal/endtoend/testdata/alias/ydb/stdlib/query.sql new file mode 100644 index 0000000000..e2465d0a37 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/stdlib/query.sql @@ -0,0 +1,3 @@ +-- name: AliasBar :one +SELECT * FROM bar +WHERE b.id = $p0; diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/schema.sql b/internal/endtoend/testdata/alias/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..5548b1b85f --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Int32 NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/alias/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..356dfbaf5c --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,40 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const aliasBar = `-- name: AliasBar :one +SELECT id FROM bar AS b +WHERE b.id = $i +` + +func (q *Queries) AliasBar(ctx context.Context, i int32, opts ...query.ExecuteOption) (int32, error) { + row, err := q.db.QueryRow(ctx, aliasBar, + append(opts, + query.WithParameters( + ydb.ParamsBuilder(). + Param("$i").Int32(i). + Build(), + ), + )..., + ) + var id int32 + if err != nil { + return id, xerrors.WithStackTrace(err) + } + err = row.Scan(&id) + if err != nil { + return id, xerrors.WithStackTrace(err) + } + return id, nil +} diff --git a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..e8d221cefe --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,6 @@ +-- name: AliasBar :one +SELECT * FROM bar AS b +WHERE b.id = $i; + + + diff --git a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..de98d1bdd4 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE bar (id Int32 NOT NULL, PRIMARY KEY (id)); + + + diff --git a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..a210888689 --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,16 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/array_in/ydb/stdlib/go/db.go b/internal/endtoend/testdata/array_in/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/array_in/ydb/stdlib/go/models.go b/internal/endtoend/testdata/array_in/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/array_in/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/array_in/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..d1cd71a037 --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/stdlib/go/query.sql.go @@ -0,0 +1,44 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const in = `-- name: In :many +SELECT id +FROM bar +WHERE id IN ($p1, $p2) +` + +type InParams struct { + P1 int32 + P2 int32 +} + +func (q *Queries) In(ctx context.Context, arg InParams) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, in, arg.P1, arg.P2) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/array_in/ydb/stdlib/query.sql b/internal/endtoend/testdata/array_in/ydb/stdlib/query.sql new file mode 100644 index 0000000000..7e2709977b --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/stdlib/query.sql @@ -0,0 +1,4 @@ +-- name: In :many +SELECT * +FROM bar +WHERE id IN ($p1, $p2); diff --git a/internal/endtoend/testdata/array_in/ydb/stdlib/schema.sql b/internal/endtoend/testdata/array_in/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..5548b1b85f --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Int32 NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/array_in/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/array_in/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..e19eb4c476 --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,52 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const in = `-- name: In :many +SELECT id +FROM bar +WHERE id IN ($p1, $p2) +` + +type InParams struct { + P1 int32 + P2 int32 +} + +func (q *Queries) In(ctx context.Context, arg InParams, opts ...query.ExecuteOption) ([]int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$p1").Int32(arg.P1) + parameters = parameters.Param("$p2").Int32(arg.P2) + result, err := q.db.QueryResultSet(ctx, in, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int32 + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var id int32 + if err := row.Scan(&id); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, id) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..7e2709977b --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,4 @@ +-- name: In :many +SELECT * +FROM bar +WHERE id IN ($p1, $p2); diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..5548b1b85f --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Int32 NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/array_text/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/array_text/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/array_text/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/array_text/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/array_text/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/array_text/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/array_text/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/array_text/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..95e88d9b87 --- /dev/null +++ b/internal/endtoend/testdata/array_text/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const textArray = `-- name: TextArray :one +SELECT ["1", "2", "3"] +` + +func (q *Queries) TextArray(ctx context.Context, opts ...query.ExecuteOption) (interface{}, error) { + row, err := q.db.QueryRow(ctx, textArray, opts...) + var column_1 interface{} + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + err = row.Scan(&column_1) + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + return column_1, nil +} diff --git a/internal/endtoend/testdata/array_text/ydb-go-sdk/query.sql b/internal/endtoend/testdata/array_text/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..4fe300c3f3 --- /dev/null +++ b/internal/endtoend/testdata/array_text/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: TextArray :one +SELECT ["1", "2", "3"]; diff --git a/internal/endtoend/testdata/array_text/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/array_text/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..a81897d939 --- /dev/null +++ b/internal/endtoend/testdata/array_text/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/array_text/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/array_text/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..155771a4bb --- /dev/null +++ b/internal/endtoend/testdata/array_text/ydb-go-sdk/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] + } + \ No newline at end of file diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..2e928799e1 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package datatype + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..da12459199 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,134 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package datatype + +import ( + "time" + + "github.com/google/uuid" + "github.com/ydb-platform/ydb-go-sdk/v3/table/types" +) + +type DtBoolean struct { + ID int32 + A *bool +} + +type DtBooleanNotNull struct { + ID int32 + A bool +} + +type DtCharacter struct { + ID int32 + A *string + B *string +} + +type DtCharacterNotNull struct { + ID int32 + A string + B string +} + +type DtDatetime struct { + ID int32 + A *time.Time + B *time.Time + C *time.Time + D *time.Time + E *time.Time + F *time.Time + G *time.Duration + H *time.Duration + I *time.Time + J *time.Time + K *time.Time +} + +type DtDatetimeNotNull struct { + ID int32 + A time.Time + B time.Time + C time.Time + D time.Time + E time.Time + F time.Time + G time.Duration + H time.Duration + I time.Time + J time.Time + K time.Time +} + +type DtJson struct { + ID int32 + A *string + B *string + C *[]byte +} + +type DtJsonNotNull struct { + ID int32 + A string + B string + C []byte +} + +type DtNumeric struct { + ID int32 + A *int8 + B *int16 + C *int32 + D *int64 + E uint8 + F uint16 + G uint32 + H uint64 + I *float32 + J *float64 + K *types.Decimal + L *types.Decimal + M interface{} + N *int16 + O *int16 + P *int32 + Q *int32 + R *int64 + S *int64 +} + +type DtNumericNotNull struct { + ID int32 + A int8 + B int16 + C int32 + D int64 + E uint8 + F uint16 + G uint32 + H uint64 + I float32 + J float64 + K types.Decimal + L types.Decimal + M interface{} + N int16 + O int16 + P int32 + Q int32 + R int64 + S int64 +} + +type DtUuid struct { + ID int32 + A *uuid.UUID +} + +type DtUuidNotNull struct { + ID int32 + A uuid.UUID +} diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..7024a3fff1 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package datatype + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const test = `-- name: Test :one +SELECT 1 +` + +func (q *Queries) Test(ctx context.Context, opts ...query.ExecuteOption) (int32, error) { + row, err := q.db.QueryRow(ctx, test, opts...) + var column_1 int32 + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + err = row.Scan(&column_1) + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + return column_1, nil +} diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/boolean.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/boolean.sql new file mode 100644 index 0000000000..9b08cba11d --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/boolean.sql @@ -0,0 +1,14 @@ +-- Boolean Types +-- https://ydb.tech/docs/ru/concepts/datatypes#boolean + +CREATE TABLE dt_boolean ( + id Serial, + a Bool, + PRIMARY KEY (id) +); + +CREATE TABLE dt_boolean_not_null ( + id Serial, + a Bool NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/character.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/character.sql new file mode 100644 index 0000000000..ee06b4ca31 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/character.sql @@ -0,0 +1,17 @@ +-- Character and String Types +-- https://ydb.tech/docs/ru/concepts/datatypes#string + +CREATE TABLE dt_character ( + id Serial, + a String, + b Utf8, + PRIMARY KEY (id) +); + +CREATE TABLE dt_character_not_null ( + id Serial, + a String NOT NULL, + b Utf8 NOT NULL, + PRIMARY KEY (id) +); + diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/datetime.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/datetime.sql new file mode 100644 index 0000000000..be2312caea --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/datetime.sql @@ -0,0 +1,36 @@ +-- Date and Time Types +-- https://ydb.tech/docs/ru/concepts/datatypes#datetime + +CREATE TABLE dt_datetime ( + id Serial, + a Date, + b Date32, + c Datetime, + d Datetime64, + e Timestamp, + f Timestamp64, + g Interval, + h Interval64, + -- Timezone types + i TzDate32, + j TzDateTime64, + k TzTimestamp64, + PRIMARY KEY (id) +); + +CREATE TABLE dt_datetime_not_null ( + id Serial, + a Date NOT NULL, + b Date32 NOT NULL, + c Datetime NOT NULL, + d Datetime64 NOT NULL, + e Timestamp NOT NULL, + f Timestamp64 NOT NULL, + g Interval NOT NULL, + h Interval64 NOT NULL, + -- Timezone types + i TzDate32 NOT NULL, + j TzDateTime64 NOT NULL, + k TzTimestamp64 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/json.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/json.sql new file mode 100644 index 0000000000..89d264a6bc --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/json.sql @@ -0,0 +1,18 @@ +-- JSON and Document Types +-- https://ydb.tech/docs/ru/concepts/datatypes#json + +CREATE TABLE dt_json ( + id Serial, + a Json, + b JsonDocument, + c Yson, + PRIMARY KEY (id) +); + +CREATE TABLE dt_json_not_null ( + id Serial, + a Json NOT NULL, + b JsonDocument NOT NULL, + c Yson NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql new file mode 100644 index 0000000000..62d4b00c03 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql @@ -0,0 +1,61 @@ +-- Numeric Types +-- https://ydb.tech/docs/ru/concepts/datatypes#numeric + +CREATE TABLE dt_numeric ( + id Serial, + -- Integer types + a Int8, + b Int16, + c Int32, + d Int64, + e Uint8, + f Uint16, + g Uint32, + h Uint64, + -- Floating point types + i Float, + j Double, + -- Decimal types + k Decimal(22, 9), + l Decimal(35, 0), + -- DyNumber type + m DyNumber, + -- Serial types + n SmallSerial, + o Serial2, + p Serial, + q Serial4, + r Serial8, + s BigSerial, + PRIMARY KEY (id) +); + +CREATE TABLE dt_numeric_not_null ( + id Serial, + -- Integer types + a Int8 NOT NULL, + b Int16 NOT NULL, + c Int32 NOT NULL, + d Int64 NOT NULL, + e Uint8 NOT NULL, + f Uint16 NOT NULL, + g Uint32 NOT NULL, + h Uint64 NOT NULL, + -- Floating point types + i Float NOT NULL, + j Double NOT NULL, + -- Decimal types + k Decimal(22, 9) NOT NULL, + l Decimal(35, 0) NOT NULL, + -- DyNumber type + m DyNumber NOT NULL, + -- Serial types + n SmallSerial NOT NULL, + o Serial2 NOT NULL, + p Serial NOT NULL, + q Serial4 NOT NULL, + r Serial8 NOT NULL, + s BigSerial NOT NULL, + PRIMARY KEY (id) +); + diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/query.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/query.sql new file mode 100644 index 0000000000..56b89671a0 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/query.sql @@ -0,0 +1,3 @@ + +-- name: Test :one +SELECT 1; diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/uuid.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/uuid.sql new file mode 100644 index 0000000000..00e4faa8d2 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/uuid.sql @@ -0,0 +1,14 @@ +-- UUID Types +-- https://ydb.tech/docs/ru/concepts/datatypes#uuid + +CREATE TABLE dt_uuid ( + id Serial, + a Uuid, + PRIMARY KEY (id) +); + +CREATE TABLE dt_uuid_not_null ( + id Serial, + a Uuid NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..b1c079f1a8 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "datatype", + "schema": "sql", + "queries": "sql/query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/delete_from/ydb/sqlc.json b/internal/endtoend/testdata/delete_from/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/delete_from/ydb/stdlib/go/db.go b/internal/endtoend/testdata/delete_from/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/delete_from/ydb/stdlib/go/models.go b/internal/endtoend/testdata/delete_from/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..ef6e41447e --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID string +} diff --git a/internal/endtoend/testdata/delete_from/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/delete_from/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..2c1fd125ab --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const deleteFrom = `-- name: DeleteFrom :exec +DELETE FROM foo WHERE id = $id +` + +func (q *Queries) DeleteFrom(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, deleteFrom, id) + return err +} diff --git a/internal/endtoend/testdata/delete_from/ydb/stdlib/query.sql b/internal/endtoend/testdata/delete_from/ydb/stdlib/query.sql new file mode 100644 index 0000000000..ecb05c7ddd --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: DeleteFrom :exec +DELETE FROM foo WHERE id = $id; diff --git a/internal/endtoend/testdata/delete_from/ydb/stdlib/schema.sql b/internal/endtoend/testdata/delete_from/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..ea2d8aa772 --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/stdlib/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo ( + id Utf8 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/delete_from/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/delete_from/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..ef6e41447e --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID string +} diff --git a/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..ffc914599c --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const deleteFrom = `-- name: DeleteFrom :exec +DELETE FROM foo WHERE id = $id +` + +func (q *Queries) DeleteFrom(ctx context.Context, id string, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Text(id) + err := q.db.Exec(ctx, deleteFrom, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..ecb05c7ddd --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: DeleteFrom :exec +DELETE FROM foo WHERE id = $id; diff --git a/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..ea2d8aa772 --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo ( + id Utf8 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/delete_from/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/insert_select/ydb/stdlib/go/db.go b/internal/endtoend/testdata/insert_select/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/insert_select/ydb/stdlib/go/models.go b/internal/endtoend/testdata/insert_select/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..16bc8a120c --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/stdlib/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + Name string + Ready bool +} + +type Foo struct { + Name string + Meta string +} diff --git a/internal/endtoend/testdata/insert_select/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/insert_select/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..b2d0d3733a --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/stdlib/go/query.sql.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const insertSelect = `-- name: InsertSelect :exec +INSERT INTO foo (name, meta) +SELECT name, $meta +FROM bar WHERE ready = $ready +` + +type InsertSelectParams struct { + Meta string + Ready bool +} + +func (q *Queries) InsertSelect(ctx context.Context, arg InsertSelectParams) error { + _, err := q.db.ExecContext(ctx, insertSelect, arg.Meta, arg.Ready) + return err +} diff --git a/internal/endtoend/testdata/insert_select/ydb/stdlib/query.sql b/internal/endtoend/testdata/insert_select/ydb/stdlib/query.sql new file mode 100644 index 0000000000..19e1221e64 --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/stdlib/query.sql @@ -0,0 +1,4 @@ +-- name: InsertSelect :exec +INSERT INTO foo (name, meta) +SELECT name, $meta +FROM bar WHERE ready = $ready; diff --git a/internal/endtoend/testdata/insert_select/ydb/stdlib/schema.sql b/internal/endtoend/testdata/insert_select/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..00888aff44 --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/stdlib/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE bar ( + name Utf8 NOT NULL, + ready Bool NOT NULL, + PRIMARY KEY (name) +); + +CREATE TABLE foo ( + name Utf8 NOT NULL, + meta Utf8 NOT NULL, + PRIMARY KEY (name) +); diff --git a/internal/endtoend/testdata/insert_select/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/insert_select/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..16bc8a120c --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + Name string + Ready bool +} + +type Foo struct { + Name string + Meta string +} diff --git a/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..2ee546c5c2 --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,38 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const insertSelect = `-- name: InsertSelect :exec +INSERT INTO foo (name, meta) +SELECT name, $meta +FROM bar WHERE ready = $ready +` + +type InsertSelectParams struct { + Meta string + Ready bool +} + +func (q *Queries) InsertSelect(ctx context.Context, arg InsertSelectParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$meta").Text(arg.Meta) + parameters = parameters.Param("$ready").Bool(arg.Ready) + err := q.db.Exec(ctx, insertSelect, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..19e1221e64 --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,4 @@ +-- name: InsertSelect :exec +INSERT INTO foo (name, meta) +SELECT name, $meta +FROM bar WHERE ready = $ready; diff --git a/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..00888aff44 --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE bar ( + name Utf8 NOT NULL, + ready Bool NOT NULL, + PRIMARY KEY (name) +); + +CREATE TABLE foo ( + name Utf8 NOT NULL, + meta Utf8 NOT NULL, + PRIMARY KEY (name) +); diff --git a/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/insert_select/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/insert_values/ydb/stdlib/go/db.go b/internal/endtoend/testdata/insert_values/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/insert_values/ydb/stdlib/go/models.go b/internal/endtoend/testdata/insert_values/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..62cc9bebd0 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B *int32 +} diff --git a/internal/endtoend/testdata/insert_values/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/insert_values/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..d39f5f54f0 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/stdlib/go/query.sql.go @@ -0,0 +1,45 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const insertMultipleValues = `-- name: InsertMultipleValues :exec +INSERT INTO foo (a, b) VALUES ($a1, $b1), ($a2, $b2) +` + +type InsertMultipleValuesParams struct { + A1 string + B1 *int32 + A2 string + B2 *int32 +} + +func (q *Queries) InsertMultipleValues(ctx context.Context, arg InsertMultipleValuesParams) error { + _, err := q.db.ExecContext(ctx, insertMultipleValues, + arg.A1, + arg.B1, + arg.A2, + arg.B2, + ) + return err +} + +const insertValues = `-- name: InsertValues :exec +INSERT INTO foo (a, b) VALUES ($a, $b) +` + +type InsertValuesParams struct { + A string + B *int32 +} + +func (q *Queries) InsertValues(ctx context.Context, arg InsertValuesParams) error { + _, err := q.db.ExecContext(ctx, insertValues, arg.A, arg.B) + return err +} diff --git a/internal/endtoend/testdata/insert_values/ydb/stdlib/query.sql b/internal/endtoend/testdata/insert_values/ydb/stdlib/query.sql new file mode 100644 index 0000000000..72d8782410 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: InsertValues :exec +INSERT INTO foo (a, b) VALUES ($a, $b); + +/* name: InsertMultipleValues :exec */ +INSERT INTO foo (a, b) VALUES ($a1, $b1), ($a2, $b2); diff --git a/internal/endtoend/testdata/insert_values/ydb/stdlib/schema.sql b/internal/endtoend/testdata/insert_values/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..72ffaed0a5 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (a Utf8, b Int32, PRIMARY KEY (a)); diff --git a/internal/endtoend/testdata/insert_values/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/insert_values/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..62cc9bebd0 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B *int32 +} diff --git a/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..b4ef8d6917 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,62 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const insertMultipleValues = `-- name: InsertMultipleValues :exec +INSERT INTO foo (a, b) VALUES ($a1, $b1), ($a2, $b2) +` + +type InsertMultipleValuesParams struct { + A1 string + B1 *int32 + A2 string + B2 *int32 +} + +func (q *Queries) InsertMultipleValues(ctx context.Context, arg InsertMultipleValuesParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$a1").Text(arg.A1) + parameters = parameters.Param("$b1").BeginOptional().Int32(arg.B1).EndOptional() + parameters = parameters.Param("$a2").Text(arg.A2) + parameters = parameters.Param("$b2").BeginOptional().Int32(arg.B2).EndOptional() + err := q.db.Exec(ctx, insertMultipleValues, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} + +const insertValues = `-- name: InsertValues :exec +INSERT INTO foo (a, b) VALUES ($a, $b) +` + +type InsertValuesParams struct { + A string + B *int32 +} + +func (q *Queries) InsertValues(ctx context.Context, arg InsertValuesParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$a").Text(arg.A) + parameters = parameters.Param("$b").BeginOptional().Int32(arg.B).EndOptional() + err := q.db.Exec(ctx, insertValues, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..72d8782410 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: InsertValues :exec +INSERT INTO foo (a, b) VALUES ($a, $b); + +/* name: InsertMultipleValues :exec */ +INSERT INTO foo (a, b) VALUES ($a1, $b1), ($a2, $b2); diff --git a/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..72ffaed0a5 --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (a Utf8, b Int32, PRIMARY KEY (a)); diff --git a/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/insert_values/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_full/ydb/go/db.go b/internal/endtoend/testdata/join_full/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_full/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_full/ydb/go/models.go b/internal/endtoend/testdata/join_full/ydb/go/models.go new file mode 100644 index 0000000000..f851f23756 --- /dev/null +++ b/internal/endtoend/testdata/join_full/ydb/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} + +type Foo struct { + ID int32 + BarID *int32 +} diff --git a/internal/endtoend/testdata/join_full/ydb/go/query.sql.go b/internal/endtoend/testdata/join_full/ydb/go/query.sql.go new file mode 100644 index 0000000000..c3773e7933 --- /dev/null +++ b/internal/endtoend/testdata/join_full/ydb/go/query.sql.go @@ -0,0 +1,46 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const fullJoin = `-- name: FullJoin :many +SELECT f.id, f.bar_id, b.id +FROM foo f +FULL JOIN bar b ON b.id = f.bar_id +WHERE f.id = $id +` + +type FullJoinRow struct { + ID *int32 + BarID *int32 + ID_2 *int32 +} + +func (q *Queries) FullJoin(ctx context.Context, id int32) ([]FullJoinRow, error) { + rows, err := q.db.QueryContext(ctx, fullJoin, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []FullJoinRow + for rows.Next() { + var i FullJoinRow + if err := rows.Scan(&i.ID, &i.BarID, &i.ID_2); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_full/ydb/query.sql b/internal/endtoend/testdata/join_full/ydb/query.sql new file mode 100644 index 0000000000..0fc0f34933 --- /dev/null +++ b/internal/endtoend/testdata/join_full/ydb/query.sql @@ -0,0 +1,5 @@ +-- name: FullJoin :many +SELECT f.id, f.bar_id, b.id +FROM foo f +FULL JOIN bar b ON b.id = f.bar_id +WHERE f.id = $id; diff --git a/internal/endtoend/testdata/join_full/ydb/schema.sql b/internal/endtoend/testdata/join_full/ydb/schema.sql new file mode 100644 index 0000000000..2f497e584b --- /dev/null +++ b/internal/endtoend/testdata/join_full/ydb/schema.sql @@ -0,0 +1,12 @@ +CREATE TABLE bar ( + id Int32 NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE foo ( + id Int32 NOT NULL, + bar_id Int32, + PRIMARY KEY (id) +); + + diff --git a/internal/endtoend/testdata/join_full/ydb/sqlc.json b/internal/endtoend/testdata/join_full/ydb/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/join_full/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/join_inner/ydb/go/db.go b/internal/endtoend/testdata/join_inner/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_inner/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_inner/ydb/go/models.go b/internal/endtoend/testdata/join_inner/ydb/go/models.go new file mode 100644 index 0000000000..70ffad94e0 --- /dev/null +++ b/internal/endtoend/testdata/join_inner/ydb/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Event struct { + ID int32 +} + +type HandledEvent struct { + LastHandledID int32 + Handler string +} diff --git a/internal/endtoend/testdata/join_inner/ydb/go/query.sql.go b/internal/endtoend/testdata/join_inner/ydb/go/query.sql.go new file mode 100644 index 0000000000..ee456d9c4a --- /dev/null +++ b/internal/endtoend/testdata/join_inner/ydb/go/query.sql.go @@ -0,0 +1,70 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const selectAllJoined = `-- name: SelectAllJoined :many +SELECT events.id FROM events + INNER JOIN handled_events + ON events.ID = handled_events.last_handled_id +WHERE handled_events.handler = $handler +` + +func (q *Queries) SelectAllJoined(ctx context.Context, handler string) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, selectAllJoined, handler) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const selectAllJoinedAlias = `-- name: SelectAllJoinedAlias :many +SELECT e.id FROM events AS e + INNER JOIN handled_events AS he + ON e.ID = he.last_handled_id +WHERE he.handler = $handler +` + +func (q *Queries) SelectAllJoinedAlias(ctx context.Context, handler string) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, selectAllJoinedAlias, handler) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_inner/ydb/query.sql b/internal/endtoend/testdata/join_inner/ydb/query.sql new file mode 100644 index 0000000000..223cbaab84 --- /dev/null +++ b/internal/endtoend/testdata/join_inner/ydb/query.sql @@ -0,0 +1,15 @@ +-- name: SelectAllJoined :many +SELECT events.* FROM events + INNER JOIN handled_events + ON events.ID = handled_events.last_handled_id +WHERE handled_events.handler = $handler; + +-- name: SelectAllJoinedAlias :many +SELECT e.* FROM events AS e + INNER JOIN handled_events AS he + ON e.ID = he.last_handled_id +WHERE he.handler = $handler; + + + + diff --git a/internal/endtoend/testdata/join_inner/ydb/schema.sql b/internal/endtoend/testdata/join_inner/ydb/schema.sql new file mode 100644 index 0000000000..06d1ba2347 --- /dev/null +++ b/internal/endtoend/testdata/join_inner/ydb/schema.sql @@ -0,0 +1,14 @@ +CREATE TABLE events ( + ID Int32 NOT NULL, + PRIMARY KEY (ID) +); + +CREATE TABLE handled_events ( + last_handled_id Int32, + handler Utf8, + PRIMARY KEY (last_handled_id, handler) +); + + + + diff --git a/internal/endtoend/testdata/join_inner/ydb/sqlc.json b/internal/endtoend/testdata/join_inner/ydb/sqlc.json new file mode 100644 index 0000000000..e85f2a696f --- /dev/null +++ b/internal/endtoend/testdata/join_inner/ydb/sqlc.json @@ -0,0 +1,16 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + + diff --git a/internal/endtoend/testdata/join_left/ydb/go/db.go b/internal/endtoend/testdata/join_left/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_left/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_left/ydb/go/models.go b/internal/endtoend/testdata/join_left/ydb/go/models.go new file mode 100644 index 0000000000..9febc539a0 --- /dev/null +++ b/internal/endtoend/testdata/join_left/ydb/go/models.go @@ -0,0 +1,59 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Author struct { + ID int32 + Name string + ParentID *int32 +} + +type City struct { + CityID int32 + MayorID int32 +} + +type Mayor struct { + MayorID int32 + FullName string +} + +type Medium struct { + MediaID string + MediaCreatedAt time.Time + MediaHash string + MediaDirectory string + MediaAuthorID string + MediaWidth int32 + MediaHeight int32 +} + +type SuperAuthor struct { + SuperID int32 + SuperName string + SuperParentID *int32 +} + +type User struct { + UserID int32 + CityID *int32 +} + +type Users2 struct { + UserID string + UserNickname string + UserEmail string + UserDisplayName string + UserPassword *string + UserGoogleID *string + UserAppleID *string + UserBio string + UserCreatedAt time.Time + UserAvatarID *string +} diff --git a/internal/endtoend/testdata/join_left/ydb/go/query.sql.go b/internal/endtoend/testdata/join_left/ydb/go/query.sql.go new file mode 100644 index 0000000000..df1bb56edd --- /dev/null +++ b/internal/endtoend/testdata/join_left/ydb/go/query.sql.go @@ -0,0 +1,409 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "time" +) + +const allAuthors = `-- name: AllAuthors :many +SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id +FROM authors a +LEFT JOIN authors p ON a.parent_id = p.id +` + +type AllAuthorsRow struct { + ID int32 + Name string + ParentID *int32 + ID_2 *int32 + Name_2 *string + ParentID_2 *int32 +} + +func (q *Queries) AllAuthors(ctx context.Context) ([]AllAuthorsRow, error) { + rows, err := q.db.QueryContext(ctx, allAuthors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AllAuthorsRow + for rows.Next() { + var i AllAuthorsRow + if err := rows.Scan( + &i.ID, + &i.Name, + &i.ParentID, + &i.ID_2, + &i.Name_2, + &i.ParentID_2, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const allAuthorsAliases = `-- name: AllAuthorsAliases :many +SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id +FROM authors a +LEFT JOIN authors p ON a.parent_id = p.id +` + +type AllAuthorsAliasesRow struct { + ID int32 + Name string + ParentID *int32 + ID_2 *int32 + Name_2 *string + ParentID_2 *int32 +} + +func (q *Queries) AllAuthorsAliases(ctx context.Context) ([]AllAuthorsAliasesRow, error) { + rows, err := q.db.QueryContext(ctx, allAuthorsAliases) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AllAuthorsAliasesRow + for rows.Next() { + var i AllAuthorsAliasesRow + if err := rows.Scan( + &i.ID, + &i.Name, + &i.ParentID, + &i.ID_2, + &i.Name_2, + &i.ParentID_2, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const allAuthorsAliases2 = `-- name: AllAuthorsAliases2 :many +SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id +FROM authors a +LEFT JOIN authors p ON a.parent_id = p.id +` + +type AllAuthorsAliases2Row struct { + ID int32 + Name string + ParentID *int32 + ID_2 *int32 + Name_2 *string + ParentID_2 *int32 +} + +func (q *Queries) AllAuthorsAliases2(ctx context.Context) ([]AllAuthorsAliases2Row, error) { + rows, err := q.db.QueryContext(ctx, allAuthorsAliases2) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AllAuthorsAliases2Row + for rows.Next() { + var i AllAuthorsAliases2Row + if err := rows.Scan( + &i.ID, + &i.Name, + &i.ParentID, + &i.ID_2, + &i.Name_2, + &i.ParentID_2, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const allSuperAuthors = `-- name: AllSuperAuthors :many +SELECT id, name, parent_id, super_id, super_name, super_parent_id +FROM authors +LEFT JOIN super_authors ON authors.parent_id = super_authors.super_id +` + +type AllSuperAuthorsRow struct { + ID int32 + Name string + ParentID *int32 + SuperID *int32 + SuperName *string + SuperParentID *int32 +} + +func (q *Queries) AllSuperAuthors(ctx context.Context) ([]AllSuperAuthorsRow, error) { + rows, err := q.db.QueryContext(ctx, allSuperAuthors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AllSuperAuthorsRow + for rows.Next() { + var i AllSuperAuthorsRow + if err := rows.Scan( + &i.ID, + &i.Name, + &i.ParentID, + &i.SuperID, + &i.SuperName, + &i.SuperParentID, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const allSuperAuthorsAliases = `-- name: AllSuperAuthorsAliases :many +SELECT id, name, parent_id, super_id, super_name, super_parent_id +FROM authors a +LEFT JOIN super_authors sa ON a.parent_id = sa.super_id +` + +type AllSuperAuthorsAliasesRow struct { + ID int32 + Name string + ParentID *int32 + SuperID *int32 + SuperName *string + SuperParentID *int32 +} + +func (q *Queries) AllSuperAuthorsAliases(ctx context.Context) ([]AllSuperAuthorsAliasesRow, error) { + rows, err := q.db.QueryContext(ctx, allSuperAuthorsAliases) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AllSuperAuthorsAliasesRow + for rows.Next() { + var i AllSuperAuthorsAliasesRow + if err := rows.Scan( + &i.ID, + &i.Name, + &i.ParentID, + &i.SuperID, + &i.SuperName, + &i.SuperParentID, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const allSuperAuthorsAliases2 = `-- name: AllSuperAuthorsAliases2 :many +SELECT a.id, a.name, a.parent_id, sa.super_id, sa.super_name, sa.super_parent_id +FROM authors a +LEFT JOIN super_authors sa ON a.parent_id = sa.super_id +` + +type AllSuperAuthorsAliases2Row struct { + ID int32 + Name string + ParentID *int32 + SuperID *int32 + SuperName *string + SuperParentID *int32 +} + +func (q *Queries) AllSuperAuthorsAliases2(ctx context.Context) ([]AllSuperAuthorsAliases2Row, error) { + rows, err := q.db.QueryContext(ctx, allSuperAuthorsAliases2) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AllSuperAuthorsAliases2Row + for rows.Next() { + var i AllSuperAuthorsAliases2Row + if err := rows.Scan( + &i.ID, + &i.Name, + &i.ParentID, + &i.SuperID, + &i.SuperName, + &i.SuperParentID, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getMayors = `-- name: GetMayors :many +SELECT user_id FROM users LEFT JOIN cities ON users.city_id = cities.city_id INNER JOIN mayors ON cities.mayor_id = mayors.mayor_id +` + +func (q *Queries) GetMayors(ctx context.Context) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, getMayors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var user_id int32 + if err := rows.Scan(&user_id); err != nil { + return nil, err + } + items = append(items, user_id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getMayorsOptional = `-- name: GetMayorsOptional :many +SELECT user_id FROM users LEFT JOIN cities ON users.city_id = cities.city_id LEFT JOIN mayors ON cities.mayor_id = mayors.mayor_id +` + +func (q *Queries) GetMayorsOptional(ctx context.Context) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, getMayorsOptional) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var user_id int32 + if err := rows.Scan(&user_id); err != nil { + return nil, err + } + items = append(items, user_id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getSuggestedUsersByID = `-- name: GetSuggestedUsersByID :many +SELECT DISTINCT u.user_id, u.user_nickname, u.user_email, u.user_display_name, u.user_password, u.user_google_id, u.user_apple_id, u.user_bio, u.user_created_at, u.user_avatar_id, m.media_id, m.media_created_at, m.media_hash, m.media_directory, m.media_author_id, m.media_width, m.media_height +FROM users_2 u +LEFT JOIN media m ON u.user_avatar_id = m.media_id +WHERE u.user_id != $user_id +LIMIT $user_limit +` + +type GetSuggestedUsersByIDParams struct { + UserID string + UserLimit uint64 +} + +type GetSuggestedUsersByIDRow struct { + UserID string + UserNickname string + UserEmail string + UserDisplayName string + UserPassword *string + UserGoogleID *string + UserAppleID *string + UserBio string + UserCreatedAt time.Time + UserAvatarID *string + MediaID *string + MediaCreatedAt *time.Time + MediaHash *string + MediaDirectory *string + MediaAuthorID *string + MediaWidth *int32 + MediaHeight *int32 +} + +func (q *Queries) GetSuggestedUsersByID(ctx context.Context, arg GetSuggestedUsersByIDParams) ([]GetSuggestedUsersByIDRow, error) { + rows, err := q.db.QueryContext(ctx, getSuggestedUsersByID, arg.UserID, arg.UserLimit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetSuggestedUsersByIDRow + for rows.Next() { + var i GetSuggestedUsersByIDRow + if err := rows.Scan( + &i.UserID, + &i.UserNickname, + &i.UserEmail, + &i.UserDisplayName, + &i.UserPassword, + &i.UserGoogleID, + &i.UserAppleID, + &i.UserBio, + &i.UserCreatedAt, + &i.UserAvatarID, + &i.MediaID, + &i.MediaCreatedAt, + &i.MediaHash, + &i.MediaDirectory, + &i.MediaAuthorID, + &i.MediaWidth, + &i.MediaHeight, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_left/ydb/query.sql b/internal/endtoend/testdata/join_left/ydb/query.sql new file mode 100644 index 0000000000..7ddd89c1ad --- /dev/null +++ b/internal/endtoend/testdata/join_left/ydb/query.sql @@ -0,0 +1,43 @@ +-- name: GetMayors :many +SELECT user_id FROM users LEFT JOIN cities ON users.city_id = cities.city_id INNER JOIN mayors ON cities.mayor_id = mayors.mayor_id; + +-- name: GetMayorsOptional :many +SELECT user_id FROM users LEFT JOIN cities ON users.city_id = cities.city_id LEFT JOIN mayors ON cities.mayor_id = mayors.mayor_id; + + +-- name: AllAuthors :many +SELECT * +FROM authors a +LEFT JOIN authors p ON a.parent_id = p.id; + +-- name: AllAuthorsAliases :many +SELECT * +FROM authors a +LEFT JOIN authors p ON a.parent_id = p.id; + +-- name: AllAuthorsAliases2 :many +SELECT a.*, p.* +FROM authors a +LEFT JOIN authors p ON a.parent_id = p.id; + +-- name: AllSuperAuthors :many +SELECT * +FROM authors +LEFT JOIN super_authors ON authors.parent_id = super_authors.super_id; + +-- name: AllSuperAuthorsAliases :many +SELECT * +FROM authors a +LEFT JOIN super_authors sa ON a.parent_id = sa.super_id; + +-- name: AllSuperAuthorsAliases2 :many +SELECT a.*, sa.* +FROM authors a +LEFT JOIN super_authors sa ON a.parent_id = sa.super_id; + +-- name: GetSuggestedUsersByID :many +SELECT DISTINCT u.*, m.* +FROM users_2 u +LEFT JOIN media m ON u.user_avatar_id = m.media_id +WHERE u.user_id != $user_id +LIMIT $user_limit; diff --git a/internal/endtoend/testdata/join_left/ydb/schema.sql b/internal/endtoend/testdata/join_left/ydb/schema.sql new file mode 100644 index 0000000000..55ef211444 --- /dev/null +++ b/internal/endtoend/testdata/join_left/ydb/schema.sql @@ -0,0 +1,60 @@ +CREATE TABLE users ( + user_id Int32 NOT NULL, + city_id Int32, + PRIMARY KEY (user_id) +); + +CREATE TABLE cities ( + city_id Int32 NOT NULL, + mayor_id Int32 NOT NULL, + PRIMARY KEY (city_id) +); + +CREATE TABLE mayors ( + mayor_id Int32 NOT NULL, + full_name Utf8 NOT NULL, + PRIMARY KEY (mayor_id) +); + +CREATE TABLE authors ( + id Int32 NOT NULL, + name Utf8 NOT NULL, + parent_id Int32, + PRIMARY KEY (id) +); + +CREATE TABLE super_authors ( + super_id Int32 NOT NULL, + super_name Utf8 NOT NULL, + super_parent_id Int32, + PRIMARY KEY (super_id) +); + +CREATE TABLE users_2 ( + user_id Utf8 NOT NULL, + user_nickname Utf8 NOT NULL, + user_email Utf8 NOT NULL, + user_display_name Utf8 NOT NULL, + user_password Utf8, + user_google_id Utf8, + user_apple_id Utf8, + user_bio Utf8 NOT NULL DEFAULT '', + user_created_at Timestamp NOT NULL, + user_avatar_id Utf8, + PRIMARY KEY (user_id) +); + +CREATE TABLE media ( + media_id Utf8 NOT NULL, + media_created_at Timestamp NOT NULL, + media_hash Utf8 NOT NULL, + media_directory Utf8 NOT NULL, + media_author_id Utf8 NOT NULL, + media_width Int32 NOT NULL, + media_height Int32 NOT NULL, + PRIMARY KEY (media_id) +); + + + + diff --git a/internal/endtoend/testdata/join_left/ydb/sqlc.json b/internal/endtoend/testdata/join_left/ydb/sqlc.json new file mode 100644 index 0000000000..e85f2a696f --- /dev/null +++ b/internal/endtoend/testdata/join_left/ydb/sqlc.json @@ -0,0 +1,16 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + + diff --git a/internal/endtoend/testdata/join_right/ydb/go/db.go b/internal/endtoend/testdata/join_right/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_right/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_right/ydb/go/models.go b/internal/endtoend/testdata/join_right/ydb/go/models.go new file mode 100644 index 0000000000..f851f23756 --- /dev/null +++ b/internal/endtoend/testdata/join_right/ydb/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} + +type Foo struct { + ID int32 + BarID *int32 +} diff --git a/internal/endtoend/testdata/join_right/ydb/go/query.sql.go b/internal/endtoend/testdata/join_right/ydb/go/query.sql.go new file mode 100644 index 0000000000..516316da46 --- /dev/null +++ b/internal/endtoend/testdata/join_right/ydb/go/query.sql.go @@ -0,0 +1,46 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const rightJoin = `-- name: RightJoin :many +SELECT f.id, f.bar_id, b.id +FROM foo f +RIGHT JOIN bar b ON b.id = f.bar_id +WHERE f.id = $id +` + +type RightJoinRow struct { + ID *int32 + BarID *int32 + ID_2 int32 +} + +func (q *Queries) RightJoin(ctx context.Context, id int32) ([]RightJoinRow, error) { + rows, err := q.db.QueryContext(ctx, rightJoin, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []RightJoinRow + for rows.Next() { + var i RightJoinRow + if err := rows.Scan(&i.ID, &i.BarID, &i.ID_2); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_right/ydb/query.sql b/internal/endtoend/testdata/join_right/ydb/query.sql new file mode 100644 index 0000000000..d0c065246e --- /dev/null +++ b/internal/endtoend/testdata/join_right/ydb/query.sql @@ -0,0 +1,7 @@ +-- name: RightJoin :many +SELECT f.id, f.bar_id, b.id +FROM foo f +RIGHT JOIN bar b ON b.id = f.bar_id +WHERE f.id = $id; + + diff --git a/internal/endtoend/testdata/join_right/ydb/schema.sql b/internal/endtoend/testdata/join_right/ydb/schema.sql new file mode 100644 index 0000000000..2f497e584b --- /dev/null +++ b/internal/endtoend/testdata/join_right/ydb/schema.sql @@ -0,0 +1,12 @@ +CREATE TABLE bar ( + id Int32 NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE foo ( + id Int32 NOT NULL, + bar_id Int32, + PRIMARY KEY (id) +); + + diff --git a/internal/endtoend/testdata/join_right/ydb/sqlc.json b/internal/endtoend/testdata/join_right/ydb/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/join_right/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/params_duplicate/ydb/go/db.go b/internal/endtoend/testdata/params_duplicate/ydb/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/params_duplicate/ydb/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/params_duplicate/ydb/go/models.go b/internal/endtoend/testdata/params_duplicate/ydb/go/models.go new file mode 100644 index 0000000000..898463dfd3 --- /dev/null +++ b/internal/endtoend/testdata/params_duplicate/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int64 + FirstName *string + LastName *string +} diff --git a/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go b/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go new file mode 100644 index 0000000000..cde028cafc --- /dev/null +++ b/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go @@ -0,0 +1,109 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const selectUserByID = `-- name: SelectUserByID :many +SELECT first_name from +users where ($id = id OR $id = 0) +` + +func (q *Queries) SelectUserByID(ctx context.Context, id int64, opts ...query.ExecuteOption) ([]*string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int64(id) + result, err := q.db.QueryResultSet(ctx, selectUserByID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var first_name *string + if err := row.Scan(&first_name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, first_name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const selectUserByName = `-- name: SelectUserByName :many +SELECT first_name +FROM users +WHERE first_name = $name + OR last_name = $name +` + +func (q *Queries) SelectUserByName(ctx context.Context, name *string, opts ...query.ExecuteOption) ([]*string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").BeginOptional().Text(name).EndOptional() + result, err := q.db.QueryResultSet(ctx, selectUserByName, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var first_name *string + if err := row.Scan(&first_name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, first_name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const selectUserQuestion = `-- name: SelectUserQuestion :many +SELECT first_name from +users where ($question = id OR $question = 0) +` + +func (q *Queries) SelectUserQuestion(ctx context.Context, question int64, opts ...query.ExecuteOption) ([]*string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$question").Int64(question) + result, err := q.db.QueryResultSet(ctx, selectUserQuestion, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var first_name *string + if err := row.Scan(&first_name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, first_name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/params_duplicate/ydb/query.sql b/internal/endtoend/testdata/params_duplicate/ydb/query.sql new file mode 100644 index 0000000000..3332f3e6ee --- /dev/null +++ b/internal/endtoend/testdata/params_duplicate/ydb/query.sql @@ -0,0 +1,13 @@ +-- name: SelectUserByID :many +SELECT first_name from +users where ($id = id OR $id = 0); + +-- name: SelectUserByName :many +SELECT first_name +FROM users +WHERE first_name = $name + OR last_name = $name; + +-- name: SelectUserQuestion :many +SELECT first_name from +users where ($question = id OR $question = 0); diff --git a/internal/endtoend/testdata/params_duplicate/ydb/schema.sql b/internal/endtoend/testdata/params_duplicate/ydb/schema.sql new file mode 100644 index 0000000000..a4f0faf889 --- /dev/null +++ b/internal/endtoend/testdata/params_duplicate/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id Int64, + first_name Utf8, + last_name Utf8, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/params_duplicate/ydb/sqlc.json b/internal/endtoend/testdata/params_duplicate/ydb/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/params_duplicate/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/go/db.go b/internal/endtoend/testdata/params_location/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/go/models.go b/internal/endtoend/testdata/params_location/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..e2b69577ec --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/go/models.go @@ -0,0 +1,23 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "github.com/ydb-platform/ydb-go-sdk/v3/table/types" +) + +type Order struct { + ID int64 + Price *types.Decimal + UserID *int64 +} + +type User struct { + ID int64 + FirstName *string + LastName *string + Age *int64 + JobStatus *string +} diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/params_location/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..1cd5693779 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/go/query.sql.go @@ -0,0 +1,258 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/table/types" +) + +const getUserByID = `-- name: GetUserByID :one +SELECT first_name, id, last_name FROM users WHERE id = $target_id +` + +type GetUserByIDRow struct { + FirstName *string + ID int64 + LastName *string +} + +func (q *Queries) GetUserByID(ctx context.Context, targetID int64) (GetUserByIDRow, error) { + row := q.db.QueryRowContext(ctx, getUserByID, targetID) + var i GetUserByIDRow + err := row.Scan(&i.FirstName, &i.ID, &i.LastName) + return i, err +} + +const insertNewUser = `-- name: InsertNewUser :exec +INSERT INTO users (first_name, last_name) VALUES ($first_name, $last_name) +` + +type InsertNewUserParams struct { + FirstName *string + LastName *string +} + +func (q *Queries) InsertNewUser(ctx context.Context, arg InsertNewUserParams) error { + _, err := q.db.ExecContext(ctx, insertNewUser, arg.FirstName, arg.LastName) + return err +} + +const limitSQLCArg = `-- name: LimitSQLCArg :many +select first_name, id FROM users LIMIT $limit +` + +type LimitSQLCArgRow struct { + FirstName *string + ID int64 +} + +func (q *Queries) LimitSQLCArg(ctx context.Context, limit uint64) ([]LimitSQLCArgRow, error) { + rows, err := q.db.QueryContext(ctx, limitSQLCArg, limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []LimitSQLCArgRow + for rows.Next() { + var i LimitSQLCArgRow + if err := rows.Scan(&i.FirstName, &i.ID); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listUserOrders = `-- name: ListUserOrders :many +SELECT + users.id, + users.first_name, + orders.price +FROM + orders +LEFT JOIN users ON orders.user_id = users.id +WHERE orders.price > $min_price +` + +type ListUserOrdersRow struct { + ID *int64 + FirstName *string + Price *types.Decimal +} + +func (q *Queries) ListUserOrders(ctx context.Context, minPrice *types.Decimal) ([]ListUserOrdersRow, error) { + rows, err := q.db.QueryContext(ctx, listUserOrders, minPrice) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListUserOrdersRow + for rows.Next() { + var i ListUserOrdersRow + if err := rows.Scan(&i.ID, &i.FirstName, &i.Price); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listUserParenExpr = `-- name: ListUserParenExpr :many +SELECT id, first_name, last_name, age, job_status FROM users WHERE (job_status = 'APPLIED' OR job_status = 'PENDING') +AND id > $id +ORDER BY id +LIMIT $limit +` + +type ListUserParenExprParams struct { + ID int64 + Limit uint64 +} + +func (q *Queries) ListUserParenExpr(ctx context.Context, arg ListUserParenExprParams) ([]User, error) { + rows, err := q.db.QueryContext(ctx, listUserParenExpr, arg.ID, arg.Limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + &i.JobStatus, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listUsersByFamily = `-- name: ListUsersByFamily :many +SELECT first_name, last_name FROM users WHERE age < $max_age AND last_name = $in_family +` + +type ListUsersByFamilyParams struct { + MaxAge *int64 + InFamily *string +} + +type ListUsersByFamilyRow struct { + FirstName *string + LastName *string +} + +func (q *Queries) ListUsersByFamily(ctx context.Context, arg ListUsersByFamilyParams) ([]ListUsersByFamilyRow, error) { + rows, err := q.db.QueryContext(ctx, listUsersByFamily, arg.MaxAge, arg.InFamily) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListUsersByFamilyRow + for rows.Next() { + var i ListUsersByFamilyRow + if err := rows.Scan(&i.FirstName, &i.LastName); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listUsersByID = `-- name: ListUsersByID :many +SELECT first_name, id, last_name FROM users WHERE id < $id +` + +type ListUsersByIDRow struct { + FirstName *string + ID int64 + LastName *string +} + +func (q *Queries) ListUsersByID(ctx context.Context, id int64) ([]ListUsersByIDRow, error) { + rows, err := q.db.QueryContext(ctx, listUsersByID, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListUsersByIDRow + for rows.Next() { + var i ListUsersByIDRow + if err := rows.Scan(&i.FirstName, &i.ID, &i.LastName); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listUsersWithLimit = `-- name: ListUsersWithLimit :many +SELECT first_name, last_name FROM users LIMIT $limit +` + +type ListUsersWithLimitRow struct { + FirstName *string + LastName *string +} + +func (q *Queries) ListUsersWithLimit(ctx context.Context, limit uint64) ([]ListUsersWithLimitRow, error) { + rows, err := q.db.QueryContext(ctx, listUsersWithLimit, limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListUsersWithLimitRow + for rows.Next() { + var i ListUsersWithLimitRow + if err := rows.Scan(&i.FirstName, &i.LastName); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql b/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql new file mode 100644 index 0000000000..1ba7087f2f --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql @@ -0,0 +1,43 @@ +-- name: ListUsersByID :many +SELECT first_name, id, last_name FROM users WHERE id < $id; + +-- name: ListUserOrders :many +SELECT + users.id, + users.first_name, + orders.price +FROM + orders +LEFT JOIN users ON orders.user_id = users.id +WHERE orders.price > $min_price; + +-- name: GetUserByID :one +SELECT first_name, id, last_name FROM users WHERE id = $target_id; + +-- name: ListUsersByFamily :many +SELECT first_name, last_name FROM users WHERE age < $max_age AND last_name = $in_family; + +-- name: ListUsersWithLimit :many +SELECT first_name, last_name FROM users LIMIT $limit; + +-- name: LimitSQLCArg :many +select first_name, id FROM users LIMIT $limit; + +-- name: InsertNewUser :exec +INSERT INTO users (first_name, last_name) VALUES ($first_name, $last_name); + +-- name: ListUserParenExpr :many +SELECT * FROM users WHERE (job_status = 'APPLIED' OR job_status = 'PENDING') +AND id > $id +ORDER BY id +LIMIT $limit; + + + + + + + + + + diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql b/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..8be1d78ba1 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql @@ -0,0 +1,25 @@ +CREATE TABLE users ( + id Int64, + first_name Utf8, + last_name Utf8, + age Int64, + job_status Utf8, + PRIMARY KEY (id) +); + +CREATE TABLE orders ( + id Int64, + price Decimal(13, 4), + user_id Int64, + PRIMARY KEY (id) +); + + + + + + + + + + diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..10df8ab73b --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json @@ -0,0 +1,22 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + + + + + + + + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..e2b69577ec --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,23 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "github.com/ydb-platform/ydb-go-sdk/v3/table/types" +) + +type Order struct { + ID int64 + Price *types.Decimal + UserID *int64 +} + +type User struct { + ID int64 + FirstName *string + LastName *string + Age *int64 + JobStatus *string +} diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..932001ec89 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,299 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" + "github.com/ydb-platform/ydb-go-sdk/v3/table/types" +) + +const getUserByID = `-- name: GetUserByID :one +SELECT first_name, id, last_name FROM users WHERE id = $target_id +` + +type GetUserByIDRow struct { + FirstName *string + ID int64 + LastName *string +} + +func (q *Queries) GetUserByID(ctx context.Context, targetID int64, opts ...query.ExecuteOption) (GetUserByIDRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$target_id").Int64(targetID) + row, err := q.db.QueryRow(ctx, getUserByID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i GetUserByIDRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.FirstName, &i.ID, &i.LastName) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const insertNewUser = `-- name: InsertNewUser :exec +INSERT INTO users (first_name, last_name) VALUES ($first_name, $last_name) +` + +type InsertNewUserParams struct { + FirstName *string + LastName *string +} + +func (q *Queries) InsertNewUser(ctx context.Context, arg InsertNewUserParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$first_name").BeginOptional().Text(arg.FirstName).EndOptional() + parameters = parameters.Param("$last_name").BeginOptional().Text(arg.LastName).EndOptional() + err := q.db.Exec(ctx, insertNewUser, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} + +const limitSQLCArg = `-- name: LimitSQLCArg :many +select first_name, id FROM users LIMIT $limit +` + +type LimitSQLCArgRow struct { + FirstName *string + ID int64 +} + +func (q *Queries) LimitSQLCArg(ctx context.Context, limit uint64, opts ...query.ExecuteOption) ([]LimitSQLCArgRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$limit").Uint64(limit) + result, err := q.db.QueryResultSet(ctx, limitSQLCArg, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []LimitSQLCArgRow + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i LimitSQLCArgRow + if err := row.Scan(&i.FirstName, &i.ID); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const listUserOrders = `-- name: ListUserOrders :many +SELECT + users.id, + users.first_name, + orders.price +FROM + orders +LEFT JOIN users ON orders.user_id = users.id +WHERE orders.price > $min_price +` + +type ListUserOrdersRow struct { + ID *int64 + FirstName *string + Price *types.Decimal +} + +func (q *Queries) ListUserOrders(ctx context.Context, minPrice *types.Decimal, opts ...query.ExecuteOption) ([]ListUserOrdersRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$min_price").BeginOptional().Decimal(&minPrice.Bytes, minPrice.Precision, minPrice.Scale).EndOptional() + result, err := q.db.QueryResultSet(ctx, listUserOrders, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []ListUserOrdersRow + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i ListUserOrdersRow + if err := row.Scan(&i.ID, &i.FirstName, &i.Price); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const listUserParenExpr = `-- name: ListUserParenExpr :many +SELECT id, first_name, last_name, age, job_status FROM users WHERE (job_status = 'APPLIED' OR job_status = 'PENDING') +AND id > $id +ORDER BY id +LIMIT $limit +` + +type ListUserParenExprParams struct { + ID int64 + Limit uint64 +} + +func (q *Queries) ListUserParenExpr(ctx context.Context, arg ListUserParenExprParams, opts ...query.ExecuteOption) ([]User, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int64(arg.ID) + parameters = parameters.Param("$limit").Uint64(arg.Limit) + result, err := q.db.QueryResultSet(ctx, listUserParenExpr, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []User + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i User + if err := row.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + &i.JobStatus, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const listUsersByFamily = `-- name: ListUsersByFamily :many +SELECT first_name, last_name FROM users WHERE age < $max_age AND last_name = $in_family +` + +type ListUsersByFamilyParams struct { + MaxAge *int64 + InFamily *string +} + +type ListUsersByFamilyRow struct { + FirstName *string + LastName *string +} + +func (q *Queries) ListUsersByFamily(ctx context.Context, arg ListUsersByFamilyParams, opts ...query.ExecuteOption) ([]ListUsersByFamilyRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$max_age").BeginOptional().Int64(arg.MaxAge).EndOptional() + parameters = parameters.Param("$in_family").BeginOptional().Text(arg.InFamily).EndOptional() + result, err := q.db.QueryResultSet(ctx, listUsersByFamily, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []ListUsersByFamilyRow + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i ListUsersByFamilyRow + if err := row.Scan(&i.FirstName, &i.LastName); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const listUsersByID = `-- name: ListUsersByID :many +SELECT first_name, id, last_name FROM users WHERE id < $id +` + +type ListUsersByIDRow struct { + FirstName *string + ID int64 + LastName *string +} + +func (q *Queries) ListUsersByID(ctx context.Context, id int64, opts ...query.ExecuteOption) ([]ListUsersByIDRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int64(id) + result, err := q.db.QueryResultSet(ctx, listUsersByID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []ListUsersByIDRow + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i ListUsersByIDRow + if err := row.Scan(&i.FirstName, &i.ID, &i.LastName); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const listUsersWithLimit = `-- name: ListUsersWithLimit :many +SELECT first_name, last_name FROM users LIMIT $limit +` + +type ListUsersWithLimitRow struct { + FirstName *string + LastName *string +} + +func (q *Queries) ListUsersWithLimit(ctx context.Context, limit uint64, opts ...query.ExecuteOption) ([]ListUsersWithLimitRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$limit").Uint64(limit) + result, err := q.db.QueryResultSet(ctx, listUsersWithLimit, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []ListUsersWithLimitRow + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i ListUsersWithLimitRow + if err := row.Scan(&i.FirstName, &i.LastName); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..1ba7087f2f --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,43 @@ +-- name: ListUsersByID :many +SELECT first_name, id, last_name FROM users WHERE id < $id; + +-- name: ListUserOrders :many +SELECT + users.id, + users.first_name, + orders.price +FROM + orders +LEFT JOIN users ON orders.user_id = users.id +WHERE orders.price > $min_price; + +-- name: GetUserByID :one +SELECT first_name, id, last_name FROM users WHERE id = $target_id; + +-- name: ListUsersByFamily :many +SELECT first_name, last_name FROM users WHERE age < $max_age AND last_name = $in_family; + +-- name: ListUsersWithLimit :many +SELECT first_name, last_name FROM users LIMIT $limit; + +-- name: LimitSQLCArg :many +select first_name, id FROM users LIMIT $limit; + +-- name: InsertNewUser :exec +INSERT INTO users (first_name, last_name) VALUES ($first_name, $last_name); + +-- name: ListUserParenExpr :many +SELECT * FROM users WHERE (job_status = 'APPLIED' OR job_status = 'PENDING') +AND id > $id +ORDER BY id +LIMIT $limit; + + + + + + + + + + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..8be1d78ba1 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,25 @@ +CREATE TABLE users ( + id Int64, + first_name Utf8, + last_name Utf8, + age Int64, + job_status Utf8, + PRIMARY KEY (id) +); + +CREATE TABLE orders ( + id Int64, + price Decimal(13, 4), + user_id Int64, + PRIMARY KEY (id) +); + + + + + + + + + + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..fd247d52ea --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,23 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + + + + + + + + diff --git a/internal/endtoend/testdata/params_two/ydb/stdlib/go/db.go b/internal/endtoend/testdata/params_two/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/params_two/ydb/stdlib/go/models.go b/internal/endtoend/testdata/params_two/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..5eebad25b8 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/params_two/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/params_two/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..7d25aa2b5e --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/stdlib/go/query.sql.go @@ -0,0 +1,43 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const fooByAandB = `-- name: FooByAandB :many +SELECT a, b FROM foo +WHERE a = $a and b = $b +` + +type FooByAandBParams struct { + A string + B string +} + +func (q *Queries) FooByAandB(ctx context.Context, arg FooByAandBParams) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, fooByAandB, arg.A, arg.B) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.A, &i.B); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/params_two/ydb/stdlib/query.sql b/internal/endtoend/testdata/params_two/ydb/stdlib/query.sql new file mode 100644 index 0000000000..25f2d83032 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/stdlib/query.sql @@ -0,0 +1,3 @@ +-- name: FooByAandB :many +SELECT a, b FROM foo +WHERE a = $a and b = $b; diff --git a/internal/endtoend/testdata/params_two/ydb/stdlib/schema.sql b/internal/endtoend/testdata/params_two/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..b9d4618806 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Utf8, + b Utf8, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/params_two/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/params_two/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..5eebad25b8 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..1074b46f9d --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,51 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const fooByAandB = `-- name: FooByAandB :many +SELECT a, b FROM foo +WHERE a = $a and b = $b +` + +type FooByAandBParams struct { + A string + B string +} + +func (q *Queries) FooByAandB(ctx context.Context, arg FooByAandBParams, opts ...query.ExecuteOption) ([]Foo, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$a").Text(arg.A) + parameters = parameters.Param("$b").Text(arg.B) + result, err := q.db.QueryResultSet(ctx, fooByAandB, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.A, &i.B); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..25f2d83032 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,3 @@ +-- name: FooByAandB :many +SELECT a, b FROM foo +WHERE a = $a and b = $b; diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..b9d4618806 --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Utf8, + b Utf8, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/returning/ydb/stdlib/go/db.go b/internal/endtoend/testdata/returning/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/returning/ydb/stdlib/go/models.go b/internal/endtoend/testdata/returning/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..6dac5a4bf2 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + Name *string + ID int32 +} diff --git a/internal/endtoend/testdata/returning/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/returning/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..24ebfc198e --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/stdlib/go/query.sql.go @@ -0,0 +1,96 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const deleteUserAndReturnID = `-- name: DeleteUserAndReturnID :one +DELETE FROM users + WHERE name = $name + RETURNING id +` + +func (q *Queries) DeleteUserAndReturnID(ctx context.Context, name *string) (int32, error) { + row := q.db.QueryRowContext(ctx, deleteUserAndReturnID, name) + var id int32 + err := row.Scan(&id) + return id, err +} + +const deleteUserAndReturnUser = `-- name: DeleteUserAndReturnUser :one +DELETE FROM users + WHERE name = $name + RETURNING name, id +` + +func (q *Queries) DeleteUserAndReturnUser(ctx context.Context, name *string) (User, error) { + row := q.db.QueryRowContext(ctx, deleteUserAndReturnUser, name) + var i User + err := row.Scan(&i.Name, &i.ID) + return i, err +} + +const insertUserAndReturnID = `-- name: InsertUserAndReturnID :one +INSERT INTO users (name) VALUES ($name) + RETURNING id +` + +func (q *Queries) InsertUserAndReturnID(ctx context.Context, name *string) (int32, error) { + row := q.db.QueryRowContext(ctx, insertUserAndReturnID, name) + var id int32 + err := row.Scan(&id) + return id, err +} + +const insertUserAndReturnUser = `-- name: InsertUserAndReturnUser :one +INSERT INTO users (name) VALUES ($name) + RETURNING name, id +` + +func (q *Queries) InsertUserAndReturnUser(ctx context.Context, name *string) (User, error) { + row := q.db.QueryRowContext(ctx, insertUserAndReturnUser, name) + var i User + err := row.Scan(&i.Name, &i.ID) + return i, err +} + +const updateUserAndReturnID = `-- name: UpdateUserAndReturnID :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING id +` + +type UpdateUserAndReturnIDParams struct { + Name *string + Name2 *string +} + +func (q *Queries) UpdateUserAndReturnID(ctx context.Context, arg UpdateUserAndReturnIDParams) (int32, error) { + row := q.db.QueryRowContext(ctx, updateUserAndReturnID, arg.Name, arg.Name2) + var id int32 + err := row.Scan(&id) + return id, err +} + +const updateUserAndReturnUser = `-- name: UpdateUserAndReturnUser :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING name, id +` + +type UpdateUserAndReturnUserParams struct { + Name *string + Name2 *string +} + +func (q *Queries) UpdateUserAndReturnUser(ctx context.Context, arg UpdateUserAndReturnUserParams) (User, error) { + row := q.db.QueryRowContext(ctx, updateUserAndReturnUser, arg.Name, arg.Name2) + var i User + err := row.Scan(&i.Name, &i.ID) + return i, err +} diff --git a/internal/endtoend/testdata/returning/ydb/stdlib/query.sql b/internal/endtoend/testdata/returning/ydb/stdlib/query.sql new file mode 100644 index 0000000000..c694aa85b5 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/stdlib/query.sql @@ -0,0 +1,27 @@ +-- name: InsertUserAndReturnID :one +INSERT INTO users (name) VALUES ($name) + RETURNING id; + +-- name: InsertUserAndReturnUser :one +INSERT INTO users (name) VALUES ($name) + RETURNING *; + +-- name: UpdateUserAndReturnID :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING id; + +-- name: UpdateUserAndReturnUser :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING *; + +-- name: DeleteUserAndReturnID :one +DELETE FROM users + WHERE name = $name + RETURNING id; + +-- name: DeleteUserAndReturnUser :one +DELETE FROM users + WHERE name = $name + RETURNING *; diff --git a/internal/endtoend/testdata/returning/ydb/stdlib/schema.sql b/internal/endtoend/testdata/returning/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..9d8695d968 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE users ( + name Utf8, + id Serial, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/returning/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/returning/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..6dac5a4bf2 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + Name *string + ID int32 +} diff --git a/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..7f6c0bb5a7 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,162 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const deleteUserAndReturnID = `-- name: DeleteUserAndReturnID :one +DELETE FROM users + WHERE name = $name + RETURNING id +` + +func (q *Queries) DeleteUserAndReturnID(ctx context.Context, name *string, opts ...query.ExecuteOption) (int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").BeginOptional().Text(name).EndOptional() + row, err := q.db.QueryRow(ctx, deleteUserAndReturnID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var id int32 + if err != nil { + return id, xerrors.WithStackTrace(err) + } + err = row.Scan(&id) + if err != nil { + return id, xerrors.WithStackTrace(err) + } + return id, nil +} + +const deleteUserAndReturnUser = `-- name: DeleteUserAndReturnUser :one +DELETE FROM users + WHERE name = $name + RETURNING name, id +` + +func (q *Queries) DeleteUserAndReturnUser(ctx context.Context, name *string, opts ...query.ExecuteOption) (User, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").BeginOptional().Text(name).EndOptional() + row, err := q.db.QueryRow(ctx, deleteUserAndReturnUser, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i User + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.Name, &i.ID) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const insertUserAndReturnID = `-- name: InsertUserAndReturnID :one +INSERT INTO users (name) VALUES ($name) + RETURNING id +` + +func (q *Queries) InsertUserAndReturnID(ctx context.Context, name *string, opts ...query.ExecuteOption) (int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").BeginOptional().Text(name).EndOptional() + row, err := q.db.QueryRow(ctx, insertUserAndReturnID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var id int32 + if err != nil { + return id, xerrors.WithStackTrace(err) + } + err = row.Scan(&id) + if err != nil { + return id, xerrors.WithStackTrace(err) + } + return id, nil +} + +const insertUserAndReturnUser = `-- name: InsertUserAndReturnUser :one +INSERT INTO users (name) VALUES ($name) + RETURNING name, id +` + +func (q *Queries) InsertUserAndReturnUser(ctx context.Context, name *string, opts ...query.ExecuteOption) (User, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").BeginOptional().Text(name).EndOptional() + row, err := q.db.QueryRow(ctx, insertUserAndReturnUser, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i User + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.Name, &i.ID) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const updateUserAndReturnID = `-- name: UpdateUserAndReturnID :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING id +` + +type UpdateUserAndReturnIDParams struct { + Name *string + Name2 *string +} + +func (q *Queries) UpdateUserAndReturnID(ctx context.Context, arg UpdateUserAndReturnIDParams, opts ...query.ExecuteOption) (int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").BeginOptional().Text(arg.Name).EndOptional() + parameters = parameters.Param("$name_2").BeginOptional().Text(arg.Name2).EndOptional() + row, err := q.db.QueryRow(ctx, updateUserAndReturnID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var id int32 + if err != nil { + return id, xerrors.WithStackTrace(err) + } + err = row.Scan(&id) + if err != nil { + return id, xerrors.WithStackTrace(err) + } + return id, nil +} + +const updateUserAndReturnUser = `-- name: UpdateUserAndReturnUser :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING name, id +` + +type UpdateUserAndReturnUserParams struct { + Name *string + Name2 *string +} + +func (q *Queries) UpdateUserAndReturnUser(ctx context.Context, arg UpdateUserAndReturnUserParams, opts ...query.ExecuteOption) (User, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").BeginOptional().Text(arg.Name).EndOptional() + parameters = parameters.Param("$name_2").BeginOptional().Text(arg.Name2).EndOptional() + row, err := q.db.QueryRow(ctx, updateUserAndReturnUser, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i User + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.Name, &i.ID) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} diff --git a/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..c694aa85b5 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,27 @@ +-- name: InsertUserAndReturnID :one +INSERT INTO users (name) VALUES ($name) + RETURNING id; + +-- name: InsertUserAndReturnUser :one +INSERT INTO users (name) VALUES ($name) + RETURNING *; + +-- name: UpdateUserAndReturnID :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING id; + +-- name: UpdateUserAndReturnUser :one +UPDATE users SET name = $name + WHERE name = $name_2 + RETURNING *; + +-- name: DeleteUserAndReturnID :one +DELETE FROM users + WHERE name = $name + RETURNING id; + +-- name: DeleteUserAndReturnUser :one +DELETE FROM users + WHERE name = $name + RETURNING *; diff --git a/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..9d8695d968 --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE users ( + name Utf8, + id Serial, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/returning/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/db.go b/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/models.go b/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..3f902fb339 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Name *string +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..59a12d4046 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/stdlib/go/query.sql.go @@ -0,0 +1,38 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getBars = `-- name: GetBars :many +SELECT DISTINCT id, name +FROM bar +` + +func (q *Queries) GetBars(ctx context.Context) ([]Bar, error) { + rows, err := q.db.QueryContext(ctx, getBars) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Bar + for rows.Next() { + var i Bar + if err := rows.Scan(&i.ID, &i.Name); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/stdlib/query.sql b/internal/endtoend/testdata/select_distinct/ydb/stdlib/query.sql new file mode 100644 index 0000000000..13c029d904 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/stdlib/query.sql @@ -0,0 +1,3 @@ +-- name: GetBars :many +SELECT DISTINCT id, name +FROM bar; diff --git a/internal/endtoend/testdata/select_distinct/ydb/stdlib/schema.sql b/internal/endtoend/testdata/select_distinct/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..3604ffebdc --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial, name Utf8, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/select_distinct/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/select_distinct/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..3f902fb339 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Name *string +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..72977df92e --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,40 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const getBars = `-- name: GetBars :many +SELECT DISTINCT id, name +FROM bar +` + +func (q *Queries) GetBars(ctx context.Context, opts ...query.ExecuteOption) ([]Bar, error) { + result, err := q.db.QueryResultSet(ctx, getBars, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Bar + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Bar + if err := row.Scan(&i.ID, &i.Name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..13c029d904 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,3 @@ +-- name: GetBars :many +SELECT DISTINCT id, name +FROM bar; diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..3604ffebdc --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial, name Utf8, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_exists/ydb/stdlib/go/db.go b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_exists/ydb/stdlib/go/models.go b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..ef7d944f5f --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const barExists = `-- name: BarExists :one +SELECT + EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ) +` + +func (q *Queries) BarExists(ctx context.Context) (interface{}, error) { + row := q.db.QueryRowContext(ctx, barExists) + var column_1 interface{} + err := row.Scan(&column_1) + return column_1, err +} diff --git a/internal/endtoend/testdata/select_exists/ydb/stdlib/query.sql b/internal/endtoend/testdata/select_exists/ydb/stdlib/query.sql new file mode 100644 index 0000000000..02df281523 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/stdlib/query.sql @@ -0,0 +1,10 @@ +-- name: BarExists :one +SELECT + EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ); diff --git a/internal/endtoend/testdata/select_exists/ydb/stdlib/schema.sql b/internal/endtoend/testdata/select_exists/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..a81897d939 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/select_exists/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/select_exists/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..bbb8a0891d --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,43 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const barExists = `-- name: BarExists :one +SELECT + EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ) +` + +func (q *Queries) BarExists(ctx context.Context, id int32, opts ...query.ExecuteOption) (bool, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + row, err := q.db.QueryRow(ctx, barExists, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var exists bool + if err != nil { + return exists, xerrors.WithStackTrace(err) + } + err = row.Scan(&exists) + if err != nil { + return exists, xerrors.WithStackTrace(err) + } + return exists, nil +} diff --git a/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..02df281523 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,10 @@ +-- name: BarExists :one +SELECT + EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ); diff --git a/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..a81897d939 --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/select_exists/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_limit/ydb/stdlib/go/db.go b/internal/endtoend/testdata/select_limit/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_limit/ydb/stdlib/go/models.go b/internal/endtoend/testdata/select_limit/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..0315a45010 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string +} diff --git a/internal/endtoend/testdata/select_limit/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/select_limit/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..861f1988dc --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/stdlib/go/query.sql.go @@ -0,0 +1,71 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const fooLimit = `-- name: FooLimit :many +SELECT a FROM foo +LIMIT $limit +` + +func (q *Queries) FooLimit(ctx context.Context, limit uint64) ([]string, error) { + rows, err := q.db.QueryContext(ctx, fooLimit, limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var a string + if err := rows.Scan(&a); err != nil { + return nil, err + } + items = append(items, a) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const fooLimitOffset = `-- name: FooLimitOffset :many +SELECT a FROM foo +LIMIT $limit OFFSET $offset +` + +type FooLimitOffsetParams struct { + Offset uint64 + Limit uint64 +} + +func (q *Queries) FooLimitOffset(ctx context.Context, arg FooLimitOffsetParams) ([]string, error) { + rows, err := q.db.QueryContext(ctx, fooLimitOffset, arg.Offset, arg.Limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var a string + if err := rows.Scan(&a); err != nil { + return nil, err + } + items = append(items, a) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_limit/ydb/stdlib/query.sql b/internal/endtoend/testdata/select_limit/ydb/stdlib/query.sql new file mode 100644 index 0000000000..55f3ed95f7 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/stdlib/query.sql @@ -0,0 +1,8 @@ +-- name: FooLimit :many +SELECT a FROM foo +LIMIT $limit; + +-- name: FooLimitOffset :many +SELECT a FROM foo +LIMIT $limit OFFSET $offset; + diff --git a/internal/endtoend/testdata/select_limit/ydb/stdlib/schema.sql b/internal/endtoend/testdata/select_limit/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..2c11be972d --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/stdlib/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (a Utf8, PRIMARY KEY (a)); + diff --git a/internal/endtoend/testdata/select_limit/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/select_limit/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..3e245cf4a5 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/stdlib/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..0315a45010 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string +} diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..ec42f11fb6 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,82 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const fooLimit = `-- name: FooLimit :many +SELECT a FROM foo +LIMIT $limit +` + +func (q *Queries) FooLimit(ctx context.Context, limit uint64, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$limit").Uint64(limit) + result, err := q.db.QueryResultSet(ctx, fooLimit, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var a string + if err := row.Scan(&a); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, a) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const fooLimitOffset = `-- name: FooLimitOffset :many +SELECT a FROM foo +LIMIT $limit OFFSET $offset +` + +type FooLimitOffsetParams struct { + Offset uint64 + Limit uint64 +} + +func (q *Queries) FooLimitOffset(ctx context.Context, arg FooLimitOffsetParams, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$offset").Uint64(arg.Offset) + parameters = parameters.Param("$limit").Uint64(arg.Limit) + result, err := q.db.QueryResultSet(ctx, fooLimitOffset, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var a string + if err := row.Scan(&a); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, a) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..55f3ed95f7 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,8 @@ +-- name: FooLimit :many +SELECT a FROM foo +LIMIT $limit; + +-- name: FooLimitOffset :many +SELECT a FROM foo +LIMIT $limit OFFSET $offset; + diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..2c11be972d --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (a Utf8, PRIMARY KEY (a)); + diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..ab1d73a6ea --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..3ac6a42057 --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,72 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const barExists = `-- name: BarExists :one +SELECT + EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ) +` + +func (q *Queries) BarExists(ctx context.Context, id int32, opts ...query.ExecuteOption) (bool, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + row, err := q.db.QueryRow(ctx, barExists, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var exists bool + if err != nil { + return exists, xerrors.WithStackTrace(err) + } + err = row.Scan(&exists) + if err != nil { + return exists, xerrors.WithStackTrace(err) + } + return exists, nil +} + +const barNotExists = `-- name: BarNotExists :one +SELECT + NOT EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ) +` + +func (q *Queries) BarNotExists(ctx context.Context, id int32, opts ...query.ExecuteOption) (interface{}, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + row, err := q.db.QueryRow(ctx, barNotExists, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var column_1 interface{} + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + err = row.Scan(&column_1) + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + return column_1, nil +} diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..fed29a7f23 --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql @@ -0,0 +1,21 @@ +-- name: BarNotExists :one +SELECT + NOT EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ); + +-- name: BarExists :one +SELECT + EXISTS ( + SELECT + 1 + FROM + bar + where + id = $id + ); diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..a81897d939 --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..058e6d525f --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] + } + + \ No newline at end of file diff --git a/internal/endtoend/testdata/select_star/ydb/stdlib/go/db.go b/internal/endtoend/testdata/select_star/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_star/ydb/stdlib/go/models.go b/internal/endtoend/testdata/select_star/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..1957832e2a --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/stdlib/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 + FirstName string + LastName *string + Age int32 +} diff --git a/internal/endtoend/testdata/select_star/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/select_star/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..dd10b59022 --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/stdlib/go/query.sql.go @@ -0,0 +1,69 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.db.QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getIDAll = `-- name: GetIDAll :many +SELECT id FROM (SELECT id FROM users) t +` + +func (q *Queries) GetIDAll(ctx context.Context) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, getIDAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_star/ydb/stdlib/query.sql b/internal/endtoend/testdata/select_star/ydb/stdlib/query.sql new file mode 100644 index 0000000000..fc9cfc21ce --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: GetAll :many +SELECT * FROM users; + +/* name: GetIDAll :many */ +SELECT * FROM (SELECT id FROM users) t; diff --git a/internal/endtoend/testdata/select_star/ydb/stdlib/schema.sql b/internal/endtoend/testdata/select_star/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..ea12994b65 --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/stdlib/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Serial, + first_name Utf8 NOT NULL, + last_name Utf8, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/select_star/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/select_star/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..1957832e2a --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 + FirstName string + LastName *string + Age int32 +} diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..a9246a7ea3 --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,70 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]User, error) { + result, err := q.db.QueryResultSet(ctx, getAll, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []User + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i User + if err := row.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const getIDAll = `-- name: GetIDAll :many +SELECT id FROM (SELECT id FROM users) t +` + +func (q *Queries) GetIDAll(ctx context.Context, opts ...query.ExecuteOption) ([]int32, error) { + result, err := q.db.QueryResultSet(ctx, getIDAll, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int32 + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var id int32 + if err := row.Scan(&id); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, id) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..fc9cfc21ce --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: GetAll :many +SELECT * FROM users; + +/* name: GetIDAll :many */ +SELECT * FROM (SELECT id FROM users) t; diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..ea12994b65 --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Serial, + first_name Utf8 NOT NULL, + last_name Utf8, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/db.go b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/models.go b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..927aa685d4 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID int32 + Name string + Bar *string +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..2e43628d8e --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/go/query.sql.go @@ -0,0 +1,177 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const funcNullable = `-- name: FuncNullable :many +SELECT bar FROM foo +WHERE id IN $favourites +` + +func (q *Queries) FuncNullable(ctx context.Context, favourites []int32) ([]*string, error) { + rows, err := q.db.QueryContext(ctx, funcNullable, favourites) + if err != nil { + return nil, err + } + defer rows.Close() + var items []*string + for rows.Next() { + var bar *string + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const funcNullableNot = `-- name: FuncNullableNot :many +SELECT bar FROM foo +WHERE id NOT IN $favourites +` + +func (q *Queries) FuncNullableNot(ctx context.Context, favourites []int32) ([]*string, error) { + rows, err := q.db.QueryContext(ctx, funcNullableNot, favourites) + if err != nil { + return nil, err + } + defer rows.Close() + var items []*string + for rows.Next() { + var bar *string + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const funcParamIdent = `-- name: FuncParamIdent :many +SELECT name FROM foo +WHERE name = $slug + AND id IN $favourites +` + +type FuncParamIdentParams struct { + Slug string + Favourites []int32 +} + +func (q *Queries) FuncParamIdent(ctx context.Context, arg FuncParamIdentParams) ([]string, error) { + rows, err := q.db.QueryContext(ctx, funcParamIdent, arg.Slug, arg.Favourites) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const funcParamSoloArg = `-- name: FuncParamSoloArg :many +SELECT name FROM foo +WHERE id IN $favourites +` + +func (q *Queries) FuncParamSoloArg(ctx context.Context, favourites []int32) ([]string, error) { + rows, err := q.db.QueryContext(ctx, funcParamSoloArg, favourites) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const funcParamString = `-- name: FuncParamString :many +SELECT name FROM foo +WHERE name = $slug + AND id IN $favourites +` + +type FuncParamStringParams struct { + Slug string + Favourites []int32 +} + +func (q *Queries) FuncParamString(ctx context.Context, arg FuncParamStringParams) ([]string, error) { + rows, err := q.db.QueryContext(ctx, funcParamString, arg.Slug, arg.Favourites) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const sliceExec = `-- name: SliceExec :exec +UPDATE foo SET name = $slug +WHERE id IN $favourites +` + +type SliceExecParams struct { + Slug string + Favourites []int32 +} + +func (q *Queries) SliceExec(ctx context.Context, arg SliceExecParams) error { + _, err := q.db.ExecContext(ctx, sliceExec, arg.Slug, arg.Favourites) + return err +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/query.sql b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/query.sql new file mode 100644 index 0000000000..97a200ee75 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/query.sql @@ -0,0 +1,25 @@ +/* name: FuncParamIdent :many */ +SELECT name FROM foo +WHERE name = sqlc.arg(slug) + AND id IN sqlc.slice(favourites); + +/* name: FuncParamString :many */ +SELECT name FROM foo +WHERE name = sqlc.arg('slug') + AND id IN sqlc.slice('favourites'); + +/* name: FuncParamSoloArg :many */ +SELECT name FROM foo +WHERE id IN sqlc.slice('favourites'); + +/* name: SliceExec :exec */ +UPDATE foo SET name = sqlc.arg(slug) +WHERE id IN sqlc.slice(favourites); + +/* name: FuncNullable :many */ +SELECT bar FROM foo +WHERE id IN sqlc.slice('favourites'); + +/* name: FuncNullableNot :many */ +SELECT bar FROM foo +WHERE id NOT IN sqlc.slice('favourites'); diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/schema.sql b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..bfb536f297 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (id Int32 NOT NULL, name Utf8 NOT NULL, bar Utf8, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..927aa685d4 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID int32 + Name string + Bar *string +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..9d3d8e8eb5 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,230 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const funcNullable = `-- name: FuncNullable :many +SELECT bar FROM foo +WHERE id IN $favourites +` + +func (q *Queries) FuncNullable(ctx context.Context, favourites []int32, opts ...query.ExecuteOption) ([]*string, error) { + parameters := ydb.ParamsBuilder() + var list = parameters.Param("$favourites").BeginList() + for _, param := range favourites { + list = list.Add().Int32(param) + } + parameters = list.EndList() + result, err := q.db.QueryResultSet(ctx, funcNullable, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var bar *string + if err := row.Scan(&bar); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, bar) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const funcNullableNot = `-- name: FuncNullableNot :many +SELECT bar FROM foo +WHERE id NOT IN $favourites +` + +func (q *Queries) FuncNullableNot(ctx context.Context, favourites []int32, opts ...query.ExecuteOption) ([]*string, error) { + parameters := ydb.ParamsBuilder() + var list = parameters.Param("$favourites").BeginList() + for _, param := range favourites { + list = list.Add().Int32(param) + } + parameters = list.EndList() + result, err := q.db.QueryResultSet(ctx, funcNullableNot, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var bar *string + if err := row.Scan(&bar); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, bar) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const funcParamIdent = `-- name: FuncParamIdent :many +SELECT name FROM foo +WHERE name = $slug + AND id IN $favourites +` + +type FuncParamIdentParams struct { + Slug string + Favourites []int32 +} + +func (q *Queries) FuncParamIdent(ctx context.Context, arg FuncParamIdentParams, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$slug").Text(arg.Slug) + var list = parameters.Param("$favourites").BeginList() + for _, param := range arg.Favourites { + list = list.Add().Int32(param) + } + parameters = list.EndList() + result, err := q.db.QueryResultSet(ctx, funcParamIdent, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var name string + if err := row.Scan(&name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const funcParamSoloArg = `-- name: FuncParamSoloArg :many +SELECT name FROM foo +WHERE id IN $favourites +` + +func (q *Queries) FuncParamSoloArg(ctx context.Context, favourites []int32, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + var list = parameters.Param("$favourites").BeginList() + for _, param := range favourites { + list = list.Add().Int32(param) + } + parameters = list.EndList() + result, err := q.db.QueryResultSet(ctx, funcParamSoloArg, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var name string + if err := row.Scan(&name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const funcParamString = `-- name: FuncParamString :many +SELECT name FROM foo +WHERE name = $slug + AND id IN $favourites +` + +type FuncParamStringParams struct { + Slug string + Favourites []int32 +} + +func (q *Queries) FuncParamString(ctx context.Context, arg FuncParamStringParams, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$slug").Text(arg.Slug) + var list = parameters.Param("$favourites").BeginList() + for _, param := range arg.Favourites { + list = list.Add().Int32(param) + } + parameters = list.EndList() + result, err := q.db.QueryResultSet(ctx, funcParamString, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for row, err := range result.Rows(ctx) { + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var name string + if err := row.Scan(&name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const sliceExec = `-- name: SliceExec :exec +UPDATE foo SET name = $slug +WHERE id IN $favourites +` + +type SliceExecParams struct { + Slug string + Favourites []int32 +} + +func (q *Queries) SliceExec(ctx context.Context, arg SliceExecParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$slug").Text(arg.Slug) + var list = parameters.Param("$favourites").BeginList() + for _, param := range arg.Favourites { + list = list.Add().Int32(param) + } + parameters = list.EndList() + err := q.db.Exec(ctx, sliceExec, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..97a200ee75 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,25 @@ +/* name: FuncParamIdent :many */ +SELECT name FROM foo +WHERE name = sqlc.arg(slug) + AND id IN sqlc.slice(favourites); + +/* name: FuncParamString :many */ +SELECT name FROM foo +WHERE name = sqlc.arg('slug') + AND id IN sqlc.slice('favourites'); + +/* name: FuncParamSoloArg :many */ +SELECT name FROM foo +WHERE id IN sqlc.slice('favourites'); + +/* name: SliceExec :exec */ +UPDATE foo SET name = sqlc.arg(slug) +WHERE id IN sqlc.slice(favourites); + +/* name: FuncNullable :many */ +SELECT bar FROM foo +WHERE id IN sqlc.slice('favourites'); + +/* name: FuncNullableNot :many */ +SELECT bar FROM foo +WHERE id NOT IN sqlc.slice('favourites'); diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..bfb536f297 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (id Int32 NOT NULL, name Utf8 NOT NULL, bar Utf8, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/update_set/ydb/stdlib/go/db.go b/internal/endtoend/testdata/update_set/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/update_set/ydb/stdlib/go/models.go b/internal/endtoend/testdata/update_set/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..ee2c5c5577 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Name string + Slug string +} diff --git a/internal/endtoend/testdata/update_set/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/update_set/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..1bcae2f893 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/stdlib/go/query.sql.go @@ -0,0 +1,24 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const updateSet = `-- name: UpdateSet :exec +UPDATE foo SET name = $name WHERE slug = $slug +` + +type UpdateSetParams struct { + Name string + Slug string +} + +func (q *Queries) UpdateSet(ctx context.Context, arg UpdateSetParams) error { + _, err := q.db.ExecContext(ctx, updateSet, arg.Name, arg.Slug) + return err +} diff --git a/internal/endtoend/testdata/update_set/ydb/stdlib/query.sql b/internal/endtoend/testdata/update_set/ydb/stdlib/query.sql new file mode 100644 index 0000000000..c5180f3e7b --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: UpdateSet :exec +UPDATE foo SET name = $name WHERE slug = $slug; diff --git a/internal/endtoend/testdata/update_set/ydb/stdlib/schema.sql b/internal/endtoend/testdata/update_set/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..70ea3dc428 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + name Utf8 NOT NULL, + slug Utf8 NOT NULL, + PRIMARY KEY (slug) +); diff --git a/internal/endtoend/testdata/update_set/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/update_set/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..ee2c5c5577 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Name string + Slug string +} diff --git a/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..70f64e83b9 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,36 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const updateSet = `-- name: UpdateSet :exec +UPDATE foo SET name = $name WHERE slug = $slug +` + +type UpdateSetParams struct { + Name string + Slug string +} + +func (q *Queries) UpdateSet(ctx context.Context, arg UpdateSetParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").Text(arg.Name) + parameters = parameters.Param("$slug").Text(arg.Slug) + err := q.db.Exec(ctx, updateSet, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..c5180f3e7b --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: UpdateSet :exec +UPDATE foo SET name = $name WHERE slug = $slug; diff --git a/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..70ea3dc428 --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + name Utf8 NOT NULL, + slug Utf8 NOT NULL, + PRIMARY KEY (slug) +); diff --git a/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/update_set/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index fb818a5d5b..c93bff059c 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -680,7 +680,10 @@ func (c *cc) VisitDelete_stmt(n *parser.Delete_stmtContext) interface{} { batch := n.BATCH() != nil tableName := identifier(n.Simple_table_ref().Simple_table_ref_core().GetText()) - rel := &ast.RangeVar{Relname: &tableName} + rel := &ast.RangeVar{ + Relname: &tableName, + Inh: true, + } var where ast.Node if n.WHERE() != nil && n.Expr() != nil { @@ -850,7 +853,10 @@ func (c *cc) VisitUpdate_stmt(n *parser.Update_stmtContext) interface{} { batch := n.BATCH() != nil tableName := identifier(n.Simple_table_ref().Simple_table_ref_core().GetText()) - rel := &ast.RangeVar{Relname: &tableName} + rel := &ast.RangeVar{ + Relname: &tableName, + Inh: true, + } var where ast.Node var setList *ast.List @@ -998,6 +1004,7 @@ func (c *cc) VisitInto_table_stmt(n *parser.Into_table_stmtContext) interface{} tableName := identifier(n.Into_simple_table_ref().Simple_table_ref().Simple_table_ref_core().GetText()) rel := &ast.RangeVar{ Relname: &tableName, + Inh: true, Location: c.pos(n.Into_simple_table_ref().GetStart()), } @@ -1491,8 +1498,15 @@ func (c *cc) VisitResult_column(n *parser.Result_columnContext) interface{} { case n.AS() != nil && n.An_id_or_type() != nil: name := parseAnIdOrType(n.An_id_or_type()) target.Name = &name - case n.An_id_as_compat() != nil: //nolint - // todo: parse as_compat + case n.An_id_as_compat() != nil: + // Handle aliases without AS keyword (compatibility mode) + aliasText := n.An_id_as_compat().GetText() + // Remove quotes if present + if len(aliasText) >= 2 && ((aliasText[0] == '"' && aliasText[len(aliasText)-1] == '"') || + (aliasText[0] == '\'' && aliasText[len(aliasText)-1] == '\'')) { + aliasText = aliasText[1 : len(aliasText)-1] + } + target.Name = &aliasText } target.Val = val return target @@ -1605,11 +1619,24 @@ func (c *cc) VisitNamed_single_source(n *parser.Named_single_sourceContext) inte switch source := base.(type) { case *ast.RangeVar: source.Alias = &ast.Alias{Aliasname: &aliasText} + source.Inh = true case *ast.RangeSubselect: source.Alias = &ast.Alias{Aliasname: &aliasText} + default: + return todo("VisitNamed_single_source", n.An_id()) + } + } else if n.An_id_as_compat() != nil { + aliasText := n.An_id_as_compat().GetText() + + switch source := base.(type) { + case *ast.RangeVar: + source.Alias = &ast.Alias{Aliasname: &aliasText} + source.Inh = true + case *ast.RangeSubselect: + source.Alias = &ast.Alias{Aliasname: &aliasText} + default: + return todo("VisitNamed_single_source", n.An_id_as_compat()) } - } else if n.An_id_as_compat() != nil { //nolint - // todo: parse as_compat } return base } @@ -1623,6 +1650,7 @@ func (c *cc) VisitSingle_source(n *parser.Single_sourceContext) interface{} { tableName := n.Table_ref().GetText() // !! debug !! return &ast.RangeVar{ Relname: &tableName, + Inh: true, Location: c.pos(n.GetStart()), } } @@ -1824,36 +1852,33 @@ func (c *cc) VisitType_name(n *parser.Type_nameContext) interface{} { if decimal := n.Type_name_decimal(); decimal != nil { if integerOrBinds := decimal.AllInteger_or_bind(); len(integerOrBinds) >= 2 { - first, ok := integerOrBinds[0].Accept(c).(ast.Node) - if !ok { - return todo("VisitType_name", decimal.Integer_or_bind(0)) - } - second, ok := integerOrBinds[1].Accept(c).(ast.Node) - if !ok { - return todo("VisitType_name", decimal.Integer_or_bind(1)) - } - name := "decimal" + first := integerOrBinds[0].GetText() + second := integerOrBinds[1].GetText() + name := fmt.Sprintf("Decimal(%s,%s)", first, second) if questionCount > 0 { name = name + "?" } return &ast.TypeName{ Name: name, TypeOid: 0, - Names: &ast.List{ - Items: []ast.Node{ - first, - second, - }, - }, } } } if simple := n.Type_name_simple(); simple != nil { name := simple.GetText() + + if name == "Integer" { + return &ast.TypeName{ + Name: "any", + TypeOid: 0, + } + } + if questionCount > 0 { name = name + "?" } + return &ast.TypeName{ Name: name, TypeOid: 0, @@ -2696,7 +2721,7 @@ func (c *cc) VisitCon_subexpr(n *parser.Con_subexprContext) interface{} { } return &ast.A_Expr{ Name: &ast.List{Items: []ast.Node{&ast.String{Str: op}}}, - Rexpr: operand, + Lexpr: operand, Location: c.pos(n.GetStart()), } } @@ -2804,23 +2829,27 @@ func (c *cc) VisitIn_atom_expr(n *parser.In_atom_exprContext) interface{} { } switch { - case n.An_id_or_type() != nil: - if n.NAMESPACE() != nil { - return NewIdentifier(parseAnIdOrType(n.An_id_or_type()) + "::" + parseIdOrType(n.Id_or_type())) - } - return NewIdentifier(parseAnIdOrType(n.An_id_or_type())) case n.Literal_value() != nil: expr, ok := n.Literal_value().Accept(c).(ast.Node) if !ok { return todo("VisitAtom_expr", n.Literal_value()) } return expr + case n.Bind_parameter() != nil: expr, ok := n.Bind_parameter().Accept(c).(ast.Node) if !ok { return todo("VisitAtom_expr", n.Bind_parameter()) } return expr + + case n.Lambda() != nil: + expr, ok := n.Lambda().Accept(c).(ast.Node) + if !ok { + return todo("VisitAtom_expr", n.Lambda()) + } + return expr + case n.Cast_expr() != nil: expr, ok := n.Cast_expr().Accept(c).(ast.Node) if !ok { @@ -2828,12 +2857,20 @@ func (c *cc) VisitIn_atom_expr(n *parser.In_atom_exprContext) interface{} { } return expr - case n.LPAREN() != nil && n.Select_stmt() != nil && n.RPAREN() != nil: - selectStmt, ok := n.Select_stmt().Accept(c).(ast.Node) - if !ok { - return todo("VisitAtom_expr", n.Select_stmt()) + case n.Case_expr() != nil: + return todo("VisitAtom_expr", n.Case_expr()) + + case n.An_id_or_type() != nil: + if n.NAMESPACE() != nil { + return NewIdentifier(parseAnIdOrType(n.An_id_or_type()) + "::" + parseIdOrType(n.Id_or_type())) } - return selectStmt + return NewIdentifier(parseAnIdOrType(n.An_id_or_type())) + + case n.Value_constructor() != nil: + return todo("VisitAtom_expr", n.Value_constructor()) + + case n.Bitcast_expr() != nil: + return todo("VisitAtom_expr", n.Bitcast_expr()) case n.List_literal() != nil: list, ok := n.List_literal().Accept(c).(ast.Node) @@ -2842,6 +2879,12 @@ func (c *cc) VisitIn_atom_expr(n *parser.In_atom_exprContext) interface{} { } return list + case n.Dict_literal() != nil: + return todo("VisitAtom_expr", n.Dict_literal()) + + case n.Struct_literal() != nil: + return todo("VisitAtom_expr", n.Struct_literal()) + // TODO: check other cases default: return todo("VisitAtom_expr", n) @@ -3200,7 +3243,11 @@ func (c *cc) VisitAtom_expr(n *parser.Atom_exprContext) interface{} { return expr case n.Exists_expr() != nil: - return todo("VisitAtom_expr", n.Exists_expr()) + expr, ok := n.Exists_expr().Accept(c).(ast.Node) + if !ok { + return todo("VisitAtom_expr", n.Exists_expr()) + } + return expr case n.Case_expr() != nil: return todo("VisitAtom_expr", n.Case_expr()) @@ -3262,6 +3309,38 @@ func (c *cc) VisitCast_expr(n *parser.Cast_exprContext) interface{} { } } +func (c *cc) VisitExists_expr(n *parser.Exists_exprContext) interface{} { + if n == nil || n.EXISTS() == nil || n.LPAREN() == nil || n.RPAREN() == nil || (n.Select_stmt() == nil && n.Values_stmt() == nil) { + return todo("VisitExists_expr", n) + } + + exists := &ast.SubLink{ + Xpr: &ast.TODO{}, + SubLinkType: ast.EXISTS_SUBLINK, + Location: c.pos(n.GetStart()), + } + + switch { + case n.Select_stmt() != nil: + Subselect, ok := n.Select_stmt().Accept(c).(ast.Node) + if !ok { + return todo("VisitExists_expr", n.Select_stmt()) + } + exists.Subselect = Subselect + case n.Values_stmt() != nil: + Subselect, ok := n.Values_stmt().Accept(c).(ast.Node) + if !ok { + return todo("VisitExists_expr", n.Values_stmt()) + } + exists.Subselect = Subselect + + default: + return todo("VisitExists_expr", n) + } + + return exists +} + func (c *cc) VisitList_literal(n *parser.List_literalContext) interface{} { if n == nil || n.LBRACE_SQUARE() == nil || n.RBRACE_SQUARE() == nil || n.Expr_list() == nil { return todo("VisitList_literal", n) From 0a5a8dfc733cd24690b3f667be76da6e1b35d952 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 15 Oct 2025 15:38:59 +0300 Subject: [PATCH 02/26] Fixed go.mod && go.sum --- internal/endtoend/testdata/go.mod | 20 ++- internal/endtoend/testdata/go.sum | 124 ++++++++++++++++++ .../params_location/ydb/stdlib/query.sql | 2 + .../params_location/ydb/stdlib/schema.sql | 2 + .../params_location/ydb/stdlib/sqlc.json | 2 + .../params_location/ydb/ydb-go-sdk/query.sql | 2 + .../params_location/ydb/ydb-go-sdk/schema.sql | 2 + .../params_location/ydb/ydb-go-sdk/sqlc.json | 2 + 8 files changed, 152 insertions(+), 4 deletions(-) diff --git a/internal/endtoend/testdata/go.mod b/internal/endtoend/testdata/go.mod index e2a7ea704b..e7f208d29e 100644 --- a/internal/endtoend/testdata/go.mod +++ b/internal/endtoend/testdata/go.mod @@ -1,11 +1,13 @@ module github.com/sqlc-dev/sqlc/endtoend -go 1.18 +go 1.22.5 + +toolchain go1.24.6 require ( github.com/go-sql-driver/mysql v1.7.0 github.com/gofrs/uuid v4.0.0+incompatible - github.com/google/uuid v1.3.0 + github.com/google/uuid v1.6.0 github.com/hexon/mysqltsv v0.1.0 github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853 github.com/jackc/pgtype v1.6.2 @@ -20,16 +22,26 @@ require ( require ( github.com/friendsofgo/errors v0.9.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgproto3/v2 v2.0.1 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jonboulle/clockwork v0.5.0 // indirect github.com/pgvector/pgvector-go v0.1.1 // indirect github.com/volatiletech/inflect v0.0.1 // indirect github.com/volatiletech/randomize v0.0.1 // indirect github.com/volatiletech/strmangle v0.0.1 // indirect - golang.org/x/crypto v0.9.0 // indirect - golang.org/x/text v0.9.0 // indirect + github.com/ydb-platform/ydb-go-genproto v0.0.0-20250911135631-b3beddd517d9 // indirect + github.com/ydb-platform/ydb-go-sdk/v3 v3.117.1 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.22.0 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect + google.golang.org/grpc v1.69.4 // indirect + google.golang.org/protobuf v1.35.1 // indirect ) diff --git a/internal/endtoend/testdata/go.sum b/internal/endtoend/testdata/go.sum index a5819e0a3b..ee1a538083 100644 --- a/internal/endtoend/testdata/go.sum +++ b/internal/endtoend/testdata/go.sum @@ -1,4 +1,16 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -7,17 +19,52 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hexon/mysqltsv v0.1.0 h1:48wYQlsPH8ZEkKAVCdsOYzMYAlEoevw8ZWD8rqYPdlg= github.com/hexon/mysqltsv v0.1.0/go.mod h1:p3vPBkpxebjHWF1bWKYNcXx5pFu+yAG89QZQEKSvVrY= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= @@ -74,6 +121,8 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I= +github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -101,6 +150,8 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= @@ -132,7 +183,12 @@ github.com/volatiletech/randomize v0.0.1 h1:eE5yajattWqTB2/eN8df4dw+8jwAzBtbdo5s github.com/volatiletech/randomize v0.0.1/go.mod h1:GN3U0QYqfZ9FOJ67bzax1cqZ5q2xuj2mXrXBjWaRTlY= github.com/volatiletech/strmangle v0.0.1 h1:UKQoHmY6be/R3tSvD2nQYrH41k43OJkidwEiC74KIzk= github.com/volatiletech/strmangle v0.0.1/go.mod h1:F6RA6IkB5vq0yTG4GQ0UsbbRcl3ni9P76i+JrTBKFFg= +github.com/ydb-platform/ydb-go-genproto v0.0.0-20250911135631-b3beddd517d9 h1:SKqSRP6/ocY2Z4twOqKEKxpmawVTHTvQiom7hrU6jt0= +github.com/ydb-platform/ydb-go-genproto v0.0.0-20250911135631-b3beddd517d9/go.mod h1:Er+FePu1dNUieD+XTMDduGpQuCPssK5Q4BjF+IIXJ3I= +github.com/ydb-platform/ydb-go-sdk/v3 v3.117.1 h1:SgYE74T+fo40xvJszWhK8IGS5GNjLcbYPzYL+6wsLGw= +github.com/ydb-platform/ydb-go-sdk/v3 v3.117.1/go.mod h1:IgDKkfYE4FyJilTRe2BTtaurb2EWdMIsQbO02UW3wKM= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -147,18 +203,40 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -169,17 +247,28 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -191,6 +280,38 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IV golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= +google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -198,6 +319,9 @@ gopkg.in/guregu/null.v4 v4.0.0 h1:1Wm3S1WEA2I26Kq+6vcW+w0gcDo44YKYD7YIEJNHDjg= gopkg.in/guregu/null.v4 v4.0.0/go.mod h1:YoQhUrADuG3i9WqesrCmpNRwm1ypAgSHYqoOcTu/JrI= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql b/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql index 1ba7087f2f..60cddb5501 100644 --- a/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql @@ -41,3 +41,5 @@ LIMIT $limit; + + diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql b/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql index 8be1d78ba1..1f7806987c 100644 --- a/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql @@ -23,3 +23,5 @@ CREATE TABLE orders ( + + diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json index 10df8ab73b..c6dca2b97f 100644 --- a/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json @@ -20,3 +20,5 @@ + + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql index 1ba7087f2f..60cddb5501 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql @@ -41,3 +41,5 @@ LIMIT $limit; + + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql index 8be1d78ba1..1f7806987c 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql @@ -23,3 +23,5 @@ CREATE TABLE orders ( + + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json index fd247d52ea..9a1dcaf470 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json @@ -21,3 +21,5 @@ + + From 44a76e72568f8f0a2f645047efe72bf9e445e501 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 15 Oct 2025 15:41:50 +0300 Subject: [PATCH 03/26] Umolyau zarabotai pg --- internal/endtoend/testdata/go.mod | 4 +- internal/endtoend/testdata/go.sum | 71 ++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/internal/endtoend/testdata/go.mod b/internal/endtoend/testdata/go.mod index e7f208d29e..f42403edb9 100644 --- a/internal/endtoend/testdata/go.mod +++ b/internal/endtoend/testdata/go.mod @@ -14,9 +14,11 @@ require ( github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904 github.com/jackc/pgx/v5 v5.4.3 github.com/lib/pq v1.9.0 + github.com/pgvector/pgvector-go v0.1.1 github.com/sqlc-dev/pqtype v0.2.0 github.com/sqlc-dev/sqlc-testdata v1.0.0 github.com/volatiletech/null/v8 v8.1.2 + github.com/ydb-platform/ydb-go-sdk/v3 v3.117.1 gopkg.in/guregu/null.v4 v4.0.0 ) @@ -29,12 +31,10 @@ require ( github.com/jackc/pgproto3/v2 v2.0.1 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect github.com/jonboulle/clockwork v0.5.0 // indirect - github.com/pgvector/pgvector-go v0.1.1 // indirect github.com/volatiletech/inflect v0.0.1 // indirect github.com/volatiletech/randomize v0.0.1 // indirect github.com/volatiletech/strmangle v0.0.1 // indirect github.com/ydb-platform/ydb-go-genproto v0.0.0-20250911135631-b3beddd517d9 // indirect - github.com/ydb-platform/ydb-go-sdk/v3 v3.117.1 // indirect golang.org/x/crypto v0.33.0 // indirect golang.org/x/net v0.35.0 // indirect golang.org/x/sync v0.11.0 // indirect diff --git a/internal/endtoend/testdata/go.sum b/internal/endtoend/testdata/go.sum index ee1a538083..8b6231f9b5 100644 --- a/internal/endtoend/testdata/go.sum +++ b/internal/endtoend/testdata/go.sum @@ -28,6 +28,14 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-pg/pg/v10 v10.11.0 h1:CMKJqLgTrfpE/aOVeLdybezR2om071Vh38OLZjsyMI0= +github.com/go-pg/pg/v10 v10.11.0/go.mod h1:4BpHRoxE61y4Onpof3x1a2SQvi9c+q1dJnrNdMjsroA= +github.com/go-pg/zerochecker v0.2.0 h1:pp7f72c3DobMWOb2ErtZsnrPaSvHd2W4o9//8HtF4mU= +github.com/go-pg/zerochecker v0.2.0/go.mod h1:NJZ4wKL0NmTtz0GKCoJ8kym6Xn/EQzXRl2OnAe7MmDo= github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -51,6 +59,8 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -58,10 +68,10 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -92,8 +102,6 @@ github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1: github.com/jackc/pgproto3/v2 v2.0.1 h1:Rdjp4NFjwHnEslx2b66FfCI2S0LhO4itac3hXz6WX9M= github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= @@ -111,16 +119,14 @@ github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXg github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o= github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904 h1:SdGWuGg+Cpxq6Z+ArXt0nafaKeTvtKGEoW+yvycspUU= github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg= -github.com/jackc/pgx/v5 v5.0.1 h1:JZu9othr7l8so2JMDAGeDUMXqERAuZpovyfl4H50tdg= -github.com/jackc/pgx/v5 v5.0.1/go.mod h1:JBbvW3Hdw77jKl9uJrEDATUZIFM2VFPzRq4RWIhkF4o= -github.com/jackc/pgx/v5 v5.3.1 h1:Fcr8QJ1ZeLi5zsPZqQeUZhNhxfkkKBOgJuYkJHoBOtU= -github.com/jackc/pgx/v5 v5.3.1/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I= github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -151,6 +157,8 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rekby/fixenv v0.6.1 h1:jUFiSPpajT4WY2cYuc++7Y1zWrnCxnovGCIX72PZniM= +github.com/rekby/fixenv v0.6.1/go.mod h1:/b5LRc06BYJtslRtHKxsPWFT/ySpHV+rWvzTg+XWk4c= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -174,7 +182,24 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= +github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= +github.com/uptrace/bun v1.1.12 h1:sOjDVHxNTuM6dNGaba0wUuz7KvDE1BmNu9Gqs2gJSXQ= +github.com/uptrace/bun v1.1.12/go.mod h1:NPG6JGULBeQ9IU6yHp7YGELRa5Agmd7ATZdz4tGZ6z0= +github.com/uptrace/bun/dialect/pgdialect v1.1.12 h1:m/CM1UfOkoBTglGO5CUTKnIKKOApOYxkcP2qn0F9tJk= +github.com/uptrace/bun/dialect/pgdialect v1.1.12/go.mod h1:Ij6WIxQILxLlL2frUBxUBOZJtLElD2QQNDcu/PWDHTc= +github.com/uptrace/bun/driver/pgdriver v1.1.12 h1:3rRWB1GK0psTJrHwxzNfEij2MLibggiLdTqjTtfHc1w= +github.com/uptrace/bun/driver/pgdriver v1.1.12/go.mod h1:ssYUP+qwSEgeDDS1xm2XBip9el1y9Mi5mTAvLoiADLM= +github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94= +github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ= +github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= +github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/volatiletech/inflect v0.0.1 h1:2a6FcMQyhmPZcLa+uet3VJ8gLn/9svWhJxJYwvE8KsU= github.com/volatiletech/inflect v0.0.1/go.mod h1:IBti31tG6phkHitLlr5j7shC5SOo//x0AjDzaJU1PLA= github.com/volatiletech/null/v8 v8.1.2 h1:kiTiX1PpwvuugKwfvUNX/SU/5A2KGZMXfGD0DUHdKEI= @@ -188,10 +213,22 @@ github.com/ydb-platform/ydb-go-genproto v0.0.0-20250911135631-b3beddd517d9/go.mo github.com/ydb-platform/ydb-go-sdk/v3 v3.117.1 h1:SgYE74T+fo40xvJszWhK8IGS5GNjLcbYPzYL+6wsLGw= github.com/ydb-platform/ydb-go-sdk/v3 v3.117.1/go.mod h1:IgDKkfYE4FyJilTRe2BTtaurb2EWdMIsQbO02UW3wKM= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= @@ -204,11 +241,7 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -255,12 +288,6 @@ golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -276,7 +303,6 @@ golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -322,6 +348,9 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +mellium.im/sasl v0.3.1 h1:wE0LW6g7U83vhvxjC1IY8DnXM+EU095yeo8XClvCdfo= +mellium.im/sasl v0.3.1/go.mod h1:xm59PUYpZHhgQ9ZqoJ5QaCqzWMi8IeS49dhp6plPCzw= From 1fc9aac6cf09d085370812562c6806572db90d2a Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 15 Oct 2025 16:36:33 +0300 Subject: [PATCH 04/26] Fixed range result.Rows(ctx) issue (go<1.23) --- examples/authors/ydb/query.sql.go | 8 +++- internal/codegen/golang/imports.go | 10 ++++- .../templates/ydb-go-sdk/queryCode.tmpl | 6 ++- .../array_in/ydb/ydb-go-sdk/go/query.sql.go | 8 +++- .../params_duplicate/ydb/go/query.sql.go | 20 ++++++++-- .../params_location/ydb/stdlib/schema.sql | 1 + .../params_location/ydb/stdlib/sqlc.json | 1 + .../ydb/ydb-go-sdk/go/query.sql.go | 38 ++++++++++++++++--- .../params_location/ydb/ydb-go-sdk/query.sql | 1 + .../params_location/ydb/ydb-go-sdk/schema.sql | 1 + .../params_location/ydb/ydb-go-sdk/sqlc.json | 1 + .../params_two/ydb/ydb-go-sdk/go/query.sql.go | 8 +++- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +++- .../ydb/ydb-go-sdk/go/query.sql.go | 14 ++++++- .../ydb/ydb-go-sdk/go/query.sql.go | 14 ++++++- .../sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go | 32 +++++++++++++--- 16 files changed, 147 insertions(+), 24 deletions(-) diff --git a/examples/authors/ydb/query.sql.go b/examples/authors/ydb/query.sql.go index 6d3c6743a9..5d2b0f9ec2 100644 --- a/examples/authors/ydb/query.sql.go +++ b/examples/authors/ydb/query.sql.go @@ -7,6 +7,8 @@ package authors import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -97,7 +99,11 @@ func (q *Queries) ListAuthors(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []Author - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/codegen/golang/imports.go b/internal/codegen/golang/imports.go index 3a20a57e97..5f9e587013 100644 --- a/internal/codegen/golang/imports.go +++ b/internal/codegen/golang/imports.go @@ -417,10 +417,13 @@ func (i *importer) queryImports(filename string) fileImports { if sqlpkg.IsYDBGoSDK() { hasParams := false + hasManyQueries := false for _, q := range gq { if !q.Arg.isEmpty() { hasParams = true - break + } + if q.Cmd == metadata.CmdMany { + hasManyQueries = true } } if hasParams { @@ -428,6 +431,11 @@ func (i *importer) queryImports(filename string) fileImports { } pkg[ImportSpec{Path: "github.com/ydb-platform/ydb-go-sdk/v3/query"}] = struct{}{} pkg[ImportSpec{Path: "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors"}] = struct{}{} + + if hasManyQueries { + std["errors"] = struct{}{} + std["io"] = struct{}{} + } } if i.Options.WrapErrors { diff --git a/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl b/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl index 9c60ded05f..9a36f789cc 100644 --- a/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl +++ b/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl @@ -107,7 +107,11 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{if $.EmitMethodsWithDBA {{else}} var items []{{.Ret.DefineType}} {{end -}} - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { {{- if $.WrapErrors}} return nil, xerrors.WithStackTrace(fmt.Errorf("query {{.MethodName}}: %w", err)) diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go index e19eb4c476..03c23d23d3 100644 --- a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -35,7 +37,11 @@ func (q *Queries) In(ctx context.Context, arg InParams, opts ...query.ExecuteOpt return nil, xerrors.WithStackTrace(err) } var items []int32 - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go b/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go index cde028cafc..74299f3dab 100644 --- a/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go +++ b/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -28,7 +30,11 @@ func (q *Queries) SelectUserByID(ctx context.Context, id int64, opts ...query.Ex return nil, xerrors.WithStackTrace(err) } var items []*string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -61,7 +67,11 @@ func (q *Queries) SelectUserByName(ctx context.Context, name *string, opts ...qu return nil, xerrors.WithStackTrace(err) } var items []*string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -92,7 +102,11 @@ func (q *Queries) SelectUserQuestion(ctx context.Context, question int64, opts . return nil, xerrors.WithStackTrace(err) } var items []*string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql b/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql index 1f7806987c..49e4adf991 100644 --- a/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql @@ -25,3 +25,4 @@ CREATE TABLE orders ( + diff --git a/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json index c6dca2b97f..17d4acefc5 100644 --- a/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json @@ -22,3 +22,4 @@ + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go index 932001ec89..e5f2158c2f 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -82,7 +84,11 @@ func (q *Queries) LimitSQLCArg(ctx context.Context, limit uint64, opts ...query. return nil, xerrors.WithStackTrace(err) } var items []LimitSQLCArgRow - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -125,7 +131,11 @@ func (q *Queries) ListUserOrders(ctx context.Context, minPrice *types.Decimal, o return nil, xerrors.WithStackTrace(err) } var items []ListUserOrdersRow - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -164,7 +174,11 @@ func (q *Queries) ListUserParenExpr(ctx context.Context, arg ListUserParenExprPa return nil, xerrors.WithStackTrace(err) } var items []User - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -211,7 +225,11 @@ func (q *Queries) ListUsersByFamily(ctx context.Context, arg ListUsersByFamilyPa return nil, xerrors.WithStackTrace(err) } var items []ListUsersByFamilyRow - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -247,7 +265,11 @@ func (q *Queries) ListUsersByID(ctx context.Context, id int64, opts ...query.Exe return nil, xerrors.WithStackTrace(err) } var items []ListUsersByIDRow - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -282,7 +304,11 @@ func (q *Queries) ListUsersWithLimit(ctx context.Context, limit uint64, opts ... return nil, xerrors.WithStackTrace(err) } var items []ListUsersWithLimitRow - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql index 60cddb5501..36e036a6a2 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql @@ -43,3 +43,4 @@ LIMIT $limit; + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql index 1f7806987c..49e4adf991 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql @@ -25,3 +25,4 @@ CREATE TABLE orders ( + diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json index 9a1dcaf470..9cf331d753 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json @@ -23,3 +23,4 @@ + diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go index 1074b46f9d..8ab13b0b61 100644 --- a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -34,7 +36,11 @@ func (q *Queries) FooByAandB(ctx context.Context, arg FooByAandBParams, opts ... return nil, xerrors.WithStackTrace(err) } var items []Foo - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go index 72977df92e..d7dd757a20 100644 --- a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -23,7 +25,11 @@ func (q *Queries) GetBars(ctx context.Context, opts ...query.ExecuteOption) ([]B return nil, xerrors.WithStackTrace(err) } var items []Bar - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go index ec42f11fb6..f1617d5335 100644 --- a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -28,7 +30,11 @@ func (q *Queries) FooLimit(ctx context.Context, limit uint64, opts ...query.Exec return nil, xerrors.WithStackTrace(err) } var items []string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -65,7 +71,11 @@ func (q *Queries) FooLimitOffset(ctx context.Context, arg FooLimitOffsetParams, return nil, xerrors.WithStackTrace(err) } var items []string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go index a9246a7ea3..24789ce06e 100644 --- a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -22,7 +24,11 @@ func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]Us return nil, xerrors.WithStackTrace(err) } var items []User - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -53,7 +59,11 @@ func (q *Queries) GetIDAll(ctx context.Context, opts ...query.ExecuteOption) ([] return nil, xerrors.WithStackTrace(err) } var items []int32 - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go index 9d3d8e8eb5..64e9be9b75 100644 --- a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + "errors" + "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -32,7 +34,11 @@ func (q *Queries) FuncNullable(ctx context.Context, favourites []int32, opts ... return nil, xerrors.WithStackTrace(err) } var items []*string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -67,7 +73,11 @@ func (q *Queries) FuncNullableNot(ctx context.Context, favourites []int32, opts return nil, xerrors.WithStackTrace(err) } var items []*string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -109,7 +119,11 @@ func (q *Queries) FuncParamIdent(ctx context.Context, arg FuncParamIdentParams, return nil, xerrors.WithStackTrace(err) } var items []string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -144,7 +158,11 @@ func (q *Queries) FuncParamSoloArg(ctx context.Context, favourites []int32, opts return nil, xerrors.WithStackTrace(err) } var items []string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -186,7 +204,11 @@ func (q *Queries) FuncParamString(ctx context.Context, arg FuncParamStringParams return nil, xerrors.WithStackTrace(err) } var items []string - for row, err := range result.Rows(ctx) { + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } if err != nil { return nil, xerrors.WithStackTrace(err) } From 673969c01b0fe8654bb008f94e369ad9fe261892 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 15 Oct 2025 16:47:23 +0300 Subject: [PATCH 05/26] Fixed catalog tests after rewriting some internal logic in convert.go --- .../ydb/catalog_tests/create_table_test.go | 8 +--- .../engine/ydb/catalog_tests/delete_test.go | 8 ++-- .../engine/ydb/catalog_tests/insert_test.go | 42 +++++++++---------- .../engine/ydb/catalog_tests/select_test.go | 11 ++++- .../engine/ydb/catalog_tests/update_test.go | 16 +++---- 5 files changed, 44 insertions(+), 41 deletions(-) diff --git a/internal/engine/ydb/catalog_tests/create_table_test.go b/internal/engine/ydb/catalog_tests/create_table_test.go index 7761118927..ec22ced8fe 100644 --- a/internal/engine/ydb/catalog_tests/create_table_test.go +++ b/internal/engine/ydb/catalog_tests/create_table_test.go @@ -106,13 +106,7 @@ func TestCreateTable(t *testing.T) { { Name: "amount", Type: ast.TypeName{ - Name: "decimal", - Names: &ast.List{ - Items: []ast.Node{ - &ast.Integer{Ival: 22}, - &ast.Integer{Ival: 9}, - }, - }, + Name: "Decimal(22,9)", }, }, { diff --git a/internal/engine/ydb/catalog_tests/delete_test.go b/internal/engine/ydb/catalog_tests/delete_test.go index 1885deb9ce..914c92d0ef 100644 --- a/internal/engine/ydb/catalog_tests/delete_test.go +++ b/internal/engine/ydb/catalog_tests/delete_test.go @@ -22,7 +22,7 @@ func TestDelete(t *testing.T) { Stmt: &ast.DeleteStmt{ Relations: &ast.List{ Items: []ast.Node{ - &ast.RangeVar{Relname: strPtr("users")}, + &ast.RangeVar{Relname: strPtr("users"), Inh: true}, }, }, WhereClause: &ast.A_Expr{ @@ -60,7 +60,7 @@ func TestDelete(t *testing.T) { Stmt: &ast.DeleteStmt{ Relations: &ast.List{ Items: []ast.Node{ - &ast.RangeVar{Relname: strPtr("users")}, + &ast.RangeVar{Relname: strPtr("users"), Inh: true}, }, }, WhereClause: &ast.A_Expr{ @@ -94,7 +94,7 @@ func TestDelete(t *testing.T) { expected: &ast.Statement{ Raw: &ast.RawStmt{ Stmt: &ast.DeleteStmt{ - Relations: &ast.List{Items: []ast.Node{&ast.RangeVar{Relname: strPtr("users")}}}, + Relations: &ast.List{Items: []ast.Node{&ast.RangeVar{Relname: strPtr("users"), Inh: true}}}, OnCols: &ast.List{ Items: []ast.Node{ &ast.ResTarget{Name: strPtr("id")}, @@ -143,7 +143,7 @@ func TestDelete(t *testing.T) { expected: &ast.Statement{ Raw: &ast.RawStmt{ Stmt: &ast.DeleteStmt{ - Relations: &ast.List{Items: []ast.Node{&ast.RangeVar{Relname: strPtr("users")}}}, + Relations: &ast.List{Items: []ast.Node{&ast.RangeVar{Relname: strPtr("users"), Inh: true}}}, OnCols: &ast.List{ Items: []ast.Node{ &ast.ResTarget{Name: strPtr("id")}, diff --git a/internal/engine/ydb/catalog_tests/insert_test.go b/internal/engine/ydb/catalog_tests/insert_test.go index c60d0920da..d990576cdc 100644 --- a/internal/engine/ydb/catalog_tests/insert_test.go +++ b/internal/engine/ydb/catalog_tests/insert_test.go @@ -20,7 +20,7 @@ func TestInsert(t *testing.T) { expected: &ast.Statement{ Raw: &ast.RawStmt{ Stmt: &ast.InsertStmt{ - Relation: &ast.RangeVar{Relname: strPtr("users")}, + Relation: &ast.RangeVar{Relname: strPtr("users"), Inh: true}, Cols: &ast.List{ Items: []ast.Node{ &ast.ResTarget{Name: strPtr("id")}, @@ -39,11 +39,11 @@ func TestInsert(t *testing.T) { }, }, }, - TargetList: &ast.List{}, - FromClause: &ast.List{}, - GroupClause: &ast.List{}, - WindowClause: &ast.List{}, - SortClause: &ast.List{}, + TargetList: &ast.List{}, + FromClause: &ast.List{}, + GroupClause: &ast.List{}, + WindowClause: &ast.List{}, + SortClause: &ast.List{}, LockingClause: &ast.List{}, }, OnConflictClause: &ast.OnConflictClause{}, @@ -66,7 +66,7 @@ func TestInsert(t *testing.T) { expected: &ast.Statement{ Raw: &ast.RawStmt{ Stmt: &ast.InsertStmt{ - Relation: &ast.RangeVar{Relname: strPtr("users")}, + Relation: &ast.RangeVar{Relname: strPtr("users"), Inh: true}, Cols: &ast.List{ Items: []ast.Node{ &ast.ResTarget{Name: strPtr("id")}, @@ -83,11 +83,11 @@ func TestInsert(t *testing.T) { }, }, }, - TargetList: &ast.List{}, - FromClause: &ast.List{}, - GroupClause: &ast.List{}, - WindowClause: &ast.List{}, - SortClause: &ast.List{}, + TargetList: &ast.List{}, + FromClause: &ast.List{}, + GroupClause: &ast.List{}, + WindowClause: &ast.List{}, + SortClause: &ast.List{}, LockingClause: &ast.List{}, }, OnConflictClause: &ast.OnConflictClause{ @@ -114,17 +114,17 @@ func TestInsert(t *testing.T) { expected: &ast.Statement{ Raw: &ast.RawStmt{ Stmt: &ast.InsertStmt{ - Relation: &ast.RangeVar{Relname: strPtr("users")}, - Cols: &ast.List{Items: []ast.Node{&ast.ResTarget{Name: strPtr("id")}}}, + Relation: &ast.RangeVar{Relname: strPtr("users"), Inh: true}, + Cols: &ast.List{Items: []ast.Node{&ast.ResTarget{Name: strPtr("id")}}}, SelectStmt: &ast.SelectStmt{ DistinctClause: &ast.List{}, - ValuesLists: &ast.List{Items: []ast.Node{&ast.List{Items: []ast.Node{&ast.A_Const{Val: &ast.Integer{Ival: 4}}}}}}, - TargetList: &ast.List{}, - FromClause: &ast.List{}, - GroupClause: &ast.List{}, - WindowClause: &ast.List{}, - SortClause: &ast.List{}, - LockingClause: &ast.List{}, + ValuesLists: &ast.List{Items: []ast.Node{&ast.List{Items: []ast.Node{&ast.A_Const{Val: &ast.Integer{Ival: 4}}}}}}, + TargetList: &ast.List{}, + FromClause: &ast.List{}, + GroupClause: &ast.List{}, + WindowClause: &ast.List{}, + SortClause: &ast.List{}, + LockingClause: &ast.List{}, }, OnConflictClause: &ast.OnConflictClause{Action: ast.OnConflictAction_UPSERT}, ReturningList: &ast.List{Items: []ast.Node{&ast.ResTarget{Val: &ast.ColumnRef{Fields: &ast.List{Items: []ast.Node{&ast.String{Str: "id"}}}}, Indirection: &ast.List{}}}}, diff --git a/internal/engine/ydb/catalog_tests/select_test.go b/internal/engine/ydb/catalog_tests/select_test.go index f01171f12a..da3adab71b 100644 --- a/internal/engine/ydb/catalog_tests/select_test.go +++ b/internal/engine/ydb/catalog_tests/select_test.go @@ -238,6 +238,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, @@ -274,6 +275,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, @@ -311,6 +313,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("table"), + Inh: true, }, }, }, @@ -365,6 +368,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, @@ -409,6 +413,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, @@ -516,6 +521,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, @@ -565,6 +571,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, @@ -606,10 +613,11 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, - GroupClause: &ast.List{ + GroupClause: &ast.List{ Items: []ast.Node{ &ast.ColumnRef{ Fields: &ast.List{ @@ -685,6 +693,7 @@ func TestSelect(t *testing.T) { Items: []ast.Node{ &ast.RangeVar{ Relname: strPtr("users"), + Inh: true, }, }, }, diff --git a/internal/engine/ydb/catalog_tests/update_test.go b/internal/engine/ydb/catalog_tests/update_test.go index b7ebeb3d6a..b5e96d9dbe 100644 --- a/internal/engine/ydb/catalog_tests/update_test.go +++ b/internal/engine/ydb/catalog_tests/update_test.go @@ -22,7 +22,7 @@ func TestUpdate(t *testing.T) { Stmt: &ast.UpdateStmt{ Relations: &ast.List{ Items: []ast.Node{ - &ast.RangeVar{Relname: strPtr("users")}, + &ast.RangeVar{Relname: strPtr("users"), Inh: true}, }, }, TargetList: &ast.List{ @@ -70,7 +70,7 @@ func TestUpdate(t *testing.T) { Stmt: &ast.UpdateStmt{ Relations: &ast.List{ Items: []ast.Node{ - &ast.RangeVar{Relname: strPtr("users")}, + &ast.RangeVar{Relname: strPtr("users"), Inh: true}, }, }, TargetList: &ast.List{ @@ -114,7 +114,7 @@ func TestUpdate(t *testing.T) { expected: &ast.Statement{ Raw: &ast.RawStmt{ Stmt: &ast.UpdateStmt{ - Relations: &ast.List{Items: []ast.Node{&ast.RangeVar{Relname: strPtr("users")}}}, + Relations: &ast.List{Items: []ast.Node{&ast.RangeVar{Relname: strPtr("users"), Inh: true}}}, OnCols: &ast.List{ Items: []ast.Node{ &ast.ResTarget{Name: strPtr("id")}, @@ -131,11 +131,11 @@ func TestUpdate(t *testing.T) { }, }, }, - FromClause: &ast.List{}, - TargetList: &ast.List{}, - GroupClause: &ast.List{}, - WindowClause: &ast.List{}, - SortClause: &ast.List{}, + FromClause: &ast.List{}, + TargetList: &ast.List{}, + GroupClause: &ast.List{}, + WindowClause: &ast.List{}, + SortClause: &ast.List{}, LockingClause: &ast.List{}, }, ReturningList: &ast.List{ From 5434c17a16c35c3a880d6bccb55cce4964566df3 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 15 Oct 2025 16:59:08 +0300 Subject: [PATCH 06/26] fixed some new tests --- .../testdata/alias/ydb/stdlib/go/query.sql.go | 6 +++--- .../endtoend/testdata/alias/ydb/stdlib/query.sql | 7 +++++-- .../testdata/alias/ydb/ydb-go-sdk/go/query.sql.go | 10 +++------- internal/endtoend/testdata/delete_from/ydb/sqlc.json | 12 ------------ .../select_exists/ydb/stdlib/go/query.sql.go | 10 +++++----- 5 files changed, 16 insertions(+), 29 deletions(-) delete mode 100644 internal/endtoend/testdata/delete_from/ydb/sqlc.json diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go index 45be158460..b3cd2a53c8 100644 --- a/internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/alias/ydb/stdlib/go/query.sql.go @@ -11,11 +11,11 @@ import ( const aliasBar = `-- name: AliasBar :one SELECT id FROM bar AS b -WHERE b.id = $p0 +WHERE b.id = $i ` -func (q *Queries) AliasBar(ctx context.Context, p0 int32) (int32, error) { - row := q.db.QueryRowContext(ctx, aliasBar, p0) +func (q *Queries) AliasBar(ctx context.Context, i int32) (int32, error) { + row := q.db.QueryRowContext(ctx, aliasBar, i) var id int32 err := row.Scan(&id) return id, err diff --git a/internal/endtoend/testdata/alias/ydb/stdlib/query.sql b/internal/endtoend/testdata/alias/ydb/stdlib/query.sql index e2465d0a37..e8d221cefe 100644 --- a/internal/endtoend/testdata/alias/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/alias/ydb/stdlib/query.sql @@ -1,3 +1,6 @@ -- name: AliasBar :one -SELECT * FROM bar -WHERE b.id = $p0; +SELECT * FROM bar AS b +WHERE b.id = $i; + + + diff --git a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go index 356dfbaf5c..a7f0d9dc2c 100644 --- a/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/alias/ydb/ydb-go-sdk/go/query.sql.go @@ -19,14 +19,10 @@ WHERE b.id = $i ` func (q *Queries) AliasBar(ctx context.Context, i int32, opts ...query.ExecuteOption) (int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$i").Int32(i) row, err := q.db.QueryRow(ctx, aliasBar, - append(opts, - query.WithParameters( - ydb.ParamsBuilder(). - Param("$i").Int32(i). - Build(), - ), - )..., + append(opts, query.WithParameters(parameters.Build()))..., ) var id int32 if err != nil { diff --git a/internal/endtoend/testdata/delete_from/ydb/sqlc.json b/internal/endtoend/testdata/delete_from/ydb/sqlc.json deleted file mode 100644 index 257bc9d140..0000000000 --- a/internal/endtoend/testdata/delete_from/ydb/sqlc.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "version": "1", - "packages": [ - { - "path": "go", - "engine": "ydb", - "name": "querytest", - "schema": "schema.sql", - "queries": "query.sql" - } - ] -} diff --git a/internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go index ef7d944f5f..93a3d6b98d 100644 --- a/internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/select_exists/ydb/stdlib/go/query.sql.go @@ -21,9 +21,9 @@ SELECT ) ` -func (q *Queries) BarExists(ctx context.Context) (interface{}, error) { - row := q.db.QueryRowContext(ctx, barExists) - var column_1 interface{} - err := row.Scan(&column_1) - return column_1, err +func (q *Queries) BarExists(ctx context.Context, id int32) (bool, error) { + row := q.db.QueryRowContext(ctx, barExists, id) + var exists bool + err := row.Scan(&exists) + return exists, err } From 1f324b4f84fcf0985f5e6f835cb0ad6f20c27fe4 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Thu, 16 Oct 2025 15:18:12 +0300 Subject: [PATCH 07/26] Bunch of join tests --- .../testdata/join_alias/ydb/stdlib/go/db.go | 31 ++++ .../join_alias/ydb/stdlib/go/models.go | 14 ++ .../join_alias/ydb/stdlib/go/query.sql.go | 81 ++++++++ .../testdata/join_alias/ydb/stdlib/query.sql | 11 ++ .../testdata/join_alias/ydb/stdlib/schema.sql | 3 + .../testdata/join_alias/ydb/stdlib/sqlc.json | 12 ++ .../join_alias/ydb/ydb-go-sdk/go/db.go | 26 +++ .../join_alias/ydb/ydb-go-sdk/go/models.go | 14 ++ .../join_alias/ydb/ydb-go-sdk/go/query.sql.go | 101 ++++++++++ .../join_alias/ydb/ydb-go-sdk/query.sql | 11 ++ .../join_alias/ydb/ydb-go-sdk/schema.sql | 3 + .../join_alias/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/join_clauses_order/ydb/go/db.go | 31 ++++ .../join_clauses_order/ydb/go/models.go | 34 ++++ .../join_clauses_order/ydb/go/query.sql.go | 174 ++++++++++++++++++ .../testdata/join_clauses_order/ydb/query.sql | 27 +++ .../join_clauses_order/ydb/schema.sql | 33 ++++ .../testdata/join_clauses_order/ydb/sqlc.json | 12 ++ .../testdata/join_from/ydb/stdlib/go/db.go | 31 ++++ .../join_from/ydb/stdlib/go/models.go | 13 ++ .../join_from/ydb/stdlib/go/query.sql.go | 37 ++++ .../testdata/join_from/ydb/stdlib/query.sql | 2 + .../testdata/join_from/ydb/stdlib/schema.sql | 2 + .../testdata/join_from/ydb/stdlib/sqlc.json | 12 ++ .../join_from/ydb/ydb-go-sdk/go/db.go | 26 +++ .../join_from/ydb/ydb-go-sdk/go/models.go | 13 ++ .../join_from/ydb/ydb-go-sdk/go/query.sql.go | 50 +++++ .../join_from/ydb/ydb-go-sdk/query.sql | 2 + .../join_from/ydb/ydb-go-sdk/schema.sql | 2 + .../join_from/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/join_group_by_alias/ydb/go/db.go | 31 ++++ .../join_group_by_alias/ydb/go/models.go | 9 + .../join_group_by_alias/ydb/go/query.sql.go | 39 ++++ .../join_group_by_alias/ydb/query.sql | 4 + .../join_group_by_alias/ydb/schema.sql | 1 + .../join_group_by_alias/ydb/sqlc.json | 12 ++ .../join_left_table_alias/ydb/go/db.go | 31 ++++ .../join_left_table_alias/ydb/go/models.go | 14 ++ .../join_left_table_alias/ydb/go/query.sql.go | 46 +++++ .../join_left_table_alias/ydb/query.sql | 9 + .../join_left_table_alias/ydb/schema.sql | 10 + .../join_left_table_alias/ydb/sqlc.json | 12 ++ .../testdata/join_order_by/ydb/go/db.go | 31 ++++ .../testdata/join_order_by/ydb/go/models.go | 11 ++ .../join_order_by/ydb/go/query.sql.go | 23 +++ .../testdata/join_order_by/ydb/query.sql | 4 + .../testdata/join_order_by/ydb/schema.sql | 6 + .../testdata/join_order_by/ydb/sqlc.json | 12 ++ .../testdata/join_order_by_alias/ydb/go/db.go | 31 ++++ .../join_order_by_alias/ydb/go/models.go | 9 + .../join_order_by_alias/ydb/go/query.sql.go | 39 ++++ .../join_order_by_alias/ydb/query.sql | 4 + .../join_order_by_alias/ydb/schema.sql | 1 + .../join_order_by_alias/ydb/sqlc.json | 12 ++ .../join_table_name/ydb/stdlib/go/db.go | 31 ++++ .../join_table_name/ydb/stdlib/go/models.go | 14 ++ .../ydb/stdlib/go/query.sql.go | 29 +++ .../join_table_name/ydb/stdlib/query.sql | 5 + .../join_table_name/ydb/stdlib/schema.sql | 2 + .../join_table_name/ydb/stdlib/sqlc.json | 12 ++ .../join_table_name/ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 14 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 44 +++++ .../join_table_name/ydb/ydb-go-sdk/query.sql | 5 + .../join_table_name/ydb/ydb-go-sdk/schema.sql | 2 + .../join_table_name/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../join_two_tables/ydb/stdlib/go/db.go | 31 ++++ .../join_two_tables/ydb/stdlib/go/models.go | 18 ++ .../ydb/stdlib/go/query.sql.go | 40 ++++ .../join_two_tables/ydb/stdlib/query.sql | 5 + .../join_two_tables/ydb/stdlib/schema.sql | 3 + .../join_two_tables/ydb/stdlib/sqlc.json | 12 ++ .../join_two_tables/ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 18 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 48 +++++ .../join_two_tables/ydb/ydb-go-sdk/query.sql | 5 + .../join_two_tables/ydb/ydb-go-sdk/schema.sql | 3 + .../join_two_tables/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/join_update/ydb/go/db.go | 31 ++++ .../testdata/join_update/ydb/go/models.go | 20 ++ .../testdata/join_update/ydb/go/query.sql.go | 23 +++ .../testdata/join_update/ydb/query.sql | 6 + .../testdata/join_update/ydb/schema.sql | 17 ++ .../testdata/join_update/ydb/sqlc.json | 12 ++ .../endtoend/testdata/join_using/ydb/go/db.go | 31 ++++ .../testdata/join_using/ydb/go/models.go | 13 ++ .../testdata/join_using/ydb/go/query.sql.go | 42 +++++ .../testdata/join_using/ydb/query.sql | 2 + .../testdata/join_using/ydb/schema.sql | 10 + .../testdata/join_using/ydb/sqlc.json | 13 ++ .../join_where_clause/ydb/stdlib/go/db.go | 31 ++++ .../join_where_clause/ydb/stdlib/go/models.go | 14 ++ .../ydb/stdlib/go/query.sql.go | 110 +++++++++++ .../join_where_clause/ydb/stdlib/query.sql | 17 ++ .../join_where_clause/ydb/stdlib/schema.sql | 2 + .../join_where_clause/ydb/stdlib/sqlc.json | 12 ++ .../join_where_clause/ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 14 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 139 ++++++++++++++ .../ydb/ydb-go-sdk/query.sql | 17 ++ .../ydb/ydb-go-sdk/schema.sql | 2 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../ydb-go-sdk/go/query.sql.go | 41 +---- .../select_not_exists/ydb-go-sdk/query.sql | 11 -- .../engine/ydb/catalog_tests/delete_test.go | 4 +- .../engine/ydb/catalog_tests/update_test.go | 6 +- internal/engine/ydb/convert.go | 126 +++++++++++-- internal/engine/ydb/lib/basic.go | 12 ++ 108 files changed, 2408 insertions(+), 63 deletions(-) create mode 100644 internal/endtoend/testdata/join_alias/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/join_alias/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/join_alias/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_alias/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/join_alias/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/join_alias/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/join_clauses_order/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_clauses_order/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_clauses_order/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_clauses_order/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_clauses_order/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_clauses_order/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_from/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/join_from/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/join_from/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_from/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/join_from/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/join_from/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/join_group_by_alias/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_group_by_alias/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_group_by_alias/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_group_by_alias/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_group_by_alias/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_group_by_alias/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_left_table_alias/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_left_table_alias/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_left_table_alias/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_left_table_alias/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_left_table_alias/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_left_table_alias/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_order_by/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_order_by/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_order_by/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_order_by/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_order_by/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_order_by/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_order_by_alias/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_order_by_alias/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_order_by_alias/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_order_by_alias/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_order_by_alias/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_order_by_alias/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_table_name/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/join_table_name/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/join_table_name/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_table_name/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/join_table_name/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/join_table_name/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/join_update/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_update/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_update/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_update/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_update/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_update/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_using/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_using/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_using/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_using/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_using/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_using/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/sqlc.json diff --git a/internal/endtoend/testdata/join_alias/ydb/stdlib/go/db.go b/internal/endtoend/testdata/join_alias/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_alias/ydb/stdlib/go/models.go b/internal/endtoend/testdata/join_alias/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..0cfd332bba --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/stdlib/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Title *string +} + +type Foo struct { + ID int32 +} diff --git a/internal/endtoend/testdata/join_alias/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/join_alias/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..a71bd090d4 --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/stdlib/go/query.sql.go @@ -0,0 +1,81 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const aliasExpand = `-- name: AliasExpand :many +SELECT f.id, b.id, title +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id +` + +type AliasExpandRow struct { + ID int32 + ID_2 int32 + Title *string +} + +func (q *Queries) AliasExpand(ctx context.Context, id int32) ([]AliasExpandRow, error) { + rows, err := q.db.QueryContext(ctx, aliasExpand, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AliasExpandRow + for rows.Next() { + var i AliasExpandRow + if err := rows.Scan(&i.ID, &i.ID_2, &i.Title); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const aliasJoin = `-- name: AliasJoin :many +SELECT f.id, b.title +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id +` + +type AliasJoinRow struct { + ID int32 + Title *string +} + +func (q *Queries) AliasJoin(ctx context.Context, id int32) ([]AliasJoinRow, error) { + rows, err := q.db.QueryContext(ctx, aliasJoin, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AliasJoinRow + for rows.Next() { + var i AliasJoinRow + if err := rows.Scan(&i.ID, &i.Title); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_alias/ydb/stdlib/query.sql b/internal/endtoend/testdata/join_alias/ydb/stdlib/query.sql new file mode 100644 index 0000000000..4dd86d48ab --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/stdlib/query.sql @@ -0,0 +1,11 @@ +-- name: AliasJoin :many +SELECT f.id, b.title +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id; + +-- name: AliasExpand :many +SELECT * +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id; diff --git a/internal/endtoend/testdata/join_alias/ydb/stdlib/schema.sql b/internal/endtoend/testdata/join_alias/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..61e133ee1d --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/stdlib/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (id Serial, PRIMARY KEY (id)); +CREATE TABLE bar (id Serial, title Text, PRIMARY KEY (id)); + diff --git a/internal/endtoend/testdata/join_alias/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/join_alias/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..0cfd332bba --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Title *string +} + +type Foo struct { + ID int32 +} diff --git a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..483504d510 --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,101 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const aliasExpand = `-- name: AliasExpand :many +SELECT f.id, b.id, title +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id +` + +type AliasExpandRow struct { + ID int32 + ID_2 int32 + Title *string +} + +func (q *Queries) AliasExpand(ctx context.Context, id int32, opts ...query.ExecuteOption) ([]AliasExpandRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + result, err := q.db.QueryResultSet(ctx, aliasExpand, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []AliasExpandRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i AliasExpandRow + if err := row.Scan(&i.ID, &i.ID_2, &i.Title); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const aliasJoin = `-- name: AliasJoin :many +SELECT f.id, b.title +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id +` + +type AliasJoinRow struct { + ID int32 + Title *string +} + +func (q *Queries) AliasJoin(ctx context.Context, id int32, opts ...query.ExecuteOption) ([]AliasJoinRow, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + result, err := q.db.QueryResultSet(ctx, aliasJoin, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []AliasJoinRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i AliasJoinRow + if err := row.Scan(&i.ID, &i.Title); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..4dd86d48ab --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,11 @@ +-- name: AliasJoin :many +SELECT f.id, b.title +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id; + +-- name: AliasExpand :many +SELECT * +FROM foo f +JOIN bar b ON b.id = f.id +WHERE f.id = $id; diff --git a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..61e133ee1d --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (id Serial, PRIMARY KEY (id)); +CREATE TABLE bar (id Serial, title Text, PRIMARY KEY (id)); + diff --git a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_clauses_order/ydb/go/db.go b/internal/endtoend/testdata/join_clauses_order/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_clauses_order/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_clauses_order/ydb/go/models.go b/internal/endtoend/testdata/join_clauses_order/ydb/go/models.go new file mode 100644 index 0000000000..bdf41c2477 --- /dev/null +++ b/internal/endtoend/testdata/join_clauses_order/ydb/go/models.go @@ -0,0 +1,34 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type A struct { + ID int64 + A *string +} + +type B struct { + ID int64 + B *string + AID *int64 +} + +type C struct { + ID int64 + C *string + AID *int64 +} + +type D struct { + ID int64 + D *string + AID *int64 +} + +type E struct { + ID int64 + E *string + AID *int64 +} diff --git a/internal/endtoend/testdata/join_clauses_order/ydb/go/query.sql.go b/internal/endtoend/testdata/join_clauses_order/ydb/go/query.sql.go new file mode 100644 index 0000000000..4f0328bcd5 --- /dev/null +++ b/internal/endtoend/testdata/join_clauses_order/ydb/go/query.sql.go @@ -0,0 +1,174 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const testInnerLeft = `-- name: TestInnerLeft :many +SELECT a.a, b.b, c.c +FROM a +INNER JOIN b ON b.a_id = a.id +LEFT JOIN c ON c.a_id = a.id +` + +type TestInnerLeftRow struct { + A *string + B *string + C *string +} + +func (q *Queries) TestInnerLeft(ctx context.Context) ([]TestInnerLeftRow, error) { + rows, err := q.db.QueryContext(ctx, testInnerLeft) + if err != nil { + return nil, err + } + defer rows.Close() + var items []TestInnerLeftRow + for rows.Next() { + var i TestInnerLeftRow + if err := rows.Scan(&i.A, &i.B, &i.C); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const testInnerLeftInnerLeft = `-- name: TestInnerLeftInnerLeft :many +SELECT a.a, b.b, c.c, d.d, e.e +FROM a +INNER JOIN b ON b.a_id = a.id +LEFT JOIN c ON c.a_id = a.id +INNER JOIN d ON d.a_id = a.id +LEFT JOIN e ON e.a_id = a.id +` + +type TestInnerLeftInnerLeftRow struct { + A *string + B *string + C *string + D *string + E *string +} + +func (q *Queries) TestInnerLeftInnerLeft(ctx context.Context) ([]TestInnerLeftInnerLeftRow, error) { + rows, err := q.db.QueryContext(ctx, testInnerLeftInnerLeft) + if err != nil { + return nil, err + } + defer rows.Close() + var items []TestInnerLeftInnerLeftRow + for rows.Next() { + var i TestInnerLeftInnerLeftRow + if err := rows.Scan( + &i.A, + &i.B, + &i.C, + &i.D, + &i.E, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const testLeftInner = `-- name: TestLeftInner :many +SELECT a.a, b.b, c.c +FROM a +LEFT JOIN b ON b.a_id = a.id +INNER JOIN c ON c.a_id = a.id +` + +type TestLeftInnerRow struct { + A *string + B *string + C *string +} + +func (q *Queries) TestLeftInner(ctx context.Context) ([]TestLeftInnerRow, error) { + rows, err := q.db.QueryContext(ctx, testLeftInner) + if err != nil { + return nil, err + } + defer rows.Close() + var items []TestLeftInnerRow + for rows.Next() { + var i TestLeftInnerRow + if err := rows.Scan(&i.A, &i.B, &i.C); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const testLeftInnerLeftInner = `-- name: TestLeftInnerLeftInner :many +SELECT a.a, b.b, c.c, d.d, e.e +FROM a +LEFT JOIN b ON b.a_id = a.id +INNER JOIN c ON c.a_id = a.id +LEFT JOIN d ON d.a_id = a.id +INNER JOIN e ON e.a_id = a.id +` + +type TestLeftInnerLeftInnerRow struct { + A *string + B *string + C *string + D *string + E *string +} + +func (q *Queries) TestLeftInnerLeftInner(ctx context.Context) ([]TestLeftInnerLeftInnerRow, error) { + rows, err := q.db.QueryContext(ctx, testLeftInnerLeftInner) + if err != nil { + return nil, err + } + defer rows.Close() + var items []TestLeftInnerLeftInnerRow + for rows.Next() { + var i TestLeftInnerLeftInnerRow + if err := rows.Scan( + &i.A, + &i.B, + &i.C, + &i.D, + &i.E, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_clauses_order/ydb/query.sql b/internal/endtoend/testdata/join_clauses_order/ydb/query.sql new file mode 100644 index 0000000000..3980181178 --- /dev/null +++ b/internal/endtoend/testdata/join_clauses_order/ydb/query.sql @@ -0,0 +1,27 @@ +-- name: TestLeftInner :many +SELECT a.a, b.b, c.c +FROM a +LEFT JOIN b ON b.a_id = a.id +INNER JOIN c ON c.a_id = a.id; + +-- name: TestInnerLeft :many +SELECT a.a, b.b, c.c +FROM a +INNER JOIN b ON b.a_id = a.id +LEFT JOIN c ON c.a_id = a.id; + +-- name: TestLeftInnerLeftInner :many +SELECT a.a, b.b, c.c, d.d, e.e +FROM a +LEFT JOIN b ON b.a_id = a.id +INNER JOIN c ON c.a_id = a.id +LEFT JOIN d ON d.a_id = a.id +INNER JOIN e ON e.a_id = a.id; + +-- name: TestInnerLeftInnerLeft :many +SELECT a.a, b.b, c.c, d.d, e.e +FROM a +INNER JOIN b ON b.a_id = a.id +LEFT JOIN c ON c.a_id = a.id +INNER JOIN d ON d.a_id = a.id +LEFT JOIN e ON e.a_id = a.id; diff --git a/internal/endtoend/testdata/join_clauses_order/ydb/schema.sql b/internal/endtoend/testdata/join_clauses_order/ydb/schema.sql new file mode 100644 index 0000000000..536afa0d26 --- /dev/null +++ b/internal/endtoend/testdata/join_clauses_order/ydb/schema.sql @@ -0,0 +1,33 @@ +CREATE TABLE a ( + id BigSerial, + a Text, + PRIMARY KEY (id) +); + +CREATE TABLE b ( + id BigSerial, + b Text, + a_id Int64, + PRIMARY KEY (id) +); + +CREATE TABLE c ( + id BigSerial, + c Text, + a_id Int64, + PRIMARY KEY (id) +); + +CREATE TABLE d ( + id BigSerial, + d Text, + a_id Int64, + PRIMARY KEY (id) +); + +CREATE TABLE e ( + id BigSerial, + e Text, + a_id Int64, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/join_clauses_order/ydb/sqlc.json b/internal/endtoend/testdata/join_clauses_order/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_clauses_order/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_from/ydb/stdlib/go/db.go b/internal/endtoend/testdata/join_from/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_from/ydb/stdlib/go/models.go b/internal/endtoend/testdata/join_from/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..024b8245df --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/stdlib/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + Login string +} + +type Foo struct { + Email string +} diff --git a/internal/endtoend/testdata/join_from/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/join_from/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..6aa4d90930 --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/stdlib/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const multiFrom = `-- name: MultiFrom :many +SELECT email FROM bar, foo WHERE login = $login +` + +func (q *Queries) MultiFrom(ctx context.Context, login string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, multiFrom, login) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var email string + if err := rows.Scan(&email); err != nil { + return nil, err + } + items = append(items, email) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_from/ydb/stdlib/query.sql b/internal/endtoend/testdata/join_from/ydb/stdlib/query.sql new file mode 100644 index 0000000000..72079100bb --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: MultiFrom :many +SELECT email FROM bar, foo WHERE login = $login; diff --git a/internal/endtoend/testdata/join_from/ydb/stdlib/schema.sql b/internal/endtoend/testdata/join_from/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..b3615a1c5d --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/stdlib/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (email Text, PRIMARY KEY (email)); +CREATE TABLE bar (login Text, PRIMARY KEY (login)); diff --git a/internal/endtoend/testdata/join_from/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/join_from/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..024b8245df --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + Login string +} + +type Foo struct { + Email string +} diff --git a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..7756b16aea --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const multiFrom = `-- name: MultiFrom :many +SELECT email FROM bar, foo WHERE login = $login +` + +func (q *Queries) MultiFrom(ctx context.Context, login string, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$login").Text(login) + result, err := q.db.QueryResultSet(ctx, multiFrom, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var email string + if err := row.Scan(&email); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, email) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..72079100bb --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: MultiFrom :many +SELECT email FROM bar, foo WHERE login = $login; diff --git a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..b3615a1c5d --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (email Text, PRIMARY KEY (email)); +CREATE TABLE bar (login Text, PRIMARY KEY (login)); diff --git a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_group_by_alias/ydb/go/db.go b/internal/endtoend/testdata/join_group_by_alias/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_group_by_alias/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_group_by_alias/ydb/go/models.go b/internal/endtoend/testdata/join_group_by_alias/ydb/go/models.go new file mode 100644 index 0000000000..ae9173ef9e --- /dev/null +++ b/internal/endtoend/testdata/join_group_by_alias/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Email string +} diff --git a/internal/endtoend/testdata/join_group_by_alias/ydb/go/query.sql.go b/internal/endtoend/testdata/join_group_by_alias/ydb/go/query.sql.go new file mode 100644 index 0000000000..13eb1ec3dc --- /dev/null +++ b/internal/endtoend/testdata/join_group_by_alias/ydb/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const columnAsGroupBy = `-- name: ColumnAsGroupBy :many +SELECT a.email AS id +FROM foo a JOIN foo b ON a.email = b.email +GROUP BY a.email +` + +func (q *Queries) ColumnAsGroupBy(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, columnAsGroupBy) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_group_by_alias/ydb/query.sql b/internal/endtoend/testdata/join_group_by_alias/ydb/query.sql new file mode 100644 index 0000000000..47946f9775 --- /dev/null +++ b/internal/endtoend/testdata/join_group_by_alias/ydb/query.sql @@ -0,0 +1,4 @@ +-- name: ColumnAsGroupBy :many +SELECT a.email AS id +FROM foo a JOIN foo b ON a.email = b.email +GROUP BY a.email; diff --git a/internal/endtoend/testdata/join_group_by_alias/ydb/schema.sql b/internal/endtoend/testdata/join_group_by_alias/ydb/schema.sql new file mode 100644 index 0000000000..0516b5d4f4 --- /dev/null +++ b/internal/endtoend/testdata/join_group_by_alias/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (email Text, PRIMARY KEY (email)); diff --git a/internal/endtoend/testdata/join_group_by_alias/ydb/sqlc.json b/internal/endtoend/testdata/join_group_by_alias/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_group_by_alias/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_left_table_alias/ydb/go/db.go b/internal/endtoend/testdata/join_left_table_alias/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_left_table_alias/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_left_table_alias/ydb/go/models.go b/internal/endtoend/testdata/join_left_table_alias/ydb/go/models.go new file mode 100644 index 0000000000..53f0503d0f --- /dev/null +++ b/internal/endtoend/testdata/join_left_table_alias/ydb/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + FooID int64 + Info *string +} + +type Foo struct { + ID int64 +} diff --git a/internal/endtoend/testdata/join_left_table_alias/ydb/go/query.sql.go b/internal/endtoend/testdata/join_left_table_alias/ydb/go/query.sql.go new file mode 100644 index 0000000000..8990f63989 --- /dev/null +++ b/internal/endtoend/testdata/join_left_table_alias/ydb/go/query.sql.go @@ -0,0 +1,46 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const joinBar = `-- name: JoinBar :one +SELECT f.id, info +FROM foo f +LEFT JOIN bar b ON b.foo_id = f.id +` + +type JoinBarRow struct { + ID int64 + Info *string +} + +func (q *Queries) JoinBar(ctx context.Context) (JoinBarRow, error) { + row := q.db.QueryRowContext(ctx, joinBar) + var i JoinBarRow + err := row.Scan(&i.ID, &i.Info) + return i, err +} + +const joinBarAlias = `-- name: JoinBarAlias :one +SELECT f.id, b.info +FROM foo f +LEFT JOIN bar b ON b.foo_id = f.id +` + +type JoinBarAliasRow struct { + ID int64 + Info *string +} + +func (q *Queries) JoinBarAlias(ctx context.Context) (JoinBarAliasRow, error) { + row := q.db.QueryRowContext(ctx, joinBarAlias) + var i JoinBarAliasRow + err := row.Scan(&i.ID, &i.Info) + return i, err +} diff --git a/internal/endtoend/testdata/join_left_table_alias/ydb/query.sql b/internal/endtoend/testdata/join_left_table_alias/ydb/query.sql new file mode 100644 index 0000000000..ad61f17b7b --- /dev/null +++ b/internal/endtoend/testdata/join_left_table_alias/ydb/query.sql @@ -0,0 +1,9 @@ +-- name: JoinBar :one +SELECT f.id, info +FROM foo f +LEFT JOIN bar b ON b.foo_id = f.id; + +-- name: JoinBarAlias :one +SELECT f.id, b.info +FROM foo f +LEFT JOIN bar b ON b.foo_id = f.id; diff --git a/internal/endtoend/testdata/join_left_table_alias/ydb/schema.sql b/internal/endtoend/testdata/join_left_table_alias/ydb/schema.sql new file mode 100644 index 0000000000..f8980bffc6 --- /dev/null +++ b/internal/endtoend/testdata/join_left_table_alias/ydb/schema.sql @@ -0,0 +1,10 @@ +CREATE TABLE foo ( + id Int64, + PRIMARY KEY (id) +); + +CREATE TABLE bar ( + foo_id Int64, + info Text, + PRIMARY KEY (foo_id) +); diff --git a/internal/endtoend/testdata/join_left_table_alias/ydb/sqlc.json b/internal/endtoend/testdata/join_left_table_alias/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_left_table_alias/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_order_by/ydb/go/db.go b/internal/endtoend/testdata/join_order_by/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_order_by/ydb/go/models.go b/internal/endtoend/testdata/join_order_by/ydb/go/models.go new file mode 100644 index 0000000000..93e9ce7933 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string +} diff --git a/internal/endtoend/testdata/join_order_by/ydb/go/query.sql.go b/internal/endtoend/testdata/join_order_by/ydb/go/query.sql.go new file mode 100644 index 0000000000..ea31ea0c55 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by/ydb/go/query.sql.go @@ -0,0 +1,23 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAuthor = `-- name: GetAuthor :one +SELECT a.name +FROM authors a JOIN authors b ON a.id = b.id +ORDER BY a.name +` + +func (q *Queries) GetAuthor(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, getAuthor) + var name string + err := row.Scan(&name) + return name, err +} diff --git a/internal/endtoend/testdata/join_order_by/ydb/query.sql b/internal/endtoend/testdata/join_order_by/ydb/query.sql new file mode 100644 index 0000000000..cca7280f75 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by/ydb/query.sql @@ -0,0 +1,4 @@ +-- name: GetAuthor :one +SELECT a.name +FROM authors a JOIN authors b ON a.id = b.id +ORDER BY a.name; diff --git a/internal/endtoend/testdata/join_order_by/ydb/schema.sql b/internal/endtoend/testdata/join_order_by/ydb/schema.sql new file mode 100644 index 0000000000..cd16312a93 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/join_order_by/ydb/sqlc.json b/internal/endtoend/testdata/join_order_by/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_order_by_alias/ydb/go/db.go b/internal/endtoend/testdata/join_order_by_alias/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by_alias/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_order_by_alias/ydb/go/models.go b/internal/endtoend/testdata/join_order_by_alias/ydb/go/models.go new file mode 100644 index 0000000000..ae9173ef9e --- /dev/null +++ b/internal/endtoend/testdata/join_order_by_alias/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Email string +} diff --git a/internal/endtoend/testdata/join_order_by_alias/ydb/go/query.sql.go b/internal/endtoend/testdata/join_order_by_alias/ydb/go/query.sql.go new file mode 100644 index 0000000000..167045b212 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by_alias/ydb/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const columnAsOrderBy = `-- name: ColumnAsOrderBy :many +SELECT a.email AS id +FROM foo a JOIN foo b ON a.email = b.email +ORDER BY id +` + +func (q *Queries) ColumnAsOrderBy(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, columnAsOrderBy) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_order_by_alias/ydb/query.sql b/internal/endtoend/testdata/join_order_by_alias/ydb/query.sql new file mode 100644 index 0000000000..7a47032a4c --- /dev/null +++ b/internal/endtoend/testdata/join_order_by_alias/ydb/query.sql @@ -0,0 +1,4 @@ +-- name: ColumnAsOrderBy :many +SELECT a.email AS id +FROM foo a JOIN foo b ON a.email = b.email +ORDER BY id; diff --git a/internal/endtoend/testdata/join_order_by_alias/ydb/schema.sql b/internal/endtoend/testdata/join_order_by_alias/ydb/schema.sql new file mode 100644 index 0000000000..22b8155e7c --- /dev/null +++ b/internal/endtoend/testdata/join_order_by_alias/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (email Text NOT NULL, PRIMARY KEY (email)); diff --git a/internal/endtoend/testdata/join_order_by_alias/ydb/sqlc.json b/internal/endtoend/testdata/join_order_by_alias/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_order_by_alias/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/db.go b/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/models.go b/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..6118a65541 --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} + +type Foo struct { + ID int32 + Bar *int32 +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..d394749ebf --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/stdlib/go/query.sql.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const tableName = `-- name: TableName :one +SELECT foo.id +FROM foo +JOIN bar ON foo.bar = bar.id +WHERE bar.id = $bar_id AND foo.id = $foo_id +` + +type TableNameParams struct { + BarID int32 + FooID int32 +} + +func (q *Queries) TableName(ctx context.Context, arg TableNameParams) (int32, error) { + row := q.db.QueryRowContext(ctx, tableName, arg.BarID, arg.FooID) + var id int32 + err := row.Scan(&id) + return id, err +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/stdlib/query.sql b/internal/endtoend/testdata/join_table_name/ydb/stdlib/query.sql new file mode 100644 index 0000000000..e82f9599e1 --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: TableName :one +SELECT foo.id +FROM foo +JOIN bar ON foo.bar = bar.id +WHERE bar.id = $bar_id AND foo.id = $foo_id; diff --git a/internal/endtoend/testdata/join_table_name/ydb/stdlib/schema.sql b/internal/endtoend/testdata/join_table_name/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..6371ee5f7e --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/stdlib/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); +CREATE TABLE foo (id Serial, bar Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/join_table_name/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/join_table_name/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..6118a65541 --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} + +type Foo struct { + ID int32 + Bar *int32 +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..24604e5e2d --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,44 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const tableName = `-- name: TableName :one +SELECT foo.id +FROM foo +JOIN bar ON foo.bar = bar.id +WHERE bar.id = $bar_id AND foo.id = $foo_id +` + +type TableNameParams struct { + BarID int32 + FooID int32 +} + +func (q *Queries) TableName(ctx context.Context, arg TableNameParams, opts ...query.ExecuteOption) (int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$bar_id").Int32(arg.BarID) + parameters = parameters.Param("$foo_id").Int32(arg.FooID) + row, err := q.db.QueryRow(ctx, tableName, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var id int32 + if err != nil { + return id, xerrors.WithStackTrace(err) + } + err = row.Scan(&id) + if err != nil { + return id, xerrors.WithStackTrace(err) + } + return id, nil +} diff --git a/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..e82f9599e1 --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: TableName :one +SELECT foo.id +FROM foo +JOIN bar ON foo.bar = bar.id +WHERE bar.id = $bar_id AND foo.id = $foo_id; diff --git a/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..6371ee5f7e --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); +CREATE TABLE foo (id Serial, bar Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/join_table_name/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/db.go b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/models.go b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..ad2b376d3a --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/models.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} + +type Baz struct { + ID int32 +} + +type Foo struct { + BarID int32 + BazID int32 +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..586b732cb8 --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/go/query.sql.go @@ -0,0 +1,40 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const twoJoins = `-- name: TwoJoins :many +SELECT foo.bar_id, foo.baz_id +FROM foo +JOIN bar ON bar.id = foo.bar_id +JOIN baz ON baz.id = foo.baz_id +` + +func (q *Queries) TwoJoins(ctx context.Context) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, twoJoins) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.BarID, &i.BazID); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/stdlib/query.sql b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/query.sql new file mode 100644 index 0000000000..629a4f61b9 --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: TwoJoins :many +SELECT foo.* +FROM foo +JOIN bar ON bar.id = foo.bar_id +JOIN baz ON baz.id = foo.baz_id; diff --git a/internal/endtoend/testdata/join_two_tables/ydb/stdlib/schema.sql b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..13c1043a20 --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (bar_id Serial, baz_id Serial, PRIMARY KEY (bar_id, baz_id)); +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); +CREATE TABLE baz (id Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/join_two_tables/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..ad2b376d3a --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} + +type Baz struct { + ID int32 +} + +type Foo struct { + BarID int32 + BazID int32 +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..26a7f5d5cd --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,48 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const twoJoins = `-- name: TwoJoins :many +SELECT foo.bar_id, foo.baz_id +FROM foo +JOIN bar ON bar.id = foo.bar_id +JOIN baz ON baz.id = foo.baz_id +` + +func (q *Queries) TwoJoins(ctx context.Context, opts ...query.ExecuteOption) ([]Foo, error) { + result, err := q.db.QueryResultSet(ctx, twoJoins, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.BarID, &i.BazID); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..629a4f61b9 --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: TwoJoins :many +SELECT foo.* +FROM foo +JOIN bar ON bar.id = foo.bar_id +JOIN baz ON baz.id = foo.baz_id; diff --git a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..13c1043a20 --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (bar_id Serial, baz_id Serial, PRIMARY KEY (bar_id, baz_id)); +CREATE TABLE bar (id Serial, PRIMARY KEY (id)); +CREATE TABLE baz (id Serial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_update/ydb/go/db.go b/internal/endtoend/testdata/join_update/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_update/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_update/ydb/go/models.go b/internal/endtoend/testdata/join_update/ydb/go/models.go new file mode 100644 index 0000000000..ad3d5722f6 --- /dev/null +++ b/internal/endtoend/testdata/join_update/ydb/go/models.go @@ -0,0 +1,20 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type GroupCalcTotal struct { + Npn *string + GroupID string +} + +type NpnExternalMap struct { + ID string + Npn *string +} + +type ProducerGroupAttribute struct { + NpnExternalMapID *string + GroupID string +} diff --git a/internal/endtoend/testdata/join_update/ydb/go/query.sql.go b/internal/endtoend/testdata/join_update/ydb/go/query.sql.go new file mode 100644 index 0000000000..54edc911d3 --- /dev/null +++ b/internal/endtoend/testdata/join_update/ydb/go/query.sql.go @@ -0,0 +1,23 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const percentile = `-- name: Percentile :exec +UPDATE group_calc_totals ON +SELECT gct.group_id, nem.npn +FROM group_calc_totals gct +JOIN producer_group_attribute ga ON gct.group_id = ga.group_id +JOIN npn_external_map nem ON ga.npn_external_map_id = nem.id +` + +func (q *Queries) Percentile(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, percentile) + return err +} diff --git a/internal/endtoend/testdata/join_update/ydb/query.sql b/internal/endtoend/testdata/join_update/ydb/query.sql new file mode 100644 index 0000000000..6398e7faf9 --- /dev/null +++ b/internal/endtoend/testdata/join_update/ydb/query.sql @@ -0,0 +1,6 @@ +-- name: Percentile :exec +UPDATE group_calc_totals ON +SELECT gct.group_id, nem.npn +FROM group_calc_totals gct +JOIN producer_group_attribute ga ON gct.group_id = ga.group_id +JOIN npn_external_map nem ON ga.npn_external_map_id = nem.id; diff --git a/internal/endtoend/testdata/join_update/ydb/schema.sql b/internal/endtoend/testdata/join_update/ydb/schema.sql new file mode 100644 index 0000000000..70596ecb0c --- /dev/null +++ b/internal/endtoend/testdata/join_update/ydb/schema.sql @@ -0,0 +1,17 @@ +CREATE TABLE group_calc_totals ( + npn Text, + group_id Text, + PRIMARY KEY (group_id) +); + +CREATE TABLE producer_group_attribute ( + npn_external_map_id Text, + group_id Text, + PRIMARY KEY (group_id) +); + +CREATE TABLE npn_external_map ( + id Text, + npn Text, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/join_update/ydb/sqlc.json b/internal/endtoend/testdata/join_update/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_update/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_using/ydb/go/db.go b/internal/endtoend/testdata/join_using/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_using/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_using/ydb/go/models.go b/internal/endtoend/testdata/join_using/ydb/go/models.go new file mode 100644 index 0000000000..f4eaade85e --- /dev/null +++ b/internal/endtoend/testdata/join_using/ydb/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type T1 struct { + Fk int32 +} + +type T2 struct { + Fk int32 +} diff --git a/internal/endtoend/testdata/join_using/ydb/go/query.sql.go b/internal/endtoend/testdata/join_using/ydb/go/query.sql.go new file mode 100644 index 0000000000..b0a017920e --- /dev/null +++ b/internal/endtoend/testdata/join_using/ydb/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const selectJoinUsing = `-- name: SelectJoinUsing :many +SELECT t1.fk, SUM(t2.fk) FROM t1 JOIN t2 USING (fk) GROUP BY t1.fk +` + +type SelectJoinUsingRow struct { + Fk int32 + Sum interface{} +} + +func (q *Queries) SelectJoinUsing(ctx context.Context) ([]SelectJoinUsingRow, error) { + rows, err := q.db.QueryContext(ctx, selectJoinUsing) + if err != nil { + return nil, err + } + defer rows.Close() + var items []SelectJoinUsingRow + for rows.Next() { + var i SelectJoinUsingRow + if err := rows.Scan(&i.Fk, &i.Sum); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_using/ydb/query.sql b/internal/endtoend/testdata/join_using/ydb/query.sql new file mode 100644 index 0000000000..a9a80f2e7f --- /dev/null +++ b/internal/endtoend/testdata/join_using/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: SelectJoinUsing :many +SELECT t1.fk, SUM(t2.fk) FROM t1 JOIN t2 USING (fk) GROUP BY t1.fk; diff --git a/internal/endtoend/testdata/join_using/ydb/schema.sql b/internal/endtoend/testdata/join_using/ydb/schema.sql new file mode 100644 index 0000000000..1d1dc9c471 --- /dev/null +++ b/internal/endtoend/testdata/join_using/ydb/schema.sql @@ -0,0 +1,10 @@ +CREATE TABLE t1 ( + fk Int32, + PRIMARY KEY (fk) +); + +CREATE TABLE t2 ( + fk Int32, + PRIMARY KEY (fk) +); + diff --git a/internal/endtoend/testdata/join_using/ydb/sqlc.json b/internal/endtoend/testdata/join_using/ydb/sqlc.json new file mode 100644 index 0000000000..3e245cf4a5 --- /dev/null +++ b/internal/endtoend/testdata/join_using/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + diff --git a/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/db.go b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/models.go b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..b133b28e36 --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Owner string +} + +type Foo struct { + Barid int32 +} diff --git a/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..a87dc870fa --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/go/query.sql.go @@ -0,0 +1,110 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const joinNoConstraints = `-- name: JoinNoConstraints :many +SELECT foo.barid +FROM foo +CROSS JOIN bar +WHERE bar.id = $bar_id AND owner = $owner +` + +type JoinNoConstraintsParams struct { + BarID int32 + Owner string +} + +func (q *Queries) JoinNoConstraints(ctx context.Context, arg JoinNoConstraintsParams) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, joinNoConstraints, arg.BarID, arg.Owner) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var barid int32 + if err := rows.Scan(&barid); err != nil { + return nil, err + } + items = append(items, barid) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const joinParamWhereClause = `-- name: JoinParamWhereClause :many +SELECT foo.barid +FROM foo +JOIN bar ON bar.id = $bar_id +WHERE owner = $owner +` + +type JoinParamWhereClauseParams struct { + BarID int32 + Owner string +} + +func (q *Queries) JoinParamWhereClause(ctx context.Context, arg JoinParamWhereClauseParams) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, joinParamWhereClause, arg.BarID, arg.Owner) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var barid int32 + if err := rows.Scan(&barid); err != nil { + return nil, err + } + items = append(items, barid) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const joinWhereClause = `-- name: JoinWhereClause :many +SELECT foo.barid +FROM foo +JOIN bar ON bar.id = barid +WHERE owner = $owner +` + +func (q *Queries) JoinWhereClause(ctx context.Context, owner string) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, joinWhereClause, owner) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var barid int32 + if err := rows.Scan(&barid); err != nil { + return nil, err + } + items = append(items, barid) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_where_clause/ydb/stdlib/query.sql b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/query.sql new file mode 100644 index 0000000000..c4695381ef --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/query.sql @@ -0,0 +1,17 @@ +-- name: JoinWhereClause :many +SELECT foo.* +FROM foo +JOIN bar ON bar.id = barid +WHERE owner = $owner; + +-- name: JoinParamWhereClause :many +SELECT foo.* +FROM foo +JOIN bar ON bar.id = $bar_id +WHERE owner = $owner; + +-- name: JoinNoConstraints :many +SELECT foo.* +FROM foo +CROSS JOIN bar +WHERE bar.id = $bar_id AND owner = $owner; diff --git a/internal/endtoend/testdata/join_where_clause/ydb/stdlib/schema.sql b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..855a6a8285 --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (barid Serial, PRIMARY KEY (barid)); +CREATE TABLE bar (id Serial, owner Text NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/join_where_clause/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..b133b28e36 --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Owner string +} + +type Foo struct { + Barid int32 +} diff --git a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..34cf9c50af --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,139 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const joinNoConstraints = `-- name: JoinNoConstraints :many +SELECT foo.barid +FROM foo +CROSS JOIN bar +WHERE bar.id = $bar_id AND owner = $owner +` + +type JoinNoConstraintsParams struct { + BarID int32 + Owner string +} + +func (q *Queries) JoinNoConstraints(ctx context.Context, arg JoinNoConstraintsParams, opts ...query.ExecuteOption) ([]int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$bar_id").Int32(arg.BarID) + parameters = parameters.Param("$owner").Text(arg.Owner) + result, err := q.db.QueryResultSet(ctx, joinNoConstraints, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int32 + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var barid int32 + if err := row.Scan(&barid); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, barid) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const joinParamWhereClause = `-- name: JoinParamWhereClause :many +SELECT f.barid +FROM foo AS f +JOIN bar AS b ON b.id = f.barid +WHERE b.id = $bar_id AND b.owner = $owner +` + +type JoinParamWhereClauseParams struct { + BarID int32 + Owner string +} + +func (q *Queries) JoinParamWhereClause(ctx context.Context, arg JoinParamWhereClauseParams, opts ...query.ExecuteOption) ([]int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$bar_id").Int32(arg.BarID) + parameters = parameters.Param("$owner").Text(arg.Owner) + result, err := q.db.QueryResultSet(ctx, joinParamWhereClause, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int32 + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var barid int32 + if err := row.Scan(&barid); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, barid) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const joinWhereClause = `-- name: JoinWhereClause :many +SELECT foo.barid +FROM foo +JOIN bar ON bar.id = barid +WHERE owner = $owner +` + +func (q *Queries) JoinWhereClause(ctx context.Context, owner string, opts ...query.ExecuteOption) ([]int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$owner").Text(owner) + result, err := q.db.QueryResultSet(ctx, joinWhereClause, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int32 + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var barid int32 + if err := row.Scan(&barid); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, barid) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..3f7334f836 --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,17 @@ +-- name: JoinWhereClause :many +SELECT foo.* +FROM foo +JOIN bar ON bar.id = barid +WHERE owner = $owner; + +-- name: JoinParamWhereClause :many +SELECT f.* +FROM foo AS f +JOIN bar AS b ON b.id = f.barid +WHERE b.id = $bar_id AND b.owner = $owner; + +-- name: JoinNoConstraints :many +SELECT foo.* +FROM foo +CROSS JOIN bar +WHERE bar.id = $bar_id AND owner = $owner; diff --git a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..855a6a8285 --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (barid Serial, PRIMARY KEY (barid)); +CREATE TABLE bar (id Serial, owner Text NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go index 3ac6a42057..e9d9702c03 100644 --- a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/go/query.sql.go @@ -13,35 +13,6 @@ import ( "github.com/ydb-platform/ydb-go-sdk/v3/query" ) -const barExists = `-- name: BarExists :one -SELECT - EXISTS ( - SELECT - 1 - FROM - bar - where - id = $id - ) -` - -func (q *Queries) BarExists(ctx context.Context, id int32, opts ...query.ExecuteOption) (bool, error) { - parameters := ydb.ParamsBuilder() - parameters = parameters.Param("$id").Int32(id) - row, err := q.db.QueryRow(ctx, barExists, - append(opts, query.WithParameters(parameters.Build()))..., - ) - var exists bool - if err != nil { - return exists, xerrors.WithStackTrace(err) - } - err = row.Scan(&exists) - if err != nil { - return exists, xerrors.WithStackTrace(err) - } - return exists, nil -} - const barNotExists = `-- name: BarNotExists :one SELECT NOT EXISTS ( @@ -54,19 +25,19 @@ SELECT ) ` -func (q *Queries) BarNotExists(ctx context.Context, id int32, opts ...query.ExecuteOption) (interface{}, error) { +func (q *Queries) BarNotExists(ctx context.Context, id int32, opts ...query.ExecuteOption) (bool, error) { parameters := ydb.ParamsBuilder() parameters = parameters.Param("$id").Int32(id) row, err := q.db.QueryRow(ctx, barNotExists, append(opts, query.WithParameters(parameters.Build()))..., ) - var column_1 interface{} + var not_exists bool if err != nil { - return column_1, xerrors.WithStackTrace(err) + return not_exists, xerrors.WithStackTrace(err) } - err = row.Scan(&column_1) + err = row.Scan(¬_exists) if err != nil { - return column_1, xerrors.WithStackTrace(err) + return not_exists, xerrors.WithStackTrace(err) } - return column_1, nil + return not_exists, nil } diff --git a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql index fed29a7f23..497c85bfcf 100644 --- a/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql @@ -8,14 +8,3 @@ SELECT where id = $id ); - --- name: BarExists :one -SELECT - EXISTS ( - SELECT - 1 - FROM - bar - where - id = $id - ); diff --git a/internal/engine/ydb/catalog_tests/delete_test.go b/internal/engine/ydb/catalog_tests/delete_test.go index 914c92d0ef..5a1d37c0fc 100644 --- a/internal/engine/ydb/catalog_tests/delete_test.go +++ b/internal/engine/ydb/catalog_tests/delete_test.go @@ -47,7 +47,7 @@ func TestDelete(t *testing.T) { }, }, Batch: false, - OnCols: nil, + OnCols: &ast.List{Items: []ast.Node{}}, OnSelectStmt: nil, }, }, @@ -83,7 +83,7 @@ func TestDelete(t *testing.T) { }, }, Batch: true, - OnCols: nil, + OnCols: &ast.List{Items: []ast.Node{}}, OnSelectStmt: nil, }, }, diff --git a/internal/engine/ydb/catalog_tests/update_test.go b/internal/engine/ydb/catalog_tests/update_test.go index b5e96d9dbe..f98333b16d 100644 --- a/internal/engine/ydb/catalog_tests/update_test.go +++ b/internal/engine/ydb/catalog_tests/update_test.go @@ -57,7 +57,7 @@ func TestUpdate(t *testing.T) { FromClause: &ast.List{}, WithClause: nil, Batch: false, - OnCols: nil, + OnCols: &ast.List{Items: []ast.Node{}}, OnSelectStmt: nil, }, }, @@ -103,7 +103,7 @@ func TestUpdate(t *testing.T) { FromClause: &ast.List{}, WithClause: nil, Batch: true, - OnCols: nil, + OnCols: &ast.List{Items: []ast.Node{}}, OnSelectStmt: nil, }, }, @@ -155,7 +155,7 @@ func TestUpdate(t *testing.T) { FromClause: &ast.List{}, WithClause: nil, Batch: false, - TargetList: nil, + TargetList: &ast.List{Items: []ast.Node{}}, WhereClause: nil, }, }, diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index c93bff059c..ae8e2439f0 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -693,7 +693,7 @@ func (c *cc) VisitDelete_stmt(n *parser.Delete_stmtContext) interface{} { } where = whereNode } - var cols *ast.List + var cols = &ast.List{Items: []ast.Node{}} var source ast.Node if n.ON() != nil && n.Into_values_source() != nil { nVal := n.Into_values_source() @@ -734,7 +734,7 @@ func (c *cc) VisitDelete_stmt(n *parser.Delete_stmtContext) interface{} { } } - returning := &ast.List{} + returning := &ast.List{Items: []ast.Node{}} if ret := n.Returning_columns_list(); ret != nil { temp, ok := ret.Accept(c).(ast.Node) if !ok { @@ -859,8 +859,8 @@ func (c *cc) VisitUpdate_stmt(n *parser.Update_stmtContext) interface{} { } var where ast.Node - var setList *ast.List - var cols *ast.List + setList := &ast.List{Items: []ast.Node{}} + cols := &ast.List{Items: []ast.Node{}} var source ast.Node if n.SET() != nil && n.Set_clause_choice() != nil { @@ -1022,7 +1022,7 @@ func (c *cc) VisitInto_table_stmt(n *parser.Into_table_stmtContext) interface{} onConflict.Action = ast.OnConflictAction_REPLACE } - var cols *ast.List + cols := &ast.List{Items: []ast.Node{}} var source ast.Node if nVal := n.Into_values_source(); nVal != nil { // todo: handle default values when implemented @@ -1063,7 +1063,7 @@ func (c *cc) VisitInto_table_stmt(n *parser.Into_table_stmtContext) interface{} } } - returning := &ast.List{} + returning := &ast.List{Items: []ast.Node{}} if ret := n.Returning_columns_list(); ret != nil { temp, ok := ret.Accept(c).(ast.Node) if !ok { @@ -1622,6 +1622,8 @@ func (c *cc) VisitNamed_single_source(n *parser.Named_single_sourceContext) inte source.Inh = true case *ast.RangeSubselect: source.Alias = &ast.Alias{Aliasname: &aliasText} + case *ast.RangeFunction: + source.Alias = &ast.Alias{Aliasname: &aliasText} default: return todo("VisitNamed_single_source", n.An_id()) } @@ -1634,10 +1636,27 @@ func (c *cc) VisitNamed_single_source(n *parser.Named_single_sourceContext) inte source.Inh = true case *ast.RangeSubselect: source.Alias = &ast.Alias{Aliasname: &aliasText} + case *ast.RangeFunction: + source.Alias = &ast.Alias{Aliasname: &aliasText} default: return todo("VisitNamed_single_source", n.An_id_as_compat()) } } + + if n.Pure_column_list() != nil { + if rangeFunc, ok := base.(*ast.RangeFunction); ok { + colList := &ast.List{} + for _, anID := range n.Pure_column_list().AllAn_id() { + colName := parseAnId(anID) + colList.Items = append(colList.Items, &ast.String{Str: colName}) + } + if rangeFunc.Alias == nil { + rangeFunc.Alias = &ast.Alias{} + } + rangeFunc.Alias.Colnames = colList + } + } + return base } @@ -1647,12 +1666,11 @@ func (c *cc) VisitSingle_source(n *parser.Single_sourceContext) interface{} { } if n.Table_ref() != nil { - tableName := n.Table_ref().GetText() // !! debug !! - return &ast.RangeVar{ - Relname: &tableName, - Inh: true, - Location: c.pos(n.GetStart()), + result := n.Table_ref().Accept(c) + if result == nil { + return todo("VisitSingle_source table_ref", n.Table_ref()) } + return result } if n.Select_stmt() != nil { @@ -1663,13 +1681,88 @@ func (c *cc) VisitSingle_source(n *parser.Single_sourceContext) interface{} { return &ast.RangeSubselect{ Subquery: subquery, } + } + if n.Values_stmt() != nil { + valuesStmt, ok := n.Values_stmt().Accept(c).(ast.Node) + if !ok { + return todo("VisitSingle_source values_stmt", n.Values_stmt()) + } + return &ast.RangeSubselect{ + Subquery: valuesStmt, + } } - // todo: Values stmt return todo("VisitSingle_source", n) } +func (c *cc) VisitTable_ref(n *parser.Table_refContext) interface{} { + if n == nil { + return todo("VisitTable_ref", n) + } + + if n.Bind_parameter() != nil { + tableName := n.Bind_parameter().GetText() + log.Println("SQLC doesn't support named parameters for table names (FROM $param)") // FIXME: support named parameters for table names + return &ast.RangeVar{ + Relname: &tableName, + Inh: false, + Location: c.pos(n.GetStart()), + } + } + + if n.An_id_expr() != nil && n.LPAREN() != nil && n.RPAREN() != nil { + funcName := "" + if n.An_id_expr().STRING_VALUE() != nil { + funcName = n.An_id_expr().STRING_VALUE().GetText() + } else if n.An_id_expr().Id_expr() != nil { + funcName = n.An_id_expr().Id_expr().GetText() + } else { + return todo("VisitTable_ref an_id_expr", n.An_id_expr()) + } + + funcCall := &ast.FuncCall{ + Func: &ast.FuncName{ + Name: funcName, + }, + Funcname: &ast.List{ + Items: []ast.Node{&ast.String{Str: funcName}}, + }, + Args: &ast.List{}, + AggOrder: &ast.List{}, + } + + if n.AllTable_arg() != nil { + for _, tableArg := range n.AllTable_arg() { + + if tableArg.Named_expr() != nil { + argNode, ok := tableArg.Named_expr().Accept(c).(ast.Node) + if ok { + funcCall.Args.Items = append(funcCall.Args.Items, argNode) + } + } + } + } + + return &ast.RangeFunction{ + Functions: &ast.List{ + Items: []ast.Node{funcCall}, + }, + } + } + + if n.Table_key() != nil { + tableName := n.Table_key().GetText() + return &ast.RangeVar{ + Relname: &tableName, + Inh: true, + Location: c.pos(n.GetStart()), + } + } + + return todo("VisitTable_ref", n) +} + func (c *cc) VisitBind_parameter(n *parser.Bind_parameterContext) interface{} { if n == nil || n.DOLLAR() == nil { return todo("VisitBind_parameter", n) @@ -2719,6 +2812,15 @@ func (c *cc) VisitCon_subexpr(n *parser.Con_subexprContext) interface{} { if !ok { return todo("VisitCon_subexpr", opCtx) } + + if strings.ToUpper(op) == "NOT" { + return &ast.BoolExpr{ + Boolop: ast.BoolExprTypeNot, + Args: &ast.List{Items: []ast.Node{operand}}, + Location: c.pos(n.GetStart()), + } + } + return &ast.A_Expr{ Name: &ast.List{Items: []ast.Node{&ast.String{Str: op}}}, Lexpr: operand, diff --git a/internal/engine/ydb/lib/basic.go b/internal/engine/ydb/lib/basic.go index d5cbfda950..6f800fe594 100644 --- a/internal/engine/ydb/lib/basic.go +++ b/internal/engine/ydb/lib/basic.go @@ -33,6 +33,7 @@ func BasicFunctions() []*catalog.Function { funcs = append(funcs, absFuncs()...) funcs = append(funcs, justUnwrapNothingFuncs()...) funcs = append(funcs, pickleUnpickleFuncs()...) + funcs = append(funcs, asTableFuncs()...) // todo: implement functions: // Udf, AsTuple, AsStruct, AsList, AsDict, AsSet, AsListStrict, AsDictStrict, AsSetStrict, @@ -711,3 +712,14 @@ func pickleUnpickleFuncs() []*catalog.Function { }, } } + +func asTableFuncs() []*catalog.Function { + return []*catalog.Function{ + { + Name: "AS_TABLE", + Args: []*catalog.Argument{ + {Type: &ast.TypeName{Name: "any"}}, + }, + }, + } +} From 342854d2cc96d8bfae8882866b467aae852a8ff7 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 20 Oct 2025 18:01:45 +0300 Subject: [PATCH 08/26] Bunch of tests + bunch of fixes --- .../testdata/between_args/ydb/go/db.go | 31 + .../testdata/between_args/ydb/go/models.go | 11 + .../testdata/between_args/ydb/go/query.sql.go | 146 +++ .../testdata/between_args/ydb/query.sql | 19 + .../testdata/between_args/ydb/schema.sql | 6 + .../testdata/between_args/ydb/sqlc.json | 12 + .../endtoend/testdata/builtins/ydb/go/db.go | 31 + .../testdata/builtins/ydb/go/models.go | 12 + .../testdata/builtins/ydb/go/query.sql.go | 873 ++++++++++++++++++ .../endtoend/testdata/builtins/ydb/query.sql | 163 ++++ .../endtoend/testdata/builtins/ydb/schema.sql | 7 + .../endtoend/testdata/builtins/ydb/sqlc.json | 12 + .../testdata/named_param/ydb/go/db.go | 31 + .../testdata/named_param/ydb/go/models.go | 10 + .../testdata/named_param/ydb/go/query.sql.go | 128 +++ .../testdata/named_param/ydb/query.sql | 23 + .../testdata/named_param/ydb/schema.sql | 4 + .../testdata/named_param/ydb/sqlc.json | 15 + .../testdata/params_go_keywords/ydb/go/db.go | 31 + .../params_go_keywords/ydb/go/models.go | 34 + .../params_go_keywords/ydb/go/query.sql.go | 530 +++++++++++ .../testdata/params_go_keywords/ydb/query.sql | 155 ++++ .../params_go_keywords/ydb/schema.sql | 32 + .../testdata/params_go_keywords/ydb/sqlc.json | 15 + .../testdata/select_in_and/ydb/go/db.go | 31 + .../testdata/select_in_and/ydb/go/models.go | 24 + .../select_in_and/ydb/go/query.sql.go | 44 + .../testdata/select_in_and/ydb/query.sql | 21 + .../testdata/select_in_and/ydb/schema.sql | 25 + .../testdata/select_in_and/ydb/sqlc.json | 15 + .../testdata/select_nested_count/ydb/go/db.go | 31 + .../select_nested_count/ydb/go/models.go | 17 + .../select_nested_count/ydb/go/query.sql.go | 56 ++ .../select_nested_count/ydb/query.sql | 9 + .../select_nested_count/ydb/schema.sql | 16 + .../select_nested_count/ydb/sqlc.json | 15 + .../select_text_array/ydb-go-sdk/go/db.go | 26 + .../select_text_array/ydb-go-sdk/go/models.go | 9 + .../ydb-go-sdk/go/query.sql.go | 54 ++ .../select_text_array/ydb-go-sdk/query.sql | 2 + .../select_text_array/ydb-go-sdk/schema.sql | 1 + .../select_text_array/ydb-go-sdk/sqlc.json | 13 + .../testdata/select_union/ydb/stdlib/go/db.go | 31 + .../select_union/ydb/stdlib/go/models.go | 15 + .../select_union/ydb/stdlib/go/query.sql.go | 132 +++ .../select_union/ydb/stdlib/query.sql | 23 + .../select_union/ydb/stdlib/schema.sql | 5 + .../select_union/ydb/stdlib/sqlc.json | 15 + .../select_union/ydb/ydb-go-sdk/go/db.go | 26 + .../select_union/ydb/ydb-go-sdk/go/models.go | 15 + .../ydb/ydb-go-sdk/go/query.sql.go | 155 ++++ .../select_union/ydb/ydb-go-sdk/query.sql | 23 + .../select_union/ydb/ydb-go-sdk/schema.sql | 5 + .../select_union/ydb/ydb-go-sdk/sqlc.json | 16 + .../endtoend/testdata/upsert/ydb/go/db.go | 26 + .../endtoend/testdata/upsert/ydb/go/models.go | 14 + .../testdata/upsert/ydb/go/query.sql.go | 52 ++ .../endtoend/testdata/upsert/ydb/query.sql | 13 + .../endtoend/testdata/upsert/ydb/schema.sql | 14 + .../endtoend/testdata/upsert/ydb/sqlc.json | 16 + internal/engine/ydb/convert.go | 155 +++- internal/engine/ydb/lib/cpp/datetime.go | 164 ++-- internal/engine/ydb/lib/cpp/digest.go | 36 +- internal/engine/ydb/lib/cpp/hyperscan.go | 16 +- internal/engine/ydb/lib/cpp/ip.go | 24 +- internal/engine/ydb/lib/cpp/math.go | 104 +-- internal/engine/ydb/lib/cpp/pcre.go | 16 +- internal/engine/ydb/lib/cpp/pire.go | 12 +- internal/engine/ydb/lib/cpp/re2.go | 52 +- internal/engine/ydb/lib/cpp/string.go | 28 +- internal/engine/ydb/lib/cpp/unicode.go | 102 +- internal/engine/ydb/lib/cpp/url.go | 88 +- internal/engine/ydb/lib/cpp/yson.go | 132 +-- 73 files changed, 3860 insertions(+), 405 deletions(-) create mode 100644 internal/endtoend/testdata/between_args/ydb/go/db.go create mode 100644 internal/endtoend/testdata/between_args/ydb/go/models.go create mode 100644 internal/endtoend/testdata/between_args/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/between_args/ydb/query.sql create mode 100644 internal/endtoend/testdata/between_args/ydb/schema.sql create mode 100644 internal/endtoend/testdata/between_args/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/builtins/ydb/go/db.go create mode 100644 internal/endtoend/testdata/builtins/ydb/go/models.go create mode 100644 internal/endtoend/testdata/builtins/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/builtins/ydb/query.sql create mode 100644 internal/endtoend/testdata/builtins/ydb/schema.sql create mode 100644 internal/endtoend/testdata/builtins/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/named_param/ydb/go/db.go create mode 100644 internal/endtoend/testdata/named_param/ydb/go/models.go create mode 100644 internal/endtoend/testdata/named_param/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/named_param/ydb/query.sql create mode 100644 internal/endtoend/testdata/named_param/ydb/schema.sql create mode 100644 internal/endtoend/testdata/named_param/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/params_go_keywords/ydb/go/db.go create mode 100644 internal/endtoend/testdata/params_go_keywords/ydb/go/models.go create mode 100644 internal/endtoend/testdata/params_go_keywords/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/params_go_keywords/ydb/query.sql create mode 100644 internal/endtoend/testdata/params_go_keywords/ydb/schema.sql create mode 100644 internal/endtoend/testdata/params_go_keywords/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/select_in_and/ydb/go/db.go create mode 100644 internal/endtoend/testdata/select_in_and/ydb/go/models.go create mode 100644 internal/endtoend/testdata/select_in_and/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_in_and/ydb/query.sql create mode 100644 internal/endtoend/testdata/select_in_and/ydb/schema.sql create mode 100644 internal/endtoend/testdata/select_in_and/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/select_nested_count/ydb/go/db.go create mode 100644 internal/endtoend/testdata/select_nested_count/ydb/go/models.go create mode 100644 internal/endtoend/testdata/select_nested_count/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_nested_count/ydb/query.sql create mode 100644 internal/endtoend/testdata/select_nested_count/ydb/schema.sql create mode 100644 internal/endtoend/testdata/select_nested_count/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_text_array/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/select_text_array/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/select_text_array/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/select_union/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/select_union/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/select_union/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_union/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/select_union/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/select_union/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/upsert/ydb/go/db.go create mode 100644 internal/endtoend/testdata/upsert/ydb/go/models.go create mode 100644 internal/endtoend/testdata/upsert/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/upsert/ydb/query.sql create mode 100644 internal/endtoend/testdata/upsert/ydb/schema.sql create mode 100644 internal/endtoend/testdata/upsert/ydb/sqlc.json diff --git a/internal/endtoend/testdata/between_args/ydb/go/db.go b/internal/endtoend/testdata/between_args/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/between_args/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/between_args/ydb/go/models.go b/internal/endtoend/testdata/between_args/ydb/go/models.go new file mode 100644 index 0000000000..5d811ab385 --- /dev/null +++ b/internal/endtoend/testdata/between_args/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Product struct { + ID int64 + Name string + Price int32 +} diff --git a/internal/endtoend/testdata/between_args/ydb/go/query.sql.go b/internal/endtoend/testdata/between_args/ydb/go/query.sql.go new file mode 100644 index 0000000000..4cb392f637 --- /dev/null +++ b/internal/endtoend/testdata/between_args/ydb/go/query.sql.go @@ -0,0 +1,146 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getBetweenPrices = `-- name: GetBetweenPrices :many +SELECT id, name, price +FROM products +WHERE price BETWEEN $min_price AND $max_price +` + +type GetBetweenPricesParams struct { + MinPrice int32 + MaxPrice int32 +} + +func (q *Queries) GetBetweenPrices(ctx context.Context, arg GetBetweenPricesParams) ([]Product, error) { + rows, err := q.db.QueryContext(ctx, getBetweenPrices, arg.MinPrice, arg.MaxPrice) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Product + for rows.Next() { + var i Product + if err := rows.Scan(&i.ID, &i.Name, &i.Price); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getBetweenPricesNamed = `-- name: GetBetweenPricesNamed :many +SELECT id, name, price +FROM products +WHERE price BETWEEN $min_price AND $max_price +` + +type GetBetweenPricesNamedParams struct { + MinPrice int32 + MaxPrice int32 +} + +func (q *Queries) GetBetweenPricesNamed(ctx context.Context, arg GetBetweenPricesNamedParams) ([]Product, error) { + rows, err := q.db.QueryContext(ctx, getBetweenPricesNamed, arg.MinPrice, arg.MaxPrice) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Product + for rows.Next() { + var i Product + if err := rows.Scan(&i.ID, &i.Name, &i.Price); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getBetweenPricesTable = `-- name: GetBetweenPricesTable :many +SELECT id, name, price +FROM products +WHERE products.price BETWEEN $min_price AND $max_price +` + +type GetBetweenPricesTableParams struct { + MinPrice int32 + MaxPrice int32 +} + +func (q *Queries) GetBetweenPricesTable(ctx context.Context, arg GetBetweenPricesTableParams) ([]Product, error) { + rows, err := q.db.QueryContext(ctx, getBetweenPricesTable, arg.MinPrice, arg.MaxPrice) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Product + for rows.Next() { + var i Product + if err := rows.Scan(&i.ID, &i.Name, &i.Price); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getBetweenPricesTableAlias = `-- name: GetBetweenPricesTableAlias :many +SELECT id, name, price +FROM products AS p +WHERE p.price BETWEEN $min_price AND $max_price +` + +type GetBetweenPricesTableAliasParams struct { + MinPrice int32 + MaxPrice int32 +} + +func (q *Queries) GetBetweenPricesTableAlias(ctx context.Context, arg GetBetweenPricesTableAliasParams) ([]Product, error) { + rows, err := q.db.QueryContext(ctx, getBetweenPricesTableAlias, arg.MinPrice, arg.MaxPrice) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Product + for rows.Next() { + var i Product + if err := rows.Scan(&i.ID, &i.Name, &i.Price); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/between_args/ydb/query.sql b/internal/endtoend/testdata/between_args/ydb/query.sql new file mode 100644 index 0000000000..a70b27aa6a --- /dev/null +++ b/internal/endtoend/testdata/between_args/ydb/query.sql @@ -0,0 +1,19 @@ +-- name: GetBetweenPrices :many +SELECT * +FROM products +WHERE price BETWEEN $min_price AND $max_price; + +-- name: GetBetweenPricesTable :many +SELECT * +FROM products +WHERE products.price BETWEEN $min_price AND $max_price; + +-- name: GetBetweenPricesTableAlias :many +SELECT * +FROM products AS p +WHERE p.price BETWEEN $min_price AND $max_price; + +-- name: GetBetweenPricesNamed :many +SELECT * +FROM products +WHERE price BETWEEN sqlc.arg(min_price) AND sqlc.arg(max_price); diff --git a/internal/endtoend/testdata/between_args/ydb/schema.sql b/internal/endtoend/testdata/between_args/ydb/schema.sql new file mode 100644 index 0000000000..1717277195 --- /dev/null +++ b/internal/endtoend/testdata/between_args/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE products ( + id BigSerial, + name Text NOT NULL, + price Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/between_args/ydb/sqlc.json b/internal/endtoend/testdata/between_args/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/between_args/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/builtins/ydb/go/db.go b/internal/endtoend/testdata/builtins/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/builtins/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/builtins/ydb/go/models.go b/internal/endtoend/testdata/builtins/ydb/go/models.go new file mode 100644 index 0000000000..65ca163572 --- /dev/null +++ b/internal/endtoend/testdata/builtins/ydb/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Dummy struct { + ID int32 + S *string + N *float64 + B *bool +} diff --git a/internal/endtoend/testdata/builtins/ydb/go/query.sql.go b/internal/endtoend/testdata/builtins/ydb/go/query.sql.go new file mode 100644 index 0000000000..e62d077ef7 --- /dev/null +++ b/internal/endtoend/testdata/builtins/ydb/go/query.sql.go @@ -0,0 +1,873 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "time" +) + +const fByteAt = `-- name: FByteAt :one +SELECT ByteAt("abc", 1) +` + +func (q *Queries) FByteAt(ctx context.Context) (uint8, error) { + row := q.db.QueryRowContext(ctx, fByteAt) + var byteat uint8 + err := row.Scan(&byteat) + return byteat, err +} + +const fClearBit = `-- name: FClearBit :one +SELECT ClearBit("a", 0) +` + +func (q *Queries) FClearBit(ctx context.Context) (interface{}, error) { + row := q.db.QueryRowContext(ctx, fClearBit) + var clearbit interface{} + err := row.Scan(&clearbit) + return clearbit, err +} + +const fCurrentUtcDate = `-- name: FCurrentUtcDate :one +SELECT CurrentUtcDate() +` + +func (q *Queries) FCurrentUtcDate(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, fCurrentUtcDate) + var currentutcdate time.Time + err := row.Scan(¤tutcdate) + return currentutcdate, err +} + +const fCurrentUtcDatetime = `-- name: FCurrentUtcDatetime :one +SELECT CurrentUtcDatetime() +` + +func (q *Queries) FCurrentUtcDatetime(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, fCurrentUtcDatetime) + var currentutcdatetime time.Time + err := row.Scan(¤tutcdatetime) + return currentutcdatetime, err +} + +const fCurrentUtcTimestamp = `-- name: FCurrentUtcTimestamp :one +SELECT CurrentUtcTimestamp() +` + +func (q *Queries) FCurrentUtcTimestamp(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, fCurrentUtcTimestamp) + var currentutctimestamp time.Time + err := row.Scan(¤tutctimestamp) + return currentutctimestamp, err +} + +const fDateTimeFrommilliseconds = `-- name: FDateTimeFrommilliseconds :one +SELECT DateTime::Frommilliseconds(1640995200000) +` + +func (q *Queries) FDateTimeFrommilliseconds(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, fDateTimeFrommilliseconds) + var datetime_frommilliseconds time.Time + err := row.Scan(&datetime_frommilliseconds) + return datetime_frommilliseconds, err +} + +const fDateTimeFromseconds = `-- name: FDateTimeFromseconds :one +SELECT DateTime::Fromseconds(1640995200) +` + +func (q *Queries) FDateTimeFromseconds(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, fDateTimeFromseconds) + var datetime_fromseconds time.Time + err := row.Scan(&datetime_fromseconds) + return datetime_fromseconds, err +} + +const fDateTimeGetdayofmonth = `-- name: FDateTimeGetdayofmonth :one +SELECT DateTime::Getdayofmonth(CurrentUtcDate()) +` + +func (q *Queries) FDateTimeGetdayofmonth(ctx context.Context) (uint8, error) { + row := q.db.QueryRowContext(ctx, fDateTimeGetdayofmonth) + var datetime_getdayofmonth uint8 + err := row.Scan(&datetime_getdayofmonth) + return datetime_getdayofmonth, err +} + +const fDateTimeGethour = `-- name: FDateTimeGethour :one +SELECT DateTime::Gethour(CurrentUtcDatetime()) +` + +func (q *Queries) FDateTimeGethour(ctx context.Context) (uint8, error) { + row := q.db.QueryRowContext(ctx, fDateTimeGethour) + var datetime_gethour uint8 + err := row.Scan(&datetime_gethour) + return datetime_gethour, err +} + +const fDateTimeGetminute = `-- name: FDateTimeGetminute :one +SELECT DateTime::Getminute(CurrentUtcDatetime()) +` + +func (q *Queries) FDateTimeGetminute(ctx context.Context) (uint8, error) { + row := q.db.QueryRowContext(ctx, fDateTimeGetminute) + var datetime_getminute uint8 + err := row.Scan(&datetime_getminute) + return datetime_getminute, err +} + +const fDateTimeGetmonth = `-- name: FDateTimeGetmonth :one +SELECT DateTime::Getmonth(CurrentUtcDate()) +` + +func (q *Queries) FDateTimeGetmonth(ctx context.Context) (uint8, error) { + row := q.db.QueryRowContext(ctx, fDateTimeGetmonth) + var datetime_getmonth uint8 + err := row.Scan(&datetime_getmonth) + return datetime_getmonth, err +} + +const fDateTimeGetsecond = `-- name: FDateTimeGetsecond :one +SELECT DateTime::Getsecond(CurrentUtcDatetime()) +` + +func (q *Queries) FDateTimeGetsecond(ctx context.Context) (uint8, error) { + row := q.db.QueryRowContext(ctx, fDateTimeGetsecond) + var datetime_getsecond uint8 + err := row.Scan(&datetime_getsecond) + return datetime_getsecond, err +} + +const fDateTimeGetyear = `-- name: FDateTimeGetyear :one +SELECT DateTime::Getyear(CurrentUtcDate()) +` + +// DateTime functions with concrete return types +func (q *Queries) FDateTimeGetyear(ctx context.Context) (uint16, error) { + row := q.db.QueryRowContext(ctx, fDateTimeGetyear) + var datetime_getyear uint16 + err := row.Scan(&datetime_getyear) + return datetime_getyear, err +} + +const fDateTimeIntervalfromdays = `-- name: FDateTimeIntervalfromdays :one +SELECT DateTime::Intervalfromdays(7) +` + +func (q *Queries) FDateTimeIntervalfromdays(ctx context.Context) (time.Duration, error) { + row := q.db.QueryRowContext(ctx, fDateTimeIntervalfromdays) + var datetime_intervalfromdays time.Duration + err := row.Scan(&datetime_intervalfromdays) + return datetime_intervalfromdays, err +} + +const fEndsWith = `-- name: FEndsWith :one +SELECT EndsWith("abcdef", "def") +` + +func (q *Queries) FEndsWith(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fEndsWith) + var endswith bool + err := row.Scan(&endswith) + return endswith, err +} + +const fFind2 = `-- name: FFind2 :one +SELECT Find("abcdef", "cd") +` + +func (q *Queries) FFind2(ctx context.Context) (uint32, error) { + row := q.db.QueryRowContext(ctx, fFind2) + var find uint32 + err := row.Scan(&find) + return find, err +} + +const fFind3 = `-- name: FFind3 :one +SELECT Find("abcdef", "c", 3) +` + +func (q *Queries) FFind3(ctx context.Context) (uint32, error) { + row := q.db.QueryRowContext(ctx, fFind3) + var find uint32 + err := row.Scan(&find) + return find, err +} + +const fFlipBit = `-- name: FFlipBit :one +SELECT FlipBit("a", 0) +` + +func (q *Queries) FFlipBit(ctx context.Context) (interface{}, error) { + row := q.db.QueryRowContext(ctx, fFlipBit) + var flipbit interface{} + err := row.Scan(&flipbit) + return flipbit, err +} + +const fIf2 = `-- name: FIf2 :one +SELECT IF(true, 1) +` + +func (q *Queries) FIf2(ctx context.Context) (interface{}, error) { + row := q.db.QueryRowContext(ctx, fIf2) + var if_ interface{} + err := row.Scan(&if_) + return if_, err +} + +const fIf3 = `-- name: FIf3 :one +SELECT IF(false, 1, 2) +` + +func (q *Queries) FIf3(ctx context.Context) (interface{}, error) { + row := q.db.QueryRowContext(ctx, fIf3) + var if_ interface{} + err := row.Scan(&if_) + return if_, err +} + +const fLen = `-- name: FLen :one +SELECT LEN("world") +` + +func (q *Queries) FLen(ctx context.Context) (uint32, error) { + row := q.db.QueryRowContext(ctx, fLen) + var len uint32 + err := row.Scan(&len) + return len, err +} + +const fLength = `-- name: FLength :one +SELECT LENGTH("hello") +` + +// Basic functions with concrete return types +func (q *Queries) FLength(ctx context.Context) (uint32, error) { + row := q.db.QueryRowContext(ctx, fLength) + var length uint32 + err := row.Scan(&length) + return length, err +} + +const fMathAbs = `-- name: FMathAbs :one +SELECT Math::Abs(-5.5) +` + +func (q *Queries) FMathAbs(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathAbs) + var math_abs float64 + err := row.Scan(&math_abs) + return math_abs, err +} + +const fMathAcos = `-- name: FMathAcos :one +SELECT Math::Acos(0.5) +` + +func (q *Queries) FMathAcos(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathAcos) + var math_acos float64 + err := row.Scan(&math_acos) + return math_acos, err +} + +const fMathAsin = `-- name: FMathAsin :one +SELECT Math::Asin(0.5) +` + +func (q *Queries) FMathAsin(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathAsin) + var math_asin float64 + err := row.Scan(&math_asin) + return math_asin, err +} + +const fMathAtan = `-- name: FMathAtan :one +SELECT Math::Atan(1.0) +` + +func (q *Queries) FMathAtan(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathAtan) + var math_atan float64 + err := row.Scan(&math_atan) + return math_atan, err +} + +const fMathAtan2 = `-- name: FMathAtan2 :one +SELECT Math::Atan2(1.0, 1.0) +` + +func (q *Queries) FMathAtan2(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathAtan2) + var math_atan2 float64 + err := row.Scan(&math_atan2) + return math_atan2, err +} + +const fMathCbrt = `-- name: FMathCbrt :one +SELECT Math::Cbrt(27.0) +` + +func (q *Queries) FMathCbrt(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathCbrt) + var math_cbrt float64 + err := row.Scan(&math_cbrt) + return math_cbrt, err +} + +const fMathCeil = `-- name: FMathCeil :one +SELECT Math::Ceil(4.2) +` + +func (q *Queries) FMathCeil(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathCeil) + var math_ceil float64 + err := row.Scan(&math_ceil) + return math_ceil, err +} + +const fMathCos = `-- name: FMathCos :one +SELECT Math::Cos(0.0) +` + +func (q *Queries) FMathCos(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathCos) + var math_cos float64 + err := row.Scan(&math_cos) + return math_cos, err +} + +const fMathE = `-- name: FMathE :one +SELECT Math::E() +` + +func (q *Queries) FMathE(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathE) + var math_e float64 + err := row.Scan(&math_e) + return math_e, err +} + +const fMathExp = `-- name: FMathExp :one +SELECT Math::Exp(1.0) +` + +func (q *Queries) FMathExp(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathExp) + var math_exp float64 + err := row.Scan(&math_exp) + return math_exp, err +} + +const fMathFloor = `-- name: FMathFloor :one +SELECT Math::Floor(4.8) +` + +func (q *Queries) FMathFloor(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathFloor) + var math_floor float64 + err := row.Scan(&math_floor) + return math_floor, err +} + +const fMathFmod = `-- name: FMathFmod :one +SELECT Math::Fmod(10.5, 3.0) +` + +func (q *Queries) FMathFmod(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathFmod) + var math_fmod float64 + err := row.Scan(&math_fmod) + return math_fmod, err +} + +const fMathFuzzyequals = `-- name: FMathFuzzyequals :one +SELECT Math::Fuzzyequals(1.0, 1.0001) +` + +func (q *Queries) FMathFuzzyequals(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fMathFuzzyequals) + var math_fuzzyequals bool + err := row.Scan(&math_fuzzyequals) + return math_fuzzyequals, err +} + +const fMathHypot = `-- name: FMathHypot :one +SELECT Math::Hypot(3.0, 4.0) +` + +func (q *Queries) FMathHypot(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathHypot) + var math_hypot float64 + err := row.Scan(&math_hypot) + return math_hypot, err +} + +const fMathIsfinite = `-- name: FMathIsfinite :one +SELECT Math::Isfinite(5.0) +` + +func (q *Queries) FMathIsfinite(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fMathIsfinite) + var math_isfinite bool + err := row.Scan(&math_isfinite) + return math_isfinite, err +} + +const fMathIsinf = `-- name: FMathIsinf :one +SELECT Math::Isinf(1.0/0.0) +` + +func (q *Queries) FMathIsinf(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fMathIsinf) + var math_isinf bool + err := row.Scan(&math_isinf) + return math_isinf, err +} + +const fMathIsnan = `-- name: FMathIsnan :one +SELECT Math::Isnan(0.0/0.0) +` + +func (q *Queries) FMathIsnan(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fMathIsnan) + var math_isnan bool + err := row.Scan(&math_isnan) + return math_isnan, err +} + +const fMathLog = `-- name: FMathLog :one +SELECT Math::Log(2.718281828) +` + +func (q *Queries) FMathLog(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathLog) + var math_log float64 + err := row.Scan(&math_log) + return math_log, err +} + +const fMathLog10 = `-- name: FMathLog10 :one +SELECT Math::Log10(100.0) +` + +func (q *Queries) FMathLog10(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathLog10) + var math_log10 float64 + err := row.Scan(&math_log10) + return math_log10, err +} + +const fMathLog2 = `-- name: FMathLog2 :one +SELECT Math::Log2(8.0) +` + +func (q *Queries) FMathLog2(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathLog2) + var math_log2 float64 + err := row.Scan(&math_log2) + return math_log2, err +} + +const fMathMod = `-- name: FMathMod :one +SELECT Math::Mod(10, 3) +` + +func (q *Queries) FMathMod(ctx context.Context) (*int64, error) { + row := q.db.QueryRowContext(ctx, fMathMod) + var math_mod *int64 + err := row.Scan(&math_mod) + return math_mod, err +} + +const fMathPi = `-- name: FMathPi :one +SELECT Math::Pi() +` + +// Math functions with concrete return types +func (q *Queries) FMathPi(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathPi) + var math_pi float64 + err := row.Scan(&math_pi) + return math_pi, err +} + +const fMathPow = `-- name: FMathPow :one +SELECT Math::Pow(2.0, 3.0) +` + +func (q *Queries) FMathPow(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathPow) + var math_pow float64 + err := row.Scan(&math_pow) + return math_pow, err +} + +const fMathRem = `-- name: FMathRem :one +SELECT Math::Rem(10, 3) +` + +func (q *Queries) FMathRem(ctx context.Context) (*int64, error) { + row := q.db.QueryRowContext(ctx, fMathRem) + var math_rem *int64 + err := row.Scan(&math_rem) + return math_rem, err +} + +const fMathRound = `-- name: FMathRound :one +SELECT Math::Round(4.6) +` + +func (q *Queries) FMathRound(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathRound) + var math_round float64 + err := row.Scan(&math_round) + return math_round, err +} + +const fMathRound2 = `-- name: FMathRound2 :one +SELECT Math::Round(4.567, 2) +` + +func (q *Queries) FMathRound2(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathRound2) + var math_round float64 + err := row.Scan(&math_round) + return math_round, err +} + +const fMathSin = `-- name: FMathSin :one +SELECT Math::Sin(0.0) +` + +func (q *Queries) FMathSin(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathSin) + var math_sin float64 + err := row.Scan(&math_sin) + return math_sin, err +} + +const fMathSqrt = `-- name: FMathSqrt :one +SELECT Math::Sqrt(16.0) +` + +func (q *Queries) FMathSqrt(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathSqrt) + var math_sqrt float64 + err := row.Scan(&math_sqrt) + return math_sqrt, err +} + +const fMathTan = `-- name: FMathTan :one +SELECT Math::Tan(0.0) +` + +func (q *Queries) FMathTan(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathTan) + var math_tan float64 + err := row.Scan(&math_tan) + return math_tan, err +} + +const fMathTrunc = `-- name: FMathTrunc :one +SELECT Math::Trunc(4.9) +` + +func (q *Queries) FMathTrunc(ctx context.Context) (float64, error) { + row := q.db.QueryRowContext(ctx, fMathTrunc) + var math_trunc float64 + err := row.Scan(&math_trunc) + return math_trunc, err +} + +const fRFind2 = `-- name: FRFind2 :one +SELECT RFind("ababa", "ba") +` + +func (q *Queries) FRFind2(ctx context.Context) (uint32, error) { + row := q.db.QueryRowContext(ctx, fRFind2) + var rfind uint32 + err := row.Scan(&rfind) + return rfind, err +} + +const fSetBit = `-- name: FSetBit :one +SELECT SetBit("a", 0) +` + +func (q *Queries) FSetBit(ctx context.Context) (interface{}, error) { + row := q.db.QueryRowContext(ctx, fSetBit) + var setbit interface{} + err := row.Scan(&setbit) + return setbit, err +} + +const fStartsWith = `-- name: FStartsWith :one +SELECT StartsWith("abcdef", "abc") +` + +func (q *Queries) FStartsWith(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fStartsWith) + var startswith bool + err := row.Scan(&startswith) + return startswith, err +} + +const fSubstring2 = `-- name: FSubstring2 :one +SELECT Substring("abcdef", 2) +` + +func (q *Queries) FSubstring2(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fSubstring2) + var substring string + err := row.Scan(&substring) + return substring, err +} + +const fSubstring3 = `-- name: FSubstring3 :one +SELECT Substring("abcdef", 2, 3) +` + +func (q *Queries) FSubstring3(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fSubstring3) + var substring string + err := row.Scan(&substring) + return substring, err +} + +const fTestBit = `-- name: FTestBit :one +SELECT TestBit("a", 0) +` + +func (q *Queries) FTestBit(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fTestBit) + var testbit bool + err := row.Scan(&testbit) + return testbit, err +} + +const fToBytes = `-- name: FToBytes :one +SELECT ToBytes("abc") +` + +func (q *Queries) FToBytes(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fToBytes) + var tobytes string + err := row.Scan(&tobytes) + return tobytes, err +} + +const fUnicodeFind = `-- name: FUnicodeFind :one +SELECT Unicode::Find("hello", "ll") +` + +func (q *Queries) FUnicodeFind(ctx context.Context) (uint64, error) { + row := q.db.QueryRowContext(ctx, fUnicodeFind) + var unicode_find uint64 + err := row.Scan(&unicode_find) + return unicode_find, err +} + +const fUnicodeGetlength = `-- name: FUnicodeGetlength :one +SELECT Unicode::Getlength("привет") +` + +func (q *Queries) FUnicodeGetlength(ctx context.Context) (uint64, error) { + row := q.db.QueryRowContext(ctx, fUnicodeGetlength) + var unicode_getlength uint64 + err := row.Scan(&unicode_getlength) + return unicode_getlength, err +} + +const fUnicodeIsalnum = `-- name: FUnicodeIsalnum :one +SELECT Unicode::Isalnum("hello123") +` + +func (q *Queries) FUnicodeIsalnum(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIsalnum) + var unicode_isalnum bool + err := row.Scan(&unicode_isalnum) + return unicode_isalnum, err +} + +const fUnicodeIsalpha = `-- name: FUnicodeIsalpha :one +SELECT Unicode::Isalpha("hello") +` + +func (q *Queries) FUnicodeIsalpha(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIsalpha) + var unicode_isalpha bool + err := row.Scan(&unicode_isalpha) + return unicode_isalpha, err +} + +const fUnicodeIsascii = `-- name: FUnicodeIsascii :one +SELECT Unicode::Isascii("hello") +` + +func (q *Queries) FUnicodeIsascii(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIsascii) + var unicode_isascii bool + err := row.Scan(&unicode_isascii) + return unicode_isascii, err +} + +const fUnicodeIshex = `-- name: FUnicodeIshex :one +SELECT Unicode::Ishex("FF") +` + +func (q *Queries) FUnicodeIshex(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIshex) + var unicode_ishex bool + err := row.Scan(&unicode_ishex) + return unicode_ishex, err +} + +const fUnicodeIslower = `-- name: FUnicodeIslower :one +SELECT Unicode::Islower("hello") +` + +func (q *Queries) FUnicodeIslower(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIslower) + var unicode_islower bool + err := row.Scan(&unicode_islower) + return unicode_islower, err +} + +const fUnicodeIsspace = `-- name: FUnicodeIsspace :one +SELECT Unicode::Isspace(" ") +` + +func (q *Queries) FUnicodeIsspace(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIsspace) + var unicode_isspace bool + err := row.Scan(&unicode_isspace) + return unicode_isspace, err +} + +const fUnicodeIsupper = `-- name: FUnicodeIsupper :one +SELECT Unicode::Isupper("HELLO") +` + +func (q *Queries) FUnicodeIsupper(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIsupper) + var unicode_isupper bool + err := row.Scan(&unicode_isupper) + return unicode_isupper, err +} + +const fUnicodeIsutf = `-- name: FUnicodeIsutf :one +SELECT Unicode::Isutf("hello") +` + +// Unicode functions with concrete return types +func (q *Queries) FUnicodeIsutf(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, fUnicodeIsutf) + var unicode_isutf bool + err := row.Scan(&unicode_isutf) + return unicode_isutf, err +} + +const fUnicodeLevensteindistance = `-- name: FUnicodeLevensteindistance :one +SELECT Unicode::Levensteindistance("hello", "hallo") +` + +func (q *Queries) FUnicodeLevensteindistance(ctx context.Context) (uint64, error) { + row := q.db.QueryRowContext(ctx, fUnicodeLevensteindistance) + var unicode_levensteindistance uint64 + err := row.Scan(&unicode_levensteindistance) + return unicode_levensteindistance, err +} + +const fUnicodeNormalize = `-- name: FUnicodeNormalize :one +SELECT Unicode::Normalize("café") +` + +func (q *Queries) FUnicodeNormalize(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fUnicodeNormalize) + var unicode_normalize string + err := row.Scan(&unicode_normalize) + return unicode_normalize, err +} + +const fUnicodeReverse = `-- name: FUnicodeReverse :one +SELECT Unicode::Reverse("hello") +` + +func (q *Queries) FUnicodeReverse(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fUnicodeReverse) + var unicode_reverse string + err := row.Scan(&unicode_reverse) + return unicode_reverse, err +} + +const fUnicodeRfind = `-- name: FUnicodeRfind :one +SELECT Unicode::Rfind("hello", "l") +` + +func (q *Queries) FUnicodeRfind(ctx context.Context) (uint64, error) { + row := q.db.QueryRowContext(ctx, fUnicodeRfind) + var unicode_rfind uint64 + err := row.Scan(&unicode_rfind) + return unicode_rfind, err +} + +const fUnicodeSubstring = `-- name: FUnicodeSubstring :one +SELECT Unicode::Substring("hello", 1, 3) +` + +func (q *Queries) FUnicodeSubstring(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fUnicodeSubstring) + var unicode_substring string + err := row.Scan(&unicode_substring) + return unicode_substring, err +} + +const fUnicodeTolower = `-- name: FUnicodeTolower :one +SELECT Unicode::Tolower("HELLO") +` + +func (q *Queries) FUnicodeTolower(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fUnicodeTolower) + var unicode_tolower string + err := row.Scan(&unicode_tolower) + return unicode_tolower, err +} + +const fUnicodeTouint64 = `-- name: FUnicodeTouint64 :one +SELECT Unicode::Touint64("123") +` + +func (q *Queries) FUnicodeTouint64(ctx context.Context) (uint64, error) { + row := q.db.QueryRowContext(ctx, fUnicodeTouint64) + var unicode_touint64 uint64 + err := row.Scan(&unicode_touint64) + return unicode_touint64, err +} + +const fUnicodeToupper = `-- name: FUnicodeToupper :one +SELECT Unicode::Toupper("hello") +` + +func (q *Queries) FUnicodeToupper(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fUnicodeToupper) + var unicode_toupper string + err := row.Scan(&unicode_toupper) + return unicode_toupper, err +} + +const fVersion = `-- name: FVersion :one +SELECT Version() +` + +func (q *Queries) FVersion(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, fVersion) + var version string + err := row.Scan(&version) + return version, err +} diff --git a/internal/endtoend/testdata/builtins/ydb/query.sql b/internal/endtoend/testdata/builtins/ydb/query.sql new file mode 100644 index 0000000000..afcdf1dbb1 --- /dev/null +++ b/internal/endtoend/testdata/builtins/ydb/query.sql @@ -0,0 +1,163 @@ +-- Basic functions with concrete return types +-- name: FLength :one +SELECT LENGTH("hello"); +-- name: FLen :one +SELECT LEN("world"); +-- name: FSubstring2 :one +SELECT Substring("abcdef", 2); +-- name: FSubstring3 :one +SELECT Substring("abcdef", 2, 3); +-- name: FFind2 :one +SELECT Find("abcdef", "cd"); +-- name: FFind3 :one +SELECT Find("abcdef", "c", 3); +-- name: FRFind2 :one +SELECT RFind("ababa", "ba"); +-- name: FStartsWith :one +SELECT StartsWith("abcdef", "abc"); +-- name: FEndsWith :one +SELECT EndsWith("abcdef", "def"); +-- name: FIf2 :one +SELECT IF(true, 1); +-- name: FIf3 :one +SELECT IF(false, 1, 2); +-- name: FCurrentUtcDate :one +SELECT CurrentUtcDate(); +-- name: FCurrentUtcDatetime :one +SELECT CurrentUtcDatetime(); +-- name: FCurrentUtcTimestamp :one +SELECT CurrentUtcTimestamp(); +-- name: FVersion :one +SELECT Version(); +-- name: FToBytes :one +SELECT ToBytes("abc"); +-- name: FByteAt :one +SELECT ByteAt("abc", 1); +-- name: FTestBit :one +SELECT TestBit("a", 0); +-- name: FClearBit :one +SELECT ClearBit("a", 0); +-- name: FSetBit :one +SELECT SetBit("a", 0); +-- name: FFlipBit :one +SELECT FlipBit("a", 0); + +-- Math functions with concrete return types +-- name: FMathPi :one +SELECT Math::Pi(); +-- name: FMathE :one +SELECT Math::E(); +-- name: FMathAbs :one +SELECT Math::Abs(-5.5); +-- name: FMathAcos :one +SELECT Math::Acos(0.5); +-- name: FMathAsin :one +SELECT Math::Asin(0.5); +-- name: FMathAtan :one +SELECT Math::Atan(1.0); +-- name: FMathCbrt :one +SELECT Math::Cbrt(27.0); +-- name: FMathCeil :one +SELECT Math::Ceil(4.2); +-- name: FMathCos :one +SELECT Math::Cos(0.0); +-- name: FMathExp :one +SELECT Math::Exp(1.0); +-- name: FMathFloor :one +SELECT Math::Floor(4.8); +-- name: FMathLog :one +SELECT Math::Log(2.718281828); +-- name: FMathLog2 :one +SELECT Math::Log2(8.0); +-- name: FMathLog10 :one +SELECT Math::Log10(100.0); +-- name: FMathRound :one +SELECT Math::Round(4.6); +-- name: FMathRound2 :one +SELECT Math::Round(4.567, 2); +-- name: FMathSin :one +SELECT Math::Sin(0.0); +-- name: FMathSqrt :one +SELECT Math::Sqrt(16.0); +-- name: FMathTan :one +SELECT Math::Tan(0.0); +-- name: FMathTrunc :one +SELECT Math::Trunc(4.9); +-- name: FMathAtan2 :one +SELECT Math::Atan2(1.0, 1.0); +-- name: FMathPow :one +SELECT Math::Pow(2.0, 3.0); +-- name: FMathHypot :one +SELECT Math::Hypot(3.0, 4.0); +-- name: FMathFmod :one +SELECT Math::Fmod(10.5, 3.0); +-- name: FMathIsinf :one +SELECT Math::Isinf(1.0/0.0); +-- name: FMathIsnan :one +SELECT Math::Isnan(0.0/0.0); +-- name: FMathIsfinite :one +SELECT Math::Isfinite(5.0); +-- name: FMathFuzzyequals :one +SELECT Math::Fuzzyequals(1.0, 1.0001); +-- name: FMathMod :one +SELECT Math::Mod(10, 3); +-- name: FMathRem :one +SELECT Math::Rem(10, 3); + +-- DateTime functions with concrete return types +-- name: FDateTimeGetyear :one +SELECT DateTime::Getyear(CurrentUtcDate()); +-- name: FDateTimeGetmonth :one +SELECT DateTime::Getmonth(CurrentUtcDate()); +-- name: FDateTimeGetdayofmonth :one +SELECT DateTime::Getdayofmonth(CurrentUtcDate()); +-- name: FDateTimeGethour :one +SELECT DateTime::Gethour(CurrentUtcDatetime()); +-- name: FDateTimeGetminute :one +SELECT DateTime::Getminute(CurrentUtcDatetime()); +-- name: FDateTimeGetsecond :one +SELECT DateTime::Getsecond(CurrentUtcDatetime()); +-- name: FDateTimeFromseconds :one +SELECT DateTime::Fromseconds(1640995200); +-- name: FDateTimeFrommilliseconds :one +SELECT DateTime::Frommilliseconds(1640995200000); +-- name: FDateTimeIntervalfromdays :one +SELECT DateTime::Intervalfromdays(7); + +-- Unicode functions with concrete return types +-- name: FUnicodeIsutf :one +SELECT Unicode::Isutf("hello"); +-- name: FUnicodeGetlength :one +SELECT Unicode::Getlength("привет"); +-- name: FUnicodeFind :one +SELECT Unicode::Find("hello", "ll"); +-- name: FUnicodeRfind :one +SELECT Unicode::Rfind("hello", "l"); +-- name: FUnicodeSubstring :one +SELECT Unicode::Substring("hello", 1, 3); +-- name: FUnicodeNormalize :one +SELECT Unicode::Normalize("café"); +-- name: FUnicodeTolower :one +SELECT Unicode::Tolower("HELLO"); +-- name: FUnicodeToupper :one +SELECT Unicode::Toupper("hello"); +-- name: FUnicodeReverse :one +SELECT Unicode::Reverse("hello"); +-- name: FUnicodeIsascii :one +SELECT Unicode::Isascii("hello"); +-- name: FUnicodeIsspace :one +SELECT Unicode::Isspace(" "); +-- name: FUnicodeIsupper :one +SELECT Unicode::Isupper("HELLO"); +-- name: FUnicodeIslower :one +SELECT Unicode::Islower("hello"); +-- name: FUnicodeIsalpha :one +SELECT Unicode::Isalpha("hello"); +-- name: FUnicodeIsalnum :one +SELECT Unicode::Isalnum("hello123"); +-- name: FUnicodeIshex :one +SELECT Unicode::Ishex("FF"); +-- name: FUnicodeTouint64 :one +SELECT Unicode::Touint64("123"); +-- name: FUnicodeLevensteindistance :one +SELECT Unicode::Levensteindistance("hello", "hallo"); diff --git a/internal/endtoend/testdata/builtins/ydb/schema.sql b/internal/endtoend/testdata/builtins/ydb/schema.sql new file mode 100644 index 0000000000..6babf0f48d --- /dev/null +++ b/internal/endtoend/testdata/builtins/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE dummy ( + id Int32, + s Text, + n Double, + b Bool, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/builtins/ydb/sqlc.json b/internal/endtoend/testdata/builtins/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/builtins/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/named_param/ydb/go/db.go b/internal/endtoend/testdata/named_param/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/named_param/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/named_param/ydb/go/models.go b/internal/endtoend/testdata/named_param/ydb/go/models.go new file mode 100644 index 0000000000..7d01ec0654 --- /dev/null +++ b/internal/endtoend/testdata/named_param/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Name string + Bio string +} diff --git a/internal/endtoend/testdata/named_param/ydb/go/query.sql.go b/internal/endtoend/testdata/named_param/ydb/go/query.sql.go new file mode 100644 index 0000000000..777be0c5bb --- /dev/null +++ b/internal/endtoend/testdata/named_param/ydb/go/query.sql.go @@ -0,0 +1,128 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const atParams = `-- name: AtParams :many +SELECT name FROM foo WHERE name = $slug AND CAST($filter AS Bool) +` + +type AtParamsParams struct { + Slug string + Filter bool +} + +func (q *Queries) AtParams(ctx context.Context, arg AtParamsParams) ([]string, error) { + rows, err := q.db.QueryContext(ctx, atParams, arg.Slug, arg.Filter) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const funcParams = `-- name: FuncParams :many +SELECT name FROM foo WHERE name = $slug AND CAST($filter AS Bool) +` + +type FuncParamsParams struct { + Slug string + Filter bool +} + +func (q *Queries) FuncParams(ctx context.Context, arg FuncParamsParams) ([]string, error) { + rows, err := q.db.QueryContext(ctx, funcParams, arg.Slug, arg.Filter) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const insertAtParams = `-- name: InsertAtParams :one +INSERT INTO foo(name, bio) VALUES ($name, $bio) RETURNING name +` + +type InsertAtParamsParams struct { + Name string + Bio string +} + +func (q *Queries) InsertAtParams(ctx context.Context, arg InsertAtParamsParams) (string, error) { + row := q.db.QueryRowContext(ctx, insertAtParams, arg.Name, arg.Bio) + var name string + err := row.Scan(&name) + return name, err +} + +const insertFuncParams = `-- name: InsertFuncParams :one +INSERT INTO foo(name, bio) VALUES ($name, $bio) RETURNING name +` + +type InsertFuncParamsParams struct { + Name string + Bio string +} + +func (q *Queries) InsertFuncParams(ctx context.Context, arg InsertFuncParamsParams) (string, error) { + row := q.db.QueryRowContext(ctx, insertFuncParams, arg.Name, arg.Bio) + var name string + err := row.Scan(&name) + return name, err +} + +const update = `-- name: Update :one +UPDATE foo +SET + name = CASE WHEN CAST($set_name AS Bool) + THEN CAST($name AS Text) + ELSE name + END +RETURNING name, bio +` + +type UpdateParams struct { + SetName bool + Name string +} + +func (q *Queries) Update(ctx context.Context, arg UpdateParams) (Foo, error) { + row := q.db.QueryRowContext(ctx, update, arg.SetName, arg.Name) + var i Foo + err := row.Scan(&i.Name, &i.Bio) + return i, err +} diff --git a/internal/endtoend/testdata/named_param/ydb/query.sql b/internal/endtoend/testdata/named_param/ydb/query.sql new file mode 100644 index 0000000000..ba617568cc --- /dev/null +++ b/internal/endtoend/testdata/named_param/ydb/query.sql @@ -0,0 +1,23 @@ +-- name: FuncParams :many +SELECT name FROM foo WHERE name = sqlc.arg(slug) AND CAST(sqlc.arg(filter) AS Bool); + +-- name: AtParams :many +SELECT name FROM foo WHERE name = $slug AND CAST($filter AS Bool); + +-- name: InsertFuncParams :one +INSERT INTO foo(name, bio) VALUES (sqlc.arg(name), sqlc.arg(bio)) RETURNING name; + +-- name: InsertAtParams :one +INSERT INTO foo(name, bio) VALUES ($name, $bio) RETURNING name; + +-- name: Update :one +UPDATE foo +SET + name = CASE WHEN CAST($set_name AS Bool) + THEN CAST($name AS Text) + ELSE name + END +RETURNING *; + + + diff --git a/internal/endtoend/testdata/named_param/ydb/schema.sql b/internal/endtoend/testdata/named_param/ydb/schema.sql new file mode 100644 index 0000000000..f5b3431310 --- /dev/null +++ b/internal/endtoend/testdata/named_param/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo (name Text NOT NULL, bio Text NOT NULL, PRIMARY KEY (name)); + + + diff --git a/internal/endtoend/testdata/named_param/ydb/sqlc.json b/internal/endtoend/testdata/named_param/ydb/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/named_param/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/params_go_keywords/ydb/go/db.go b/internal/endtoend/testdata/params_go_keywords/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/params_go_keywords/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/params_go_keywords/ydb/go/models.go b/internal/endtoend/testdata/params_go_keywords/ydb/go/models.go new file mode 100644 index 0000000000..89a26a6be8 --- /dev/null +++ b/internal/endtoend/testdata/params_go_keywords/ydb/go/models.go @@ -0,0 +1,34 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type GoKeyword struct { + Break *string + Default *string + Func *string + Interface *string + Select *string + Case *string + Defer *string + Go *string + Map *string + Struct *string + Chan *string + Else *string + Goto *string + Package *string + Switch *string + Const *string + Fallthrough *string + If *string + Range *string + Type *string + Continue *string + For *string + Import *string + Return *string + Var *string + Q *string +} diff --git a/internal/endtoend/testdata/params_go_keywords/ydb/go/query.sql.go b/internal/endtoend/testdata/params_go_keywords/ydb/go/query.sql.go new file mode 100644 index 0000000000..e53fad1718 --- /dev/null +++ b/internal/endtoend/testdata/params_go_keywords/ydb/go/query.sql.go @@ -0,0 +1,530 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const keywordBreak = `-- name: KeywordBreak :exec +SELECT CAST($break AS Text) +` + +func (q *Queries) KeywordBreak(ctx context.Context, break_ string) error { + _, err := q.db.ExecContext(ctx, keywordBreak, break_) + return err +} + +const keywordCase = `-- name: KeywordCase :exec +SELECT CAST($case AS Text) +` + +func (q *Queries) KeywordCase(ctx context.Context, case_ string) error { + _, err := q.db.ExecContext(ctx, keywordCase, case_) + return err +} + +const keywordChan = `-- name: KeywordChan :exec +SELECT CAST($chan AS Text) +` + +func (q *Queries) KeywordChan(ctx context.Context, chan_ string) error { + _, err := q.db.ExecContext(ctx, keywordChan, chan_) + return err +} + +const keywordConst = `-- name: KeywordConst :exec +SELECT CAST($const AS Text) +` + +func (q *Queries) KeywordConst(ctx context.Context, const_ string) error { + _, err := q.db.ExecContext(ctx, keywordConst, const_) + return err +} + +const keywordContinue = `-- name: KeywordContinue :exec +SELECT CAST($continue AS Text) +` + +func (q *Queries) KeywordContinue(ctx context.Context, continue_ string) error { + _, err := q.db.ExecContext(ctx, keywordContinue, continue_) + return err +} + +const keywordDefault = `-- name: KeywordDefault :exec +SELECT CAST($default AS Text) +` + +func (q *Queries) KeywordDefault(ctx context.Context, default_ string) error { + _, err := q.db.ExecContext(ctx, keywordDefault, default_) + return err +} + +const keywordDefer = `-- name: KeywordDefer :exec +SELECT CAST($defer AS Text) +` + +func (q *Queries) KeywordDefer(ctx context.Context, defer_ string) error { + _, err := q.db.ExecContext(ctx, keywordDefer, defer_) + return err +} + +const keywordElse = `-- name: KeywordElse :exec +SELECT CAST($else AS Text) +` + +func (q *Queries) KeywordElse(ctx context.Context, else_ string) error { + _, err := q.db.ExecContext(ctx, keywordElse, else_) + return err +} + +const keywordFallthrough = `-- name: KeywordFallthrough :exec +SELECT CAST($fallthrough AS Text) +` + +func (q *Queries) KeywordFallthrough(ctx context.Context, fallthrough_ string) error { + _, err := q.db.ExecContext(ctx, keywordFallthrough, fallthrough_) + return err +} + +const keywordFor = `-- name: KeywordFor :exec +SELECT CAST($for AS Text) +` + +func (q *Queries) KeywordFor(ctx context.Context, for_ string) error { + _, err := q.db.ExecContext(ctx, keywordFor, for_) + return err +} + +const keywordFunc = `-- name: KeywordFunc :exec +SELECT CAST($func AS Text) +` + +func (q *Queries) KeywordFunc(ctx context.Context, func_ string) error { + _, err := q.db.ExecContext(ctx, keywordFunc, func_) + return err +} + +const keywordGo = `-- name: KeywordGo :exec +SELECT CAST($go AS Text) +` + +func (q *Queries) KeywordGo(ctx context.Context, go_ string) error { + _, err := q.db.ExecContext(ctx, keywordGo, go_) + return err +} + +const keywordGoto = `-- name: KeywordGoto :exec +SELECT CAST($goto AS Text) +` + +func (q *Queries) KeywordGoto(ctx context.Context, goto_ string) error { + _, err := q.db.ExecContext(ctx, keywordGoto, goto_) + return err +} + +const keywordIf = `-- name: KeywordIf :exec +SELECT CAST($if AS Text) +` + +func (q *Queries) KeywordIf(ctx context.Context, if_ string) error { + _, err := q.db.ExecContext(ctx, keywordIf, if_) + return err +} + +const keywordImport = `-- name: KeywordImport :exec +SELECT CAST($import AS Text) +` + +func (q *Queries) KeywordImport(ctx context.Context, import_ string) error { + _, err := q.db.ExecContext(ctx, keywordImport, import_) + return err +} + +const keywordInterface = `-- name: KeywordInterface :exec +SELECT CAST($interface AS Text) +` + +func (q *Queries) KeywordInterface(ctx context.Context, interface_ string) error { + _, err := q.db.ExecContext(ctx, keywordInterface, interface_) + return err +} + +const keywordMap = `-- name: KeywordMap :exec +SELECT CAST($map AS Text) +` + +func (q *Queries) KeywordMap(ctx context.Context, map_ string) error { + _, err := q.db.ExecContext(ctx, keywordMap, map_) + return err +} + +const keywordPackage = `-- name: KeywordPackage :exec +SELECT CAST($package AS Text) +` + +func (q *Queries) KeywordPackage(ctx context.Context, package_ string) error { + _, err := q.db.ExecContext(ctx, keywordPackage, package_) + return err +} + +const keywordQ = `-- name: KeywordQ :exec +SELECT CAST($q AS Text) +` + +func (q *Queries) KeywordQ(ctx context.Context, q_ string) error { + _, err := q.db.ExecContext(ctx, keywordQ, q_) + return err +} + +const keywordRange = `-- name: KeywordRange :exec +SELECT CAST($range AS Text) +` + +func (q *Queries) KeywordRange(ctx context.Context, range_ string) error { + _, err := q.db.ExecContext(ctx, keywordRange, range_) + return err +} + +const keywordReturn = `-- name: KeywordReturn :exec +SELECT CAST($return AS Text) +` + +func (q *Queries) KeywordReturn(ctx context.Context, return_ string) error { + _, err := q.db.ExecContext(ctx, keywordReturn, return_) + return err +} + +const keywordSelect = `-- name: KeywordSelect :exec +SELECT CAST($select AS Text) +` + +func (q *Queries) KeywordSelect(ctx context.Context, select_ string) error { + _, err := q.db.ExecContext(ctx, keywordSelect, select_) + return err +} + +const keywordStruct = `-- name: KeywordStruct :exec +SELECT CAST($struct AS Text) +` + +func (q *Queries) KeywordStruct(ctx context.Context, struct_ string) error { + _, err := q.db.ExecContext(ctx, keywordStruct, struct_) + return err +} + +const keywordSwitch = `-- name: KeywordSwitch :exec +SELECT CAST($switch AS Text) +` + +func (q *Queries) KeywordSwitch(ctx context.Context, switch_ string) error { + _, err := q.db.ExecContext(ctx, keywordSwitch, switch_) + return err +} + +const keywordType = `-- name: KeywordType :exec +SELECT CAST($type AS Text) +` + +func (q *Queries) KeywordType(ctx context.Context, type_ string) error { + _, err := q.db.ExecContext(ctx, keywordType, type_) + return err +} + +const keywordVar = `-- name: KeywordVar :exec +SELECT CAST($var AS Text) +` + +func (q *Queries) KeywordVar(ctx context.Context, var_ string) error { + _, err := q.db.ExecContext(ctx, keywordVar, var_) + return err +} + +const selectBreak = `-- name: SelectBreak :one +SELECT "break" FROM go_keywords +` + +func (q *Queries) SelectBreak(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectBreak) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectCase = `-- name: SelectCase :one +SELECT "case" FROM go_keywords +` + +func (q *Queries) SelectCase(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectCase) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectChan = `-- name: SelectChan :one +SELECT "chan" FROM go_keywords +` + +func (q *Queries) SelectChan(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectChan) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectConst = `-- name: SelectConst :one +SELECT "const" FROM go_keywords +` + +func (q *Queries) SelectConst(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectConst) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectContinue = `-- name: SelectContinue :one +SELECT "continue" FROM go_keywords +` + +func (q *Queries) SelectContinue(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectContinue) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectDefault = `-- name: SelectDefault :one +SELECT "default" FROM go_keywords +` + +func (q *Queries) SelectDefault(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectDefault) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectDefer = `-- name: SelectDefer :one +SELECT "defer" FROM go_keywords +` + +func (q *Queries) SelectDefer(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectDefer) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectElse = `-- name: SelectElse :one +SELECT "else" FROM go_keywords +` + +func (q *Queries) SelectElse(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectElse) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectFallthrough = `-- name: SelectFallthrough :one +SELECT "fallthrough" FROM go_keywords +` + +func (q *Queries) SelectFallthrough(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectFallthrough) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectFor = `-- name: SelectFor :one +SELECT "for" FROM go_keywords +` + +func (q *Queries) SelectFor(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectFor) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectFunc = `-- name: SelectFunc :one +SELECT "func" FROM go_keywords +` + +func (q *Queries) SelectFunc(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectFunc) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectGo = `-- name: SelectGo :one +SELECT "go" FROM go_keywords +` + +func (q *Queries) SelectGo(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectGo) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectGoto = `-- name: SelectGoto :one +SELECT "goto" FROM go_keywords +` + +func (q *Queries) SelectGoto(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectGoto) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectIf = `-- name: SelectIf :one +SELECT "if" FROM go_keywords +` + +func (q *Queries) SelectIf(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectIf) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectImport = `-- name: SelectImport :one +SELECT "import" FROM go_keywords +` + +func (q *Queries) SelectImport(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectImport) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectInterface = `-- name: SelectInterface :one +SELECT "interface" FROM go_keywords +` + +func (q *Queries) SelectInterface(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectInterface) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectMap = `-- name: SelectMap :one +SELECT "map" FROM go_keywords +` + +func (q *Queries) SelectMap(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectMap) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectPackage = `-- name: SelectPackage :one +SELECT "package" FROM go_keywords +` + +func (q *Queries) SelectPackage(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectPackage) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectQ = `-- name: SelectQ :one +SELECT "q" FROM go_keywords +` + +func (q *Queries) SelectQ(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectQ) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectRange = `-- name: SelectRange :one +SELECT "range" FROM go_keywords +` + +func (q *Queries) SelectRange(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectRange) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectReturn = `-- name: SelectReturn :one +SELECT "return" FROM go_keywords +` + +func (q *Queries) SelectReturn(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectReturn) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectSelect = `-- name: SelectSelect :one +SELECT "select" FROM go_keywords +` + +func (q *Queries) SelectSelect(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectSelect) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectStruct = `-- name: SelectStruct :one +SELECT "struct" FROM go_keywords +` + +func (q *Queries) SelectStruct(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectStruct) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectSwitch = `-- name: SelectSwitch :one +SELECT "switch" FROM go_keywords +` + +func (q *Queries) SelectSwitch(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectSwitch) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectType = `-- name: SelectType :one +SELECT "type" FROM go_keywords +` + +func (q *Queries) SelectType(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectType) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} + +const selectVar = `-- name: SelectVar :one +SELECT "var" FROM go_keywords +` + +func (q *Queries) SelectVar(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, selectVar) + var column_1 string + err := row.Scan(&column_1) + return column_1, err +} diff --git a/internal/endtoend/testdata/params_go_keywords/ydb/query.sql b/internal/endtoend/testdata/params_go_keywords/ydb/query.sql new file mode 100644 index 0000000000..2176b1a390 --- /dev/null +++ b/internal/endtoend/testdata/params_go_keywords/ydb/query.sql @@ -0,0 +1,155 @@ +-- name: KeywordBreak :exec +SELECT CAST(sqlc.arg('break') AS Text); + +-- name: KeywordDefault :exec +SELECT CAST(sqlc.arg('default') AS Text); + +-- name: KeywordFunc :exec +SELECT CAST(sqlc.arg('func') AS Text); + +-- name: KeywordInterface :exec +SELECT CAST(sqlc.arg('interface') AS Text); + +-- name: KeywordSelect :exec +SELECT CAST(sqlc.arg('select') AS Text); + +-- name: KeywordCase :exec +SELECT CAST(sqlc.arg('case') AS Text); + +-- name: KeywordDefer :exec +SELECT CAST(sqlc.arg('defer') AS Text); + +-- name: KeywordGo :exec +SELECT CAST(sqlc.arg('go') AS Text); + +-- name: KeywordMap :exec +SELECT CAST(sqlc.arg('map') AS Text); + +-- name: KeywordStruct :exec +SELECT CAST(sqlc.arg('struct') AS Text); + +-- name: KeywordChan :exec +SELECT CAST(sqlc.arg('chan') AS Text); + +-- name: KeywordElse :exec +SELECT CAST(sqlc.arg('else') AS Text); + +-- name: KeywordGoto :exec +SELECT CAST(sqlc.arg('goto') AS Text); + +-- name: KeywordPackage :exec +SELECT CAST(sqlc.arg('package') AS Text); + +-- name: KeywordSwitch :exec +SELECT CAST(sqlc.arg('switch') AS Text); + +-- name: KeywordConst :exec +SELECT CAST(sqlc.arg('const') AS Text); + +-- name: KeywordFallthrough :exec +SELECT CAST(sqlc.arg('fallthrough') AS Text); + +-- name: KeywordIf :exec +SELECT CAST(sqlc.arg('if') AS Text); + +-- name: KeywordRange :exec +SELECT CAST(sqlc.arg('range') AS Text); + +-- name: KeywordType :exec +SELECT CAST(sqlc.arg('type') AS Text); + +-- name: KeywordContinue :exec +SELECT CAST(sqlc.arg('continue') AS Text); + +-- name: KeywordFor :exec +SELECT CAST(sqlc.arg('for') AS Text); + +-- name: KeywordImport :exec +SELECT CAST(sqlc.arg('import') AS Text); + +-- name: KeywordReturn :exec +SELECT CAST(sqlc.arg('return') AS Text); + +-- name: KeywordVar :exec +SELECT CAST(sqlc.arg('var') AS Text); + +-- name: KeywordQ :exec +SELECT CAST(sqlc.arg('q') AS Text); + +-- name: SelectBreak :one +SELECT "break" FROM go_keywords; + +-- name: SelectDefault :one +SELECT "default" FROM go_keywords; + +-- name: SelectFunc :one +SELECT "func" FROM go_keywords; + +-- name: SelectInterface :one +SELECT "interface" FROM go_keywords; + +-- name: SelectSelect :one +SELECT "select" FROM go_keywords; + +-- name: SelectCase :one +SELECT "case" FROM go_keywords; + +-- name: SelectDefer :one +SELECT "defer" FROM go_keywords; + +-- name: SelectGo :one +SELECT "go" FROM go_keywords; + +-- name: SelectMap :one +SELECT "map" FROM go_keywords; + +-- name: SelectStruct :one +SELECT "struct" FROM go_keywords; + +-- name: SelectChan :one +SELECT "chan" FROM go_keywords; + +-- name: SelectElse :one +SELECT "else" FROM go_keywords; + +-- name: SelectGoto :one +SELECT "goto" FROM go_keywords; + +-- name: SelectPackage :one +SELECT "package" FROM go_keywords; + +-- name: SelectSwitch :one +SELECT "switch" FROM go_keywords; + +-- name: SelectConst :one +SELECT "const" FROM go_keywords; + +-- name: SelectFallthrough :one +SELECT "fallthrough" FROM go_keywords; + +-- name: SelectIf :one +SELECT "if" FROM go_keywords; + +-- name: SelectRange :one +SELECT "range" FROM go_keywords; + +-- name: SelectType :one +SELECT "type" FROM go_keywords; + +-- name: SelectContinue :one +SELECT "continue" FROM go_keywords; + +-- name: SelectFor :one +SELECT "for" FROM go_keywords; + +-- name: SelectImport :one +SELECT "import" FROM go_keywords; + +-- name: SelectReturn :one +SELECT "return" FROM go_keywords; + +-- name: SelectVar :one +SELECT "var" FROM go_keywords; + +-- name: SelectQ :one +SELECT "q" FROM go_keywords; diff --git a/internal/endtoend/testdata/params_go_keywords/ydb/schema.sql b/internal/endtoend/testdata/params_go_keywords/ydb/schema.sql new file mode 100644 index 0000000000..afaf14ee4a --- /dev/null +++ b/internal/endtoend/testdata/params_go_keywords/ydb/schema.sql @@ -0,0 +1,32 @@ +CREATE TABLE go_keywords ( + "break" Text, + "default" Text, + "func" Text, + "interface" Text, + "select" Text, + "case" Text, + "defer" Text, + "go" Text, + "map" Text, + "struct" Text, + "chan" Text, + "else" Text, + "goto" Text, + "package" Text, + "switch" Text, + "const" Text, + "fallthrough" Text, + "if" Text, + "range" Text, + "type" Text, + "continue" Text, + "for" Text, + "import" Text, + "return" Text, + "var" Text, + "q" Text, + PRIMARY KEY ("break") +); + + + diff --git a/internal/endtoend/testdata/params_go_keywords/ydb/sqlc.json b/internal/endtoend/testdata/params_go_keywords/ydb/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/params_go_keywords/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/select_in_and/ydb/go/db.go b/internal/endtoend/testdata/select_in_and/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_in_and/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_in_and/ydb/go/models.go b/internal/endtoend/testdata/select_in_and/ydb/go/models.go new file mode 100644 index 0000000000..7ad29a9af1 --- /dev/null +++ b/internal/endtoend/testdata/select_in_and/ydb/go/models.go @@ -0,0 +1,24 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int32 + Name string + Age *int32 +} + +type Book struct { + ID int32 + Author string + Translator string + Year *int32 +} + +type Translator struct { + ID int32 + Name string + Age *int32 +} diff --git a/internal/endtoend/testdata/select_in_and/ydb/go/query.sql.go b/internal/endtoend/testdata/select_in_and/ydb/go/query.sql.go new file mode 100644 index 0000000000..59c0c3b085 --- /dev/null +++ b/internal/endtoend/testdata/select_in_and/ydb/go/query.sql.go @@ -0,0 +1,44 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const deleteAuthor = `-- name: DeleteAuthor :exec +DELETE FROM + books +WHERE + author NOT IN ( + SELECT + a.name + FROM + authors a + WHERE + a.age >= $min_author_age + ) + AND translator NOT IN ( + SELECT + t.name + FROM + translators t + WHERE + t.age >= $min_translator_age + ) + AND year <= $max_year +` + +type DeleteAuthorParams struct { + MinAuthorAge *int32 + MinTranslatorAge *int32 + MaxYear *int32 +} + +func (q *Queries) DeleteAuthor(ctx context.Context, arg DeleteAuthorParams) error { + _, err := q.db.ExecContext(ctx, deleteAuthor, arg.MinAuthorAge, arg.MinTranslatorAge, arg.MaxYear) + return err +} diff --git a/internal/endtoend/testdata/select_in_and/ydb/query.sql b/internal/endtoend/testdata/select_in_and/ydb/query.sql new file mode 100644 index 0000000000..efab80870b --- /dev/null +++ b/internal/endtoend/testdata/select_in_and/ydb/query.sql @@ -0,0 +1,21 @@ +-- name: DeleteAuthor :exec +DELETE FROM + books +WHERE + author NOT IN ( + SELECT + a.name + FROM + authors a + WHERE + a.age >= $min_author_age + ) + AND translator NOT IN ( + SELECT + t.name + FROM + translators t + WHERE + t.age >= $min_translator_age + ) + AND year <= $max_year; diff --git a/internal/endtoend/testdata/select_in_and/ydb/schema.sql b/internal/endtoend/testdata/select_in_and/ydb/schema.sql new file mode 100644 index 0000000000..387fdc0fa0 --- /dev/null +++ b/internal/endtoend/testdata/select_in_and/ydb/schema.sql @@ -0,0 +1,25 @@ +-- Example queries for sqlc +CREATE TABLE authors ( + id Int32, + name Text NOT NULL, + age Int32, + PRIMARY KEY (id) +); + +CREATE TABLE translators ( + id Int32, + name Text NOT NULL, + age Int32, + PRIMARY KEY (id) +); + +CREATE TABLE books ( + id Int32, + author Text NOT NULL, + translator Text NOT NULL, + year Int32, + PRIMARY KEY (id) +); + + + diff --git a/internal/endtoend/testdata/select_in_and/ydb/sqlc.json b/internal/endtoend/testdata/select_in_and/ydb/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/select_in_and/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/select_nested_count/ydb/go/db.go b/internal/endtoend/testdata/select_nested_count/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_nested_count/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_nested_count/ydb/go/models.go b/internal/endtoend/testdata/select_nested_count/ydb/go/models.go new file mode 100644 index 0000000000..eb74ffbb19 --- /dev/null +++ b/internal/endtoend/testdata/select_nested_count/ydb/go/models.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string +} + +type Book struct { + ID int64 + AuthorID int64 + Title string +} diff --git a/internal/endtoend/testdata/select_nested_count/ydb/go/query.sql.go b/internal/endtoend/testdata/select_nested_count/ydb/go/query.sql.go new file mode 100644 index 0000000000..98ebd42b74 --- /dev/null +++ b/internal/endtoend/testdata/select_nested_count/ydb/go/query.sql.go @@ -0,0 +1,56 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAuthorsWithBooksCount = `-- name: GetAuthorsWithBooksCount :many +SELECT + a.id, + a.name, + a.bio, + COUNT(b.id) AS books_count +FROM authors a +LEFT JOIN books b ON b.author_id = a.id +GROUP BY a.id, a.name, a.bio +` + +type GetAuthorsWithBooksCountRow struct { + ID int64 + Name string + Bio *string + BooksCount uint64 +} + +func (q *Queries) GetAuthorsWithBooksCount(ctx context.Context) ([]GetAuthorsWithBooksCountRow, error) { + rows, err := q.db.QueryContext(ctx, getAuthorsWithBooksCount) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetAuthorsWithBooksCountRow + for rows.Next() { + var i GetAuthorsWithBooksCountRow + if err := rows.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.BooksCount, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_nested_count/ydb/query.sql b/internal/endtoend/testdata/select_nested_count/ydb/query.sql new file mode 100644 index 0000000000..9a5451fd97 --- /dev/null +++ b/internal/endtoend/testdata/select_nested_count/ydb/query.sql @@ -0,0 +1,9 @@ +-- name: GetAuthorsWithBooksCount :many +SELECT + a.id, + a.name, + a.bio, + COUNT(b.id) AS books_count +FROM authors a +LEFT JOIN books b ON b.author_id = a.id +GROUP BY a.id, a.name, a.bio; diff --git a/internal/endtoend/testdata/select_nested_count/ydb/schema.sql b/internal/endtoend/testdata/select_nested_count/ydb/schema.sql new file mode 100644 index 0000000000..409781b9b1 --- /dev/null +++ b/internal/endtoend/testdata/select_nested_count/ydb/schema.sql @@ -0,0 +1,16 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + +CREATE TABLE books ( + id BigSerial, + author_id BigSerial NOT NULL, + title Text NOT NULL, + PRIMARY KEY (id) +); + + + diff --git a/internal/endtoend/testdata/select_nested_count/ydb/sqlc.json b/internal/endtoend/testdata/select_nested_count/ydb/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/select_nested_count/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..0d14021994 --- /dev/null +++ b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Dummy struct { + ID int32 +} diff --git a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..63f4c60f91 --- /dev/null +++ b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,54 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const selectTextArray = `-- name: SelectTextArray :many +SELECT CAST($param AS List) +` + +func (q *Queries) SelectTextArray(ctx context.Context, param []string, opts ...query.ExecuteOption) ([][]string, error) { + parameters := ydb.ParamsBuilder() + var list = parameters.Param("$param").BeginList() + for _, param := range param { + list = list.Add().Text(param) + } + parameters = list.EndList() + result, err := q.db.QueryResultSet(ctx, selectTextArray, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items [][]string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 []string + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..8cbf5f1961 --- /dev/null +++ b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: SelectTextArray :many +SELECT CAST($param AS List); diff --git a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..5a49020ad6 --- /dev/null +++ b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE dummy (id Int32, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/select_union/ydb/stdlib/go/db.go b/internal/endtoend/testdata/select_union/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_union/ydb/stdlib/go/models.go b/internal/endtoend/testdata/select_union/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..392035a7af --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/stdlib/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + A string + B string +} + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/select_union/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/select_union/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..b472a72a5b --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/stdlib/go/query.sql.go @@ -0,0 +1,132 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const selectUnion = `-- name: SelectUnion :many +SELECT a, b FROM foo +UNION +SELECT a, b FROM foo +` + +func (q *Queries) SelectUnion(ctx context.Context) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, selectUnion) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.A, &i.B); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const selectUnionAliased = `-- name: SelectUnionAliased :many +(SELECT a, b FROM foo) +UNION +SELECT a, b FROM foo +` + +func (q *Queries) SelectUnionAliased(ctx context.Context) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, selectUnionAliased) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.A, &i.B); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const selectUnionOther = `-- name: SelectUnionOther :many +SELECT a, b FROM foo +UNION +SELECT a, b FROM bar +` + +func (q *Queries) SelectUnionOther(ctx context.Context) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, selectUnionOther) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.A, &i.B); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const selectUnionWithLimit = `-- name: SelectUnionWithLimit :many +SELECT a, b FROM foo +UNION +SELECT a, b FROM foo +LIMIT $limit OFFSET $offset +` + +type SelectUnionWithLimitParams struct { + Offset uint64 + Limit uint64 +} + +func (q *Queries) SelectUnionWithLimit(ctx context.Context, arg SelectUnionWithLimitParams) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, selectUnionWithLimit, arg.Offset, arg.Limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.A, &i.B); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_union/ydb/stdlib/query.sql b/internal/endtoend/testdata/select_union/ydb/stdlib/query.sql new file mode 100644 index 0000000000..59cafb6370 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/stdlib/query.sql @@ -0,0 +1,23 @@ +-- name: SelectUnion :many +SELECT * FROM foo +UNION +SELECT * FROM foo; + +-- name: SelectUnionWithLimit :many +SELECT * FROM foo +UNION +SELECT * FROM foo +LIMIT $limit OFFSET $offset; + +-- name: SelectUnionOther :many +SELECT * FROM foo +UNION +SELECT * FROM bar; + +-- name: SelectUnionAliased :many +(SELECT * FROM foo) +UNION +SELECT * FROM foo; + + + diff --git a/internal/endtoend/testdata/select_union/ydb/stdlib/schema.sql b/internal/endtoend/testdata/select_union/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..8673db0ad5 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo (a Text, b Text, PRIMARY KEY (a, b)); +CREATE TABLE bar (a Text, b Text, PRIMARY KEY (a, b)); + + + diff --git a/internal/endtoend/testdata/select_union/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/select_union/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/stdlib/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..392035a7af --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + A string + B string +} + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..23aadb8217 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,155 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const selectUnion = `-- name: SelectUnion :many +SELECT a, b FROM foo +UNION +SELECT a, b FROM foo +` + +func (q *Queries) SelectUnion(ctx context.Context, opts ...query.ExecuteOption) ([]Foo, error) { + result, err := q.db.QueryResultSet(ctx, selectUnion, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.A, &i.B); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const selectUnionAliased = `-- name: SelectUnionAliased :many +(SELECT a, b FROM foo) +UNION +SELECT a, b FROM foo +` + +func (q *Queries) SelectUnionAliased(ctx context.Context, opts ...query.ExecuteOption) ([]Foo, error) { + result, err := q.db.QueryResultSet(ctx, selectUnionAliased, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.A, &i.B); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const selectUnionOther = `-- name: SelectUnionOther :many +SELECT a, b FROM foo +UNION +SELECT a, b FROM bar +` + +func (q *Queries) SelectUnionOther(ctx context.Context, opts ...query.ExecuteOption) ([]Foo, error) { + result, err := q.db.QueryResultSet(ctx, selectUnionOther, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.A, &i.B); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const selectUnionWithLimit = `-- name: SelectUnionWithLimit :many +SELECT a, b FROM foo +UNION +SELECT a, b FROM foo +LIMIT $limit OFFSET $offset +` + +type SelectUnionWithLimitParams struct { + Offset uint64 + Limit uint64 +} + +func (q *Queries) SelectUnionWithLimit(ctx context.Context, arg SelectUnionWithLimitParams, opts ...query.ExecuteOption) ([]Foo, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$offset").Uint64(arg.Offset) + parameters = parameters.Param("$limit").Uint64(arg.Limit) + result, err := q.db.QueryResultSet(ctx, selectUnionWithLimit, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.A, &i.B); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..59cafb6370 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,23 @@ +-- name: SelectUnion :many +SELECT * FROM foo +UNION +SELECT * FROM foo; + +-- name: SelectUnionWithLimit :many +SELECT * FROM foo +UNION +SELECT * FROM foo +LIMIT $limit OFFSET $offset; + +-- name: SelectUnionOther :many +SELECT * FROM foo +UNION +SELECT * FROM bar; + +-- name: SelectUnionAliased :many +(SELECT * FROM foo) +UNION +SELECT * FROM foo; + + + diff --git a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..8673db0ad5 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo (a Text, b Text, PRIMARY KEY (a, b)); +CREATE TABLE bar (a Text, b Text, PRIMARY KEY (a, b)); + + + diff --git a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..a210888689 --- /dev/null +++ b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,16 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/upsert/ydb/go/db.go b/internal/endtoend/testdata/upsert/ydb/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/upsert/ydb/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/upsert/ydb/go/models.go b/internal/endtoend/testdata/upsert/ydb/go/models.go new file mode 100644 index 0000000000..e272cd58c6 --- /dev/null +++ b/internal/endtoend/testdata/upsert/ydb/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Location struct { + ID int32 + Name string + Address string + ZipCode int32 + Latitude float64 + Longitude float64 +} diff --git a/internal/endtoend/testdata/upsert/ydb/go/query.sql.go b/internal/endtoend/testdata/upsert/ydb/go/query.sql.go new file mode 100644 index 0000000000..dde037594f --- /dev/null +++ b/internal/endtoend/testdata/upsert/ydb/go/query.sql.go @@ -0,0 +1,52 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const upsertLocation = `-- name: UpsertLocation :exec +UPSERT INTO locations ( + id, + name, + address, + zip_code, + latitude, + longitude +) +VALUES ($id, $name, $address, $zip_code, $latitude, $longitude) +` + +type UpsertLocationParams struct { + ID int32 + Name string + Address string + ZipCode int32 + Latitude float64 + Longitude float64 +} + +func (q *Queries) UpsertLocation(ctx context.Context, arg UpsertLocationParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(arg.ID) + parameters = parameters.Param("$name").Text(arg.Name) + parameters = parameters.Param("$address").Text(arg.Address) + parameters = parameters.Param("$zip_code").Int32(arg.ZipCode) + parameters = parameters.Param("$latitude").Double(arg.Latitude) + parameters = parameters.Param("$longitude").Double(arg.Longitude) + err := q.db.Exec(ctx, upsertLocation, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/upsert/ydb/query.sql b/internal/endtoend/testdata/upsert/ydb/query.sql new file mode 100644 index 0000000000..2811eb05e1 --- /dev/null +++ b/internal/endtoend/testdata/upsert/ydb/query.sql @@ -0,0 +1,13 @@ +-- name: UpsertLocation :exec +UPSERT INTO locations ( + id, + name, + address, + zip_code, + latitude, + longitude +) +VALUES ($id, $name, $address, $zip_code, $latitude, $longitude); + + + diff --git a/internal/endtoend/testdata/upsert/ydb/schema.sql b/internal/endtoend/testdata/upsert/ydb/schema.sql new file mode 100644 index 0000000000..7e5774df83 --- /dev/null +++ b/internal/endtoend/testdata/upsert/ydb/schema.sql @@ -0,0 +1,14 @@ +-- https://github.com/sqlc-dev/sqlc/issues/1728 + +CREATE TABLE locations ( + id Serial, + name Text NOT NULL, + address Text NOT NULL, + zip_code Int32 NOT NULL, + latitude Double NOT NULL, + longitude Double NOT NULL, + PRIMARY KEY (id) +); + + + diff --git a/internal/endtoend/testdata/upsert/ydb/sqlc.json b/internal/endtoend/testdata/upsert/ydb/sqlc.json new file mode 100644 index 0000000000..a210888689 --- /dev/null +++ b/internal/endtoend/testdata/upsert/ydb/sqlc.json @@ -0,0 +1,16 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index ae8e2439f0..6aff7e58af 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/antlr4-go/antlr/v4" + "github.com/davecgh/go-spew/spew" "github.com/sqlc-dev/sqlc/internal/debug" "github.com/sqlc-dev/sqlc/internal/sql/ast" parser "github.com/ydb-platform/yql-parsers/go" @@ -2927,65 +2928,86 @@ func (c *cc) VisitId_expr_in(n *parser.Id_expr_inContext) interface{} { func (c *cc) VisitIn_atom_expr(n *parser.In_atom_exprContext) interface{} { if n == nil { - return todo("VisitAtom_expr", n) + return todo("VisitIn_atom_expr", n) } switch { case n.Literal_value() != nil: expr, ok := n.Literal_value().Accept(c).(ast.Node) if !ok { - return todo("VisitAtom_expr", n.Literal_value()) + return todo("VisitIn_atom_expr", n.Literal_value()) } return expr case n.Bind_parameter() != nil: expr, ok := n.Bind_parameter().Accept(c).(ast.Node) if !ok { - return todo("VisitAtom_expr", n.Bind_parameter()) + return todo("VisitIn_atom_expr", n.Bind_parameter()) } return expr case n.Lambda() != nil: expr, ok := n.Lambda().Accept(c).(ast.Node) if !ok { - return todo("VisitAtom_expr", n.Lambda()) + return todo("VisitIn_atom_expr", n.Lambda()) } return expr case n.Cast_expr() != nil: expr, ok := n.Cast_expr().Accept(c).(ast.Node) if !ok { - return todo("VisitAtom_expr", n.Cast_expr()) + return todo("VisitIn_atom_expr", n.Cast_expr()) } return expr case n.Case_expr() != nil: - return todo("VisitAtom_expr", n.Case_expr()) + expr, ok := n.Case_expr().Accept(c).(ast.Node) + if !ok { + return todo("VisitIn_atom_expr", n.Case_expr()) + } + return expr case n.An_id_or_type() != nil: if n.NAMESPACE() != nil { - return NewIdentifier(parseAnIdOrType(n.An_id_or_type()) + "::" + parseIdOrType(n.Id_or_type())) + left := parseAnIdOrType(n.An_id_or_type()) + right := parseIdOrType(n.Id_or_type()) + name := left + "_" + right + return &ast.ColumnRef{ + Fields: &ast.List{Items: []ast.Node{NewIdentifier(name)}}, + Location: c.pos(n.GetStart()), + } + } + name := parseAnIdOrType(n.An_id_or_type()) + return &ast.ColumnRef{ + Fields: &ast.List{Items: []ast.Node{NewIdentifier(name)}}, + Location: c.pos(n.GetStart()), } - return NewIdentifier(parseAnIdOrType(n.An_id_or_type())) + + case n.Select_stmt() != nil: + selectStmt, ok := n.Select_stmt().Accept(c).(ast.Node) + if !ok { + return todo("VisitIn_atom_expr", n.Select_stmt()) + } + return selectStmt case n.Value_constructor() != nil: - return todo("VisitAtom_expr", n.Value_constructor()) + return todo("VisitIn_atom_expr", n.Value_constructor()) case n.Bitcast_expr() != nil: - return todo("VisitAtom_expr", n.Bitcast_expr()) + return todo("VisitIn_atom_expr", n.Bitcast_expr()) case n.List_literal() != nil: list, ok := n.List_literal().Accept(c).(ast.Node) if !ok { - return todo("VisitAtom_expr", n.List_literal()) + return todo("VisitIn_atom_expr", n.List_literal()) } return list case n.Dict_literal() != nil: - return todo("VisitAtom_expr", n.Dict_literal()) + return todo("VisitIn_atom_expr", n.Dict_literal()) case n.Struct_literal() != nil: - return todo("VisitAtom_expr", n.Struct_literal()) + return todo("VisitIn_atom_expr", n.Struct_literal()) // TODO: check other cases default: @@ -3111,7 +3133,7 @@ func (c *cc) handleInvokeSuffix(base ast.Node, invokeCtx *parser.Invoke_exprCont } } funcCall.Func = &ast.FuncName{} - if len(nameParts) == 2 { + if len(nameParts) == 2 && nameParts[0] == "sqlc" { funcCall.Func.Schema = nameParts[0] funcCall.Func.Name = nameParts[1] } else { @@ -3144,7 +3166,8 @@ func (c *cc) handleInvokeSuffix(base ast.Node, invokeCtx *parser.Invoke_exprCont return funcCall } default: - return todo("VisitInvoke_expr", invokeCtx) + spew.Dump(baseNode) + return todo("VisitInvoke_exp", invokeCtx) } stmt := &ast.FuncExpr{ @@ -3352,13 +3375,27 @@ func (c *cc) VisitAtom_expr(n *parser.Atom_exprContext) interface{} { return expr case n.Case_expr() != nil: - return todo("VisitAtom_expr", n.Case_expr()) + expr, ok := n.Case_expr().Accept(c).(ast.Node) + if !ok { + return todo("VisitAtom_expr", n.Case_expr()) + } + return expr case n.An_id_or_type() != nil: if n.NAMESPACE() != nil { - return NewIdentifier(parseAnIdOrType(n.An_id_or_type()) + "::" + parseIdOrType(n.Id_or_type())) + left := parseAnIdOrType(n.An_id_or_type()) + right := parseIdOrType(n.Id_or_type()) + name := left + "_" + right + return &ast.ColumnRef{ + Fields: &ast.List{Items: []ast.Node{NewIdentifier(name)}}, + Location: c.pos(n.GetStart()), + } + } + name := parseAnIdOrType(n.An_id_or_type()) + return &ast.ColumnRef{ + Fields: &ast.List{Items: []ast.Node{NewIdentifier(name)}}, + Location: c.pos(n.GetStart()), } - return NewIdentifier(parseAnIdOrType(n.An_id_or_type())) case n.Value_constructor() != nil: return todo("VisitAtom_expr", n.Value_constructor()) @@ -3567,6 +3604,88 @@ func (c *cc) VisitSmart_parenthesis(n *parser.Smart_parenthesisContext) interfac } } +func (c *cc) VisitCase_expr(n *parser.Case_exprContext) interface{} { + if n == nil || n.CASE() == nil || n.END() == nil { + return todo("VisitCase_expr", n) + } + + caseExpr := &ast.CaseExpr{ + Args: &ast.List{Items: []ast.Node{}}, + Location: c.pos(n.GetStart()), + } + + whenExprs := n.AllWhen_expr() + if len(whenExprs) == 0 { + return todo("VisitCase_expr", n) + } + + allExprs := n.AllExpr() + if len(allExprs) > 0 { + firstWhenStart := whenExprs[0].GetStart().GetStart() + firstExprStart := allExprs[0].GetStart().GetStart() + + if firstExprStart < firstWhenStart { + arg, ok := allExprs[0].Accept(c).(ast.Node) + if !ok { + return todo("VisitCase_expr", allExprs[0]) + } + caseExpr.Arg = arg + } + } + + for _, whenExpr := range whenExprs { + whenNode, ok := whenExpr.Accept(c).(ast.Node) + if !ok { + return todo("VisitCase_expr", whenExpr) + } + caseExpr.Args.Items = append(caseExpr.Args.Items, whenNode) + } + + if n.ELSE() != nil { + elseStart := n.ELSE().GetSymbol().GetStart() + for _, expr := range allExprs { + exprStart := expr.GetStart().GetStart() + if exprStart > elseStart { + elseExpr, ok := expr.Accept(c).(ast.Node) + if !ok { + return todo("VisitCase_expr", expr) + } + caseExpr.Defresult = elseExpr + break + } + } + } + + return caseExpr +} + +func (c *cc) VisitWhen_expr(n *parser.When_exprContext) interface{} { + if n == nil || n.WHEN() == nil || n.THEN() == nil { + return todo("VisitWhen_expr", n) + } + + whenExprs := n.AllExpr() + if len(whenExprs) < 2 { + return todo("VisitWhen_expr", n) + } + + condition, ok := whenExprs[0].Accept(c).(ast.Node) + if !ok { + return todo("VisitWhen_expr", whenExprs[0]) + } + + result, ok := whenExprs[1].Accept(c).(ast.Node) + if !ok { + return todo("VisitWhen_expr", whenExprs[1]) + } + + return &ast.CaseWhen{ + Expr: condition, + Result: result, + Location: c.pos(n.GetStart()), + } +} + func (c *cc) VisitSql_stmt(n *parser.Sql_stmtContext) interface{} { if n == nil || n.Sql_stmt_core() == nil { return todo("VisitSql_stmt", n) diff --git a/internal/engine/ydb/lib/cpp/datetime.go b/internal/engine/ydb/lib/cpp/datetime.go index ca6f6bc6b6..d15cc87feb 100644 --- a/internal/engine/ydb/lib/cpp/datetime.go +++ b/internal/engine/ydb/lib/cpp/datetime.go @@ -24,77 +24,77 @@ func DateTimeFunctions() []*catalog.Function { func dateTimeMakeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::MakeDate", + Name: "datetime_makedate", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Date"}, }, { - Name: "DateTime::MakeDate32", + Name: "datetime_makedate32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Date32"}, }, { - Name: "DateTime::MakeTzDate32", + Name: "datetime_maketzdate32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "TzDate32"}, }, { - Name: "DateTime::MakeDatetime", + Name: "datetime_makedatetime", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Datetime"}, }, { - Name: "DateTime::MakeTzDatetime", + Name: "datetime_maketzdatetime", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "TzDatetime"}, }, { - Name: "DateTime::MakeDatetime64", + Name: "datetime_makedatetime64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Datetime64"}, }, { - Name: "DateTime::MakeTzDatetime64", + Name: "datetime_maketzdatetime64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "TzDatetime64"}, }, { - Name: "DateTime::MakeTimestamp", + Name: "datetime_maketimestamp", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Timestamp"}, }, { - Name: "DateTime::MakeTzTimestamp", + Name: "datetime_maketztimestamp", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "TzTimestamp"}, }, { - Name: "DateTime::MakeTimestamp64", + Name: "datetime_maketimestamp64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Timestamp64"}, }, { - Name: "DateTime::MakeTzTimestamp64", + Name: "datetime_maketztimestamp64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -106,119 +106,119 @@ func dateTimeMakeFuncs() []*catalog.Function { func dateTimeGetFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::GetYear", + Name: "datetime_getyear", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint16"}, }, { - Name: "DateTime::GetYear", + Name: "datetime_getyear", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Int32"}, }, { - Name: "DateTime::GetDayOfYear", + Name: "datetime_getdayofyear", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint16"}, }, { - Name: "DateTime::GetMonth", + Name: "datetime_getmonth", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetMonthName", + Name: "datetime_getmonthname", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "DateTime::GetWeekOfYear", + Name: "datetime_getweekofyear", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetWeekOfYearIso8601", + Name: "datetime_getweekofyeariso8601", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetDayOfMonth", + Name: "datetime_getdayofmonth", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetDayOfWeek", + Name: "datetime_getdayofweek", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetDayOfWeekName", + Name: "datetime_getdayofweekname", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "DateTime::GetHour", + Name: "datetime_gethour", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetMinute", + Name: "datetime_getminute", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetSecond", + Name: "datetime_getsecond", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint8"}, }, { - Name: "DateTime::GetMillisecondOfSecond", + Name: "datetime_getmillisecondofsecond", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "DateTime::GetMicrosecondOfSecond", + Name: "datetime_getmicrosecondofsecond", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "DateTime::GetTimezoneId", + Name: "datetime_gettimezoneid", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Uint16"}, }, { - Name: "DateTime::GetTimezoneName", + Name: "datetime_gettimezonename", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -230,7 +230,7 @@ func dateTimeGetFuncs() []*catalog.Function { func dateTimeUpdateFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -238,7 +238,7 @@ func dateTimeUpdateFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -247,7 +247,7 @@ func dateTimeUpdateFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -257,7 +257,7 @@ func dateTimeUpdateFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -268,7 +268,7 @@ func dateTimeUpdateFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -280,7 +280,7 @@ func dateTimeUpdateFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -293,7 +293,7 @@ func dateTimeUpdateFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -307,7 +307,7 @@ func dateTimeUpdateFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::Update", + Name: "datetime_update", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -327,42 +327,42 @@ func dateTimeUpdateFuncs() []*catalog.Function { func dateTimeFromFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::FromSeconds", + Name: "datetime_fromseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Uint32"}}, }, ReturnType: &ast.TypeName{Name: "Timestamp"}, }, { - Name: "DateTime::FromSeconds64", + Name: "datetime_fromseconds64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Timestamp64"}, }, { - Name: "DateTime::FromMilliseconds", + Name: "datetime_frommilliseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Uint64"}}, }, ReturnType: &ast.TypeName{Name: "Timestamp"}, }, { - Name: "DateTime::FromMilliseconds64", + Name: "datetime_frommilliseconds64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Timestamp64"}, }, { - Name: "DateTime::FromMicroseconds", + Name: "datetime_frommicroseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Uint64"}}, }, ReturnType: &ast.TypeName{Name: "Timestamp"}, }, { - Name: "DateTime::FromMicroseconds64", + Name: "datetime_frommicroseconds64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, @@ -374,21 +374,21 @@ func dateTimeFromFuncs() []*catalog.Function { func dateTimeToFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::ToSeconds", + Name: "datetime_toseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ToMilliseconds", + Name: "datetime_tomilliseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ToMicroseconds", + Name: "datetime_tomicroseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -400,126 +400,126 @@ func dateTimeToFuncs() []*catalog.Function { func dateTimeIntervalFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::ToDays", + Name: "datetime_todays", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ToHours", + Name: "datetime_tohours", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ToMinutes", + Name: "datetime_tominutes", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ToSeconds", + Name: "datetime_toseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ToMilliseconds", + Name: "datetime_tomilliseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ToMicroseconds", + Name: "datetime_tomicroseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::IntervalFromDays", + Name: "datetime_intervalfromdays", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int32"}}, }, ReturnType: &ast.TypeName{Name: "Interval"}, }, { - Name: "DateTime::Interval64FromDays", + Name: "datetime_interval64fromdays", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int32"}}, }, ReturnType: &ast.TypeName{Name: "Interval64"}, }, { - Name: "DateTime::IntervalFromHours", + Name: "datetime_intervalfromhours", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int32"}}, }, ReturnType: &ast.TypeName{Name: "Interval"}, }, { - Name: "DateTime::Interval64FromHours", + Name: "datetime_interval64fromhours", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Interval64"}, }, { - Name: "DateTime::IntervalFromMinutes", + Name: "datetime_intervalfromminutes", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int32"}}, }, ReturnType: &ast.TypeName{Name: "Interval"}, }, { - Name: "DateTime::Interval64FromMinutes", + Name: "datetime_interval64fromminutes", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Interval64"}, }, { - Name: "DateTime::IntervalFromSeconds", + Name: "datetime_intervalfromseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Interval"}, }, { - Name: "DateTime::Interval64FromSeconds", + Name: "datetime_interval64fromseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Interval64"}, }, { - Name: "DateTime::IntervalFromMilliseconds", + Name: "datetime_intervalfrommilliseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Interval"}, }, { - Name: "DateTime::Interval64FromMilliseconds", + Name: "datetime_interval64frommilliseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Interval64"}, }, { - Name: "DateTime::IntervalFromMicroseconds", + Name: "datetime_intervalfrommicroseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, ReturnType: &ast.TypeName{Name: "Interval"}, }, { - Name: "DateTime::Interval64FromMicroseconds", + Name: "datetime_interval64frommicroseconds", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, }, @@ -531,7 +531,7 @@ func dateTimeIntervalFuncs() []*catalog.Function { func dateTimeStartEndFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::StartOfYear", + Name: "datetime_startofyear", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -539,7 +539,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::EndOfYear", + Name: "datetime_endofyear", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -547,7 +547,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::StartOfQuarter", + Name: "datetime_startofquarter", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -555,7 +555,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::EndOfQuarter", + Name: "datetime_endofquarter", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -563,7 +563,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::StartOfMonth", + Name: "datetime_startofmonth", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -571,7 +571,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::EndOfMonth", + Name: "datetime_endofmonth", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -579,7 +579,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::StartOfWeek", + Name: "datetime_startofweek", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -587,7 +587,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::EndOfWeek", + Name: "datetime_endofweek", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -595,7 +595,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::StartOfDay", + Name: "datetime_startofday", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -603,7 +603,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::EndOfDay", + Name: "datetime_endofday", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -611,7 +611,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::StartOf", + Name: "datetime_startof", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -620,7 +620,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::EndOf", + Name: "datetime_endof", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -634,7 +634,7 @@ func dateTimeStartEndFuncs() []*catalog.Function { func dateTimeFormatFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::Format", + Name: "datetime_format", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -646,21 +646,21 @@ func dateTimeFormatFuncs() []*catalog.Function { func dateTimeParseFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "DateTime::Parse", + Name: "datetime_parse", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::Parse64", + Name: "datetime_parse64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "DateTime::ParseRfc822", + Name: "datetime_parserfc822", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -668,7 +668,7 @@ func dateTimeParseFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::ParseIso8601", + Name: "datetime_parseiso8601", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -676,7 +676,7 @@ func dateTimeParseFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::ParseHttp", + Name: "datetime_parsehttp", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -684,7 +684,7 @@ func dateTimeParseFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "DateTime::ParseX509", + Name: "datetime_parsex509", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, diff --git a/internal/engine/ydb/lib/cpp/digest.go b/internal/engine/ydb/lib/cpp/digest.go index dccdb8509b..2e65aeea5e 100644 --- a/internal/engine/ydb/lib/cpp/digest.go +++ b/internal/engine/ydb/lib/cpp/digest.go @@ -19,21 +19,21 @@ func DigestFunctions() []*catalog.Function { func digestCrcFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Digest::Crc32c", + Name: "digest_crc32c", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "Digest::Crc64", + Name: "digest_crc64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::Crc64", + Name: "digest_crc64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint64"}}, @@ -46,14 +46,14 @@ func digestCrcFuncs() []*catalog.Function { func digestFnvFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Digest::Fnv32", + Name: "digest_fnv32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "Digest::Fnv32", + Name: "digest_fnv32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint32"}}, @@ -61,14 +61,14 @@ func digestFnvFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "Digest::Fnv64", + Name: "digest_fnv64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::Fnv64", + Name: "digest_fnv64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint64"}}, @@ -81,14 +81,14 @@ func digestFnvFuncs() []*catalog.Function { func digestMurmurFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Digest::MurMurHash", + Name: "digest_murmurhash", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::MurMurHash", + Name: "digest_murmurhash", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint64"}}, @@ -96,14 +96,14 @@ func digestMurmurFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::MurMurHash32", + Name: "digest_murmurhash32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "Digest::MurMurHash32", + Name: "digest_murmurhash32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint32"}}, @@ -111,14 +111,14 @@ func digestMurmurFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "Digest::MurMurHash2A", + Name: "digest_murmurhash2a", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::MurMurHash2A", + Name: "digest_murmurhash2a", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint64"}}, @@ -126,14 +126,14 @@ func digestMurmurFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::MurMurHash2A32", + Name: "digest_murmurhash2a32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint32"}, }, { - Name: "Digest::MurMurHash2A32", + Name: "digest_murmurhash2a32", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint32"}}, @@ -146,14 +146,14 @@ func digestMurmurFuncs() []*catalog.Function { func digestCityFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Digest::CityHash", + Name: "digest_cityhash", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::CityHash", + Name: "digest_cityhash", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint64"}}, @@ -161,7 +161,7 @@ func digestCityFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Digest::CityHash128", + Name: "digest_cityhash128", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, diff --git a/internal/engine/ydb/lib/cpp/hyperscan.go b/internal/engine/ydb/lib/cpp/hyperscan.go index be3aa968e2..4430f0232f 100644 --- a/internal/engine/ydb/lib/cpp/hyperscan.go +++ b/internal/engine/ydb/lib/cpp/hyperscan.go @@ -21,7 +21,7 @@ func HyperscanFunctions() []*catalog.Function { func hyperscanGrepFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Hyperscan::Grep", + Name: "hyperscan_grep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -33,7 +33,7 @@ func hyperscanGrepFuncs() []*catalog.Function { func hyperscanMatchFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Hyperscan::Match", + Name: "hyperscan_match", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -45,14 +45,14 @@ func hyperscanMatchFuncs() []*catalog.Function { func hyperscanBacktrackingFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Hyperscan::BacktrackingGrep", + Name: "hyperscan_backtrackinggrep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Hyperscan::BacktrackingMatch", + Name: "hyperscan_backtrackingmatch", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -64,14 +64,14 @@ func hyperscanBacktrackingFuncs() []*catalog.Function { func hyperscanMultiFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Hyperscan::MultiGrep", + Name: "hyperscan_multigrep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Hyperscan::MultiMatch", + Name: "hyperscan_multimatch", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -83,7 +83,7 @@ func hyperscanMultiFuncs() []*catalog.Function { func hyperscanCaptureFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Hyperscan::Capture", + Name: "hyperscan_capture", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -95,7 +95,7 @@ func hyperscanCaptureFuncs() []*catalog.Function { func hyperscanReplaceFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Hyperscan::Replace", + Name: "hyperscan_replace", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, diff --git a/internal/engine/ydb/lib/cpp/ip.go b/internal/engine/ydb/lib/cpp/ip.go index a644da910c..a5e460a1b2 100644 --- a/internal/engine/ydb/lib/cpp/ip.go +++ b/internal/engine/ydb/lib/cpp/ip.go @@ -21,7 +21,7 @@ func IpFunctions() []*catalog.Function { func ipFromStringFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Ip::FromString", + Name: "ip_fromstring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -29,7 +29,7 @@ func ipFromStringFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Ip::SubnetFromString", + Name: "ip_subnetfromstring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -42,7 +42,7 @@ func ipFromStringFuncs() []*catalog.Function { func ipToStringFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Ip::ToString", + Name: "ip_tostring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -50,7 +50,7 @@ func ipToStringFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Ip::ToString", + Name: "ip_tostring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -63,21 +63,21 @@ func ipToStringFuncs() []*catalog.Function { func ipCheckFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Ip::IsIPv4", + Name: "ip_isipv4", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Ip::IsIPv6", + Name: "ip_isipv6", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Ip::IsEmbeddedIPv4", + Name: "ip_isembeddedipv4", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -89,7 +89,7 @@ func ipCheckFuncs() []*catalog.Function { func ipConvertFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Ip::ConvertToIPv6", + Name: "ip_converttoipv6", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -101,14 +101,14 @@ func ipConvertFuncs() []*catalog.Function { func ipSubnetFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Ip::GetSubnet", + Name: "ip_getsubnet", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Ip::GetSubnet", + Name: "ip_getsubnet", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint8"}}, @@ -116,7 +116,7 @@ func ipSubnetFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Ip::GetSubnetByMask", + Name: "ip_getsubnetbymask", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -129,7 +129,7 @@ func ipSubnetFuncs() []*catalog.Function { func ipMatchFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Ip::SubnetMatch", + Name: "ip_subnetmatch", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "String"}}, diff --git a/internal/engine/ydb/lib/cpp/math.go b/internal/engine/ydb/lib/cpp/math.go index 288464ad0d..b50182fbd9 100644 --- a/internal/engine/ydb/lib/cpp/math.go +++ b/internal/engine/ydb/lib/cpp/math.go @@ -25,17 +25,17 @@ func MathFunctions() []*catalog.Function { func mathConstantsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::Pi", + Name: "math_pi", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::E", + Name: "math_e", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Eps", + Name: "math_eps", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "Double"}, }, @@ -45,21 +45,21 @@ func mathConstantsFuncs() []*catalog.Function { func mathCheckFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::IsInf", + Name: "math_isinf", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Math::IsNaN", + Name: "math_isnan", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Math::IsFinite", + Name: "math_isfinite", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, @@ -71,203 +71,203 @@ func mathCheckFuncs() []*catalog.Function { func mathUnaryFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::Abs", + Name: "math_abs", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Acos", + Name: "math_acos", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Asin", + Name: "math_asin", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Asinh", + Name: "math_asinh", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Atan", + Name: "math_atan", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Cbrt", + Name: "math_cbrt", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Ceil", + Name: "math_ceil", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Cos", + Name: "math_cos", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Cosh", + Name: "math_cosh", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Erf", + Name: "math_erf", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::ErfInv", + Name: "math_erfinv", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::ErfcInv", + Name: "math_erfcinv", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Exp", + Name: "math_exp", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Exp2", + Name: "math_exp2", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Fabs", + Name: "math_fabs", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Floor", + Name: "math_floor", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Lgamma", + Name: "math_lgamma", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Rint", + Name: "math_rint", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Sigmoid", + Name: "math_sigmoid", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Sin", + Name: "math_sin", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Sinh", + Name: "math_sinh", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Sqrt", + Name: "math_sqrt", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Tan", + Name: "math_tan", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Tanh", + Name: "math_tanh", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Tgamma", + Name: "math_tgamma", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Trunc", + Name: "math_trunc", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Log", + Name: "math_log", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Log2", + Name: "math_log2", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Log10", + Name: "math_log10", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, @@ -279,7 +279,7 @@ func mathUnaryFuncs() []*catalog.Function { func mathBinaryFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::Atan2", + Name: "math_atan2", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Double"}}, @@ -287,7 +287,7 @@ func mathBinaryFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Fmod", + Name: "math_fmod", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Double"}}, @@ -295,7 +295,7 @@ func mathBinaryFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Hypot", + Name: "math_hypot", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Double"}}, @@ -303,7 +303,7 @@ func mathBinaryFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Pow", + Name: "math_pow", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Double"}}, @@ -311,7 +311,7 @@ func mathBinaryFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Remainder", + Name: "math_remainder", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Double"}}, @@ -324,7 +324,7 @@ func mathBinaryFuncs() []*catalog.Function { func mathLdexpFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::Ldexp", + Name: "math_ldexp", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Int32"}}, @@ -337,14 +337,14 @@ func mathLdexpFuncs() []*catalog.Function { func mathRoundFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::Round", + Name: "math_round", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, }, ReturnType: &ast.TypeName{Name: "Double"}, }, { - Name: "Math::Round", + Name: "math_round", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Int32"}}, @@ -357,7 +357,7 @@ func mathRoundFuncs() []*catalog.Function { func mathFuzzyEqualsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::FuzzyEquals", + Name: "math_fuzzyequals", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Double"}}, @@ -365,7 +365,7 @@ func mathFuzzyEqualsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Math::FuzzyEquals", + Name: "math_fuzzyequals", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "Double"}}, @@ -379,7 +379,7 @@ func mathFuzzyEqualsFuncs() []*catalog.Function { func mathModRemFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::Mod", + Name: "math_mod", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, {Type: &ast.TypeName{Name: "Int64"}}, @@ -388,7 +388,7 @@ func mathModRemFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Math::Rem", + Name: "math_rem", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Int64"}}, {Type: &ast.TypeName{Name: "Int64"}}, @@ -402,22 +402,22 @@ func mathModRemFuncs() []*catalog.Function { func mathRoundingModeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::RoundDownward", + Name: "math_rounddownward", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Math::RoundToNearest", + Name: "math_roundtonearest", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Math::RoundTowardZero", + Name: "math_roundtowardzero", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Math::RoundUpward", + Name: "math_roundupward", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "any"}, }, @@ -427,7 +427,7 @@ func mathRoundingModeFuncs() []*catalog.Function { func mathNearbyIntFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Math::NearbyInt", + Name: "math_nearbyint", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Double"}}, {Type: &ast.TypeName{Name: "any"}}, diff --git a/internal/engine/ydb/lib/cpp/pcre.go b/internal/engine/ydb/lib/cpp/pcre.go index 4b313ff80f..09b7e7ce55 100644 --- a/internal/engine/ydb/lib/cpp/pcre.go +++ b/internal/engine/ydb/lib/cpp/pcre.go @@ -21,7 +21,7 @@ func PcreFunctions() []*catalog.Function { func pcreGrepFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pcre::Grep", + Name: "pcre_grep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -33,7 +33,7 @@ func pcreGrepFuncs() []*catalog.Function { func pcreMatchFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pcre::Match", + Name: "pcre_match", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -45,14 +45,14 @@ func pcreMatchFuncs() []*catalog.Function { func pcreBacktrackingFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pcre::BacktrackingGrep", + Name: "pcre_backtrackinggrep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Pcre::BacktrackingMatch", + Name: "pcre_backtrackingmatch", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -64,14 +64,14 @@ func pcreBacktrackingFuncs() []*catalog.Function { func pcreMultiFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pcre::MultiGrep", + Name: "pcre_multigrep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Pcre::MultiMatch", + Name: "pcre_multimatch", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -83,7 +83,7 @@ func pcreMultiFuncs() []*catalog.Function { func pcreCaptureFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pcre::Capture", + Name: "pcre_capture", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -95,7 +95,7 @@ func pcreCaptureFuncs() []*catalog.Function { func pcreReplaceFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pcre::Replace", + Name: "pcre_replace", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, diff --git a/internal/engine/ydb/lib/cpp/pire.go b/internal/engine/ydb/lib/cpp/pire.go index ae7eece256..f29cde64de 100644 --- a/internal/engine/ydb/lib/cpp/pire.go +++ b/internal/engine/ydb/lib/cpp/pire.go @@ -20,7 +20,7 @@ func PireFunctions() []*catalog.Function { func pireGrepFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pire::Grep", + Name: "pire_grep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -32,7 +32,7 @@ func pireGrepFuncs() []*catalog.Function { func pireMatchFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pire::Match", + Name: "pire_match", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -44,14 +44,14 @@ func pireMatchFuncs() []*catalog.Function { func pireMultiFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pire::MultiGrep", + Name: "pire_multigrep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Pire::MultiMatch", + Name: "pire_multimatch", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -63,7 +63,7 @@ func pireMultiFuncs() []*catalog.Function { func pireCaptureFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pire::Capture", + Name: "pire_capture", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -75,7 +75,7 @@ func pireCaptureFuncs() []*catalog.Function { func pireReplaceFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Pire::Replace", + Name: "pire_replace", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, diff --git a/internal/engine/ydb/lib/cpp/re2.go b/internal/engine/ydb/lib/cpp/re2.go index 667c0f57e0..d3a83a1f6f 100644 --- a/internal/engine/ydb/lib/cpp/re2.go +++ b/internal/engine/ydb/lib/cpp/re2.go @@ -22,14 +22,14 @@ func Re2Functions() []*catalog.Function { func re2GrepFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Re2::Grep", + Name: "re2_grep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Grep", + Name: "re2_grep", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -42,14 +42,14 @@ func re2GrepFuncs() []*catalog.Function { func re2MatchFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Re2::Match", + Name: "re2_match", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Match", + Name: "re2_match", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -62,14 +62,14 @@ func re2MatchFuncs() []*catalog.Function { func re2CaptureFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Re2::Capture", + Name: "re2_capture", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Capture", + Name: "re2_capture", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -82,14 +82,14 @@ func re2CaptureFuncs() []*catalog.Function { func re2FindAndConsumeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Re2::FindAndConsume", + Name: "re2_findandconsume", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::FindAndConsume", + Name: "re2_findandconsume", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -102,14 +102,14 @@ func re2FindAndConsumeFuncs() []*catalog.Function { func re2ReplaceFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Re2::Replace", + Name: "re2_replace", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Replace", + Name: "re2_replace", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -122,14 +122,14 @@ func re2ReplaceFuncs() []*catalog.Function { func re2CountFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Re2::Count", + Name: "re2_count", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Count", + Name: "re2_count", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -142,19 +142,19 @@ func re2CountFuncs() []*catalog.Function { func re2OptionsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -162,7 +162,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -171,7 +171,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -181,7 +181,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -192,7 +192,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -204,7 +204,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -217,7 +217,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -231,7 +231,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -246,7 +246,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -262,7 +262,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -279,7 +279,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -297,7 +297,7 @@ func re2OptionsFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Re2::Options", + Name: "re2_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, diff --git a/internal/engine/ydb/lib/cpp/string.go b/internal/engine/ydb/lib/cpp/string.go index 291dd10eec..cc5fa4aef4 100644 --- a/internal/engine/ydb/lib/cpp/string.go +++ b/internal/engine/ydb/lib/cpp/string.go @@ -21,14 +21,14 @@ func StringFunctions() []*catalog.Function { func stringBase32Funcs() []*catalog.Function { return []*catalog.Function{ { - Name: "String::Base32Encode", + Name: "string_base32encode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "String::Base32Decode", + Name: "string_base32decode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -36,7 +36,7 @@ func stringBase32Funcs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "String::Base32StrictDecode", + Name: "string_base32strictdecode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -49,14 +49,14 @@ func stringBase32Funcs() []*catalog.Function { func stringBase64Funcs() []*catalog.Function { return []*catalog.Function{ { - Name: "String::Base64Encode", + Name: "string_base64encode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "String::Base64Decode", + Name: "string_base64decode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -64,7 +64,7 @@ func stringBase64Funcs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "String::Base64StrictDecode", + Name: "string_base64strictdecode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -77,14 +77,14 @@ func stringBase64Funcs() []*catalog.Function { func stringEscapeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "String::EscapeC", + Name: "string_escapec", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "String::UnescapeC", + Name: "string_unescapec", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -96,14 +96,14 @@ func stringEscapeFuncs() []*catalog.Function { func stringHexFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "String::HexEncode", + Name: "string_hexencode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "String::HexDecode", + Name: "string_hexdecode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -116,14 +116,14 @@ func stringHexFuncs() []*catalog.Function { func stringHtmlFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "String::EncodeHtml", + Name: "string_encodehtml", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "String::DecodeHtml", + Name: "string_decodehtml", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -135,14 +135,14 @@ func stringHtmlFuncs() []*catalog.Function { func stringCgiFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "String::CgiEscape", + Name: "string_cgiescape", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "String::CgiUnescape", + Name: "string_cgiunescape", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, diff --git a/internal/engine/ydb/lib/cpp/unicode.go b/internal/engine/ydb/lib/cpp/unicode.go index e8c967020d..9a722fef76 100644 --- a/internal/engine/ydb/lib/cpp/unicode.go +++ b/internal/engine/ydb/lib/cpp/unicode.go @@ -33,7 +33,7 @@ func UnicodeFunctions() []*catalog.Function { func unicodeCheckFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::IsUtf", + Name: "unicode_isutf", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -45,7 +45,7 @@ func unicodeCheckFuncs() []*catalog.Function { func unicodeLengthFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::GetLength", + Name: "unicode_getlength", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, @@ -57,7 +57,7 @@ func unicodeLengthFuncs() []*catalog.Function { func unicodeFindFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::Find", + Name: "unicode_find", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -66,7 +66,7 @@ func unicodeFindFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Unicode::Find", + Name: "unicode_find", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -76,7 +76,7 @@ func unicodeFindFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Unicode::RFind", + Name: "unicode_rfind", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -85,7 +85,7 @@ func unicodeFindFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Unicode::RFind", + Name: "unicode_rfind", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -100,7 +100,7 @@ func unicodeFindFuncs() []*catalog.Function { func unicodeSubstringFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::Substring", + Name: "unicode_substring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Uint64"}}, @@ -114,35 +114,35 @@ func unicodeSubstringFuncs() []*catalog.Function { func unicodeNormalizeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::Normalize", + Name: "unicode_normalize", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::NormalizeNFD", + Name: "unicode_normalizenfd", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::NormalizeNFC", + Name: "unicode_normalizenfc", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::NormalizeNFKD", + Name: "unicode_normalizenfkd", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::NormalizeNFKC", + Name: "unicode_normalizenfkc", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, @@ -154,14 +154,14 @@ func unicodeNormalizeFuncs() []*catalog.Function { func unicodeTranslitFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::Translit", + Name: "unicode_translit", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::Translit", + Name: "unicode_translit", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -174,7 +174,7 @@ func unicodeTranslitFuncs() []*catalog.Function { func unicodeLevensteinFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::LevensteinDistance", + Name: "unicode_levensteindistance", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -187,14 +187,14 @@ func unicodeLevensteinFuncs() []*catalog.Function { func unicodeFoldFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::Fold", + Name: "unicode_fold", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::Fold", + Name: "unicode_fold", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -202,7 +202,7 @@ func unicodeFoldFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::Fold", + Name: "unicode_fold", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -211,7 +211,7 @@ func unicodeFoldFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::Fold", + Name: "unicode_fold", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -221,7 +221,7 @@ func unicodeFoldFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::Fold", + Name: "unicode_fold", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -232,7 +232,7 @@ func unicodeFoldFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::Fold", + Name: "unicode_fold", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -249,7 +249,7 @@ func unicodeFoldFuncs() []*catalog.Function { func unicodeReplaceFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::ReplaceAll", + Name: "unicode_replaceall", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -258,7 +258,7 @@ func unicodeReplaceFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::ReplaceFirst", + Name: "unicode_replacefirst", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -267,7 +267,7 @@ func unicodeReplaceFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::ReplaceLast", + Name: "unicode_replacelast", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -281,7 +281,7 @@ func unicodeReplaceFuncs() []*catalog.Function { func unicodeRemoveFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::RemoveAll", + Name: "unicode_removeall", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -289,7 +289,7 @@ func unicodeRemoveFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::RemoveFirst", + Name: "unicode_removefirst", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -297,7 +297,7 @@ func unicodeRemoveFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::RemoveLast", + Name: "unicode_removelast", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -310,14 +310,14 @@ func unicodeRemoveFuncs() []*catalog.Function { func unicodeCodePointFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::ToCodePointList", + Name: "unicode_tocodepointlist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Unicode::FromCodePointList", + Name: "unicode_fromcodepointlist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -329,7 +329,7 @@ func unicodeCodePointFuncs() []*catalog.Function { func unicodeReverseFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::Reverse", + Name: "unicode_reverse", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, @@ -341,21 +341,21 @@ func unicodeReverseFuncs() []*catalog.Function { func unicodeCaseFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::ToLower", + Name: "unicode_tolower", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::ToUpper", + Name: "unicode_toupper", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Utf8"}, }, { - Name: "Unicode::ToTitle", + Name: "unicode_totitle", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, @@ -367,7 +367,7 @@ func unicodeCaseFuncs() []*catalog.Function { func unicodeSplitJoinFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::SplitToList", + Name: "unicode_splittolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -375,7 +375,7 @@ func unicodeSplitJoinFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Unicode::SplitToList", + Name: "unicode_splittolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -384,7 +384,7 @@ func unicodeSplitJoinFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Unicode::SplitToList", + Name: "unicode_splittolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -394,7 +394,7 @@ func unicodeSplitJoinFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Unicode::SplitToList", + Name: "unicode_splittolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -405,7 +405,7 @@ func unicodeSplitJoinFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Unicode::JoinFromList", + Name: "unicode_joinfromlist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "Utf8"}}, @@ -418,14 +418,14 @@ func unicodeSplitJoinFuncs() []*catalog.Function { func unicodeToUint64Funcs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::ToUint64", + Name: "unicode_touint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Unicode::ToUint64", + Name: "unicode_touint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Uint16"}}, @@ -433,7 +433,7 @@ func unicodeToUint64Funcs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Unicode::TryToUint64", + Name: "unicode_trytouint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, @@ -441,7 +441,7 @@ func unicodeToUint64Funcs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Unicode::TryToUint64", + Name: "unicode_trytouint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Uint16"}}, @@ -455,7 +455,7 @@ func unicodeToUint64Funcs() []*catalog.Function { func unicodeStripFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::Strip", + Name: "unicode_strip", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, @@ -467,49 +467,49 @@ func unicodeStripFuncs() []*catalog.Function { func unicodeIsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::IsAscii", + Name: "unicode_isascii", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Unicode::IsSpace", + Name: "unicode_isspace", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Unicode::IsUpper", + Name: "unicode_isupper", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Unicode::IsLower", + Name: "unicode_islower", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Unicode::IsAlpha", + Name: "unicode_isalpha", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Unicode::IsAlnum", + Name: "unicode_isalnum", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Unicode::IsHex", + Name: "unicode_ishex", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, }, @@ -521,7 +521,7 @@ func unicodeIsFuncs() []*catalog.Function { func unicodeIsUnicodeSetFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Unicode::IsUnicodeSet", + Name: "unicode_isunicodeset", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Utf8"}}, {Type: &ast.TypeName{Name: "Utf8"}}, diff --git a/internal/engine/ydb/lib/cpp/url.go b/internal/engine/ydb/lib/cpp/url.go index 151115a8f0..325952de74 100644 --- a/internal/engine/ydb/lib/cpp/url.go +++ b/internal/engine/ydb/lib/cpp/url.go @@ -23,7 +23,7 @@ func UrlFunctions() []*catalog.Function { func urlNormalizeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Url::Normalize", + Name: "url_normalize", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -31,7 +31,7 @@ func urlNormalizeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::NormalizeWithDefaultHttpScheme", + Name: "url_normalizewithdefaulthttpscheme", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -44,7 +44,7 @@ func urlNormalizeFuncs() []*catalog.Function { func urlEncodeDecodeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Url::Encode", + Name: "url_encode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -52,7 +52,7 @@ func urlEncodeDecodeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::Decode", + Name: "url_decode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -65,7 +65,7 @@ func urlEncodeDecodeFuncs() []*catalog.Function { func urlParseFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Url::Parse", + Name: "url_parse", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -77,14 +77,14 @@ func urlParseFuncs() []*catalog.Function { func urlGetFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Url::GetScheme", + Name: "url_getscheme", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Url::GetHost", + Name: "url_gethost", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -92,7 +92,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetHostPort", + Name: "url_gethostport", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -100,7 +100,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetSchemeHost", + Name: "url_getschemehost", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -108,7 +108,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetSchemeHostPort", + Name: "url_getschemehostport", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -116,7 +116,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetPort", + Name: "url_getport", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -124,7 +124,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetTail", + Name: "url_gettail", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -132,7 +132,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetPath", + Name: "url_getpath", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -140,7 +140,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetFragment", + Name: "url_getfragment", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -148,7 +148,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetCGIParam", + Name: "url_getcgiparam", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -157,7 +157,7 @@ func urlGetFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::GetDomain", + Name: "url_getdomain", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Uint8"}}, @@ -171,42 +171,42 @@ func urlGetFuncs() []*catalog.Function { func urlDomainFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Url::GetTLD", + Name: "url_gettld", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Url::IsKnownTLD", + Name: "url_isknowntld", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Url::IsWellKnownTLD", + Name: "url_iswellknowntld", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Url::GetDomainLevel", + Name: "url_getdomainlevel", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, { - Name: "Url::GetSignificantDomain", + Name: "url_getsignificantdomain", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Url::GetSignificantDomain", + Name: "url_getsignificantdomain", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -214,7 +214,7 @@ func urlDomainFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Url::GetOwner", + Name: "url_getowner", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -226,7 +226,7 @@ func urlDomainFuncs() []*catalog.Function { func urlCutFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Url::CutScheme", + Name: "url_cutscheme", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -234,7 +234,7 @@ func urlCutFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::CutWWW", + Name: "url_cutwww", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -242,7 +242,7 @@ func urlCutFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::CutWWW2", + Name: "url_cutwww2", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -250,7 +250,7 @@ func urlCutFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::CutQueryStringAndFragment", + Name: "url_cutquerystringandfragment", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -262,7 +262,7 @@ func urlCutFuncs() []*catalog.Function { func urlPunycodeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Url::HostNameToPunycode", + Name: "url_hostnametopunycode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -270,14 +270,14 @@ func urlPunycodeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::ForceHostNameToPunycode", + Name: "url_forcehostnametopunycode", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Url::PunycodeToHostName", + Name: "url_punycodetohostname", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -285,14 +285,14 @@ func urlPunycodeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Url::ForcePunycodeToHostName", + Name: "url_forcepunycodetohostname", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Url::CanBePunycodeHostName", + Name: "url_canbepunycodehostname", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -305,14 +305,14 @@ func urlQueryStringFuncs() []*catalog.Function { // fixme: rewrite with containers if possible return []*catalog.Function{ { - Name: "Url::QueryStringToList", + Name: "url_querystringtolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToList", + Name: "url_querystringtolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -320,7 +320,7 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToList", + Name: "url_querystringtolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -329,7 +329,7 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToList", + Name: "url_querystringtolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -339,7 +339,7 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToList", + Name: "url_querystringtolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -350,14 +350,14 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToDict", + Name: "url_querystringtodict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToDict", + Name: "url_querystringtodict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -365,7 +365,7 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToDict", + Name: "url_querystringtodict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -374,7 +374,7 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToDict", + Name: "url_querystringtodict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -384,7 +384,7 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::QueryStringToDict", + Name: "url_querystringtodict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, {Type: &ast.TypeName{Name: "Bool"}}, @@ -395,14 +395,14 @@ func urlQueryStringFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Url::BuildQueryString", + Name: "url_buildquerystring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "String"}, }, { - Name: "Url::BuildQueryString", + Name: "url_buildquerystring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, diff --git a/internal/engine/ydb/lib/cpp/yson.go b/internal/engine/ydb/lib/cpp/yson.go index 78332e0f29..60897f9052 100644 --- a/internal/engine/ydb/lib/cpp/yson.go +++ b/internal/engine/ydb/lib/cpp/yson.go @@ -31,28 +31,28 @@ func YsonFunctions() []*catalog.Function { func ysonParseFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::Parse", + Name: "yson_parse", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Yson"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ParseJson", + Name: "yson_parsejson", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Json"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ParseJsonDecodeUtf8", + Name: "yson_parsejsondecodeutf8", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Json"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::Parse", + Name: "yson_parse", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -60,7 +60,7 @@ func ysonParseFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::ParseJson", + Name: "yson_parsejson", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -68,7 +68,7 @@ func ysonParseFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::ParseJsonDecodeUtf8", + Name: "yson_parsejsondecodeutf8", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "String"}}, }, @@ -81,7 +81,7 @@ func ysonParseFuncs() []*catalog.Function { func ysonFromFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::From", + Name: "yson_from", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -93,7 +93,7 @@ func ysonFromFuncs() []*catalog.Function { func ysonWithAttributesFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::WithAttributes", + Name: "yson_withattributes", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -107,7 +107,7 @@ func ysonWithAttributesFuncs() []*catalog.Function { func ysonEqualsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::Equals", + Name: "yson_equals", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -120,7 +120,7 @@ func ysonEqualsFuncs() []*catalog.Function { func ysonGetHashFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::GetHash", + Name: "yson_gethash", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -132,56 +132,56 @@ func ysonGetHashFuncs() []*catalog.Function { func ysonIsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::IsEntity", + Name: "yson_isentity", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Yson::IsString", + Name: "yson_isstring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Yson::IsDouble", + Name: "yson_isdouble", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Yson::IsUint64", + Name: "yson_isuint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Yson::IsInt64", + Name: "yson_isint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Yson::IsBool", + Name: "yson_isbool", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Yson::IsList", + Name: "yson_islist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Bool"}, }, { - Name: "Yson::IsDict", + Name: "yson_isdict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -193,7 +193,7 @@ func ysonIsFuncs() []*catalog.Function { func ysonGetLengthFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::GetLength", + Name: "yson_getlength", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -206,7 +206,7 @@ func ysonGetLengthFuncs() []*catalog.Function { func ysonConvertToFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::ConvertTo", + Name: "yson_convertto", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -214,7 +214,7 @@ func ysonConvertToFuncs() []*catalog.Function { ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToBool", + Name: "yson_converttobool", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -222,7 +222,7 @@ func ysonConvertToFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::ConvertToInt64", + Name: "yson_converttoint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -230,7 +230,7 @@ func ysonConvertToFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::ConvertToUint64", + Name: "yson_converttouint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -238,7 +238,7 @@ func ysonConvertToFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::ConvertToDouble", + Name: "yson_converttodouble", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -246,7 +246,7 @@ func ysonConvertToFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::ConvertToString", + Name: "yson_converttostring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -254,7 +254,7 @@ func ysonConvertToFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::ConvertToList", + Name: "yson_converttolist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -266,35 +266,35 @@ func ysonConvertToFuncs() []*catalog.Function { func ysonConvertToListFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::ConvertToBoolList", + Name: "yson_converttoboollist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToInt64List", + Name: "yson_converttoint64list", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToUint64List", + Name: "yson_converttouint64list", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToDoubleList", + Name: "yson_converttodoublelist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToStringList", + Name: "yson_converttostringlist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -306,42 +306,42 @@ func ysonConvertToListFuncs() []*catalog.Function { func ysonConvertToDictFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::ConvertToDict", + Name: "yson_converttodict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToBoolDict", + Name: "yson_converttobooldict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToInt64Dict", + Name: "yson_converttoint64dict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToUint64Dict", + Name: "yson_converttouint64dict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToDoubleDict", + Name: "yson_converttodoubledict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::ConvertToStringDict", + Name: "yson_converttostringdict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -353,7 +353,7 @@ func ysonConvertToDictFuncs() []*catalog.Function { func ysonContainsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::Contains", + Name: "yson_contains", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -367,7 +367,7 @@ func ysonContainsFuncs() []*catalog.Function { func ysonLookupFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::Lookup", + Name: "yson_lookup", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -376,7 +376,7 @@ func ysonLookupFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::LookupBool", + Name: "yson_lookupbool", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -385,7 +385,7 @@ func ysonLookupFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::LookupInt64", + Name: "yson_lookupint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -394,7 +394,7 @@ func ysonLookupFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::LookupUint64", + Name: "yson_lookupuint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -403,7 +403,7 @@ func ysonLookupFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::LookupDouble", + Name: "yson_lookupdouble", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -412,7 +412,7 @@ func ysonLookupFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::LookupString", + Name: "yson_lookupstring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -421,7 +421,7 @@ func ysonLookupFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::LookupDict", + Name: "yson_lookupdict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -430,7 +430,7 @@ func ysonLookupFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::LookupList", + Name: "yson_lookuplist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -444,7 +444,7 @@ func ysonLookupFuncs() []*catalog.Function { func ysonYPathFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::YPath", + Name: "yson_ypath", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -453,7 +453,7 @@ func ysonYPathFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::YPathBool", + Name: "yson_ypathbool", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -462,7 +462,7 @@ func ysonYPathFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::YPathInt64", + Name: "yson_ypathint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -471,7 +471,7 @@ func ysonYPathFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::YPathUint64", + Name: "yson_ypathuint64", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -480,7 +480,7 @@ func ysonYPathFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::YPathDouble", + Name: "yson_ypathdouble", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -489,7 +489,7 @@ func ysonYPathFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::YPathString", + Name: "yson_ypathstring", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -498,7 +498,7 @@ func ysonYPathFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::YPathDict", + Name: "yson_ypathdict", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -507,7 +507,7 @@ func ysonYPathFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::YPathList", + Name: "yson_ypathlist", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "String"}}, @@ -521,7 +521,7 @@ func ysonYPathFuncs() []*catalog.Function { func ysonAttributesFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::Attributes", + Name: "yson_attributes", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -533,28 +533,28 @@ func ysonAttributesFuncs() []*catalog.Function { func ysonSerializeFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::Serialize", + Name: "yson_serialize", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Yson"}, }, { - Name: "Yson::SerializeText", + Name: "yson_serializetext", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Yson"}, }, { - Name: "Yson::SerializePretty", + Name: "yson_serializepretty", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, ReturnType: &ast.TypeName{Name: "Yson"}, }, { - Name: "Yson::SerializeJson", + Name: "yson_serializejson", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, }, @@ -562,7 +562,7 @@ func ysonSerializeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::SerializeJson", + Name: "yson_serializejson", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -571,7 +571,7 @@ func ysonSerializeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::SerializeJson", + Name: "yson_serializejson", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -581,7 +581,7 @@ func ysonSerializeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::SerializeJson", + Name: "yson_serializejson", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -592,7 +592,7 @@ func ysonSerializeFuncs() []*catalog.Function { ReturnTypeNullable: true, }, { - Name: "Yson::SerializeJson", + Name: "yson_serializejson", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "any"}}, {Type: &ast.TypeName{Name: "any"}}, @@ -609,19 +609,19 @@ func ysonSerializeFuncs() []*catalog.Function { func ysonOptionsFuncs() []*catalog.Function { return []*catalog.Function{ { - Name: "Yson::Options", + Name: "yson_options", Args: []*catalog.Argument{}, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::Options", + Name: "yson_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, }, ReturnType: &ast.TypeName{Name: "any"}, }, { - Name: "Yson::Options", + Name: "yson_options", Args: []*catalog.Argument{ {Type: &ast.TypeName{Name: "Bool"}}, {Type: &ast.TypeName{Name: "Bool"}}, From 6fada2f4be99f360076f6f07963a1cb658d11a94 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 20 Oct 2025 19:01:43 +0300 Subject: [PATCH 09/26] Added some more tests + rewrited strings to BYTES ([]byte) --- internal/codegen/golang/query.go | 4 +- internal/codegen/golang/ydb_type.go | 4 +- .../testdata/case_named_params/ydb/go/db.go | 31 +++++++++ .../case_named_params/ydb/go/models.go | 13 ++++ .../case_named_params/ydb/go/query.sql.go | 36 +++++++++++ .../testdata/case_named_params/ydb/query.sql | 6 ++ .../testdata/case_named_params/ydb/schema.sql | 10 +++ .../testdata/case_named_params/ydb/sqlc.json | 12 ++++ .../testdata/case_sensitive/ydb/go/db.go | 31 +++++++++ .../testdata/case_sensitive/ydb/go/models.go | 10 +++ .../case_sensitive/ydb/go/query.sql.go | 28 +++++++++ .../testdata/case_sensitive/ydb/query.sql | 9 +++ .../testdata/case_sensitive/ydb/schema.sql | 8 +++ .../testdata/case_sensitive/ydb/sqlc.json | 15 +++++ .../testdata/case_stmt_bool/ydb/go/db.go | 31 +++++++++ .../testdata/case_stmt_bool/ydb/go/models.go | 9 +++ .../case_stmt_bool/ydb/go/query.sql.go | 41 ++++++++++++ .../testdata/case_stmt_bool/ydb/query.sql | 9 +++ .../testdata/case_stmt_bool/ydb/schema.sql | 4 ++ .../testdata/case_stmt_bool/ydb/sqlc.json | 15 +++++ .../endtoend/testdata/case_text/ydb/go/db.go | 31 +++++++++ .../testdata/case_text/ydb/go/models.go | 9 +++ .../testdata/case_text/ydb/go/query.sql.go | 41 ++++++++++++ .../endtoend/testdata/case_text/ydb/query.sql | 9 +++ .../testdata/case_text/ydb/schema.sql | 4 ++ .../endtoend/testdata/case_text/ydb/sqlc.json | 15 +++++ .../testdata/case_value_param/ydb/go/db.go | 31 +++++++++ .../case_value_param/ydb/go/models.go | 10 +++ .../case_value_param/ydb/go/query.sql.go | 20 ++++++ .../testdata/case_value_param/ydb/query.sql | 5 ++ .../testdata/case_value_param/ydb/schema.sql | 7 +++ .../testdata/case_value_param/ydb/sqlc.json | 15 +++++ .../cast_coalesce/ydb/stdlib/go/db.go | 31 +++++++++ .../cast_coalesce/ydb/stdlib/go/models.go | 9 +++ .../cast_coalesce/ydb/stdlib/go/query.sql.go | 38 +++++++++++ .../cast_coalesce/ydb/stdlib/query.sql | 5 ++ .../cast_coalesce/ydb/stdlib/schema.sql | 3 + .../cast_coalesce/ydb/stdlib/sqlc.json | 14 +++++ .../cast_coalesce/ydb/ydb-go-sdk/go/db.go | 26 ++++++++ .../cast_coalesce/ydb/ydb-go-sdk/go/models.go | 9 +++ .../ydb/ydb-go-sdk/go/query.sql.go | 46 ++++++++++++++ .../cast_coalesce/ydb/ydb-go-sdk/query.sql | 5 ++ .../cast_coalesce/ydb/ydb-go-sdk/schema.sql | 3 + .../cast_coalesce/ydb/ydb-go-sdk/sqlc.json | 15 +++++ .../testdata/cast_null/ydb/stdlib/go/db.go | 31 +++++++++ .../cast_null/ydb/stdlib/go/models.go | 9 +++ .../cast_null/ydb/stdlib/go/query.sql.go | 55 ++++++++++++++++ .../testdata/cast_null/ydb/stdlib/query.sql | 10 +++ .../testdata/cast_null/ydb/stdlib/schema.sql | 3 + .../testdata/cast_null/ydb/stdlib/sqlc.json | 14 +++++ .../cast_null/ydb/ydb-go-sdk/go/db.go | 26 ++++++++ .../cast_null/ydb/ydb-go-sdk/go/models.go | 9 +++ .../cast_null/ydb/ydb-go-sdk/go/query.sql.go | 63 +++++++++++++++++++ .../cast_null/ydb/ydb-go-sdk/query.sql | 10 +++ .../cast_null/ydb/ydb-go-sdk/schema.sql | 3 + .../cast_null/ydb/ydb-go-sdk/sqlc.json | 15 +++++ .../endtoend/testdata/cast_param/ydb/go/db.go | 31 +++++++++ .../testdata/cast_param/ydb/go/models.go | 10 +++ .../testdata/cast_param/ydb/go/query.sql.go | 39 ++++++++++++ .../testdata/cast_param/ydb/query.sql | 6 ++ .../testdata/cast_param/ydb/schema.sql | 7 +++ .../testdata/cast_param/ydb/sqlc.json | 14 +++++ 62 files changed, 1079 insertions(+), 3 deletions(-) create mode 100644 internal/endtoend/testdata/case_named_params/ydb/go/db.go create mode 100644 internal/endtoend/testdata/case_named_params/ydb/go/models.go create mode 100644 internal/endtoend/testdata/case_named_params/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/case_named_params/ydb/query.sql create mode 100644 internal/endtoend/testdata/case_named_params/ydb/schema.sql create mode 100644 internal/endtoend/testdata/case_named_params/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/case_sensitive/ydb/go/db.go create mode 100644 internal/endtoend/testdata/case_sensitive/ydb/go/models.go create mode 100644 internal/endtoend/testdata/case_sensitive/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/case_sensitive/ydb/query.sql create mode 100644 internal/endtoend/testdata/case_sensitive/ydb/schema.sql create mode 100644 internal/endtoend/testdata/case_sensitive/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/case_stmt_bool/ydb/go/db.go create mode 100644 internal/endtoend/testdata/case_stmt_bool/ydb/go/models.go create mode 100644 internal/endtoend/testdata/case_stmt_bool/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/case_stmt_bool/ydb/query.sql create mode 100644 internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql create mode 100644 internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/case_text/ydb/go/db.go create mode 100644 internal/endtoend/testdata/case_text/ydb/go/models.go create mode 100644 internal/endtoend/testdata/case_text/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/case_text/ydb/query.sql create mode 100644 internal/endtoend/testdata/case_text/ydb/schema.sql create mode 100644 internal/endtoend/testdata/case_text/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/case_value_param/ydb/go/db.go create mode 100644 internal/endtoend/testdata/case_value_param/ydb/go/models.go create mode 100644 internal/endtoend/testdata/case_value_param/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/case_value_param/ydb/query.sql create mode 100644 internal/endtoend/testdata/case_value_param/ydb/schema.sql create mode 100644 internal/endtoend/testdata/case_value_param/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/cast_null/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/cast_null/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/cast_null/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/cast_param/ydb/go/db.go create mode 100644 internal/endtoend/testdata/cast_param/ydb/go/models.go create mode 100644 internal/endtoend/testdata/cast_param/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/cast_param/ydb/query.sql create mode 100644 internal/endtoend/testdata/cast_param/ydb/schema.sql create mode 100644 internal/endtoend/testdata/cast_param/ydb/sqlc.json diff --git a/internal/codegen/golang/query.go b/internal/codegen/golang/query.go index f2a20652d7..bdeda3f4d8 100644 --- a/internal/codegen/golang/query.go +++ b/internal/codegen/golang/query.go @@ -321,8 +321,10 @@ func ydbBuilderMethodForColumnType(dbType string) string { return "JSON" case "jsondocument": return "JSONDocument" - case "utf8", "text", "string": + case "utf8", "text": return "Text" + case "string": + return "Bytes" case "date": return "Date" case "date32": diff --git a/internal/codegen/golang/ydb_type.go b/internal/codegen/golang/ydb_type.go index 3abae72671..1a3629f463 100644 --- a/internal/codegen/golang/ydb_type.go +++ b/internal/codegen/golang/ydb_type.go @@ -114,7 +114,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col return "*float64" // string types - case "string", "utf8", "text": + case "utf8", "text": if notNull { return "string" } @@ -190,7 +190,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col } return "*uuid.UUID" - case "yson": + case "yson", "string": if notNull { return "[]byte" } diff --git a/internal/endtoend/testdata/case_named_params/ydb/go/db.go b/internal/endtoend/testdata/case_named_params/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/case_named_params/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/case_named_params/ydb/go/models.go b/internal/endtoend/testdata/case_named_params/ydb/go/models.go new file mode 100644 index 0000000000..2a1484e2af --- /dev/null +++ b/internal/endtoend/testdata/case_named_params/ydb/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Username *string + Email *string + Name string + Bio *string +} diff --git a/internal/endtoend/testdata/case_named_params/ydb/go/query.sql.go b/internal/endtoend/testdata/case_named_params/ydb/go/query.sql.go new file mode 100644 index 0000000000..7ad6dd237f --- /dev/null +++ b/internal/endtoend/testdata/case_named_params/ydb/go/query.sql.go @@ -0,0 +1,36 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const listAuthors = `-- name: ListAuthors :one +SELECT id, username, email, name, bio +FROM authors +WHERE email = CASE WHEN Cast($email as Text?) = '' THEN NULL ELSE $email END + OR username = CASE WHEN Cast($username as Text?) = '' THEN NULL ELSE $username END +LIMIT 1 +` + +type ListAuthorsParams struct { + Email *string + Username *string +} + +func (q *Queries) ListAuthors(ctx context.Context, arg ListAuthorsParams) (Author, error) { + row := q.db.QueryRowContext(ctx, listAuthors, arg.Email, arg.Username) + var i Author + err := row.Scan( + &i.ID, + &i.Username, + &i.Email, + &i.Name, + &i.Bio, + ) + return i, err +} diff --git a/internal/endtoend/testdata/case_named_params/ydb/query.sql b/internal/endtoend/testdata/case_named_params/ydb/query.sql new file mode 100644 index 0000000000..ad0b8ebe18 --- /dev/null +++ b/internal/endtoend/testdata/case_named_params/ydb/query.sql @@ -0,0 +1,6 @@ +-- name: ListAuthors :one +SELECT * +FROM authors +WHERE email = CASE WHEN Cast($email as Text?) = '' THEN NULL ELSE $email END + OR username = CASE WHEN Cast($username as Text?) = '' THEN NULL ELSE $username END +LIMIT 1; diff --git a/internal/endtoend/testdata/case_named_params/ydb/schema.sql b/internal/endtoend/testdata/case_named_params/ydb/schema.sql new file mode 100644 index 0000000000..dd78dc389b --- /dev/null +++ b/internal/endtoend/testdata/case_named_params/ydb/schema.sql @@ -0,0 +1,10 @@ +-- https://github.com/sqlc-dev/sqlc/issues/1195 + +CREATE TABLE authors ( + id BigSerial, + username Text, + email Text, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/case_named_params/ydb/sqlc.json b/internal/endtoend/testdata/case_named_params/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/case_named_params/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/case_sensitive/ydb/go/db.go b/internal/endtoend/testdata/case_sensitive/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/case_sensitive/ydb/go/models.go b/internal/endtoend/testdata/case_sensitive/ydb/go/models.go new file mode 100644 index 0000000000..e09185b11a --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Contact struct { + Pid string + Customername *string +} diff --git a/internal/endtoend/testdata/case_sensitive/ydb/go/query.sql.go b/internal/endtoend/testdata/case_sensitive/ydb/go/query.sql.go new file mode 100644 index 0000000000..53169ff143 --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/go/query.sql.go @@ -0,0 +1,28 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const insertContact = `-- name: InsertContact :exec +INSERT INTO contacts ( + pid, + CustomerName +) +VALUES ($pid, $customer_name) +` + +type InsertContactParams struct { + Pid string + CustomerName *string +} + +func (q *Queries) InsertContact(ctx context.Context, arg InsertContactParams) error { + _, err := q.db.ExecContext(ctx, insertContact, arg.Pid, arg.CustomerName) + return err +} diff --git a/internal/endtoend/testdata/case_sensitive/ydb/query.sql b/internal/endtoend/testdata/case_sensitive/ydb/query.sql new file mode 100644 index 0000000000..c2bf2e1260 --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/query.sql @@ -0,0 +1,9 @@ +-- name: InsertContact :exec +INSERT INTO contacts ( + pid, + CustomerName +) +VALUES ($pid, $customer_name); + + + diff --git a/internal/endtoend/testdata/case_sensitive/ydb/schema.sql b/internal/endtoend/testdata/case_sensitive/ydb/schema.sql new file mode 100644 index 0000000000..1ad56bc9fc --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE contacts ( + pid Text, + CustomerName Text, + PRIMARY KEY (pid) +); + + + diff --git a/internal/endtoend/testdata/case_sensitive/ydb/sqlc.json b/internal/endtoend/testdata/case_sensitive/ydb/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/go/db.go b/internal/endtoend/testdata/case_stmt_bool/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/go/models.go b/internal/endtoend/testdata/case_stmt_bool/ydb/go/models.go new file mode 100644 index 0000000000..ef6e41447e --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID string +} diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/go/query.sql.go b/internal/endtoend/testdata/case_stmt_bool/ydb/go/query.sql.go new file mode 100644 index 0000000000..943041661b --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/go/query.sql.go @@ -0,0 +1,41 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const caseStatementBoolean = `-- name: CaseStatementBoolean :many +SELECT CASE + WHEN id = $id THEN true + ELSE false +END AS is_one +FROM foo +` + +func (q *Queries) CaseStatementBoolean(ctx context.Context, id string) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, caseStatementBoolean, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var is_one bool + if err := rows.Scan(&is_one); err != nil { + return nil, err + } + items = append(items, is_one) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql b/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql new file mode 100644 index 0000000000..5798794f5e --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql @@ -0,0 +1,9 @@ +-- name: CaseStatementBoolean :many +SELECT CASE + WHEN id = $id THEN true + ELSE false +END AS is_one +FROM foo; + + + diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql b/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql new file mode 100644 index 0000000000..50f29a9021 --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo (id Text NOT NULL, PRIMARY KEY (id)); + + + diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json b/internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/case_text/ydb/go/db.go b/internal/endtoend/testdata/case_text/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/case_text/ydb/go/models.go b/internal/endtoend/testdata/case_text/ydb/go/models.go new file mode 100644 index 0000000000..ef6e41447e --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID string +} diff --git a/internal/endtoend/testdata/case_text/ydb/go/query.sql.go b/internal/endtoend/testdata/case_text/ydb/go/query.sql.go new file mode 100644 index 0000000000..c6df7fd2ed --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/go/query.sql.go @@ -0,0 +1,41 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const caseStatementText = `-- name: CaseStatementText :many +SELECT CASE + WHEN id = $id THEN 'foo' + ELSE 'bar' +END AS is_one +FROM foo +` + +func (q *Queries) CaseStatementText(ctx context.Context, id string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, caseStatementText, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var is_one string + if err := rows.Scan(&is_one); err != nil { + return nil, err + } + items = append(items, is_one) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/case_text/ydb/query.sql b/internal/endtoend/testdata/case_text/ydb/query.sql new file mode 100644 index 0000000000..3c89574d81 --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/query.sql @@ -0,0 +1,9 @@ +-- name: CaseStatementText :many +SELECT CASE + WHEN id = $id THEN 'foo' + ELSE 'bar' +END AS is_one +FROM foo; + + + diff --git a/internal/endtoend/testdata/case_text/ydb/schema.sql b/internal/endtoend/testdata/case_text/ydb/schema.sql new file mode 100644 index 0000000000..50f29a9021 --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo (id Text NOT NULL, PRIMARY KEY (id)); + + + diff --git a/internal/endtoend/testdata/case_text/ydb/sqlc.json b/internal/endtoend/testdata/case_text/ydb/sqlc.json new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + + diff --git a/internal/endtoend/testdata/case_value_param/ydb/go/db.go b/internal/endtoend/testdata/case_value_param/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/case_value_param/ydb/go/models.go b/internal/endtoend/testdata/case_value_param/ydb/go/models.go new file mode 100644 index 0000000000..1dd31b55ae --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Testing struct { + ID int32 + Value *string +} diff --git a/internal/endtoend/testdata/case_value_param/ydb/go/query.sql.go b/internal/endtoend/testdata/case_value_param/ydb/go/query.sql.go new file mode 100644 index 0000000000..7227417638 --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/go/query.sql.go @@ -0,0 +1,20 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const update = `-- name: Update :exec +UPDATE testing +SET value = CASE CAST($condition AS Bool) WHEN true THEN Utf8('Hello') WHEN false THEN Utf8('Goodbye') ELSE value END +` + +func (q *Queries) Update(ctx context.Context, condition bool) error { + _, err := q.db.ExecContext(ctx, update, condition) + return err +} diff --git a/internal/endtoend/testdata/case_value_param/ydb/query.sql b/internal/endtoend/testdata/case_value_param/ydb/query.sql new file mode 100644 index 0000000000..55295e0d3b --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/query.sql @@ -0,0 +1,5 @@ +-- name: Update :exec +UPDATE testing +SET value = CASE CAST($condition AS Bool) WHEN true THEN Utf8('Hello') WHEN false THEN Utf8('Goodbye') ELSE value END; + + diff --git a/internal/endtoend/testdata/case_value_param/ydb/schema.sql b/internal/endtoend/testdata/case_value_param/ydb/schema.sql new file mode 100644 index 0000000000..7446d5430e --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE testing ( + id Int32, + value Text, + PRIMARY KEY (id) +); + + diff --git a/internal/endtoend/testdata/case_value_param/ydb/sqlc.json b/internal/endtoend/testdata/case_value_param/ydb/sqlc.json new file mode 100644 index 0000000000..a261f3553c --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] + } + + + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/db.go b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/models.go b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..0cd442222e --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string +} diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..a564e61835 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/go/query.sql.go @@ -0,0 +1,38 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const castCoalesce = `-- name: CastCoalesce :many +SELECT COALESCE(bar, '') AS login +FROM foo +` + +func (q *Queries) CastCoalesce(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, castCoalesce) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var login string + if err := rows.Scan(&login); err != nil { + return nil, err + } + items = append(items, login) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql new file mode 100644 index 0000000000..e0529e1d53 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: CastCoalesce :many +SELECT COALESCE(bar, '') AS login +FROM foo; + + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..5e756dfc4f --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..0cd442222e --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string +} diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..90a61cbebc --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,46 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const castCoalesce = `-- name: CastCoalesce :many +SELECT COALESCE(bar, '') AS login +FROM foo +` + +func (q *Queries) CastCoalesce(ctx context.Context, opts ...query.ExecuteOption) ([]string, error) { + result, err := q.db.QueryResultSet(ctx, castCoalesce, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var login string + if err := row.Scan(&login); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, login) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..e0529e1d53 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: CastCoalesce :many +SELECT COALESCE(bar, '') AS login +FROM foo; + + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..5e756dfc4f --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..2610f39f40 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} + + diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/go/db.go b/internal/endtoend/testdata/cast_null/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/go/models.go b/internal/endtoend/testdata/cast_null/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..0cd442222e --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string +} diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/cast_null/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..2711419e58 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/go/query.sql.go @@ -0,0 +1,55 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "time" +) + +const listNullable = `-- name: ListNullable :many +SELECT + Cast(NULL AS Text?) AS a, + Cast(NULL AS Int32?) AS b, + Cast(NULL AS Int64?) AS c, + Cast(NULL AS DateTime?) AS d +FROM foo +` + +type ListNullableRow struct { + A *string + B *int32 + C *int64 + D *time.Time +} + +func (q *Queries) ListNullable(ctx context.Context) ([]ListNullableRow, error) { + rows, err := q.db.QueryContext(ctx, listNullable) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListNullableRow + for rows.Next() { + var i ListNullableRow + if err := rows.Scan( + &i.A, + &i.B, + &i.C, + &i.D, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql b/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql new file mode 100644 index 0000000000..54cf6dc301 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql @@ -0,0 +1,10 @@ +-- name: ListNullable :many +SELECT + Cast(NULL AS Text?) AS a, + Cast(NULL AS Int32?) AS b, + Cast(NULL AS Int64?) AS c, + Cast(NULL AS DateTime?) AS d +FROM foo; + + + diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql b/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..5e756dfc4f --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + + diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..0cd442222e --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string +} diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..c33f6bad9e --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,63 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + "time" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const listNullable = `-- name: ListNullable :many +SELECT + Cast(NULL AS Text?) AS a, + Cast(NULL AS Int32?) AS b, + Cast(NULL AS Int64?) AS c, + Cast(NULL AS DateTime?) AS d +FROM foo +` + +type ListNullableRow struct { + A *string + B *int32 + C *int64 + D *time.Time +} + +func (q *Queries) ListNullable(ctx context.Context, opts ...query.ExecuteOption) ([]ListNullableRow, error) { + result, err := q.db.QueryResultSet(ctx, listNullable, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []ListNullableRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i ListNullableRow + if err := row.Scan( + &i.A, + &i.B, + &i.C, + &i.D, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..54cf6dc301 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,10 @@ +-- name: ListNullable :many +SELECT + Cast(NULL AS Text?) AS a, + Cast(NULL AS Int32?) AS b, + Cast(NULL AS Int64?) AS c, + Cast(NULL AS DateTime?) AS d +FROM foo; + + + diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..5e756dfc4f --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + + diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..2610f39f40 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} + + diff --git a/internal/endtoend/testdata/cast_param/ydb/go/db.go b/internal/endtoend/testdata/cast_param/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/cast_param/ydb/go/models.go b/internal/endtoend/testdata/cast_param/ydb/go/models.go new file mode 100644 index 0000000000..4c6487b2b1 --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type MyTable struct { + Invalid bool + Foo string +} diff --git a/internal/endtoend/testdata/cast_param/ydb/go/query.sql.go b/internal/endtoend/testdata/cast_param/ydb/go/query.sql.go new file mode 100644 index 0000000000..98e709266d --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getData = `-- name: GetData :many +SELECT invalid, foo +FROM my_table +WHERE (CAST($allow_invalid AS Bool) OR NOT invalid) +` + +func (q *Queries) GetData(ctx context.Context, allowInvalid bool) ([]MyTable, error) { + rows, err := q.db.QueryContext(ctx, getData, allowInvalid) + if err != nil { + return nil, err + } + defer rows.Close() + var items []MyTable + for rows.Next() { + var i MyTable + if err := rows.Scan(&i.Invalid, &i.Foo); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/cast_param/ydb/query.sql b/internal/endtoend/testdata/cast_param/ydb/query.sql new file mode 100644 index 0000000000..31c562ec69 --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/query.sql @@ -0,0 +1,6 @@ +-- name: GetData :many +SELECT * +FROM my_table +WHERE (CAST($allow_invalid AS Bool) OR NOT invalid); + + diff --git a/internal/endtoend/testdata/cast_param/ydb/schema.sql b/internal/endtoend/testdata/cast_param/ydb/schema.sql new file mode 100644 index 0000000000..328cbccec1 --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE my_table ( + invalid Bool, + foo Text, + PRIMARY KEY (invalid, foo) +); + + diff --git a/internal/endtoend/testdata/cast_param/ydb/sqlc.json b/internal/endtoend/testdata/cast_param/ydb/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + From 90001cf5965150c752c012e1cab611c5624935a8 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 20 Oct 2025 19:36:06 +0300 Subject: [PATCH 10/26] fixed string --- .../testdata/builtins/ydb/go/query.sql.go | 16 ++++++++-------- .../testdata/case_sensitive/ydb/query.sql | 1 + .../testdata/case_sensitive/ydb/schema.sql | 1 + .../testdata/case_sensitive/ydb/sqlc.json | 1 + .../testdata/case_stmt_bool/ydb/query.sql | 1 + .../testdata/case_stmt_bool/ydb/schema.sql | 1 + .../testdata/case_stmt_bool/ydb/sqlc.json | 1 + .../endtoend/testdata/case_text/ydb/query.sql | 1 + .../endtoend/testdata/case_text/ydb/schema.sql | 1 + .../endtoend/testdata/case_text/ydb/sqlc.json | 1 + .../testdata/case_value_param/ydb/query.sql | 1 + .../testdata/case_value_param/ydb/schema.sql | 1 + .../testdata/case_value_param/ydb/sqlc.json | 1 + .../testdata/cast_coalesce/ydb/stdlib/query.sql | 1 + .../testdata/cast_coalesce/ydb/stdlib/schema.sql | 1 + .../testdata/cast_coalesce/ydb/stdlib/sqlc.json | 1 + .../cast_coalesce/ydb/ydb-go-sdk/query.sql | 1 + .../cast_coalesce/ydb/ydb-go-sdk/schema.sql | 1 + .../cast_coalesce/ydb/ydb-go-sdk/sqlc.json | 1 + .../testdata/cast_null/ydb/stdlib/query.sql | 1 + .../testdata/cast_null/ydb/stdlib/schema.sql | 1 + .../testdata/cast_null/ydb/stdlib/sqlc.json | 1 + .../testdata/cast_null/ydb/ydb-go-sdk/query.sql | 1 + .../testdata/cast_null/ydb/ydb-go-sdk/schema.sql | 1 + .../testdata/cast_null/ydb/ydb-go-sdk/sqlc.json | 1 + .../endtoend/testdata/cast_param/ydb/query.sql | 1 + .../endtoend/testdata/cast_param/ydb/schema.sql | 1 + .../endtoend/testdata/cast_param/ydb/sqlc.json | 1 + .../datatype/ydb/ydb-go-sdk/go/models.go | 6 ++---- .../datatype/ydb/ydb-go-sdk/sql/numeric.sql | 4 ---- 30 files changed, 37 insertions(+), 16 deletions(-) diff --git a/internal/endtoend/testdata/builtins/ydb/go/query.sql.go b/internal/endtoend/testdata/builtins/ydb/go/query.sql.go index e62d077ef7..d0f523428d 100644 --- a/internal/endtoend/testdata/builtins/ydb/go/query.sql.go +++ b/internal/endtoend/testdata/builtins/ydb/go/query.sql.go @@ -622,9 +622,9 @@ const fSubstring2 = `-- name: FSubstring2 :one SELECT Substring("abcdef", 2) ` -func (q *Queries) FSubstring2(ctx context.Context) (string, error) { +func (q *Queries) FSubstring2(ctx context.Context) ([]byte, error) { row := q.db.QueryRowContext(ctx, fSubstring2) - var substring string + var substring []byte err := row.Scan(&substring) return substring, err } @@ -633,9 +633,9 @@ const fSubstring3 = `-- name: FSubstring3 :one SELECT Substring("abcdef", 2, 3) ` -func (q *Queries) FSubstring3(ctx context.Context) (string, error) { +func (q *Queries) FSubstring3(ctx context.Context) ([]byte, error) { row := q.db.QueryRowContext(ctx, fSubstring3) - var substring string + var substring []byte err := row.Scan(&substring) return substring, err } @@ -655,9 +655,9 @@ const fToBytes = `-- name: FToBytes :one SELECT ToBytes("abc") ` -func (q *Queries) FToBytes(ctx context.Context) (string, error) { +func (q *Queries) FToBytes(ctx context.Context) ([]byte, error) { row := q.db.QueryRowContext(ctx, fToBytes) - var tobytes string + var tobytes []byte err := row.Scan(&tobytes) return tobytes, err } @@ -865,9 +865,9 @@ const fVersion = `-- name: FVersion :one SELECT Version() ` -func (q *Queries) FVersion(ctx context.Context) (string, error) { +func (q *Queries) FVersion(ctx context.Context) ([]byte, error) { row := q.db.QueryRowContext(ctx, fVersion) - var version string + var version []byte err := row.Scan(&version) return version, err } diff --git a/internal/endtoend/testdata/case_sensitive/ydb/query.sql b/internal/endtoend/testdata/case_sensitive/ydb/query.sql index c2bf2e1260..b0723c7f4f 100644 --- a/internal/endtoend/testdata/case_sensitive/ydb/query.sql +++ b/internal/endtoend/testdata/case_sensitive/ydb/query.sql @@ -7,3 +7,4 @@ VALUES ($pid, $customer_name); + diff --git a/internal/endtoend/testdata/case_sensitive/ydb/schema.sql b/internal/endtoend/testdata/case_sensitive/ydb/schema.sql index 1ad56bc9fc..7e97e62564 100644 --- a/internal/endtoend/testdata/case_sensitive/ydb/schema.sql +++ b/internal/endtoend/testdata/case_sensitive/ydb/schema.sql @@ -6,3 +6,4 @@ CREATE TABLE contacts ( + diff --git a/internal/endtoend/testdata/case_sensitive/ydb/sqlc.json b/internal/endtoend/testdata/case_sensitive/ydb/sqlc.json index c5959ba446..e85f2a696f 100644 --- a/internal/endtoend/testdata/case_sensitive/ydb/sqlc.json +++ b/internal/endtoend/testdata/case_sensitive/ydb/sqlc.json @@ -13,3 +13,4 @@ + diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql b/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql index 5798794f5e..cb686c2288 100644 --- a/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql @@ -7,3 +7,4 @@ FROM foo; + diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql b/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql index 50f29a9021..1312538949 100644 --- a/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql @@ -2,3 +2,4 @@ CREATE TABLE foo (id Text NOT NULL, PRIMARY KEY (id)); + diff --git a/internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json b/internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json index c5959ba446..e85f2a696f 100644 --- a/internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/sqlc.json @@ -13,3 +13,4 @@ + diff --git a/internal/endtoend/testdata/case_text/ydb/query.sql b/internal/endtoend/testdata/case_text/ydb/query.sql index 3c89574d81..c4d69e44dd 100644 --- a/internal/endtoend/testdata/case_text/ydb/query.sql +++ b/internal/endtoend/testdata/case_text/ydb/query.sql @@ -7,3 +7,4 @@ FROM foo; + diff --git a/internal/endtoend/testdata/case_text/ydb/schema.sql b/internal/endtoend/testdata/case_text/ydb/schema.sql index 50f29a9021..1312538949 100644 --- a/internal/endtoend/testdata/case_text/ydb/schema.sql +++ b/internal/endtoend/testdata/case_text/ydb/schema.sql @@ -2,3 +2,4 @@ CREATE TABLE foo (id Text NOT NULL, PRIMARY KEY (id)); + diff --git a/internal/endtoend/testdata/case_text/ydb/sqlc.json b/internal/endtoend/testdata/case_text/ydb/sqlc.json index c5959ba446..e85f2a696f 100644 --- a/internal/endtoend/testdata/case_text/ydb/sqlc.json +++ b/internal/endtoend/testdata/case_text/ydb/sqlc.json @@ -13,3 +13,4 @@ + diff --git a/internal/endtoend/testdata/case_value_param/ydb/query.sql b/internal/endtoend/testdata/case_value_param/ydb/query.sql index 55295e0d3b..5abb61063e 100644 --- a/internal/endtoend/testdata/case_value_param/ydb/query.sql +++ b/internal/endtoend/testdata/case_value_param/ydb/query.sql @@ -3,3 +3,4 @@ UPDATE testing SET value = CASE CAST($condition AS Bool) WHEN true THEN Utf8('Hello') WHEN false THEN Utf8('Goodbye') ELSE value END; + diff --git a/internal/endtoend/testdata/case_value_param/ydb/schema.sql b/internal/endtoend/testdata/case_value_param/ydb/schema.sql index 7446d5430e..eaa52079a5 100644 --- a/internal/endtoend/testdata/case_value_param/ydb/schema.sql +++ b/internal/endtoend/testdata/case_value_param/ydb/schema.sql @@ -5,3 +5,4 @@ CREATE TABLE testing ( ); + diff --git a/internal/endtoend/testdata/case_value_param/ydb/sqlc.json b/internal/endtoend/testdata/case_value_param/ydb/sqlc.json index a261f3553c..bb070aeeba 100644 --- a/internal/endtoend/testdata/case_value_param/ydb/sqlc.json +++ b/internal/endtoend/testdata/case_value_param/ydb/sqlc.json @@ -13,3 +13,4 @@ + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql index e0529e1d53..58febc7ab3 100644 --- a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql @@ -3,3 +3,4 @@ SELECT COALESCE(bar, '') AS login FROM foo; + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql index 5e756dfc4f..6ca25109f3 100644 --- a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql @@ -1,3 +1,4 @@ CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json index 8dc3083c5d..c5959ba446 100644 --- a/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/sqlc.json @@ -12,3 +12,4 @@ } + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql index e0529e1d53..58febc7ab3 100644 --- a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql @@ -3,3 +3,4 @@ SELECT COALESCE(bar, '') AS login FROM foo; + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql index 5e756dfc4f..6ca25109f3 100644 --- a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql @@ -1,3 +1,4 @@ CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json index 2610f39f40..41b4416e16 100644 --- a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json @@ -13,3 +13,4 @@ } + diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql b/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql index 54cf6dc301..d87e614af9 100644 --- a/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql @@ -8,3 +8,4 @@ FROM foo; + diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql b/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql index 5e756dfc4f..6ca25109f3 100644 --- a/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql @@ -1,3 +1,4 @@ CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + diff --git a/internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json index 8dc3083c5d..c5959ba446 100644 --- a/internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/sqlc.json @@ -12,3 +12,4 @@ } + diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql index 54cf6dc301..d87e614af9 100644 --- a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql @@ -8,3 +8,4 @@ FROM foo; + diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql index 5e756dfc4f..6ca25109f3 100644 --- a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql @@ -1,3 +1,4 @@ CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json index 2610f39f40..41b4416e16 100644 --- a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json @@ -13,3 +13,4 @@ } + diff --git a/internal/endtoend/testdata/cast_param/ydb/query.sql b/internal/endtoend/testdata/cast_param/ydb/query.sql index 31c562ec69..0196291aaf 100644 --- a/internal/endtoend/testdata/cast_param/ydb/query.sql +++ b/internal/endtoend/testdata/cast_param/ydb/query.sql @@ -4,3 +4,4 @@ FROM my_table WHERE (CAST($allow_invalid AS Bool) OR NOT invalid); + diff --git a/internal/endtoend/testdata/cast_param/ydb/schema.sql b/internal/endtoend/testdata/cast_param/ydb/schema.sql index 328cbccec1..64a2bbae25 100644 --- a/internal/endtoend/testdata/cast_param/ydb/schema.sql +++ b/internal/endtoend/testdata/cast_param/ydb/schema.sql @@ -5,3 +5,4 @@ CREATE TABLE my_table ( ); + diff --git a/internal/endtoend/testdata/cast_param/ydb/sqlc.json b/internal/endtoend/testdata/cast_param/ydb/sqlc.json index 8dc3083c5d..c5959ba446 100644 --- a/internal/endtoend/testdata/cast_param/ydb/sqlc.json +++ b/internal/endtoend/testdata/cast_param/ydb/sqlc.json @@ -12,3 +12,4 @@ } + diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go index da12459199..e06fbc6499 100644 --- a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go @@ -23,13 +23,13 @@ type DtBooleanNotNull struct { type DtCharacter struct { ID int32 - A *string + A *[]byte B *string } type DtCharacterNotNull struct { ID int32 - A string + A []byte B string } @@ -91,7 +91,6 @@ type DtNumeric struct { J *float64 K *types.Decimal L *types.Decimal - M interface{} N *int16 O *int16 P *int32 @@ -114,7 +113,6 @@ type DtNumericNotNull struct { J float64 K types.Decimal L types.Decimal - M interface{} N int16 O int16 P int32 diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql index 62d4b00c03..1cc688315c 100644 --- a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql @@ -18,8 +18,6 @@ CREATE TABLE dt_numeric ( -- Decimal types k Decimal(22, 9), l Decimal(35, 0), - -- DyNumber type - m DyNumber, -- Serial types n SmallSerial, o Serial2, @@ -47,8 +45,6 @@ CREATE TABLE dt_numeric_not_null ( -- Decimal types k Decimal(22, 9) NOT NULL, l Decimal(35, 0) NOT NULL, - -- DyNumber type - m DyNumber NOT NULL, -- Serial types n SmallSerial NOT NULL, o Serial2 NOT NULL, From dfabcaaa8fd68cfbdfbe8481a5d443aa4995a595 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 20 Oct 2025 20:27:07 +0300 Subject: [PATCH 11/26] Fixed Strings --- internal/codegen/golang/ydb_type.go | 4 +-- internal/engine/ydb/convert.go | 11 ++++--- internal/engine/ydb/utils.go | 45 +++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/internal/codegen/golang/ydb_type.go b/internal/codegen/golang/ydb_type.go index 1a3629f463..75a92fcc60 100644 --- a/internal/codegen/golang/ydb_type.go +++ b/internal/codegen/golang/ydb_type.go @@ -215,7 +215,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col return "*uint64" } return "*uint64" - + default: if strings.HasPrefix(columnType, "decimal") { if notNull { @@ -227,7 +227,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col } return "*types.Decimal" } - + if debug.Active { log.Printf("unknown YDB type: %s\n", columnType) } diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index 6aff7e58af..564a612b0d 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -3523,11 +3523,14 @@ func (c *cc) VisitLiteral_value(n *parser.Literal_valueContext) interface{} { return &ast.A_Const{Val: &ast.Float{Str: text}, Location: c.pos(n.GetStart())} case n.STRING_VALUE() != nil: // !!! debug !!! (problem with quoted strings) - val := n.STRING_VALUE().GetText() - if len(val) >= 2 { - val = val[1 : len(val)-1] + originalText := n.STRING_VALUE().GetText() + content, hasSuffix := parseStringValue(originalText) + + if hasSuffix { + return &ast.A_Const{Val: &ast.String{Str: originalText}, Location: c.pos(n.GetStart())} + } else { + return &ast.A_Const{Val: &ast.String{Str: content}, Location: c.pos(n.GetStart())} } - return &ast.A_Const{Val: &ast.String{Str: val}, Location: c.pos(n.GetStart())} case n.Bool_value() != nil: var i bool diff --git a/internal/engine/ydb/utils.go b/internal/engine/ydb/utils.go index 8f118df09b..a8a6900e94 100755 --- a/internal/engine/ydb/utils.go +++ b/internal/engine/ydb/utils.go @@ -295,3 +295,48 @@ func (c *cc) collectEqualityOps(ctx parser.ICond_exprContext) []antlr.TerminalNo } return ops } + + +func parseStringValue(s string) (value string, hasSuffix bool) { + if len(s) < 2 { + return s, false + } + + quote := s[0] + if quote != '\'' && quote != '"' { + return s, false + } + + quotePos := -1 + for i := len(s) - 1; i >= 0; i-- { + if s[i] == quote { + quotePos = i + break + } + } + + if quotePos == -1 || quotePos == 0 { + return s, false + } + + content := s[1:quotePos] + + if quotePos < len(s)-1 { + suffix := s[quotePos+1:] + if isValidYDBStringSuffix(suffix) { + return content, true + } + } + + return content, false +} + +func isValidYDBStringSuffix(suffix string) bool { + switch suffix { + case "s", "S", "u", "U", "y", "Y", "j", "J", + "pt", "PT", "pb", "PB", "pv", "PV": + return true + default: + return false + } +} From d668dde822e5f3be01eced8b3a3aa45a51c89392 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 20 Oct 2025 22:04:14 +0300 Subject: [PATCH 12/26] MORE TESTS + fixed count(*) issue --- .../testdata/coalesce/ydb/stdlib/go/db.go | 31 +++ .../testdata/coalesce/ydb/stdlib/go/models.go | 12 + .../coalesce/ydb/stdlib/go/query.sql.go | 200 ++++++++++++++++ .../testdata/coalesce/ydb/stdlib/query.sql | 23 ++ .../testdata/coalesce/ydb/stdlib/schema.sql | 7 + .../testdata/coalesce/ydb/stdlib/sqlc.json | 12 + .../testdata/coalesce/ydb/ydb-go-sdk/go/db.go | 26 ++ .../coalesce/ydb/ydb-go-sdk/go/models.go | 12 + .../coalesce/ydb/ydb-go-sdk/go/query.sql.go | 223 +++++++++++++++++ .../coalesce/ydb/ydb-go-sdk/query.sql | 23 ++ .../coalesce/ydb/ydb-go-sdk/schema.sql | 7 + .../coalesce/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/coalesce_as/ydb/stdlib/go/db.go | 31 +++ .../coalesce_as/ydb/stdlib/go/models.go | 10 + .../coalesce_as/ydb/stdlib/go/query.sql.go | 44 ++++ .../testdata/coalesce_as/ydb/stdlib/query.sql | 4 + .../coalesce_as/ydb/stdlib/schema.sql | 5 + .../testdata/coalesce_as/ydb/stdlib/sqlc.json | 12 + .../coalesce_as/ydb/ydb-go-sdk/go/db.go | 26 ++ .../coalesce_as/ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/query.sql.go | 52 ++++ .../coalesce_as/ydb/ydb-go-sdk/query.sql | 4 + .../coalesce_as/ydb/ydb-go-sdk/schema.sql | 5 + .../coalesce_as/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/coalesce_join/ydb/go/db.go | 31 +++ .../testdata/coalesce_join/ydb/go/models.go | 13 + .../coalesce_join/ydb/go/query.sql.go | 44 ++++ .../testdata/coalesce_join/ydb/query.sql | 4 + .../testdata/coalesce_join/ydb/schema.sql | 2 + .../testdata/coalesce_join/ydb/sqlc.json | 12 + .../testdata/coalesce_params/ydb/go/db.go | 31 +++ .../testdata/coalesce_params/ydb/go/models.go | 42 ++++ .../coalesce_params/ydb/go/query.sql.go | 36 +++ .../testdata/coalesce_params/ydb/query.sql | 11 + .../testdata/coalesce_params/ydb/schema.sql | 35 +++ .../testdata/coalesce_params/ydb/sqlc.json | 12 + .../testdata/column_alias/ydb/go/db.go | 31 +++ .../testdata/column_alias/ydb/go/models.go | 18 ++ .../testdata/column_alias/ydb/go/query.sql.go | 74 ++++++ .../testdata/column_alias/ydb/query.sql | 16 ++ .../testdata/column_alias/ydb/schema.sql | 9 + .../testdata/column_alias/ydb/sqlc.json | 12 + .../testdata/column_as/ydb/stdlib/go/db.go | 31 +++ .../column_as/ydb/stdlib/go/models.go | 5 + .../column_as/ydb/stdlib/go/query.sql.go | 42 ++++ .../testdata/column_as/ydb/stdlib/query.sql | 5 + .../testdata/column_as/ydb/stdlib/schema.sql | 1 + .../testdata/column_as/ydb/stdlib/sqlc.json | 12 + .../column_as/ydb/ydb-go-sdk/go/db.go | 26 ++ .../column_as/ydb/ydb-go-sdk/go/models.go | 5 + .../column_as/ydb/ydb-go-sdk/go/query.sql.go | 57 +++++ .../column_as/ydb/ydb-go-sdk/query.sql | 5 + .../column_as/ydb/ydb-go-sdk/schema.sql | 0 .../column_as/ydb/ydb-go-sdk/sqlc.json | 13 + .../comment_syntax/ydb/stdlib/go/db.go | 31 +++ .../comment_syntax/ydb/stdlib/go/models.go | 9 + .../comment_syntax/ydb/stdlib/go/query.sql.go | 32 +++ .../comment_syntax/ydb/stdlib/query.sql | 5 + .../comment_syntax/ydb/stdlib/schema.sql | 1 + .../comment_syntax/ydb/stdlib/sqlc.json | 12 + .../comment_syntax/ydb/ydb-go-sdk/go/db.go | 26 ++ .../ydb/ydb-go-sdk/go/models.go | 9 + .../ydb/ydb-go-sdk/go/query.sql.go | 47 ++++ .../comment_syntax/ydb/ydb-go-sdk/query.sql | 5 + .../comment_syntax/ydb/ydb-go-sdk/schema.sql | 1 + .../comment_syntax/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/comparisons/ydb/stdlib/go/db.go | 31 +++ .../comparisons/ydb/stdlib/go/models.go | 9 + .../comparisons/ydb/stdlib/go/query.sql.go | 199 ++++++++++++++++ .../testdata/comparisons/ydb/stdlib/query.sql | 20 ++ .../comparisons/ydb/stdlib/schema.sql | 4 + .../testdata/comparisons/ydb/stdlib/sqlc.json | 12 + .../comparisons/ydb/ydb-go-sdk/go/db.go | 26 ++ .../comparisons/ydb/ydb-go-sdk/go/models.go | 9 + .../ydb/ydb-go-sdk/go/query.sql.go | 225 ++++++++++++++++++ .../comparisons/ydb/ydb-go-sdk/query.sql | 20 ++ .../comparisons/ydb/ydb-go-sdk/schema.sql | 4 + .../comparisons/ydb/ydb-go-sdk/sqlc.json | 13 + .../testdata/count_star/ydb/stdlib/go/db.go | 31 +++ .../count_star/ydb/stdlib/go/models.go | 9 + .../count_star/ydb/stdlib/go/query.sql.go | 32 +++ .../testdata/count_star/ydb/stdlib/query.sql | 5 + .../testdata/count_star/ydb/stdlib/schema.sql | 1 + .../testdata/count_star/ydb/stdlib/sqlc.json | 12 + .../count_star/ydb/ydb-go-sdk/go/db.go | 26 ++ .../count_star/ydb/ydb-go-sdk/go/models.go | 9 + .../count_star/ydb/ydb-go-sdk/go/query.sql.go | 47 ++++ .../count_star/ydb/ydb-go-sdk/query.sql | 5 + .../count_star/ydb/ydb-go-sdk/schema.sql | 1 + .../count_star/ydb/ydb-go-sdk/sqlc.json | 13 + internal/engine/ydb/lib/aggregate.go | 5 +- internal/engine/ydb/parse.go | 10 +- 92 files changed, 2405 insertions(+), 4 deletions(-) create mode 100644 internal/endtoend/testdata/coalesce/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/coalesce/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/coalesce/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/coalesce/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/coalesce/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/coalesce/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/coalesce_join/ydb/go/db.go create mode 100644 internal/endtoend/testdata/coalesce_join/ydb/go/models.go create mode 100644 internal/endtoend/testdata/coalesce_join/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/coalesce_join/ydb/query.sql create mode 100644 internal/endtoend/testdata/coalesce_join/ydb/schema.sql create mode 100644 internal/endtoend/testdata/coalesce_join/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/coalesce_params/ydb/go/db.go create mode 100644 internal/endtoend/testdata/coalesce_params/ydb/go/models.go create mode 100644 internal/endtoend/testdata/coalesce_params/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/coalesce_params/ydb/query.sql create mode 100644 internal/endtoend/testdata/coalesce_params/ydb/schema.sql create mode 100644 internal/endtoend/testdata/coalesce_params/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/column_alias/ydb/go/db.go create mode 100644 internal/endtoend/testdata/column_alias/ydb/go/models.go create mode 100644 internal/endtoend/testdata/column_alias/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/column_alias/ydb/query.sql create mode 100644 internal/endtoend/testdata/column_alias/ydb/schema.sql create mode 100644 internal/endtoend/testdata/column_alias/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/column_as/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/column_as/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/column_as/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/column_as/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/column_as/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/column_as/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/comparisons/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/comparisons/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/comparisons/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/count_star/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/count_star/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/count_star/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/count_star/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json diff --git a/internal/endtoend/testdata/coalesce/ydb/stdlib/go/db.go b/internal/endtoend/testdata/coalesce/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/coalesce/ydb/stdlib/go/models.go b/internal/endtoend/testdata/coalesce/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..70e7f026cb --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/stdlib/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar *string + Bat string + Baz *int64 + Qux int64 +} diff --git a/internal/endtoend/testdata/coalesce/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/coalesce/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..20ec52d2cb --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/stdlib/go/query.sql.go @@ -0,0 +1,200 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const coalesceNumeric = `-- name: CoalesceNumeric :many +SELECT COALESCE(baz, 0) AS login +FROM foo +` + +func (q *Queries) CoalesceNumeric(ctx context.Context) ([]int64, error) { + rows, err := q.db.QueryContext(ctx, coalesceNumeric) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int64 + for rows.Next() { + var login int64 + if err := rows.Scan(&login); err != nil { + return nil, err + } + items = append(items, login) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const coalesceNumericColumns = `-- name: CoalesceNumericColumns :many +SELECT baz, qux, COALESCE(baz, qux) +FROM foo +` + +type CoalesceNumericColumnsRow struct { + Baz *int64 + Qux int64 + Baz_2 int64 +} + +func (q *Queries) CoalesceNumericColumns(ctx context.Context) ([]CoalesceNumericColumnsRow, error) { + rows, err := q.db.QueryContext(ctx, coalesceNumericColumns) + if err != nil { + return nil, err + } + defer rows.Close() + var items []CoalesceNumericColumnsRow + for rows.Next() { + var i CoalesceNumericColumnsRow + if err := rows.Scan(&i.Baz, &i.Qux, &i.Baz_2); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const coalesceNumericNull = `-- name: CoalesceNumericNull :many +SELECT baz, COALESCE(baz) +FROM foo +` + +type CoalesceNumericNullRow struct { + Baz *int64 + Baz_2 *int64 +} + +func (q *Queries) CoalesceNumericNull(ctx context.Context) ([]CoalesceNumericNullRow, error) { + rows, err := q.db.QueryContext(ctx, coalesceNumericNull) + if err != nil { + return nil, err + } + defer rows.Close() + var items []CoalesceNumericNullRow + for rows.Next() { + var i CoalesceNumericNullRow + if err := rows.Scan(&i.Baz, &i.Baz_2); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const coalesceString = `-- name: CoalesceString :many +SELECT COALESCE(bar, '') AS login +FROM foo +` + +func (q *Queries) CoalesceString(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, coalesceString) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var login string + if err := rows.Scan(&login); err != nil { + return nil, err + } + items = append(items, login) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const coalesceStringColumns = `-- name: CoalesceStringColumns :many +SELECT bar, bat, COALESCE(bar, bat) +FROM foo +` + +type CoalesceStringColumnsRow struct { + Bar *string + Bat string + Bar_2 string +} + +func (q *Queries) CoalesceStringColumns(ctx context.Context) ([]CoalesceStringColumnsRow, error) { + rows, err := q.db.QueryContext(ctx, coalesceStringColumns) + if err != nil { + return nil, err + } + defer rows.Close() + var items []CoalesceStringColumnsRow + for rows.Next() { + var i CoalesceStringColumnsRow + if err := rows.Scan(&i.Bar, &i.Bat, &i.Bar_2); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const coalesceStringNull = `-- name: CoalesceStringNull :many +SELECT bar, COALESCE(bar) +FROM foo +` + +type CoalesceStringNullRow struct { + Bar *string + Bar_2 *string +} + +func (q *Queries) CoalesceStringNull(ctx context.Context) ([]CoalesceStringNullRow, error) { + rows, err := q.db.QueryContext(ctx, coalesceStringNull) + if err != nil { + return nil, err + } + defer rows.Close() + var items []CoalesceStringNullRow + for rows.Next() { + var i CoalesceStringNullRow + if err := rows.Scan(&i.Bar, &i.Bar_2); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/coalesce/ydb/stdlib/query.sql b/internal/endtoend/testdata/coalesce/ydb/stdlib/query.sql new file mode 100644 index 0000000000..36933ec438 --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/stdlib/query.sql @@ -0,0 +1,23 @@ +-- name: CoalesceString :many +SELECT COALESCE(bar, '') AS login +FROM foo; + +-- name: CoalesceNumeric :many +SELECT COALESCE(baz, 0) AS login +FROM foo; + +-- name: CoalesceStringColumns :many +SELECT bar, bat, COALESCE(bar, bat) +FROM foo; + +-- name: CoalesceNumericColumns :many +SELECT baz, qux, COALESCE(baz, qux) +FROM foo; + +-- name: CoalesceStringNull :many +SELECT bar, COALESCE(bar) +FROM foo; + +-- name: CoalesceNumericNull :many +SELECT baz, COALESCE(baz) +FROM foo; diff --git a/internal/endtoend/testdata/coalesce/ydb/stdlib/schema.sql b/internal/endtoend/testdata/coalesce/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..2106ed970c --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/stdlib/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE foo ( + bar Text, + bat Text NOT NULL, + baz Int64, + qux Int64 NOT NULL, + PRIMARY KEY (bat, qux) +); diff --git a/internal/endtoend/testdata/coalesce/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/coalesce/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..70e7f026cb --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar *string + Bat string + Baz *int64 + Qux int64 +} diff --git a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..d898ffdfb9 --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,223 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const coalesceNumeric = `-- name: CoalesceNumeric :many +SELECT COALESCE(baz, 0) AS login +FROM foo +` + +func (q *Queries) CoalesceNumeric(ctx context.Context, opts ...query.ExecuteOption) ([]int64, error) { + result, err := q.db.QueryResultSet(ctx, coalesceNumeric, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int64 + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var login int64 + if err := row.Scan(&login); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, login) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const coalesceNumericColumns = `-- name: CoalesceNumericColumns :many +SELECT baz, qux, COALESCE(baz, qux) +FROM foo +` + +type CoalesceNumericColumnsRow struct { + Baz *int64 + Qux int64 + Baz_2 int64 +} + +func (q *Queries) CoalesceNumericColumns(ctx context.Context, opts ...query.ExecuteOption) ([]CoalesceNumericColumnsRow, error) { + result, err := q.db.QueryResultSet(ctx, coalesceNumericColumns, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []CoalesceNumericColumnsRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i CoalesceNumericColumnsRow + if err := row.Scan(&i.Baz, &i.Qux, &i.Baz_2); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const coalesceNumericNull = `-- name: CoalesceNumericNull :many +SELECT baz, COALESCE(baz) +FROM foo +` + +type CoalesceNumericNullRow struct { + Baz *int64 + Baz_2 *int64 +} + +func (q *Queries) CoalesceNumericNull(ctx context.Context, opts ...query.ExecuteOption) ([]CoalesceNumericNullRow, error) { + result, err := q.db.QueryResultSet(ctx, coalesceNumericNull, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []CoalesceNumericNullRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i CoalesceNumericNullRow + if err := row.Scan(&i.Baz, &i.Baz_2); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const coalesceString = `-- name: CoalesceString :many +SELECT COALESCE(bar, '') AS login +FROM foo +` + +func (q *Queries) CoalesceString(ctx context.Context, opts ...query.ExecuteOption) ([]string, error) { + result, err := q.db.QueryResultSet(ctx, coalesceString, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var login string + if err := row.Scan(&login); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, login) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const coalesceStringColumns = `-- name: CoalesceStringColumns :many +SELECT bar, bat, COALESCE(bar, bat) +FROM foo +` + +type CoalesceStringColumnsRow struct { + Bar *string + Bat string + Bar_2 string +} + +func (q *Queries) CoalesceStringColumns(ctx context.Context, opts ...query.ExecuteOption) ([]CoalesceStringColumnsRow, error) { + result, err := q.db.QueryResultSet(ctx, coalesceStringColumns, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []CoalesceStringColumnsRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i CoalesceStringColumnsRow + if err := row.Scan(&i.Bar, &i.Bat, &i.Bar_2); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const coalesceStringNull = `-- name: CoalesceStringNull :many +SELECT bar, COALESCE(bar) +FROM foo +` + +type CoalesceStringNullRow struct { + Bar *string + Bar_2 *string +} + +func (q *Queries) CoalesceStringNull(ctx context.Context, opts ...query.ExecuteOption) ([]CoalesceStringNullRow, error) { + result, err := q.db.QueryResultSet(ctx, coalesceStringNull, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []CoalesceStringNullRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i CoalesceStringNullRow + if err := row.Scan(&i.Bar, &i.Bar_2); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..36933ec438 --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,23 @@ +-- name: CoalesceString :many +SELECT COALESCE(bar, '') AS login +FROM foo; + +-- name: CoalesceNumeric :many +SELECT COALESCE(baz, 0) AS login +FROM foo; + +-- name: CoalesceStringColumns :many +SELECT bar, bat, COALESCE(bar, bat) +FROM foo; + +-- name: CoalesceNumericColumns :many +SELECT baz, qux, COALESCE(baz, qux) +FROM foo; + +-- name: CoalesceStringNull :many +SELECT bar, COALESCE(bar) +FROM foo; + +-- name: CoalesceNumericNull :many +SELECT baz, COALESCE(baz) +FROM foo; diff --git a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..2106ed970c --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE foo ( + bar Text, + bat Text NOT NULL, + baz Int64, + qux Int64 NOT NULL, + PRIMARY KEY (bat, qux) +); diff --git a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/db.go b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/models.go b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..3590f4ba11 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + Baz *int64 +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..e90904e340 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/go/query.sql.go @@ -0,0 +1,44 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const sumBaz = `-- name: SumBaz :many +SELECT bar, CAST(COALESCE(SUM(baz), 0) AS Int64) AS quantity +FROM foo +GROUP BY bar +` + +type SumBazRow struct { + Bar string + Quantity int64 +} + +func (q *Queries) SumBaz(ctx context.Context) ([]SumBazRow, error) { + rows, err := q.db.QueryContext(ctx, sumBaz) + if err != nil { + return nil, err + } + defer rows.Close() + var items []SumBazRow + for rows.Next() { + var i SumBazRow + if err := rows.Scan(&i.Bar, &i.Quantity); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/stdlib/query.sql b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/query.sql new file mode 100644 index 0000000000..b5ffb750dc --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/query.sql @@ -0,0 +1,4 @@ +-- name: SumBaz :many +SELECT bar, CAST(COALESCE(SUM(baz), 0) AS Int64) AS quantity +FROM foo +GROUP BY bar; diff --git a/internal/endtoend/testdata/coalesce_as/ydb/stdlib/schema.sql b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..db0d85ccf6 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + bar Text, + baz Int64, + PRIMARY KEY (bar) +); diff --git a/internal/endtoend/testdata/coalesce_as/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..3590f4ba11 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + Baz *int64 +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..794063615f --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,52 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const sumBaz = `-- name: SumBaz :many +SELECT bar, CAST(COALESCE(SUM(baz), 0) AS Int64) AS quantity +FROM foo +GROUP BY bar +` + +type SumBazRow struct { + Bar string + Quantity int64 +} + +func (q *Queries) SumBaz(ctx context.Context, opts ...query.ExecuteOption) ([]SumBazRow, error) { + result, err := q.db.QueryResultSet(ctx, sumBaz, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []SumBazRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i SumBazRow + if err := row.Scan(&i.Bar, &i.Quantity); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..b5ffb750dc --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,4 @@ +-- name: SumBaz :many +SELECT bar, CAST(COALESCE(SUM(baz), 0) AS Int64) AS quantity +FROM foo +GROUP BY bar; diff --git a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..db0d85ccf6 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + bar Text, + baz Int64, + PRIMARY KEY (bar) +); diff --git a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/coalesce_join/ydb/go/db.go b/internal/endtoend/testdata/coalesce_join/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_join/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/coalesce_join/ydb/go/models.go b/internal/endtoend/testdata/coalesce_join/ydb/go/models.go new file mode 100644 index 0000000000..d093635683 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_join/ydb/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int64 +} + +type Foo struct { + ID int64 +} diff --git a/internal/endtoend/testdata/coalesce_join/ydb/go/query.sql.go b/internal/endtoend/testdata/coalesce_join/ydb/go/query.sql.go new file mode 100644 index 0000000000..4d0489e792 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_join/ydb/go/query.sql.go @@ -0,0 +1,44 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getBar = `-- name: GetBar :many +SELECT foo.id, COALESCE(bar.id, 0) AS bar_id +FROM foo +LEFT JOIN bar ON foo.id = bar.id +` + +type GetBarRow struct { + ID int64 + BarID int64 +} + +func (q *Queries) GetBar(ctx context.Context) ([]GetBarRow, error) { + rows, err := q.db.QueryContext(ctx, getBar) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetBarRow + for rows.Next() { + var i GetBarRow + if err := rows.Scan(&i.ID, &i.BarID); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/coalesce_join/ydb/query.sql b/internal/endtoend/testdata/coalesce_join/ydb/query.sql new file mode 100644 index 0000000000..d91add88e6 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_join/ydb/query.sql @@ -0,0 +1,4 @@ +-- name: GetBar :many +SELECT foo.*, COALESCE(bar.id, 0) AS bar_id +FROM foo +LEFT JOIN bar ON foo.id = bar.id; diff --git a/internal/endtoend/testdata/coalesce_join/ydb/schema.sql b/internal/endtoend/testdata/coalesce_join/ydb/schema.sql new file mode 100644 index 0000000000..281133ce84 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_join/ydb/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (id BigSerial, PRIMARY KEY (id)); +CREATE TABLE bar (id BigSerial, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/coalesce_join/ydb/sqlc.json b/internal/endtoend/testdata/coalesce_join/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_join/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/coalesce_params/ydb/go/db.go b/internal/endtoend/testdata/coalesce_params/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_params/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/coalesce_params/ydb/go/models.go b/internal/endtoend/testdata/coalesce_params/ydb/go/models.go new file mode 100644 index 0000000000..db72580ccd --- /dev/null +++ b/internal/endtoend/testdata/coalesce_params/ydb/go/models.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Author struct { + ID int64 + Address string + Name string + Bio string +} + +type Calendar struct { + ID *int64 + Relation *int64 + Calendarname string + Title string + Description string + Timezone string + Uniquekey string + Idkey string + Maincalendar bool + Createdate time.Time + Modifydate time.Time +} + +type Event struct { + ID *int64 + Relation *int64 + Calendarreference *int64 + Uniquekey string + Eventname string + Description string + Location string + Timezone string + Idkey *string +} diff --git a/internal/endtoend/testdata/coalesce_params/ydb/go/query.sql.go b/internal/endtoend/testdata/coalesce_params/ydb/go/query.sql.go new file mode 100644 index 0000000000..9b73c39cb2 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_params/ydb/go/query.sql.go @@ -0,0 +1,36 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const addAuthor = `-- name: AddAuthor :execlastid +INSERT INTO authors ( + address, + name, + bio +) VALUES ( + $address, + COALESCE($cal_name, ''), + COALESCE($cal_description, '') +) +` + +type AddAuthorParams struct { + Address string + CalName interface{} + CalDescription interface{} +} + +func (q *Queries) AddAuthor(ctx context.Context, arg AddAuthorParams) (int64, error) { + result, err := q.db.ExecContext(ctx, addAuthor, arg.Address, arg.CalName, arg.CalDescription) + if err != nil { + return 0, err + } + return result.LastInsertId() +} diff --git a/internal/endtoend/testdata/coalesce_params/ydb/query.sql b/internal/endtoend/testdata/coalesce_params/ydb/query.sql new file mode 100644 index 0000000000..5949b84514 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_params/ydb/query.sql @@ -0,0 +1,11 @@ + +-- name: AddAuthor :execlastid +INSERT INTO authors ( + address, + name, + bio +) VALUES ( + $address, + COALESCE($cal_name, ''), + COALESCE($cal_description, '') +); diff --git a/internal/endtoend/testdata/coalesce_params/ydb/schema.sql b/internal/endtoend/testdata/coalesce_params/ydb/schema.sql new file mode 100644 index 0000000000..4c816cb303 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_params/ydb/schema.sql @@ -0,0 +1,35 @@ +CREATE TABLE Calendar ( + Id BigSerial, + Relation BigSerial, + CalendarName Text NOT NULL, + Title Text NOT NULL, + Description Text NOT NULL, + Timezone Text NOT NULL, + UniqueKey Text NOT NULL, + IdKey Text NOT NULL, + MainCalendar Bool NOT NULL, + CreateDate DateTime NOT NULL, + ModifyDate DateTime NOT NULL, + PRIMARY KEY (Id) +); + +CREATE TABLE Event ( + Id BigSerial, + Relation BigSerial, + CalendarReference BigSerial, + UniqueKey Text NOT NULL, + EventName Text NOT NULL, + Description Text NOT NULL, + Location Text NOT NULL, + Timezone Text NOT NULL, + IdKey Text, + PRIMARY KEY (Id) +); + +CREATE TABLE authors ( + id BigSerial, + address Text NOT NULL, + name Text NOT NULL, + bio Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/coalesce_params/ydb/sqlc.json b/internal/endtoend/testdata/coalesce_params/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/coalesce_params/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/column_alias/ydb/go/db.go b/internal/endtoend/testdata/column_alias/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/column_alias/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/column_alias/ydb/go/models.go b/internal/endtoend/testdata/column_alias/ydb/go/models.go new file mode 100644 index 0000000000..05352919de --- /dev/null +++ b/internal/endtoend/testdata/column_alias/ydb/go/models.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type User struct { + ID int32 + Fname string + Lname string + Email string + EncPasswd string + CreatedAt time.Time +} diff --git a/internal/endtoend/testdata/column_alias/ydb/go/query.sql.go b/internal/endtoend/testdata/column_alias/ydb/go/query.sql.go new file mode 100644 index 0000000000..847000288a --- /dev/null +++ b/internal/endtoend/testdata/column_alias/ydb/go/query.sql.go @@ -0,0 +1,74 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "time" +) + +const getUsers = `-- name: GetUsers :many +SELECT + users.id, + users.fname, + users.lname, + users.email, + users.created_at, + CASE WHEN users.email LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS rank_email, + CASE WHEN users.fname LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS rank_fname, + CASE WHEN users.lname LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS rank_lname, + CASE WHEN (users.email || users.fname || users.lname) LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS similarity +FROM users +WHERE users.email LIKE '%' || $search_term || '%' + OR users.fname LIKE '%' || $search_term || '%' + OR users.lname LIKE '%' || $search_term || '%' +ORDER BY rank_email DESC, rank_lname DESC, rank_fname DESC, similarity DESC +` + +type GetUsersRow struct { + ID int32 + Fname string + Lname string + Email string + CreatedAt time.Time + RankEmail int32 + RankFname int32 + RankLname int32 + Similarity int32 +} + +func (q *Queries) GetUsers(ctx context.Context, searchTerm *string) ([]GetUsersRow, error) { + rows, err := q.db.QueryContext(ctx, getUsers, searchTerm) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetUsersRow + for rows.Next() { + var i GetUsersRow + if err := rows.Scan( + &i.ID, + &i.Fname, + &i.Lname, + &i.Email, + &i.CreatedAt, + &i.RankEmail, + &i.RankFname, + &i.RankLname, + &i.Similarity, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/column_alias/ydb/query.sql b/internal/endtoend/testdata/column_alias/ydb/query.sql new file mode 100644 index 0000000000..95af381b00 --- /dev/null +++ b/internal/endtoend/testdata/column_alias/ydb/query.sql @@ -0,0 +1,16 @@ +-- name: GetUsers :many +SELECT + users.id, + users.fname, + users.lname, + users.email, + users.created_at, + CASE WHEN users.email LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS rank_email, + CASE WHEN users.fname LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS rank_fname, + CASE WHEN users.lname LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS rank_lname, + CASE WHEN (users.email || users.fname || users.lname) LIKE '%' || $search_term || '%' THEN 1 ELSE 0 END AS similarity +FROM users +WHERE users.email LIKE '%' || $search_term || '%' + OR users.fname LIKE '%' || $search_term || '%' + OR users.lname LIKE '%' || $search_term || '%' +ORDER BY rank_email DESC, rank_lname DESC, rank_fname DESC, similarity DESC; diff --git a/internal/endtoend/testdata/column_alias/ydb/schema.sql b/internal/endtoend/testdata/column_alias/ydb/schema.sql new file mode 100644 index 0000000000..c7d95f1474 --- /dev/null +++ b/internal/endtoend/testdata/column_alias/ydb/schema.sql @@ -0,0 +1,9 @@ +CREATE TABLE users ( + id Serial, + fname Text NOT NULL, + lname Text NOT NULL, + email Text NOT NULL, + enc_passwd Text NOT NULL, + created_at DateTime NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/column_alias/ydb/sqlc.json b/internal/endtoend/testdata/column_alias/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/column_alias/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/column_as/ydb/stdlib/go/db.go b/internal/endtoend/testdata/column_as/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/column_as/ydb/stdlib/go/models.go b/internal/endtoend/testdata/column_as/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/stdlib/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/column_as/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/column_as/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..bb26fb91ca --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/stdlib/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const withAs = `-- name: WithAs :one +SELECT 1 AS x, 2 AS y +` + +type WithAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithAs(ctx context.Context) (WithAsRow, error) { + row := q.db.QueryRowContext(ctx, withAs) + var i WithAsRow + err := row.Scan(&i.X, &i.Y) + return i, err +} + +const withoutAs = `-- name: WithoutAs :one +SELECT 1 x, 2 y +` + +type WithoutAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithoutAs(ctx context.Context) (WithoutAsRow, error) { + row := q.db.QueryRowContext(ctx, withoutAs) + var i WithoutAsRow + err := row.Scan(&i.X, &i.Y) + return i, err +} diff --git a/internal/endtoend/testdata/column_as/ydb/stdlib/query.sql b/internal/endtoend/testdata/column_as/ydb/stdlib/query.sql new file mode 100644 index 0000000000..c7282d88ef --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: WithAs :one +SELECT 1 AS x, 2 AS y; + +-- name: WithoutAs :one +SELECT 1 x, 2 y; diff --git a/internal/endtoend/testdata/column_as/ydb/stdlib/schema.sql b/internal/endtoend/testdata/column_as/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/stdlib/schema.sql @@ -0,0 +1 @@ + diff --git a/internal/endtoend/testdata/column_as/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/column_as/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..6f122ea02e --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,57 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const withAs = `-- name: WithAs :one +SELECT 1 AS x, 2 AS y +` + +type WithAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithAs(ctx context.Context, opts ...query.ExecuteOption) (WithAsRow, error) { + row, err := q.db.QueryRow(ctx, withAs, opts...) + var i WithAsRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.X, &i.Y) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const withoutAs = `-- name: WithoutAs :one +SELECT 1 x, 2 y +` + +type WithoutAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithoutAs(ctx context.Context, opts ...query.ExecuteOption) (WithoutAsRow, error) { + row, err := q.db.QueryRow(ctx, withoutAs, opts...) + var i WithoutAsRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.X, &i.Y) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} diff --git a/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..c7282d88ef --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: WithAs :one +SELECT 1 AS x, 2 AS y; + +-- name: WithoutAs :one +SELECT 1 x, 2 y; diff --git a/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/column_as/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/db.go b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/models.go b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..0cd442222e --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..03cb89900d --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/go/query.sql.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const doubleDash = `-- name: DoubleDash :one +SELECT bar FROM foo LIMIT 1 +` + +func (q *Queries) DoubleDash(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, doubleDash) + var bar string + err := row.Scan(&bar) + return bar, err +} + +const slashStar = `-- name: SlashStar :one +SELECT bar FROM foo LIMIT 1 +` + +func (q *Queries) SlashStar(ctx context.Context) (string, error) { + row := q.db.QueryRowContext(ctx, slashStar) + var bar string + err := row.Scan(&bar) + return bar, err +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/query.sql b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/query.sql new file mode 100644 index 0000000000..ddf6f4b70c --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: DoubleDash :one +SELECT * FROM foo LIMIT 1; + +/* name: SlashStar :one */ +SELECT * FROM foo LIMIT 1; diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..99a618fa65 --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (bar Utf8, PRIMARY KEY (bar)); diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..0cd442222e --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..0787c72f06 --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,47 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const doubleDash = `-- name: DoubleDash :one +SELECT bar FROM foo LIMIT 1 +` + +func (q *Queries) DoubleDash(ctx context.Context, opts ...query.ExecuteOption) (string, error) { + row, err := q.db.QueryRow(ctx, doubleDash, opts...) + var bar string + if err != nil { + return bar, xerrors.WithStackTrace(err) + } + err = row.Scan(&bar) + if err != nil { + return bar, xerrors.WithStackTrace(err) + } + return bar, nil +} + +const slashStar = `-- name: SlashStar :one +SELECT bar FROM foo LIMIT 1 +` + +func (q *Queries) SlashStar(ctx context.Context, opts ...query.ExecuteOption) (string, error) { + row, err := q.db.QueryRow(ctx, slashStar, opts...) + var bar string + if err != nil { + return bar, xerrors.WithStackTrace(err) + } + err = row.Scan(&bar) + if err != nil { + return bar, xerrors.WithStackTrace(err) + } + return bar, nil +} diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..ddf6f4b70c --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: DoubleDash :one +SELECT * FROM foo LIMIT 1; + +/* name: SlashStar :one */ +SELECT * FROM foo LIMIT 1; diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..8a8240412f --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/go/db.go b/internal/endtoend/testdata/comparisons/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/go/models.go b/internal/endtoend/testdata/comparisons/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/comparisons/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..65942b4e9b --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/go/query.sql.go @@ -0,0 +1,199 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const alsoNotEqual = `-- name: AlsoNotEqual :many +SELECT COUNT(*) <> 0 FROM bar +` + +func (q *Queries) AlsoNotEqual(ctx context.Context) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, alsoNotEqual) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var column_1 bool + if err := rows.Scan(&column_1); err != nil { + return nil, err + } + items = append(items, column_1) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const equal = `-- name: Equal :many +SELECT COUNT(*) = 0 FROM bar +` + +func (q *Queries) Equal(ctx context.Context) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, equal) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var column_1 bool + if err := rows.Scan(&column_1); err != nil { + return nil, err + } + items = append(items, column_1) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const greaterThan = `-- name: GreaterThan :many +SELECT COUNT(*) > 0 FROM bar +` + +func (q *Queries) GreaterThan(ctx context.Context) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, greaterThan) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var column_1 bool + if err := rows.Scan(&column_1); err != nil { + return nil, err + } + items = append(items, column_1) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const greaterThanOrEqual = `-- name: GreaterThanOrEqual :many +SELECT COUNT(*) >= 0 FROM bar +` + +func (q *Queries) GreaterThanOrEqual(ctx context.Context) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, greaterThanOrEqual) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var column_1 bool + if err := rows.Scan(&column_1); err != nil { + return nil, err + } + items = append(items, column_1) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const lessThan = `-- name: LessThan :many +SELECT COUNT(*) < 0 FROM bar +` + +func (q *Queries) LessThan(ctx context.Context) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, lessThan) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var column_1 bool + if err := rows.Scan(&column_1); err != nil { + return nil, err + } + items = append(items, column_1) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const lessThanOrEqual = `-- name: LessThanOrEqual :many +SELECT COUNT(*) <= 0 FROM bar +` + +func (q *Queries) LessThanOrEqual(ctx context.Context) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, lessThanOrEqual) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var column_1 bool + if err := rows.Scan(&column_1); err != nil { + return nil, err + } + items = append(items, column_1) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const notEqual = `-- name: NotEqual :many +SELECT COUNT(*) != 0 FROM bar +` + +func (q *Queries) NotEqual(ctx context.Context) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, notEqual) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var column_1 bool + if err := rows.Scan(&column_1); err != nil { + return nil, err + } + items = append(items, column_1) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql b/internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql new file mode 100644 index 0000000000..f32a0589be --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql @@ -0,0 +1,20 @@ +-- name: GreaterThan :many +SELECT COUNT(*) > 0 FROM bar; + +-- name: LessThan :many +SELECT COUNT(*) < 0 FROM bar; + +-- name: GreaterThanOrEqual :many +SELECT COUNT(*) >= 0 FROM bar; + +-- name: LessThanOrEqual :many +SELECT COUNT(*) <= 0 FROM bar; + +-- name: NotEqual :many +SELECT COUNT(*) != 0 FROM bar; + +-- name: AlsoNotEqual :many +SELECT COUNT(*) <> 0 FROM bar; + +-- name: Equal :many +SELECT COUNT(*) = 0 FROM bar; diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql b/internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..161adf934e --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql @@ -0,0 +1,4 @@ +-- Comparison Functions and Operators +-- https://www.postgresql.org/docs/current/functions-comparison.html + +CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..1183786fb8 --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,225 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const alsoNotEqual = `-- name: AlsoNotEqual :many +SELECT COUNT(*) <> 0 FROM bar +` + +func (q *Queries) AlsoNotEqual(ctx context.Context, opts ...query.ExecuteOption) ([]bool, error) { + result, err := q.db.QueryResultSet(ctx, alsoNotEqual, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []bool + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 bool + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const equal = `-- name: Equal :many +SELECT COUNT(*) = 0 FROM bar +` + +func (q *Queries) Equal(ctx context.Context, opts ...query.ExecuteOption) ([]bool, error) { + result, err := q.db.QueryResultSet(ctx, equal, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []bool + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 bool + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const greaterThan = `-- name: GreaterThan :many +SELECT COUNT(*) > 0 FROM bar +` + +func (q *Queries) GreaterThan(ctx context.Context, opts ...query.ExecuteOption) ([]bool, error) { + result, err := q.db.QueryResultSet(ctx, greaterThan, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []bool + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 bool + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const greaterThanOrEqual = `-- name: GreaterThanOrEqual :many +SELECT COUNT(*) >= 0 FROM bar +` + +func (q *Queries) GreaterThanOrEqual(ctx context.Context, opts ...query.ExecuteOption) ([]bool, error) { + result, err := q.db.QueryResultSet(ctx, greaterThanOrEqual, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []bool + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 bool + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const lessThan = `-- name: LessThan :many +SELECT COUNT(*) < 0 FROM bar +` + +func (q *Queries) LessThan(ctx context.Context, opts ...query.ExecuteOption) ([]bool, error) { + result, err := q.db.QueryResultSet(ctx, lessThan, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []bool + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 bool + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const lessThanOrEqual = `-- name: LessThanOrEqual :many +SELECT COUNT(*) <= 0 FROM bar +` + +func (q *Queries) LessThanOrEqual(ctx context.Context, opts ...query.ExecuteOption) ([]bool, error) { + result, err := q.db.QueryResultSet(ctx, lessThanOrEqual, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []bool + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 bool + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const notEqual = `-- name: NotEqual :many +SELECT COUNT(*) != 0 FROM bar +` + +func (q *Queries) NotEqual(ctx context.Context, opts ...query.ExecuteOption) ([]bool, error) { + result, err := q.db.QueryResultSet(ctx, notEqual, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []bool + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var column_1 bool + if err := row.Scan(&column_1); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, column_1) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..f32a0589be --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,20 @@ +-- name: GreaterThan :many +SELECT COUNT(*) > 0 FROM bar; + +-- name: LessThan :many +SELECT COUNT(*) < 0 FROM bar; + +-- name: GreaterThanOrEqual :many +SELECT COUNT(*) >= 0 FROM bar; + +-- name: LessThanOrEqual :many +SELECT COUNT(*) <= 0 FROM bar; + +-- name: NotEqual :many +SELECT COUNT(*) != 0 FROM bar; + +-- name: AlsoNotEqual :many +SELECT COUNT(*) <> 0 FROM bar; + +-- name: Equal :many +SELECT COUNT(*) = 0 FROM bar; diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..161adf934e --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,4 @@ +-- Comparison Functions and Operators +-- https://www.postgresql.org/docs/current/functions-comparison.html + +CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/go/db.go b/internal/endtoend/testdata/count_star/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/go/models.go b/internal/endtoend/testdata/count_star/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/count_star/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3fd0bc3d0c --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/go/query.sql.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const countStarLower = `-- name: CountStarLower :one +SELECT COUNT(*) FROM bar +` + +func (q *Queries) CountStarLower(ctx context.Context) (uint64, error) { + row := q.db.QueryRowContext(ctx, countStarLower) + var count uint64 + err := row.Scan(&count) + return count, err +} + +const countStarUpper = `-- name: CountStarUpper :one +SELECT COUNT(*) FROM bar +` + +func (q *Queries) CountStarUpper(ctx context.Context) (uint64, error) { + row := q.db.QueryRowContext(ctx, countStarUpper) + var count uint64 + err := row.Scan(&count) + return count, err +} diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/query.sql b/internal/endtoend/testdata/count_star/ydb/stdlib/query.sql new file mode 100644 index 0000000000..7b07ad69a1 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: CountStarLower :one +SELECT COUNT(*) FROM bar; + +-- name: CountStarUpper :one +SELECT COUNT(*) FROM bar; diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql b/internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..21cad7df3d --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..a2ecb29812 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,47 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const countStarLower = `-- name: CountStarLower :one +SELECT COUNT(*) FROM bar +` + +func (q *Queries) CountStarLower(ctx context.Context, opts ...query.ExecuteOption) (uint64, error) { + row, err := q.db.QueryRow(ctx, countStarLower, opts...) + var count uint64 + if err != nil { + return count, xerrors.WithStackTrace(err) + } + err = row.Scan(&count) + if err != nil { + return count, xerrors.WithStackTrace(err) + } + return count, nil +} + +const countStarUpper = `-- name: CountStarUpper :one +SELECT COUNT(*) FROM bar +` + +func (q *Queries) CountStarUpper(ctx context.Context, opts ...query.ExecuteOption) (uint64, error) { + row, err := q.db.QueryRow(ctx, countStarUpper, opts...) + var count uint64 + if err != nil { + return count, xerrors.WithStackTrace(err) + } + err = row.Scan(&count) + if err != nil { + return count, xerrors.WithStackTrace(err) + } + return count, nil +} diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..7b07ad69a1 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: CountStarLower :one +SELECT COUNT(*) FROM bar; + +-- name: CountStarUpper :one +SELECT COUNT(*) FROM bar; diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..21cad7df3d --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1 @@ +CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/engine/ydb/lib/aggregate.go b/internal/engine/ydb/lib/aggregate.go index 7c5d795eca..d5746d5114 100644 --- a/internal/engine/ydb/lib/aggregate.go +++ b/internal/engine/ydb/lib/aggregate.go @@ -36,7 +36,10 @@ func countFuncs() []*catalog.Function { { Name: "COUNT", Args: []*catalog.Argument{ - {Type: &ast.TypeName{Name: "any"}}, + { + Type: &ast.TypeName{Name: "any"}, + Mode: ast.FuncParamVariadic, + }, }, ReturnType: &ast.TypeName{Name: "Uint64"}, }, diff --git a/internal/engine/ydb/parse.go b/internal/engine/ydb/parse.go index 8fbdd81ebb..5d383958a1 100755 --- a/internal/engine/ydb/parse.go +++ b/internal/engine/ydb/parse.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "io" + "strings" "github.com/antlr4-go/antlr/v4" "github.com/sqlc-dev/sqlc/internal/source" @@ -43,6 +44,9 @@ func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) { return nil, err } content := string(blob) + if strings.TrimSpace(content) == "" { + return nil, nil + } input := antlr.NewInputStream(content) lexer := parser.NewYQLLexer(input) stream := antlr.NewCommonTokenStream(lexer, 0) @@ -69,11 +73,11 @@ func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) { return nil, fmt.Errorf("expected ast.Node; got %T", out) } if _, ok := out.(*ast.TODO); ok { - loc = byteOffset(content, stmt.GetStop().GetStop() + 2) + loc = byteOffset(content, stmt.GetStop().GetStop()+2) continue } if out != nil { - len := byteOffset(content, stmt.GetStop().GetStop() + 1) - loc + len := byteOffset(content, stmt.GetStop().GetStop()+1) - loc stmts = append(stmts, ast.Statement{ Raw: &ast.RawStmt{ Stmt: out, @@ -81,7 +85,7 @@ func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) { StmtLen: len, }, }) - loc = byteOffset(content, stmt.GetStop().GetStop() + 2) + loc = byteOffset(content, stmt.GetStop().GetStop()+2) } } } From 548aadd1d50cc65df37a6b1b682ad72f3b49f8e8 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 22 Oct 2025 16:24:13 +0300 Subject: [PATCH 13/26] Bunch of tests + some convert fixes --- .../templates/ydb-go-sdk/interfaceCode.tmpl | 20 +- internal/codegen/golang/ydb_type.go | 20 +- .../comment_syntax/ydb/stdlib/schema.sql | 2 + .../comment_syntax/ydb/stdlib/sqlc.json | 2 + .../comment_syntax/ydb/ydb-go-sdk/query.sql | 2 + .../comment_syntax/ydb/ydb-go-sdk/schema.sql | 2 + .../comment_syntax/ydb/ydb-go-sdk/sqlc.json | 2 + .../testdata/comparisons/ydb/stdlib/query.sql | 2 + .../comparisons/ydb/stdlib/schema.sql | 2 + .../testdata/comparisons/ydb/stdlib/sqlc.json | 2 + .../comparisons/ydb/ydb-go-sdk/query.sql | 2 + .../comparisons/ydb/ydb-go-sdk/schema.sql | 2 + .../comparisons/ydb/ydb-go-sdk/sqlc.json | 2 + .../testdata/count_star/ydb/stdlib/query.sql | 2 + .../testdata/count_star/ydb/stdlib/schema.sql | 2 + .../testdata/count_star/ydb/stdlib/sqlc.json | 2 + .../count_star/ydb/ydb-go-sdk/query.sql | 2 + .../count_star/ydb/ydb-go-sdk/schema.sql | 2 + .../count_star/ydb/ydb-go-sdk/sqlc.json | 2 + .../testdata/create_view/ydb/go/db.go | 31 +++ .../testdata/create_view/ydb/go/models.go | 19 ++ .../testdata/create_view/ydb/go/query.sql.go | 64 ++++++ .../testdata/create_view/ydb/query.sql | 5 + .../testdata/create_view/ydb/schema.sql | 15 ++ .../testdata/create_view/ydb/sqlc.json | 12 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 12 ++ .../ydb/stdlib/go/query.sql.go | 19 ++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 8 + .../ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 12 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 25 +++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 8 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 13 ++ .../ydb/stdlib/go/query.sql.go | 19 ++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 8 + .../ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 13 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 25 +++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 8 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../ydb/go/db.go | 31 +++ .../ydb/go/models.go | 10 + .../ydb/go/query.sql.go | 19 ++ .../ydb/query.sql | 2 + .../ydb/schema.sql | 8 + .../ydb/sqlc.json | 12 ++ .../ddl_alter_table_drop_column/ydb/go/db.go | 31 +++ .../ydb/go/models.go | 9 + .../ydb/go/query.sql.go | 19 ++ .../ddl_alter_table_drop_column/ydb/query.sql | 2 + .../ydb/schema.sql | 7 + .../ddl_alter_table_drop_column/ydb/sqlc.json | 12 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 9 + .../ydb/stdlib/go/query.sql.go | 37 ++++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 6 + .../ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 9 + .../ydb/ydb-go-sdk/go/query.sql.go | 45 ++++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 6 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/ddl_create_table/ydb/go/db.go | 31 +++ .../ddl_create_table/ydb/go/models.go | 9 + .../ddl_create_table/ydb/go/query.sql.go | 19 ++ .../testdata/ddl_create_table/ydb/query.sql | 2 + .../testdata/ddl_create_table/ydb/schema.sql | 4 + .../testdata/ddl_create_table/ydb/sqlc.json | 12 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 10 + .../ydb/stdlib/go/query.sql.go | 19 ++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 8 + .../ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/query.sql.go | 25 +++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 8 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/ddl_drop_table/ydb/go/db.go | 31 +++ .../testdata/ddl_drop_table/ydb/go/models.go | 5 + .../ddl_drop_table/ydb/go/query.sql.go | 19 ++ .../ddl_drop_table/ydb/stdlib/go/db.go | 31 +++ .../ddl_drop_table/ydb/stdlib/go/models.go | 5 + .../ddl_drop_table/ydb/stdlib/go/query.sql.go | 19 ++ .../ddl_drop_table/ydb/stdlib/query.sql | 2 + .../ddl_drop_table/ydb/stdlib/schema.sql | 17 ++ .../ddl_drop_table/ydb/stdlib/sqlc.json | 12 ++ .../ddl_drop_table/ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 5 + .../ydb/ydb-go-sdk/go/query.sql.go | 25 +++ .../ddl_drop_table/ydb/ydb-go-sdk/query.sql | 2 + .../ddl_drop_table/ydb/ydb-go-sdk/schema.sql | 17 ++ .../ddl_drop_table/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 5 + .../ydb/stdlib/go/query.sql.go | 19 ++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 6 + .../ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 5 + .../ydb/ydb-go-sdk/go/query.sql.go | 25 +++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 6 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../emit_db_and_json_tags/ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 12 ++ .../ydb/stdlib/go/query.sql.go | 42 ++++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 7 + .../ydb/stdlib/sqlc.json | 14 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 12 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 50 +++++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 7 + .../ydb/ydb-go-sdk/sqlc.json | 15 ++ .../testdata/emit_db_tags/ydb/stdlib/go/db.go | 31 +++ .../emit_db_tags/ydb/stdlib/go/models.go | 12 ++ .../emit_db_tags/ydb/stdlib/go/query.sql.go | 42 ++++ .../emit_db_tags/ydb/stdlib/query.sql | 2 + .../emit_db_tags/ydb/stdlib/schema.sql | 7 + .../emit_db_tags/ydb/stdlib/sqlc.json | 13 ++ .../emit_db_tags/ydb/ydb-go-sdk/go/db.go | 26 +++ .../emit_db_tags/ydb/ydb-go-sdk/go/models.go | 12 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 50 +++++ .../emit_db_tags/ydb/ydb-go-sdk/query.sql | 2 + .../emit_db_tags/ydb/ydb-go-sdk/schema.sql | 7 + .../emit_db_tags/ydb/ydb-go-sdk/sqlc.json | 14 ++ .../testdata/emit_empty_slices/ydb/go/db.go | 31 +++ .../emit_empty_slices/ydb/go/models.go | 9 + .../emit_empty_slices/ydb/go/query.sql.go | 37 ++++ .../testdata/emit_empty_slices/ydb/query.sql | 2 + .../testdata/emit_empty_slices/ydb/schema.sql | 4 + .../testdata/emit_empty_slices/ydb/sqlc.json | 13 ++ .../emit_exported_queries/ydb/go/db.go | 31 +++ .../emit_exported_queries/ydb/go/models.go | 9 + .../emit_exported_queries/ydb/go/query.sql.go | 24 +++ .../emit_exported_queries/ydb/query.sql | 2 + .../emit_exported_queries/ydb/schema.sql | 4 + .../emit_exported_queries/ydb/sqlc.json | 13 ++ .../ydb/go/db.go | 24 +++ .../ydb/go/models.go | 12 ++ .../ydb/go/query.sql.go | 42 ++++ .../ydb/stdlib/go/db.go | 24 +++ .../ydb/stdlib/go/models.go | 12 ++ .../ydb/stdlib/go/query.sql.go | 42 ++++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 7 + .../ydb/stdlib/sqlc.json | 13 ++ .../ydb/ydb-go-sdk/go/db.go | 25 +++ .../ydb/ydb-go-sdk/go/models.go | 12 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 50 +++++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 7 + .../ydb/ydb-go-sdk/sqlc.json | 14 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 43 ++++ .../ydb/stdlib/go/query.sql.go | 21 ++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 36 ++++ .../ydb/stdlib/sqlc.json | 13 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 43 ++++ .../ydb/ydb-go-sdk/go/query.sql.go | 30 +++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 36 ++++ .../ydb/ydb-go-sdk/sqlc.json | 14 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 10 + .../ydb/stdlib/go/querier.go | 17 ++ .../ydb/stdlib/go/query.sql.go | 80 +++++++ .../ydb/stdlib/query.sql | 8 + .../ydb/stdlib/schema.sql | 5 + .../ydb/stdlib/sqlc.json | 15 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/querier.go | 19 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 107 ++++++++++ .../ydb/ydb-go-sdk/query.sql | 8 + .../ydb/ydb-go-sdk/schema.sql | 5 + .../ydb/ydb-go-sdk/sqlc.json | 16 ++ .../exec_create_table/ydb/stdlib/go/db.go | 31 +++ .../exec_create_table/ydb/stdlib/go/models.go | 5 + .../ydb/stdlib/go/query.sql.go | 19 ++ .../exec_create_table/ydb/stdlib/query.sql | 2 + .../exec_create_table/ydb/stdlib/schema.sql | 0 .../exec_create_table/ydb/stdlib/sqlc.json | 17 ++ .../exec_create_table/ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 5 + .../ydb/ydb-go-sdk/go/query.sql.go | 25 +++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 0 .../ydb/ydb-go-sdk/sqlc.json | 17 ++ .../testdata/exec_imports/ydb/stdlib/go/db.go | 31 +++ .../exec_imports/ydb/stdlib/go/models.go | 10 + .../exec_imports/ydb/stdlib/go/querier.go | 16 ++ .../exec_imports/ydb/stdlib/go/query.sql.go | 30 +++ .../exec_imports/ydb/stdlib/query.sql | 7 + .../exec_imports/ydb/stdlib/schema.sql | 5 + .../exec_imports/ydb/stdlib/sqlc.json | 13 ++ .../exec_imports/ydb/ydb-go-sdk/go/db.go | 26 +++ .../exec_imports/ydb/ydb-go-sdk/go/models.go | 10 + .../exec_imports/ydb/ydb-go-sdk/go/querier.go | 18 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 39 ++++ .../exec_imports/ydb/ydb-go-sdk/query.sql | 7 + .../exec_imports/ydb/ydb-go-sdk/schema.sql | 5 + .../exec_imports/ydb/ydb-go-sdk/sqlc.json | 14 ++ .../func_call_cast/ydb/stdlib/go/db.go | 31 +++ .../func_call_cast/ydb/stdlib/go/models.go | 5 + .../func_call_cast/ydb/stdlib/go/query.sql.go | 21 ++ .../func_call_cast/ydb/stdlib/query.sql | 2 + .../func_call_cast/ydb/stdlib/schema.sql | 0 .../func_call_cast/ydb/stdlib/sqlc.json | 12 ++ .../func_call_cast/ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 5 + .../ydb/ydb-go-sdk/go/query.sql.go | 30 +++ .../func_call_cast/ydb/ydb-go-sdk/query.sql | 2 + .../func_call_cast/ydb/ydb-go-sdk/schema.sql | 0 .../func_call_cast/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/func_match_types/ydb/go/db.go | 31 +++ .../func_match_types/ydb/go/models.go | 12 ++ .../func_match_types/ydb/go/query.sql.go | 45 ++++ .../testdata/func_match_types/ydb/query.sql | 4 + .../testdata/func_match_types/ydb/schema.sql | 7 + .../testdata/func_match_types/ydb/sqlc.json | 12 ++ .../testdata/func_return_table/ydb/go/db.go | 31 +++ .../func_return_table/ydb/go/models.go | 11 + .../func_return_table/ydb/go/query.sql.go | 26 +++ .../testdata/func_return_table/ydb/query.sql | 2 + .../testdata/func_return_table/ydb/schema.sql | 6 + .../testdata/func_return_table/ydb/sqlc.json | 12 ++ internal/engine/ydb/convert.go | 196 ++++++++++++++++++ 246 files changed, 4013 insertions(+), 14 deletions(-) create mode 100644 internal/endtoend/testdata/create_view/ydb/go/db.go create mode 100644 internal/endtoend/testdata/create_view/ydb/go/models.go create mode 100644 internal/endtoend/testdata/create_view/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/create_view/ydb/query.sql create mode 100644 internal/endtoend/testdata/create_view/ydb/schema.sql create mode 100644 internal/endtoend/testdata/create_view/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_create_table/ydb/go/db.go create mode 100644 internal/endtoend/testdata/ddl_create_table/ydb/go/models.go create mode 100644 internal/endtoend/testdata/ddl_create_table/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_create_table/ydb/query.sql create mode 100644 internal/endtoend/testdata/ddl_create_table/ydb/schema.sql create mode 100644 internal/endtoend/testdata/ddl_create_table/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/go/db.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/go/models.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/emit_empty_slices/ydb/go/db.go create mode 100644 internal/endtoend/testdata/emit_empty_slices/ydb/go/models.go create mode 100644 internal/endtoend/testdata/emit_empty_slices/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_empty_slices/ydb/query.sql create mode 100644 internal/endtoend/testdata/emit_empty_slices/ydb/schema.sql create mode 100644 internal/endtoend/testdata/emit_empty_slices/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/emit_exported_queries/ydb/go/db.go create mode 100644 internal/endtoend/testdata/emit_exported_queries/ydb/go/models.go create mode 100644 internal/endtoend/testdata/emit_exported_queries/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_exported_queries/ydb/query.sql create mode 100644 internal/endtoend/testdata/emit_exported_queries/ydb/schema.sql create mode 100644 internal/endtoend/testdata/emit_exported_queries/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/db.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/models.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/querier.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/querier.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/exec_imports/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/stdlib/go/querier.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/exec_imports/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/exec_imports/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/querier.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/func_match_types/ydb/go/db.go create mode 100644 internal/endtoend/testdata/func_match_types/ydb/go/models.go create mode 100644 internal/endtoend/testdata/func_match_types/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/func_match_types/ydb/query.sql create mode 100644 internal/endtoend/testdata/func_match_types/ydb/schema.sql create mode 100644 internal/endtoend/testdata/func_match_types/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/func_return_table/ydb/go/db.go create mode 100644 internal/endtoend/testdata/func_return_table/ydb/go/models.go create mode 100644 internal/endtoend/testdata/func_return_table/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/func_return_table/ydb/query.sql create mode 100644 internal/endtoend/testdata/func_return_table/ydb/schema.sql create mode 100644 internal/endtoend/testdata/func_return_table/ydb/sqlc.json diff --git a/internal/codegen/golang/templates/ydb-go-sdk/interfaceCode.tmpl b/internal/codegen/golang/templates/ydb-go-sdk/interfaceCode.tmpl index f9c06cc705..9ed0dd1bc3 100644 --- a/internal/codegen/golang/templates/ydb-go-sdk/interfaceCode.tmpl +++ b/internal/codegen/golang/templates/ydb-go-sdk/interfaceCode.tmpl @@ -3,17 +3,17 @@ {{- $dbtxParam := .EmitMethodsWithDBArgument -}} {{- range .GoQueries}} {{- if and (eq .Cmd ":one") ($dbtxParam) }} - {{range .Comments}}//{{.}} - {{end -}} + {{- range .Comments}}//{{.}} + {{- end}} {{.MethodName}}(ctx context.Context, db DBTX, {{if not .Arg.IsEmpty}}{{.Arg.Pair}}, {{end}}opts ...query.ExecuteOption) ({{.Ret.DefineType}}, error) {{- else if eq .Cmd ":one"}} - {{range .Comments}}//{{.}} - {{end -}} + {{- range .Comments}}//{{.}} + {{- end}} {{.MethodName}}(ctx context.Context, {{if not .Arg.IsEmpty}}{{.Arg.Pair}}, {{end}}opts ...query.ExecuteOption) ({{.Ret.DefineType}}, error) {{- end}} {{- if and (eq .Cmd ":many") ($dbtxParam) }} - {{range .Comments}}//{{.}} - {{end -}} + {{- range .Comments}}//{{.}} + {{- end}} {{.MethodName}}(ctx context.Context, db DBTX, {{if not .Arg.IsEmpty}}{{.Arg.Pair}}, {{end}}opts ...query.ExecuteOption) ([]{{.Ret.DefineType}}, error) {{- else if eq .Cmd ":many"}} {{range .Comments}}//{{.}} @@ -21,12 +21,12 @@ {{.MethodName}}(ctx context.Context, {{if not .Arg.IsEmpty}}{{.Arg.Pair}}, {{end}}opts ...query.ExecuteOption) ([]{{.Ret.DefineType}}, error) {{- end}} {{- if and (eq .Cmd ":exec") ($dbtxParam) }} - {{range .Comments}}//{{.}} - {{end -}} + {{- range .Comments}}//{{.}} + {{- end}} {{.MethodName}}(ctx context.Context, db DBTX, {{if not .Arg.IsEmpty}}{{.Arg.Pair}}, {{end}}opts ...query.ExecuteOption) error {{- else if eq .Cmd ":exec"}} - {{range .Comments}}//{{.}} - {{end -}} + {{- range .Comments}}//{{.}} + {{- end}} {{.MethodName}}(ctx context.Context, {{if not .Arg.IsEmpty}}{{.Arg.Pair}}, {{end}}opts ...query.ExecuteOption) error {{- end}} {{- end}} diff --git a/internal/codegen/golang/ydb_type.go b/internal/codegen/golang/ydb_type.go index 75a92fcc60..61ab421457 100644 --- a/internal/codegen/golang/ydb_type.go +++ b/internal/codegen/golang/ydb_type.go @@ -72,25 +72,37 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col return "*int64" case "uint8": + if notNull { + return "uint8" + } if emitPointersForNull { return "*uint8" } - return "uint8" + return "*uint8" case "uint16": + if notNull { + return "uint16" + } if emitPointersForNull { return "*uint16" } - return "uint16" + return "*uint16" case "uint32": + if notNull { + return "uint32" + } if emitPointersForNull { return "*uint32" } - return "uint32" + return "*uint32" case "uint64": + if notNull { + return "uint64" + } if emitPointersForNull { return "*uint64" } - return "uint64" + return "*uint64" case "float": if notNull { diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql index 99a618fa65..63a287e754 100644 --- a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/schema.sql @@ -1 +1,3 @@ CREATE TABLE foo (bar Utf8, PRIMARY KEY (bar)); + + diff --git a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json index 257bc9d140..8dc3083c5d 100644 --- a/internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/comment_syntax/ydb/stdlib/sqlc.json @@ -10,3 +10,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql index ddf6f4b70c..ce4eb70318 100644 --- a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/query.sql @@ -3,3 +3,5 @@ SELECT * FROM foo LIMIT 1; /* name: SlashStar :one */ SELECT * FROM foo LIMIT 1; + + diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql index 8a8240412f..5e756dfc4f 100644 --- a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/schema.sql @@ -1 +1,3 @@ CREATE TABLE foo (bar Text, PRIMARY KEY (bar)); + + diff --git a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json index 02f4bf76c3..2610f39f40 100644 --- a/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/comment_syntax/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql b/internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql index f32a0589be..81f9fb9fa4 100644 --- a/internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/query.sql @@ -18,3 +18,5 @@ SELECT COUNT(*) <> 0 FROM bar; -- name: Equal :many SELECT COUNT(*) = 0 FROM bar; + + diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql b/internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql index 161adf934e..7f6dc4d7f1 100644 --- a/internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/schema.sql @@ -2,3 +2,5 @@ -- https://www.postgresql.org/docs/current/functions-comparison.html CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); + + diff --git a/internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json index 257bc9d140..8dc3083c5d 100644 --- a/internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/comparisons/ydb/stdlib/sqlc.json @@ -10,3 +10,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql index f32a0589be..81f9fb9fa4 100644 --- a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/query.sql @@ -18,3 +18,5 @@ SELECT COUNT(*) <> 0 FROM bar; -- name: Equal :many SELECT COUNT(*) = 0 FROM bar; + + diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql index 161adf934e..7f6dc4d7f1 100644 --- a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/schema.sql @@ -2,3 +2,5 @@ -- https://www.postgresql.org/docs/current/functions-comparison.html CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); + + diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json index 02f4bf76c3..2610f39f40 100644 --- a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/query.sql b/internal/endtoend/testdata/count_star/ydb/stdlib/query.sql index 7b07ad69a1..dc30d99eb1 100644 --- a/internal/endtoend/testdata/count_star/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/query.sql @@ -3,3 +3,5 @@ SELECT COUNT(*) FROM bar; -- name: CountStarUpper :one SELECT COUNT(*) FROM bar; + + diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql b/internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql index 21cad7df3d..9a7f07e291 100644 --- a/internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/schema.sql @@ -1 +1,3 @@ CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); + + diff --git a/internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json index 257bc9d140..8dc3083c5d 100644 --- a/internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/count_star/ydb/stdlib/sqlc.json @@ -10,3 +10,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql index 7b07ad69a1..dc30d99eb1 100644 --- a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/query.sql @@ -3,3 +3,5 @@ SELECT COUNT(*) FROM bar; -- name: CountStarUpper :one SELECT COUNT(*) FROM bar; + + diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql index 21cad7df3d..9a7f07e291 100644 --- a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/schema.sql @@ -1 +1,3 @@ CREATE TABLE bar (id Serial NOT NULL, PRIMARY KEY (id)); + + diff --git a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json index 02f4bf76c3..2610f39f40 100644 --- a/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/count_star/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/create_view/ydb/go/db.go b/internal/endtoend/testdata/create_view/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/create_view/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/create_view/ydb/go/models.go b/internal/endtoend/testdata/create_view/ydb/go/models.go new file mode 100644 index 0000000000..19e2dc5b41 --- /dev/null +++ b/internal/endtoend/testdata/create_view/ydb/go/models.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type FirstView struct { + Val string +} + +type Foo struct { + Val string + Val2 *int32 +} + +type SecondView struct { + Val string + Val2 *int32 +} diff --git a/internal/endtoend/testdata/create_view/ydb/go/query.sql.go b/internal/endtoend/testdata/create_view/ydb/go/query.sql.go new file mode 100644 index 0000000000..42df7a5fc5 --- /dev/null +++ b/internal/endtoend/testdata/create_view/ydb/go/query.sql.go @@ -0,0 +1,64 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getFirst = `-- name: GetFirst :many +SELECT val FROM first_view +` + +func (q *Queries) GetFirst(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, getFirst) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var val string + if err := rows.Scan(&val); err != nil { + return nil, err + } + items = append(items, val) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getSecond = `-- name: GetSecond :many +SELECT val, val2 FROM second_view WHERE val2 = $val2 +` + +func (q *Queries) GetSecond(ctx context.Context, val2 *int32) ([]SecondView, error) { + rows, err := q.db.QueryContext(ctx, getSecond, val2) + if err != nil { + return nil, err + } + defer rows.Close() + var items []SecondView + for rows.Next() { + var i SecondView + if err := rows.Scan(&i.Val, &i.Val2); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/create_view/ydb/query.sql b/internal/endtoend/testdata/create_view/ydb/query.sql new file mode 100644 index 0000000000..dc2d2a4e68 --- /dev/null +++ b/internal/endtoend/testdata/create_view/ydb/query.sql @@ -0,0 +1,5 @@ +-- name: GetFirst :many +SELECT * FROM first_view; + +-- name: GetSecond :many +SELECT * FROM second_view WHERE val2 = $val2; diff --git a/internal/endtoend/testdata/create_view/ydb/schema.sql b/internal/endtoend/testdata/create_view/ydb/schema.sql new file mode 100644 index 0000000000..bfed666038 --- /dev/null +++ b/internal/endtoend/testdata/create_view/ydb/schema.sql @@ -0,0 +1,15 @@ +CREATE TABLE foo ( + val Text NOT NULL, + PRIMARY KEY (val) +); + +CREATE VIEW first_view AS SELECT * FROM foo; +CREATE VIEW third_view AS SELECT * FROM foo; + +ALTER TABLE foo ADD COLUMN val2 Int32; +-- YDB doesn't support CREATE OR REPLACE VIEW, only CREATE or DROP +-- So we need to DROP and CREATE again +DROP VIEW second_view; +CREATE VIEW second_view AS SELECT * FROM foo; + +DROP VIEW third_view; diff --git a/internal/endtoend/testdata/create_view/ydb/sqlc.json b/internal/endtoend/testdata/create_view/ydb/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/create_view/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/db.go b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/models.go b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..b1240a9d27 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + Baz *int32 + Bio *int32 + Foobar *string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/query.sql b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/schema.sql b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..618375bf31 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE foo ( + bar Text NOT NULL, + PRIMARY KEY (bar) +); + +ALTER TABLE foo ADD COLUMN baz Int32; +ALTER TABLE foo ADD COLUMN bio Int32; +ALTER TABLE foo ADD COLUMN foobar Text diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..b1240a9d27 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + Baz *int32 + Bio *int32 + Foobar *string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..eb1e7ea3e2 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, placeholder, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..7781142268 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE foo ( + bar Text NOT NULL, + PRIMARY KEY (bar) +); + +ALTER TABLE foo ADD COLUMN baz Int32; +ALTER TABLE foo ADD COLUMN bio Int32; +ALTER TABLE foo ADD COLUMN foobar Text; diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/db.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/models.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..751b7df65d --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Foo struct { + Bar *time.Time +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/query.sql b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/schema.sql b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..3f8b1527c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE foo ( + bar Text, + PRIMARY KEY (bar) +); + +-- YDB doesn't support ALTER COLUMN TYPE, so we use DROP COLUMN + ADD COLUMN +ALTER TABLE foo DROP COLUMN bar; +ALTER TABLE foo ADD COLUMN bar Timestamp; diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..751b7df65d --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Foo struct { + Bar *time.Time +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..eb1e7ea3e2 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, placeholder, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..3f8b1527c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE foo ( + bar Text, + PRIMARY KEY (bar) +); + +-- YDB doesn't support ALTER COLUMN TYPE, so we use DROP COLUMN + ADD COLUMN +ALTER TABLE foo DROP COLUMN bar; +ALTER TABLE foo ADD COLUMN bar Timestamp; diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/db.go b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/models.go b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/models.go new file mode 100644 index 0000000000..2e5f929eef --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar *string + Baz *string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/query.sql b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/schema.sql b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/schema.sql new file mode 100644 index 0000000000..1bb0ef7731 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE foo ( + bar Text NOT NULL, + baz Text NOT NULL, + PRIMARY KEY (bar) +); + +ALTER TABLE foo ALTER COLUMN bar DROP NOT NULL; +ALTER TABLE foo ALTER COLUMN baz DROP NOT NULL; diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/db.go b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/models.go b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/models.go new file mode 100644 index 0000000000..0cd442222e --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/query.sql.go new file mode 100644 index 0000000000..1b0cf67985 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT bar FROM foo +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/query.sql b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/query.sql new file mode 100644 index 0000000000..92dc72524c --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT * FROM foo; diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/schema.sql b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/schema.sql new file mode 100644 index 0000000000..1b6d025936 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE foo ( + bar Text, + baz Text, + PRIMARY KEY (bar) +); + +ALTER TABLE foo DROP COLUMN baz; diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/db.go b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/models.go b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..c9b3eabe96 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Arena struct { + Name string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..0002035dff --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :many +SELECT name FROM arenas +` + +func (q *Queries) Placeholder(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, placeholder) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/query.sql b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/query.sql new file mode 100644 index 0000000000..bf777e0cb6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +/* name: Placeholder :many */ +SELECT * FROM arenas; diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/schema.sql b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..6063ebc54d --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE venues ( + name Text, + PRIMARY KEY (name) +); + +ALTER TABLE venues RENAME TO arenas; diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..c9b3eabe96 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Arena struct { + Name string +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..562a2b62e5 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,45 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const placeholder = `-- name: Placeholder :many +SELECT name FROM arenas +` + +func (q *Queries) Placeholder(ctx context.Context, opts ...query.ExecuteOption) ([]string, error) { + result, err := q.db.QueryResultSet(ctx, placeholder, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var name string + if err := row.Scan(&name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..bf777e0cb6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +/* name: Placeholder :many */ +SELECT * FROM arenas; diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..6063ebc54d --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE venues ( + name Text, + PRIMARY KEY (name) +); + +ALTER TABLE venues RENAME TO arenas; diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_create_table/ydb/go/db.go b/internal/endtoend/testdata/ddl_create_table/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_create_table/ydb/go/models.go b/internal/endtoend/testdata/ddl_create_table/ydb/go/models.go new file mode 100644 index 0000000000..88bad93cfa --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Venue struct { + Name string +} diff --git a/internal/endtoend/testdata/ddl_create_table/ydb/go/query.sql.go b/internal/endtoend/testdata/ddl_create_table/ydb/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table/ydb/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_create_table/ydb/query.sql b/internal/endtoend/testdata/ddl_create_table/ydb/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_create_table/ydb/schema.sql b/internal/endtoend/testdata/ddl_create_table/ydb/schema.sql new file mode 100644 index 0000000000..f84b5e5ee9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE venues ( + name Text, + PRIMARY KEY (name) +); diff --git a/internal/endtoend/testdata/ddl_create_table/ydb/sqlc.json b/internal/endtoend/testdata/ddl_create_table/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/db.go b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/models.go b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..85b74b5396 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID string + OtherID string +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/query.sql b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/schema.sql b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..7d8598df14 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE foo ( + id Text NOT NULL, + other_id Text NOT NULL, + PRIMARY KEY (id) +) WITH ( + AUTO_PARTITIONING_BY_SIZE = ENABLED, + AUTO_PARTITIONING_PARTITION_SIZE_MB = 512 +); diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..85b74b5396 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + ID string + OtherID string +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..eb1e7ea3e2 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, placeholder, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..7d8598df14 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE foo ( + id Text NOT NULL, + other_id Text NOT NULL, + PRIMARY KEY (id) +) WITH ( + AUTO_PARTITIONING_BY_SIZE = ENABLED, + AUTO_PARTITIONING_PARTITION_SIZE_MB = 512 +); diff --git a/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_partition/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/go/db.go b/internal/endtoend/testdata/ddl_drop_table/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/go/models.go b/internal/endtoend/testdata/ddl_drop_table/ydb/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/go/query.sql.go b/internal/endtoend/testdata/ddl_drop_table/ydb/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/db.go b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/models.go b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/query.sql b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/schema.sql b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..1c2625ddf3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/schema.sql @@ -0,0 +1,17 @@ +CREATE TABLE venues ( + hi Text, + PRIMARY KEY (hi) +); +DROP TABLE venues; + +CREATE TABLE Authors ( + id Int32, + PRIMARY KEY (id) +); +DROP TABLE Authors; + +CREATE TABLE "Books" ( + id Int32, + PRIMARY KEY (id) +); +DROP TABLE "Books"; diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..eb1e7ea3e2 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, placeholder, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..1c2625ddf3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,17 @@ +CREATE TABLE venues ( + hi Text, + PRIMARY KEY (hi) +); +DROP TABLE venues; + +CREATE TABLE Authors ( + id Int32, + PRIMARY KEY (id) +); +DROP TABLE Authors; + +CREATE TABLE "Books" ( + id Int32, + PRIMARY KEY (id) +); +DROP TABLE "Books"; diff --git a/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/db.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/models.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3f59aec9b9 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/query.sql b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/schema.sql b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..8bf587c771 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE venues ( + id Int32, + PRIMARY KEY (id) +); +DROP TABLE IF EXISTS venues; +DROP TABLE IF EXISTS venues; diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..eb1e7ea3e2 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, placeholder, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..8bf587c771 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE venues ( + id Int32, + PRIMARY KEY (id) +); +DROP TABLE IF EXISTS venues; +DROP TABLE IF EXISTS venues; diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..02f4bf76c3 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk" + } + ] +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/db.go b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/models.go b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..439baff3cf --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 `db:"id" json:"id"` + FirstName string `db:"first_name" json:"first_name"` + LastName *string `db:"last_name" json:"last_name"` + Age int32 `db:"age" json:"age"` +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..5018df0e2a --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.db.QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/query.sql b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/query.sql new file mode 100644 index 0000000000..237b20193b --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: GetAll :many +SELECT * FROM users; diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/schema.sql b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..3e5d6c1619 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Serial, + first_name Text NOT NULL, + last_name Text, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..536f98a039 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/stdlib/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_json_tags": true, + "emit_db_tags": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..439baff3cf --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 `db:"id" json:"id"` + FirstName string `db:"first_name" json:"first_name"` + LastName *string `db:"last_name" json:"last_name"` + Age int32 `db:"age" json:"age"` +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..77eed3be9a --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]User, error) { + result, err := q.db.QueryResultSet(ctx, getAll, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []User + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i User + if err := row.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..237b20193b --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: GetAll :many +SELECT * FROM users; diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..3e5d6c1619 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Serial, + first_name Text NOT NULL, + last_name Text, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..27acb3fe8d --- /dev/null +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk", + "emit_json_tags": true, + "emit_db_tags": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/db.go b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/models.go b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..9520de214b --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 `db:"id"` + FirstName string `db:"first_name"` + LastName *string `db:"last_name"` + Age int32 `db:"age"` +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..5018df0e2a --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.db.QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/query.sql b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/query.sql new file mode 100644 index 0000000000..237b20193b --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: GetAll :many +SELECT * FROM users; diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/schema.sql b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..3e5d6c1619 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Serial, + first_name Text NOT NULL, + last_name Text, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..31a85fbf10 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/stdlib/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_db_tags": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..9520de214b --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 `db:"id"` + FirstName string `db:"first_name"` + LastName *string `db:"last_name"` + Age int32 `db:"age"` +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..77eed3be9a --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]User, error) { + result, err := q.db.QueryResultSet(ctx, getAll, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []User + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i User + if err := row.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..237b20193b --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: GetAll :many +SELECT * FROM users; diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..3e5d6c1619 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Serial, + first_name Text NOT NULL, + last_name Text, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..64b7dc7c26 --- /dev/null +++ b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk", + "emit_db_tags": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_empty_slices/ydb/go/db.go b/internal/endtoend/testdata/emit_empty_slices/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/emit_empty_slices/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/emit_empty_slices/ydb/go/models.go b/internal/endtoend/testdata/emit_empty_slices/ydb/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/emit_empty_slices/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/emit_empty_slices/ydb/go/query.sql.go b/internal/endtoend/testdata/emit_empty_slices/ydb/go/query.sql.go new file mode 100644 index 0000000000..24ca1da9c1 --- /dev/null +++ b/internal/endtoend/testdata/emit_empty_slices/ydb/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const listBar = `-- name: ListBar :many +SELECT id FROM bar +` + +func (q *Queries) ListBar(ctx context.Context) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, listBar) + if err != nil { + return nil, err + } + defer rows.Close() + items := []int32{} + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_empty_slices/ydb/query.sql b/internal/endtoend/testdata/emit_empty_slices/ydb/query.sql new file mode 100644 index 0000000000..af1f130f18 --- /dev/null +++ b/internal/endtoend/testdata/emit_empty_slices/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: ListBar :many +SELECT * FROM bar; diff --git a/internal/endtoend/testdata/emit_empty_slices/ydb/schema.sql b/internal/endtoend/testdata/emit_empty_slices/ydb/schema.sql new file mode 100644 index 0000000000..6fc66ccc41 --- /dev/null +++ b/internal/endtoend/testdata/emit_empty_slices/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE bar ( + id Serial NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_empty_slices/ydb/sqlc.json b/internal/endtoend/testdata/emit_empty_slices/ydb/sqlc.json new file mode 100644 index 0000000000..776fbccb73 --- /dev/null +++ b/internal/endtoend/testdata/emit_empty_slices/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_empty_slices": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_exported_queries/ydb/go/db.go b/internal/endtoend/testdata/emit_exported_queries/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/emit_exported_queries/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/emit_exported_queries/ydb/go/models.go b/internal/endtoend/testdata/emit_exported_queries/ydb/go/models.go new file mode 100644 index 0000000000..4f106ee2e3 --- /dev/null +++ b/internal/endtoend/testdata/emit_exported_queries/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 +} diff --git a/internal/endtoend/testdata/emit_exported_queries/ydb/go/query.sql.go b/internal/endtoend/testdata/emit_exported_queries/ydb/go/query.sql.go new file mode 100644 index 0000000000..33db515ec9 --- /dev/null +++ b/internal/endtoend/testdata/emit_exported_queries/ydb/go/query.sql.go @@ -0,0 +1,24 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const UpdateBarID = `-- name: UpdateBarID :exec +UPDATE bar SET id = $new_id WHERE id = $old_id +` + +type UpdateBarIDParams struct { + NewID int32 + OldID int32 +} + +func (q *Queries) UpdateBarID(ctx context.Context, arg UpdateBarIDParams) error { + _, err := q.db.ExecContext(ctx, UpdateBarID, arg.NewID, arg.OldID) + return err +} diff --git a/internal/endtoend/testdata/emit_exported_queries/ydb/query.sql b/internal/endtoend/testdata/emit_exported_queries/ydb/query.sql new file mode 100644 index 0000000000..c03af084dd --- /dev/null +++ b/internal/endtoend/testdata/emit_exported_queries/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: UpdateBarID :exec +UPDATE bar SET id = $new_id WHERE id = $old_id; diff --git a/internal/endtoend/testdata/emit_exported_queries/ydb/schema.sql b/internal/endtoend/testdata/emit_exported_queries/ydb/schema.sql new file mode 100644 index 0000000000..6fc66ccc41 --- /dev/null +++ b/internal/endtoend/testdata/emit_exported_queries/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE bar ( + id Serial NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_exported_queries/ydb/sqlc.json b/internal/endtoend/testdata/emit_exported_queries/ydb/sqlc.json new file mode 100644 index 0000000000..a7644386bd --- /dev/null +++ b/internal/endtoend/testdata/emit_exported_queries/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_exported_queries": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/db.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/db.go new file mode 100644 index 0000000000..44139faf54 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/db.go @@ -0,0 +1,24 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New() *Queries { + return &Queries{} +} + +type Queries struct { +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/models.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/models.go new file mode 100644 index 0000000000..1957832e2a --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 + FirstName string + LastName *string + Age int32 +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/query.sql.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/query.sql.go new file mode 100644 index 0000000000..a710fa5c85 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context, db DBTX) ([]User, error) { + rows, err := db.QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/db.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..44139faf54 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/db.go @@ -0,0 +1,24 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New() *Queries { + return &Queries{} +} + +type Queries struct { +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/models.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..1957832e2a --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 + FirstName string + LastName *string + Age int32 +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..a710fa5c85 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context, db DBTX) ([]User, error) { + rows, err := db.QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/query.sql b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/query.sql new file mode 100644 index 0000000000..e2f85e2a9a --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +/* name: GetAll :many */ +SELECT * FROM users; diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/schema.sql b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..4b828255d1 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Int32 NOT NULL, + first_name Text NOT NULL, + last_name Text, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..30c728a740 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/stdlib/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "name": "querytest", + "path": "go", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "emit_methods_with_db_argument": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..918dcde7fc --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New() *Queries { + return &Queries{} +} + +type Queries struct { +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..1957832e2a --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 + FirstName string + LastName *string + Age int32 +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..594e0f1ef1 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context, db DBTX, opts ...query.ExecuteOption) ([]User, error) { + result, err := db.QueryResultSet(ctx, getAll, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []User + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i User + if err := row.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..e2f85e2a9a --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +/* name: GetAll :many */ +SELECT * FROM users; diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..4b828255d1 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE users ( + id Int32 NOT NULL, + first_name Text NOT NULL, + last_name Text, + age Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..6928d55ae9 --- /dev/null +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "name": "querytest", + "path": "go", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk", + "emit_methods_with_db_argument": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/db.go b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..0a639a6476 --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package datatype + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/models.go b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..d8deaf0cd3 --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/models.go @@ -0,0 +1,43 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package datatype + +import ( + "github.com/ydb-platform/ydb-go-sdk/v3/table/types" +) + +type DtNumeric struct { + A int8 + B *int16 + C *int32 + D *int64 + E *uint8 + F *uint16 + G *uint32 + H *uint64 + I *float32 + J *float64 + K *types.Decimal + L *int16 + M *int32 + N *int64 +} + +type DtNumericNotNull struct { + A int8 + B int16 + C int32 + D int64 + E uint8 + F uint16 + G uint32 + H uint64 + I float32 + J float64 + K types.Decimal + L int16 + M int32 + N int64 +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..4720927d0a --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/go/query.sql.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package datatype + +import ( + "context" +) + +const test = `-- name: Test :one +SELECT 1 +` + +func (q *Queries) Test(ctx context.Context) (int32, error) { + row := q.db.QueryRowContext(ctx, test) + var column_1 int32 + err := row.Scan(&column_1) + return column_1, err +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/query.sql b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/query.sql new file mode 100644 index 0000000000..9da604b57e --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Test :one +SELECT 1; diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/schema.sql b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..fc1760482a --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/schema.sql @@ -0,0 +1,36 @@ +-- Numeric Types for YDB +CREATE TABLE dt_numeric ( + a Int8, + b Int16, + c Int32, + d Int64, + e Uint8, + f Uint16, + g Uint32, + h Uint64, + i Float, + j Double, + k Decimal(10, 2), + l SmallSerial, + m Serial, + n BigSerial, + PRIMARY KEY (a) +); + +CREATE TABLE dt_numeric_not_null ( + a Int8 NOT NULL, + b Int16 NOT NULL, + c Int32 NOT NULL, + d Int64 NOT NULL, + e Uint8 NOT NULL, + f Uint16 NOT NULL, + g Uint32 NOT NULL, + h Uint64 NOT NULL, + i Float NOT NULL, + j Double NOT NULL, + k Decimal(10, 2) NOT NULL, + l SmallSerial NOT NULL, + m Serial NOT NULL, + n BigSerial NOT NULL, + PRIMARY KEY (a) +); diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..2544301e31 --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/stdlib/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "datatype", + "schema": "schema.sql", + "queries": "query.sql", + "emit_pointers_for_null_types": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..2e928799e1 --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package datatype + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..d8deaf0cd3 --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,43 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package datatype + +import ( + "github.com/ydb-platform/ydb-go-sdk/v3/table/types" +) + +type DtNumeric struct { + A int8 + B *int16 + C *int32 + D *int64 + E *uint8 + F *uint16 + G *uint32 + H *uint64 + I *float32 + J *float64 + K *types.Decimal + L *int16 + M *int32 + N *int64 +} + +type DtNumericNotNull struct { + A int8 + B int16 + C int32 + D int64 + E uint8 + F uint16 + G uint32 + H uint64 + I float32 + J float64 + K types.Decimal + L int16 + M int32 + N int64 +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..7024a3fff1 --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package datatype + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const test = `-- name: Test :one +SELECT 1 +` + +func (q *Queries) Test(ctx context.Context, opts ...query.ExecuteOption) (int32, error) { + row, err := q.db.QueryRow(ctx, test, opts...) + var column_1 int32 + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + err = row.Scan(&column_1) + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + return column_1, nil +} diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..9da604b57e --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Test :one +SELECT 1; diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..fc1760482a --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,36 @@ +-- Numeric Types for YDB +CREATE TABLE dt_numeric ( + a Int8, + b Int16, + c Int32, + d Int64, + e Uint8, + f Uint16, + g Uint32, + h Uint64, + i Float, + j Double, + k Decimal(10, 2), + l SmallSerial, + m Serial, + n BigSerial, + PRIMARY KEY (a) +); + +CREATE TABLE dt_numeric_not_null ( + a Int8 NOT NULL, + b Int16 NOT NULL, + c Int32 NOT NULL, + d Int64 NOT NULL, + e Uint8 NOT NULL, + f Uint16 NOT NULL, + g Uint32 NOT NULL, + h Uint64 NOT NULL, + i Float NOT NULL, + j Double NOT NULL, + k Decimal(10, 2) NOT NULL, + l SmallSerial NOT NULL, + m Serial NOT NULL, + n BigSerial NOT NULL, + PRIMARY KEY (a) +); diff --git a/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..aec4f79043 --- /dev/null +++ b/internal/endtoend/testdata/emit_pointers_for_null_types/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "datatype", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk", + "emit_pointers_for_null_types": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/db.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/models.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..0f9b3aeb29 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A int32 + B *int32 +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/querier.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/querier.go new file mode 100644 index 0000000000..6224355ad4 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/querier.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" +) + +type Querier interface { + GetAll(ctx context.Context) ([]*Foo, error) + GetAllAByB(ctx context.Context, b *int32) ([]int32, error) + GetOne(ctx context.Context, arg *GetOneParams) (*Foo, error) +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..c4cdaba94a --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/go/query.sql.go @@ -0,0 +1,80 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT a, b FROM foo +` + +func (q *Queries) GetAll(ctx context.Context) ([]*Foo, error) { + rows, err := q.db.QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []*Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.A, &i.B); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getAllAByB = `-- name: GetAllAByB :many +SELECT a FROM foo WHERE b = $b +` + +func (q *Queries) GetAllAByB(ctx context.Context, b *int32) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, getAllAByB, b) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var a int32 + if err := rows.Scan(&a); err != nil { + return nil, err + } + items = append(items, a) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getOne = `-- name: GetOne :one +SELECT a, b FROM foo WHERE a = $a AND b = $b LIMIT 1 +` + +type GetOneParams struct { + A int32 + B *int32 +} + +func (q *Queries) GetOne(ctx context.Context, arg *GetOneParams) (*Foo, error) { + row := q.db.QueryRowContext(ctx, getOne, arg.A, arg.B) + var i Foo + err := row.Scan(&i.A, &i.B) + return &i, err +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/query.sql b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/query.sql new file mode 100644 index 0000000000..04578be86b --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/query.sql @@ -0,0 +1,8 @@ +/* name: GetOne :one */ +SELECT * FROM foo WHERE a = $a AND b = $b LIMIT 1; + +/* name: GetAll :many */ +SELECT * FROM foo; + +/* name: GetAllAByB :many */ +SELECT a FROM foo WHERE b = $b; diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/schema.sql b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..9541c7f9a9 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Int32, + b Int32, + PRIMARY KEY (a) +); diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..5b0e95bcd0 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/stdlib/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "name": "querytest", + "path": "go", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "emit_interface": true, + "emit_result_struct_pointers": true, + "emit_params_struct_pointers": true + } + ] +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..0f9b3aeb29 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A int32 + B *int32 +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/querier.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/querier.go new file mode 100644 index 0000000000..c7680cd56e --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/querier.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type Querier interface { + GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]*Foo, error) + GetAllAByB(ctx context.Context, b *int32, opts ...query.ExecuteOption) ([]int32, error) + GetOne(ctx context.Context, arg *GetOneParams, opts ...query.ExecuteOption) (*Foo, error) +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..3ab6bf3d65 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,107 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const getAll = `-- name: GetAll :many +SELECT a, b FROM foo +` + +func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]*Foo, error) { + result, err := q.db.QueryResultSet(ctx, getAll, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.A, &i.B); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, &i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const getAllAByB = `-- name: GetAllAByB :many +SELECT a FROM foo WHERE b = $b +` + +func (q *Queries) GetAllAByB(ctx context.Context, b *int32, opts ...query.ExecuteOption) ([]int32, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$b").BeginOptional().Int32(b).EndOptional() + result, err := q.db.QueryResultSet(ctx, getAllAByB, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int32 + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var a int32 + if err := row.Scan(&a); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, a) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const getOne = `-- name: GetOne :one +SELECT a, b FROM foo WHERE a = $a AND b = $b LIMIT 1 +` + +type GetOneParams struct { + A int32 + B *int32 +} + +func (q *Queries) GetOne(ctx context.Context, arg *GetOneParams, opts ...query.ExecuteOption) (*Foo, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$a").Int32(arg.A) + parameters = parameters.Param("$b").BeginOptional().Int32(arg.B).EndOptional() + row, err := q.db.QueryRow(ctx, getOne, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i Foo + if err != nil { + return &i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.A, &i.B) + if err != nil { + return &i, xerrors.WithStackTrace(err) + } + return &i, nil +} diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..04578be86b --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,8 @@ +/* name: GetOne :one */ +SELECT * FROM foo WHERE a = $a AND b = $b LIMIT 1; + +/* name: GetAll :many */ +SELECT * FROM foo; + +/* name: GetAllAByB :many */ +SELECT a FROM foo WHERE b = $b; diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..9541c7f9a9 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Int32, + b Int32, + PRIMARY KEY (a) +); diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..3851d32d76 --- /dev/null +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,16 @@ +{ + "version": "1", + "packages": [ + { + "name": "querytest", + "path": "go", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk", + "emit_interface": true, + "emit_result_struct_pointers": true, + "emit_params_struct_pointers": true + } + ] +} diff --git a/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/db.go b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..cd5bbb8e08 --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/models.go b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..32099017df --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db diff --git a/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..99717a9016 --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package db + +import ( + "context" +) + +const createTable = `-- name: CreateTable :exec +CREATE TABLE test (id Int32 NOT NULL) +` + +func (q *Queries) CreateTable(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, createTable) + return err +} diff --git a/internal/endtoend/testdata/exec_create_table/ydb/stdlib/query.sql b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/query.sql new file mode 100644 index 0000000000..d5bdb2a326 --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: CreateTable :exec +CREATE TABLE test (id Int32 NOT NULL); diff --git a/internal/endtoend/testdata/exec_create_table/ydb/stdlib/schema.sql b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/internal/endtoend/testdata/exec_create_table/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..e0a4924d1d --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/stdlib/sqlc.json @@ -0,0 +1,17 @@ +{ + "version": "2", + "sql": [ + { + "queries": "query.sql", + "schema": "schema.sql", + "engine": "ydb", + "gen": { + "go": { + "out": "go", + "package": "db", + "sql_package": "database/sql" + } + } + } + ] +} diff --git a/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..54957882a0 --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..32099017df --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db diff --git a/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..8eb032d217 --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package db + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const createTable = `-- name: CreateTable :exec +CREATE TABLE test (id Int32 NOT NULL) +` + +func (q *Queries) CreateTable(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, createTable, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..d5bdb2a326 --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: CreateTable :exec +CREATE TABLE test (id Int32 NOT NULL); diff --git a/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..01257035bd --- /dev/null +++ b/internal/endtoend/testdata/exec_create_table/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,17 @@ +{ + "version": "2", + "sql": [ + { + "queries": "query.sql", + "schema": "schema.sql", + "engine": "ydb", + "gen": { + "go": { + "out": "go", + "package": "db", + "sql_package": "ydb-go-sdk" + } + } + } + ] +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/db.go b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/models.go b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..c597b42998 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar int32 + Bars string +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/querier.go b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/querier.go new file mode 100644 index 0000000000..4ac6134bc7 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/querier.go @@ -0,0 +1,16 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" +) + +type Querier interface { + Bar(ctx context.Context) error + Bars(ctx context.Context) error +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..56f78eddb9 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/stdlib/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const bar = `-- name: Bar :exec +SELECT bar +FROM foo +` + +func (q *Queries) Bar(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, bar) + return err +} + +const bars = `-- name: Bars :exec +SELECT bars +FROM foo +` + +func (q *Queries) Bars(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, bars) + return err +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/stdlib/query.sql b/internal/endtoend/testdata/exec_imports/ydb/stdlib/query.sql new file mode 100644 index 0000000000..b1be28c911 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/stdlib/query.sql @@ -0,0 +1,7 @@ +-- name: Bar :exec +SELECT bar +FROM foo; + +-- name: Bars :exec +SELECT bars +FROM foo; diff --git a/internal/endtoend/testdata/exec_imports/ydb/stdlib/schema.sql b/internal/endtoend/testdata/exec_imports/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..e82c0d4637 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + bar Int32, + bars json NOT NULL, + PRIMARY KEY (bar) +); diff --git a/internal/endtoend/testdata/exec_imports/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/exec_imports/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..5d726403da --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/stdlib/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_interface": true + } + ] +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..c597b42998 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar int32 + Bars string +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/querier.go b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/querier.go new file mode 100644 index 0000000000..75f58a2ec8 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/querier.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type Querier interface { + Bar(ctx context.Context, opts ...query.ExecuteOption) error + Bars(ctx context.Context, opts ...query.ExecuteOption) error +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..05ec43ba68 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const bar = `-- name: Bar :exec +SELECT bar +FROM foo +` + +func (q *Queries) Bar(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, bar, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} + +const bars = `-- name: Bars :exec +SELECT bars +FROM foo +` + +func (q *Queries) Bars(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, bars, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..b1be28c911 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,7 @@ +-- name: Bar :exec +SELECT bar +FROM foo; + +-- name: Bars :exec +SELECT bars +FROM foo; diff --git a/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..e82c0d4637 --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + bar Int32, + bars json NOT NULL, + PRIMARY KEY (bar) +); diff --git a/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..061cb6989b --- /dev/null +++ b/internal/endtoend/testdata/exec_imports/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_interface": true + } + ] +} diff --git a/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/db.go b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/models.go b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..31538e5453 --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/go/query.sql.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const demo = `-- name: Demo :one +SELECT Cast(Length("hello") AS Int32) AS col1 +` + +func (q *Queries) Demo(ctx context.Context) (int32, error) { + row := q.db.QueryRowContext(ctx, demo) + var col1 int32 + err := row.Scan(&col1) + return col1, err +} diff --git a/internal/endtoend/testdata/func_call_cast/ydb/stdlib/query.sql b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/query.sql new file mode 100644 index 0000000000..b592d92d3c --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Demo :one +SELECT Cast(Length("hello") AS Int32) AS col1; diff --git a/internal/endtoend/testdata/func_call_cast/ydb/stdlib/schema.sql b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/internal/endtoend/testdata/func_call_cast/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..333ea43ea3 --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest diff --git a/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..3c33e43990 --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const demo = `-- name: Demo :one +SELECT Cast(Length("hello") AS Int32) AS col1 +` + +func (q *Queries) Demo(ctx context.Context, opts ...query.ExecuteOption) (int32, error) { + row, err := q.db.QueryRow(ctx, demo, opts...) + var col1 int32 + if err != nil { + return col1, xerrors.WithStackTrace(err) + } + err = row.Scan(&col1) + if err != nil { + return col1, xerrors.WithStackTrace(err) + } + return col1, nil +} diff --git a/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..b592d92d3c --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Demo :one +SELECT Cast(Length("hello") AS Int32) AS col1; diff --git a/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..f87545f35c --- /dev/null +++ b/internal/endtoend/testdata/func_call_cast/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/func_match_types/ydb/go/db.go b/internal/endtoend/testdata/func_match_types/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/func_match_types/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/func_match_types/ydb/go/models.go b/internal/endtoend/testdata/func_match_types/ydb/go/models.go new file mode 100644 index 0000000000..eb64577fc3 --- /dev/null +++ b/internal/endtoend/testdata/func_match_types/ydb/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Book struct { + ID int32 + Title string + Author string + Pages int32 +} diff --git a/internal/endtoend/testdata/func_match_types/ydb/go/query.sql.go b/internal/endtoend/testdata/func_match_types/ydb/go/query.sql.go new file mode 100644 index 0000000000..1d2d434c7a --- /dev/null +++ b/internal/endtoend/testdata/func_match_types/ydb/go/query.sql.go @@ -0,0 +1,45 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const authorPages = `-- name: AuthorPages :many +SELECT author, Count(title) AS num_books, CAST(Sum(pages) AS Int32) AS total_pages +FROM books +GROUP BY author +` + +type AuthorPagesRow struct { + Author string + NumBooks uint64 + TotalPages int32 +} + +func (q *Queries) AuthorPages(ctx context.Context) ([]AuthorPagesRow, error) { + rows, err := q.db.QueryContext(ctx, authorPages) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AuthorPagesRow + for rows.Next() { + var i AuthorPagesRow + if err := rows.Scan(&i.Author, &i.NumBooks, &i.TotalPages); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/func_match_types/ydb/query.sql b/internal/endtoend/testdata/func_match_types/ydb/query.sql new file mode 100644 index 0000000000..08633c1d25 --- /dev/null +++ b/internal/endtoend/testdata/func_match_types/ydb/query.sql @@ -0,0 +1,4 @@ +-- name: AuthorPages :many +SELECT author, Count(title) AS num_books, CAST(Sum(pages) AS Int32) AS total_pages +FROM books +GROUP BY author; diff --git a/internal/endtoend/testdata/func_match_types/ydb/schema.sql b/internal/endtoend/testdata/func_match_types/ydb/schema.sql new file mode 100644 index 0000000000..c2f82c5975 --- /dev/null +++ b/internal/endtoend/testdata/func_match_types/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE books ( + id Int32, + title Text NOT NULL, + author Text NOT NULL, + pages Int32 NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/func_match_types/ydb/sqlc.json b/internal/endtoend/testdata/func_match_types/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/func_match_types/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/func_return_table/ydb/go/db.go b/internal/endtoend/testdata/func_return_table/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/func_return_table/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/func_return_table/ydb/go/models.go b/internal/endtoend/testdata/func_return_table/ydb/go/models.go new file mode 100644 index 0000000000..d5beec506b --- /dev/null +++ b/internal/endtoend/testdata/func_return_table/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Account struct { + ID int64 + Username string + Password string +} diff --git a/internal/endtoend/testdata/func_return_table/ydb/go/query.sql.go b/internal/endtoend/testdata/func_return_table/ydb/go/query.sql.go new file mode 100644 index 0000000000..c49e94f9dc --- /dev/null +++ b/internal/endtoend/testdata/func_return_table/ydb/go/query.sql.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const foo = `-- name: Foo :one +SELECT id, bebra FROM AS_TABLE($table) AS t(id, bebra) +` + +type FooRow struct { + ID interface{} + Bebra interface{} +} + +func (q *Queries) Foo(ctx context.Context, table interface{}) (FooRow, error) { + row := q.db.QueryRowContext(ctx, foo, table) + var i FooRow + err := row.Scan(&i.ID, &i.Bebra) + return i, err +} diff --git a/internal/endtoend/testdata/func_return_table/ydb/query.sql b/internal/endtoend/testdata/func_return_table/ydb/query.sql new file mode 100644 index 0000000000..ff198e0c90 --- /dev/null +++ b/internal/endtoend/testdata/func_return_table/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: Foo :one +SELECT id, bebra FROM AS_TABLE($table) AS t(id, bebra); diff --git a/internal/endtoend/testdata/func_return_table/ydb/schema.sql b/internal/endtoend/testdata/func_return_table/ydb/schema.sql new file mode 100644 index 0000000000..6dad1ace3f --- /dev/null +++ b/internal/endtoend/testdata/func_return_table/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE accounts ( + id BigSerial, + username Text NOT NULL, + password Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/func_return_table/ydb/sqlc.json b/internal/endtoend/testdata/func_return_table/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/func_return_table/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index 564a612b0d..8c8796edc8 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -323,6 +323,196 @@ func (c *cc) VisitUse_stmt(n *parser.Use_stmtContext) interface{} { return todo("VisitUse_stmt", n) } +func (c *cc) VisitCreate_view_stmt(n *parser.Create_view_stmtContext) interface{} { + if n.CREATE() == nil || n.VIEW() == nil || n.Object_ref() == nil || n.AS() == nil || n.Select_stmt() == nil { + return todo("VisitCreate_view_stmt", n) + } + + viewName := parseObjectRef(n.Object_ref()) + if viewName == nil { + return todo("VisitCreate_view_stmt", n.Object_ref()) + } + + viewRangeVar := &ast.RangeVar{ + Relname: &viewName.Name, + Inh: true, + Location: c.pos(n.Object_ref().GetStart()), + } + + options := &ast.List{Items: []ast.Node{}} + if ctf := n.Create_object_features(); ctf != nil && ctf.Object_features() != nil { + optionsResult := ctf.Object_features().Accept(c) + if optionsList, ok := optionsResult.(*ast.List); ok { + options = optionsList + } else { + return optionsResult + } + } + + selectStmt, ok := n.Select_stmt().Accept(c).(ast.Node) + if !ok { + return todo("VisitCreate_view_stmt", n.Select_stmt()) + } + + stmt := &ast.ViewStmt{ + View: viewRangeVar, + Query: selectStmt, + Replace: n.IF() == nil && n.NOT() == nil && n.EXISTS() == nil, + Options: options, + } + + return stmt +} + +func (c *cc) VisitObject_features(n *parser.Object_featuresContext) interface{} { + if n == nil { + return todo("VisitObject_features", n) + } + + var features []ast.Node + + if n.Object_feature(0) != nil { + feature, ok := n.Object_feature(0).Accept(c).(ast.Node) + if !ok { + return todo("VisitObject_features", n.Object_feature(0)) + } + features = append(features, feature) + } + + for _, featureCtx := range n.AllObject_feature() { + feature, ok := featureCtx.Accept(c).(ast.Node) + if !ok { + return todo("VisitObject_features", featureCtx) + } + features = append(features, feature) + } + + if len(features) == 0 { + return todo("VisitObject_features", n) + } + + return &ast.List{Items: features} +} + +func (c *cc) VisitObject_feature(n *parser.Object_featureContext) interface{} { + if n == nil { + return todo("VisitObject_feature", n) + } + + if kv := n.Object_feature_kv(); kv != nil { + expr, ok := kv.Accept(c).(ast.Node) + if !ok { + return todo("VisitObject_feature", n) + } + return expr + } + + if flag := n.Object_feature_flag(); flag != nil { + expr, ok := flag.Accept(c).(ast.Node) + if !ok { + return todo("VisitObject_feature", n) + } + return expr + } + + return todo("VisitObject_feature", n) +} + +func (c *cc) VisitObject_feature_kv(n *parser.Object_feature_kvContext) interface{} { + if n == nil || n.An_id_or_type() == nil || n.EQUALS() == nil || n.Object_feature_value() == nil { + return todo("VisitObject_feature_kv", n) + } + + optionName := parseAnIdOrType(n.An_id_or_type()) + if optionName == "" { + return todo("VisitObject_feature_kv", n.An_id_or_type()) + } + + valueNode, ok := n.Object_feature_value().Accept(c).(ast.Node) + if !ok { + return nil + } + + return &ast.DefElem{ + Defname: &optionName, + Arg: valueNode, + Defaction: ast.DefElemAction(1), + Location: c.pos(n.GetStart()), + } +} + +func (c *cc) VisitObject_feature_flag(n *parser.Object_feature_flagContext) interface{} { + if n == nil || n.An_id_or_type() == nil { + return todo("VisitObject_feature_flag", n) + } + + flagName := parseAnIdOrType(n.An_id_or_type()) + if flagName == "" { + return todo("VisitObject_feature_flag", n.An_id_or_type()) + } + + trueValue := &ast.A_Const{Val: &ast.Boolean{Boolval: false}, Location: c.pos(n.GetStart())} + + return &ast.DefElem{ + Defname: &flagName, + Arg: trueValue, + Defaction: ast.DefElemAction(1), + Location: c.pos(n.GetStart()), + } +} + +func (c *cc) VisitObject_feature_value(n *parser.Object_feature_valueContext) interface{} { + if n == nil { + return todo("VisitObject_feature_value", n) + } + + switch { + case n.Id_or_type() != nil: + value := parseIdOrType(n.Id_or_type()) + return &ast.A_Const{Val: &ast.String{Str: value}, Location: c.pos(n.GetStart())} + + case n.Bind_parameter() != nil: + bindPar, ok := n.Bind_parameter().Accept(c).(ast.Node) + if !ok { + return todo("VisitObject_feature_value", n.Bind_parameter()) + } + return bindPar + + case n.STRING_VALUE() != nil: + value, _ := parseStringValue(n.STRING_VALUE().GetText()) + return &ast.A_Const{Val: NewIdentifier(value), Location: c.pos(n.GetStart())} + + case n.Bool_value() != nil: + return &ast.A_Const{Location: c.pos(n.GetStart()), Val: &ast.Boolean{Boolval: n.Bool_value().TRUE() != nil}} + } + + return todo("VisitObject_feature_value", n) +} + +func (c *cc) VisitDrop_view_stmt(n *parser.Drop_view_stmtContext) interface{} { + if n.DROP() == nil || n.VIEW() == nil || n.Object_ref() == nil { + return todo("VisitDrop_view_stmt", n) + } + + viewName := parseObjectRef(n.Object_ref()) + if viewName == nil { + return todo("VisitDrop_view_stmt", n.Object_ref()) + } + + table := &ast.TableName{ + Name: viewName.Name, + Schema: viewName.Schema, + Catalog: viewName.Catalog, + } + + stmt := &ast.DropTableStmt{ + IfExists: n.IF() == nil && n.EXISTS() == nil, + Tables: []*ast.TableName{table}, + } + + return stmt +} + func (c *cc) VisitCluster_expr(n *parser.Cluster_exprContext) interface{} { var node ast.Node @@ -1855,6 +2045,12 @@ func (c *cc) VisitCreate_table_stmt(n *parser.Create_table_stmtContext) interfac return todo("VisitCreate_table_stmt", def.Changefeed()) } } + + if n.Table_inherits() != nil { + log.Fatalf("INNERITS is not implemented yet") + return todo("VisitCreate_table_stmt", n) + } + return stmt } From 94837ef8eb81362330ad0a42d2759c2bbd8bb86f Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 22 Oct 2025 16:33:31 +0300 Subject: [PATCH 14/26] Fixed datatype && builtins test --- internal/endtoend/testdata/builtins/ydb/go/query.sql.go | 8 ++++---- .../testdata/datatype/ydb/ydb-go-sdk/go/models.go | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/endtoend/testdata/builtins/ydb/go/query.sql.go b/internal/endtoend/testdata/builtins/ydb/go/query.sql.go index d0f523428d..ccae911039 100644 --- a/internal/endtoend/testdata/builtins/ydb/go/query.sql.go +++ b/internal/endtoend/testdata/builtins/ydb/go/query.sql.go @@ -666,9 +666,9 @@ const fUnicodeFind = `-- name: FUnicodeFind :one SELECT Unicode::Find("hello", "ll") ` -func (q *Queries) FUnicodeFind(ctx context.Context) (uint64, error) { +func (q *Queries) FUnicodeFind(ctx context.Context) (*uint64, error) { row := q.db.QueryRowContext(ctx, fUnicodeFind) - var unicode_find uint64 + var unicode_find *uint64 err := row.Scan(&unicode_find) return unicode_find, err } @@ -810,9 +810,9 @@ const fUnicodeRfind = `-- name: FUnicodeRfind :one SELECT Unicode::Rfind("hello", "l") ` -func (q *Queries) FUnicodeRfind(ctx context.Context) (uint64, error) { +func (q *Queries) FUnicodeRfind(ctx context.Context) (*uint64, error) { row := q.db.QueryRowContext(ctx, fUnicodeRfind) - var unicode_rfind uint64 + var unicode_rfind *uint64 err := row.Scan(&unicode_rfind) return unicode_rfind, err } diff --git a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go index e06fbc6499..b0ba25d411 100644 --- a/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go @@ -83,10 +83,10 @@ type DtNumeric struct { B *int16 C *int32 D *int64 - E uint8 - F uint16 - G uint32 - H uint64 + E *uint8 + F *uint16 + G *uint32 + H *uint64 I *float32 J *float64 K *types.Decimal From 45daae9188670bc6d64cd25ff7f29f22c42abf4e Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 22 Oct 2025 17:42:29 +0300 Subject: [PATCH 15/26] MORE TESTS --- internal/codegen/golang/imports.go | 1 + .../testdata/func_match_types/ydb/query.sql | 2 + .../testdata/func_match_types/ydb/sqlc.json | 2 + .../testdata/func_return_table/ydb/query.sql | 2 + .../testdata/func_return_table/ydb/schema.sql | 2 + .../testdata/func_return_table/ydb/sqlc.json | 2 + .../endtoend/testdata/having/ydb/go/db.go | 31 ++++ .../endtoend/testdata/having/ydb/go/models.go | 10 ++ .../testdata/having/ydb/go/query.sql.go | 40 +++++ .../endtoend/testdata/having/ydb/query.sql | 5 + .../endtoend/testdata/having/ydb/schema.sql | 7 + .../endtoend/testdata/having/ydb/sqlc.json | 14 ++ .../identical_tables/ydb/stdlib/go/db.go | 31 ++++ .../identical_tables/ydb/stdlib/go/models.go | 13 ++ .../ydb/stdlib/go/query.sql.go | 37 +++++ .../identical_tables/ydb/stdlib/query.sql | 4 + .../identical_tables/ydb/stdlib/schema.sql | 11 ++ .../identical_tables/ydb/stdlib/sqlc.json | 14 ++ .../identical_tables/ydb/ydb-go-sdk/go/db.go | 26 ++++ .../ydb/ydb-go-sdk/go/models.go | 13 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 45 ++++++ .../identical_tables/ydb/ydb-go-sdk/query.sql | 4 + .../ydb/ydb-go-sdk/schema.sql | 11 ++ .../identical_tables/ydb/ydb-go-sdk/sqlc.json | 15 ++ .../endtoend/testdata/in_union/ydb/go/db.go | 31 ++++ .../testdata/in_union/ydb/go/models.go | 21 +++ .../testdata/in_union/ydb/go/query.sql.go | 38 +++++ .../endtoend/testdata/in_union/ydb/query.sql | 5 + .../endtoend/testdata/in_union/ydb/schema.sql | 20 +++ .../endtoend/testdata/in_union/ydb/sqlc.json | 14 ++ .../endtoend/testdata/inflection/ydb/go/db.go | 31 ++++ .../testdata/inflection/ydb/go/models.go | 25 +++ .../testdata/inflection/ydb/go/query.sql.go | 145 ++++++++++++++++++ .../testdata/inflection/ydb/query.sql | 14 ++ .../testdata/inflection/ydb/schema.sql | 5 + .../testdata/inflection/ydb/sqlc.json | 12 ++ .../ydb/go/db.go | 26 ++++ .../ydb/go/models.go | 20 +++ .../ydb/go/query.sql.go | 77 ++++++++++ .../ydb/query.sql | 8 + .../ydb/schema.sql | 3 + .../ydb/sqlc.json | 21 +++ .../testdata/insert_select_case/ydb/go/db.go | 31 ++++ .../insert_select_case/ydb/go/models.go | 10 ++ .../insert_select_case/ydb/go/query.sql.go | 26 ++++ .../testdata/insert_select_case/ydb/query.sql | 4 + .../insert_select_case/ydb/schema.sql | 5 + .../testdata/insert_select_case/ydb/sqlc.json | 12 ++ .../testdata/insert_select_param/ydb/go/db.go | 31 ++++ .../insert_select_param/ydb/go/models.go | 11 ++ .../insert_select_param/ydb/go/query.sql.go | 27 ++++ .../insert_select_param/ydb/query.sql | 5 + .../insert_select_param/ydb/schema.sql | 6 + .../insert_select_param/ydb/sqlc.json | 12 ++ .../insert_values_public/ydb/go/db.go | 31 ++++ .../insert_values_public/ydb/go/models.go | 10 ++ .../insert_values_public/ydb/go/query.sql.go | 24 +++ .../insert_values_public/ydb/query.sql | 2 + .../insert_values_public/ydb/schema.sql | 1 + .../insert_values_public/ydb/sqlc.json | 12 ++ .../endtoend/testdata/interval/ydb/go/db.go | 31 ++++ .../testdata/interval/ydb/go/models.go | 14 ++ .../testdata/interval/ydb/go/query.sql.go | 37 +++++ .../endtoend/testdata/interval/ydb/query.sql | 2 + .../endtoend/testdata/interval/ydb/schema.sql | 1 + .../endtoend/testdata/interval/ydb/sqlc.json | 12 ++ .../join_left_same_table/ydb/go/db.go | 31 ++++ .../join_left_same_table/ydb/go/models.go | 11 ++ .../join_left_same_table/ydb/go/query.sql.go | 55 +++++++ .../join_left_same_table/ydb/query.sql | 8 + .../join_left_same_table/ydb/schema.sql | 6 + .../join_left_same_table/ydb/sqlc.json | 12 ++ .../testdata/json/ydb/stdlib/go/db.go | 31 ++++ .../testdata/json/ydb/stdlib/go/models.go | 12 ++ .../testdata/json/ydb/stdlib/go/query.sql.go | 19 +++ .../testdata/json/ydb/stdlib/query.sql | 2 + .../testdata/json/ydb/stdlib/schema.sql | 7 + .../testdata/json/ydb/stdlib/sqlc.json | 12 ++ .../testdata/json/ydb/ydb-go-sdk/go/db.go | 26 ++++ .../testdata/json/ydb/ydb-go-sdk/go/models.go | 12 ++ .../json/ydb/ydb-go-sdk/go/query.sql.go | 25 +++ .../testdata/json/ydb/ydb-go-sdk/query.sql | 2 + .../testdata/json/ydb/ydb-go-sdk/schema.sql | 7 + .../testdata/json/ydb/ydb-go-sdk/sqlc.json | 13 ++ internal/endtoend/testdata/limit/ydb/go/db.go | 31 ++++ .../endtoend/testdata/limit/ydb/go/models.go | 9 ++ .../testdata/limit/ydb/go/query.sql.go | 37 +++++ .../endtoend/testdata/limit/ydb/query.sql | 2 + .../endtoend/testdata/limit/ydb/schema.sql | 1 + .../endtoend/testdata/limit/ydb/sqlc.json | 12 ++ internal/endtoend/testdata/lower/ydb/go/db.go | 31 ++++ .../endtoend/testdata/lower/ydb/go/models.go | 10 ++ .../testdata/lower/ydb/go/query.sql.go | 42 +++++ .../endtoend/testdata/lower/ydb/query.sql | 2 + .../endtoend/testdata/lower/ydb/schema.sql | 1 + .../endtoend/testdata/lower/ydb/sqlc.json | 12 ++ .../lower_switched_order/ydb/go/db.go | 31 ++++ .../lower_switched_order/ydb/go/models.go | 10 ++ .../lower_switched_order/ydb/go/query.sql.go | 42 +++++ .../lower_switched_order/ydb/query.sql | 2 + .../lower_switched_order/ydb/schema.sql | 1 + .../lower_switched_order/ydb/sqlc.json | 12 ++ 102 files changed, 1794 insertions(+) create mode 100644 internal/endtoend/testdata/having/ydb/go/db.go create mode 100644 internal/endtoend/testdata/having/ydb/go/models.go create mode 100644 internal/endtoend/testdata/having/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/having/ydb/query.sql create mode 100644 internal/endtoend/testdata/having/ydb/schema.sql create mode 100644 internal/endtoend/testdata/having/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/identical_tables/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/identical_tables/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/identical_tables/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/identical_tables/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/identical_tables/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/identical_tables/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/in_union/ydb/go/db.go create mode 100644 internal/endtoend/testdata/in_union/ydb/go/models.go create mode 100644 internal/endtoend/testdata/in_union/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/in_union/ydb/query.sql create mode 100644 internal/endtoend/testdata/in_union/ydb/schema.sql create mode 100644 internal/endtoend/testdata/in_union/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/inflection/ydb/go/db.go create mode 100644 internal/endtoend/testdata/inflection/ydb/go/models.go create mode 100644 internal/endtoend/testdata/inflection/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/inflection/ydb/query.sql create mode 100644 internal/endtoend/testdata/inflection/ydb/schema.sql create mode 100644 internal/endtoend/testdata/inflection/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/db.go create mode 100644 internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/models.go create mode 100644 internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/inflection_exclude_table_names/ydb/query.sql create mode 100644 internal/endtoend/testdata/inflection_exclude_table_names/ydb/schema.sql create mode 100644 internal/endtoend/testdata/inflection_exclude_table_names/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/insert_select_case/ydb/go/db.go create mode 100644 internal/endtoend/testdata/insert_select_case/ydb/go/models.go create mode 100644 internal/endtoend/testdata/insert_select_case/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/insert_select_case/ydb/query.sql create mode 100644 internal/endtoend/testdata/insert_select_case/ydb/schema.sql create mode 100644 internal/endtoend/testdata/insert_select_case/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/insert_select_param/ydb/go/db.go create mode 100644 internal/endtoend/testdata/insert_select_param/ydb/go/models.go create mode 100644 internal/endtoend/testdata/insert_select_param/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/insert_select_param/ydb/query.sql create mode 100644 internal/endtoend/testdata/insert_select_param/ydb/schema.sql create mode 100644 internal/endtoend/testdata/insert_select_param/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/insert_values_public/ydb/go/db.go create mode 100644 internal/endtoend/testdata/insert_values_public/ydb/go/models.go create mode 100644 internal/endtoend/testdata/insert_values_public/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/insert_values_public/ydb/query.sql create mode 100644 internal/endtoend/testdata/insert_values_public/ydb/schema.sql create mode 100644 internal/endtoend/testdata/insert_values_public/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/interval/ydb/go/db.go create mode 100644 internal/endtoend/testdata/interval/ydb/go/models.go create mode 100644 internal/endtoend/testdata/interval/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/interval/ydb/query.sql create mode 100644 internal/endtoend/testdata/interval/ydb/schema.sql create mode 100644 internal/endtoend/testdata/interval/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/join_left_same_table/ydb/go/db.go create mode 100644 internal/endtoend/testdata/join_left_same_table/ydb/go/models.go create mode 100644 internal/endtoend/testdata/join_left_same_table/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/join_left_same_table/ydb/query.sql create mode 100644 internal/endtoend/testdata/join_left_same_table/ydb/schema.sql create mode 100644 internal/endtoend/testdata/join_left_same_table/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/json/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/json/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/json/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/json/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/json/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/json/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/json/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/json/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/json/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/limit/ydb/go/db.go create mode 100644 internal/endtoend/testdata/limit/ydb/go/models.go create mode 100644 internal/endtoend/testdata/limit/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/limit/ydb/query.sql create mode 100644 internal/endtoend/testdata/limit/ydb/schema.sql create mode 100644 internal/endtoend/testdata/limit/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/lower/ydb/go/db.go create mode 100644 internal/endtoend/testdata/lower/ydb/go/models.go create mode 100644 internal/endtoend/testdata/lower/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/lower/ydb/query.sql create mode 100644 internal/endtoend/testdata/lower/ydb/schema.sql create mode 100644 internal/endtoend/testdata/lower/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/lower_switched_order/ydb/go/db.go create mode 100644 internal/endtoend/testdata/lower_switched_order/ydb/go/models.go create mode 100644 internal/endtoend/testdata/lower_switched_order/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/lower_switched_order/ydb/query.sql create mode 100644 internal/endtoend/testdata/lower_switched_order/ydb/schema.sql create mode 100644 internal/endtoend/testdata/lower_switched_order/ydb/sqlc.json diff --git a/internal/codegen/golang/imports.go b/internal/codegen/golang/imports.go index 5f9e587013..fa146f3a62 100644 --- a/internal/codegen/golang/imports.go +++ b/internal/codegen/golang/imports.go @@ -149,6 +149,7 @@ func (i *importer) dbImports() fileImports { var stdlibTypes = map[string]string{ "json.RawMessage": "encoding/json", "time.Time": "time", + "time.Duration": "time", "net.IP": "net", "net.HardwareAddr": "net", "netip.Addr": "net/netip", diff --git a/internal/endtoend/testdata/func_match_types/ydb/query.sql b/internal/endtoend/testdata/func_match_types/ydb/query.sql index 08633c1d25..35833d8fc1 100644 --- a/internal/endtoend/testdata/func_match_types/ydb/query.sql +++ b/internal/endtoend/testdata/func_match_types/ydb/query.sql @@ -2,3 +2,5 @@ SELECT author, Count(title) AS num_books, CAST(Sum(pages) AS Int32) AS total_pages FROM books GROUP BY author; + + diff --git a/internal/endtoend/testdata/func_match_types/ydb/sqlc.json b/internal/endtoend/testdata/func_match_types/ydb/sqlc.json index 257bc9d140..8dc3083c5d 100644 --- a/internal/endtoend/testdata/func_match_types/ydb/sqlc.json +++ b/internal/endtoend/testdata/func_match_types/ydb/sqlc.json @@ -10,3 +10,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/func_return_table/ydb/query.sql b/internal/endtoend/testdata/func_return_table/ydb/query.sql index ff198e0c90..184c63bedd 100644 --- a/internal/endtoend/testdata/func_return_table/ydb/query.sql +++ b/internal/endtoend/testdata/func_return_table/ydb/query.sql @@ -1,2 +1,4 @@ -- name: Foo :one SELECT id, bebra FROM AS_TABLE($table) AS t(id, bebra); + + diff --git a/internal/endtoend/testdata/func_return_table/ydb/schema.sql b/internal/endtoend/testdata/func_return_table/ydb/schema.sql index 6dad1ace3f..4372437cd9 100644 --- a/internal/endtoend/testdata/func_return_table/ydb/schema.sql +++ b/internal/endtoend/testdata/func_return_table/ydb/schema.sql @@ -4,3 +4,5 @@ CREATE TABLE accounts ( password Text NOT NULL, PRIMARY KEY (id) ); + + diff --git a/internal/endtoend/testdata/func_return_table/ydb/sqlc.json b/internal/endtoend/testdata/func_return_table/ydb/sqlc.json index 257bc9d140..8dc3083c5d 100644 --- a/internal/endtoend/testdata/func_return_table/ydb/sqlc.json +++ b/internal/endtoend/testdata/func_return_table/ydb/sqlc.json @@ -10,3 +10,5 @@ } ] } + + diff --git a/internal/endtoend/testdata/having/ydb/go/db.go b/internal/endtoend/testdata/having/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/having/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/having/ydb/go/models.go b/internal/endtoend/testdata/having/ydb/go/models.go new file mode 100644 index 0000000000..857d2a81f2 --- /dev/null +++ b/internal/endtoend/testdata/having/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Weather struct { + City string + TempLo int32 +} diff --git a/internal/endtoend/testdata/having/ydb/go/query.sql.go b/internal/endtoend/testdata/having/ydb/go/query.sql.go new file mode 100644 index 0000000000..f29863cb3b --- /dev/null +++ b/internal/endtoend/testdata/having/ydb/go/query.sql.go @@ -0,0 +1,40 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const coldCities = `-- name: ColdCities :many +SELECT city +FROM weather +GROUP BY city +HAVING Max(temp_lo) < $max_temp +` + +func (q *Queries) ColdCities(ctx context.Context, maxTemp int32) ([]string, error) { + rows, err := q.db.QueryContext(ctx, coldCities, maxTemp) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var city string + if err := rows.Scan(&city); err != nil { + return nil, err + } + items = append(items, city) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/having/ydb/query.sql b/internal/endtoend/testdata/having/ydb/query.sql new file mode 100644 index 0000000000..a447b06fe9 --- /dev/null +++ b/internal/endtoend/testdata/having/ydb/query.sql @@ -0,0 +1,5 @@ +-- name: ColdCities :many +SELECT city +FROM weather +GROUP BY city +HAVING Max(temp_lo) < $max_temp; diff --git a/internal/endtoend/testdata/having/ydb/schema.sql b/internal/endtoend/testdata/having/ydb/schema.sql new file mode 100644 index 0000000000..71cd93e293 --- /dev/null +++ b/internal/endtoend/testdata/having/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE weather ( + city Text NOT NULL, + temp_lo Int32 NOT NULL, + PRIMARY KEY (city, temp_lo) +); + + diff --git a/internal/endtoend/testdata/having/ydb/sqlc.json b/internal/endtoend/testdata/having/ydb/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/having/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/db.go b/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/models.go b/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..962e8d9e66 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID string +} + +type Foo struct { + ID string +} diff --git a/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3d72df8d22 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/stdlib/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const identicalTable = `-- name: IdenticalTable :many +SELECT id FROM foo +` + +func (q *Queries) IdenticalTable(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, identicalTable) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/identical_tables/ydb/stdlib/query.sql b/internal/endtoend/testdata/identical_tables/ydb/stdlib/query.sql new file mode 100644 index 0000000000..cf1b7c7f76 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/stdlib/query.sql @@ -0,0 +1,4 @@ +-- name: IdenticalTable :many +SELECT * FROM foo; + + diff --git a/internal/endtoend/testdata/identical_tables/ydb/stdlib/schema.sql b/internal/endtoend/testdata/identical_tables/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..e639528f7e --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/stdlib/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE foo ( + id Text NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE bar ( + id Text NOT NULL, + PRIMARY KEY (id) +); + + diff --git a/internal/endtoend/testdata/identical_tables/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/identical_tables/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/stdlib/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..962e8d9e66 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID string +} + +type Foo struct { + ID string +} diff --git a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..4714433548 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,45 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const identicalTable = `-- name: IdenticalTable :many +SELECT id FROM foo +` + +func (q *Queries) IdenticalTable(ctx context.Context, opts ...query.ExecuteOption) ([]string, error) { + result, err := q.db.QueryResultSet(ctx, identicalTable, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var id string + if err := row.Scan(&id); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, id) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..cf1b7c7f76 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,4 @@ +-- name: IdenticalTable :many +SELECT * FROM foo; + + diff --git a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..e639528f7e --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE foo ( + id Text NOT NULL, + PRIMARY KEY (id) +); + +CREATE TABLE bar ( + id Text NOT NULL, + PRIMARY KEY (id) +); + + diff --git a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..fa2f163564 --- /dev/null +++ b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/in_union/ydb/go/db.go b/internal/endtoend/testdata/in_union/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/in_union/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/in_union/ydb/go/models.go b/internal/endtoend/testdata/in_union/ydb/go/models.go new file mode 100644 index 0000000000..7d54a419c4 --- /dev/null +++ b/internal/endtoend/testdata/in_union/ydb/go/models.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int32 + Name string + Bio *string +} + +type Book1 struct { + AuthorID int32 + Name *string +} + +type Book2 struct { + AuthorID int32 + Name *string +} diff --git a/internal/endtoend/testdata/in_union/ydb/go/query.sql.go b/internal/endtoend/testdata/in_union/ydb/go/query.sql.go new file mode 100644 index 0000000000..93ed41d0ee --- /dev/null +++ b/internal/endtoend/testdata/in_union/ydb/go/query.sql.go @@ -0,0 +1,38 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAuthors = `-- name: GetAuthors :many +SELECT id, name, bio FROM authors +WHERE id IN (SELECT author_id FROM book1 UNION SELECT author_id FROM book2) +` + +func (q *Queries) GetAuthors(ctx context.Context) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, getAuthors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/in_union/ydb/query.sql b/internal/endtoend/testdata/in_union/ydb/query.sql new file mode 100644 index 0000000000..eb50376d6d --- /dev/null +++ b/internal/endtoend/testdata/in_union/ydb/query.sql @@ -0,0 +1,5 @@ +-- name: GetAuthors :many +SELECT * FROM authors +WHERE id IN (SELECT author_id FROM book1 UNION SELECT author_id FROM book2); + + diff --git a/internal/endtoend/testdata/in_union/ydb/schema.sql b/internal/endtoend/testdata/in_union/ydb/schema.sql new file mode 100644 index 0000000000..666b6cff56 --- /dev/null +++ b/internal/endtoend/testdata/in_union/ydb/schema.sql @@ -0,0 +1,20 @@ +CREATE TABLE authors ( + id Int32, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + +CREATE TABLE book1 ( + author_id Int32, + name Text, + PRIMARY KEY (author_id) +); + +CREATE TABLE book2 ( + author_id Int32, + name Text, + PRIMARY KEY (author_id) +); + + diff --git a/internal/endtoend/testdata/in_union/ydb/sqlc.json b/internal/endtoend/testdata/in_union/ydb/sqlc.json new file mode 100644 index 0000000000..8dc3083c5d --- /dev/null +++ b/internal/endtoend/testdata/in_union/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + + diff --git a/internal/endtoend/testdata/inflection/ydb/go/db.go b/internal/endtoend/testdata/inflection/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/inflection/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/inflection/ydb/go/models.go b/internal/endtoend/testdata/inflection/ydb/go/models.go new file mode 100644 index 0000000000..dc018924d5 --- /dev/null +++ b/internal/endtoend/testdata/inflection/ydb/go/models.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Calorie struct { + ID string +} + +type Campus struct { + ID string +} + +type ProductMetadatum struct { + ID string +} + +type ProductMetum struct { + ID string +} + +type Student struct { + ID string +} diff --git a/internal/endtoend/testdata/inflection/ydb/go/query.sql.go b/internal/endtoend/testdata/inflection/ydb/go/query.sql.go new file mode 100644 index 0000000000..9dc173e9bc --- /dev/null +++ b/internal/endtoend/testdata/inflection/ydb/go/query.sql.go @@ -0,0 +1,145 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getProductMetadata = `-- name: GetProductMetadata :many +SELECT id FROM product_metadata +` + +func (q *Queries) GetProductMetadata(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, getProductMetadata) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listCalories = `-- name: ListCalories :many +SELECT id FROM calories +` + +func (q *Queries) ListCalories(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, listCalories) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listCampuses = `-- name: ListCampuses :many +SELECT id FROM campus +` + +func (q *Queries) ListCampuses(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, listCampuses) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listMetadata = `-- name: ListMetadata :many +SELECT id FROM product_meta +` + +func (q *Queries) ListMetadata(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, listMetadata) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listStudents = `-- name: ListStudents :many +SELECT id FROM students +` + +func (q *Queries) ListStudents(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, listStudents) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/inflection/ydb/query.sql b/internal/endtoend/testdata/inflection/ydb/query.sql new file mode 100644 index 0000000000..447c307bbb --- /dev/null +++ b/internal/endtoend/testdata/inflection/ydb/query.sql @@ -0,0 +1,14 @@ +-- name: ListCampuses :many +SELECT * FROM campus; + +-- name: ListStudents :many +SELECT * FROM students; + +-- name: ListMetadata :many +SELECT * FROM product_meta; + +-- name: ListCalories :many +SELECT * FROM calories; + +-- name: GetProductMetadata :many +SELECT * FROM product_metadata; diff --git a/internal/endtoend/testdata/inflection/ydb/schema.sql b/internal/endtoend/testdata/inflection/ydb/schema.sql new file mode 100644 index 0000000000..a4a98cc84a --- /dev/null +++ b/internal/endtoend/testdata/inflection/ydb/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE campus (id Text NOT NULL, PRIMARY KEY (id)); +CREATE TABLE students (id Text NOT NULL, PRIMARY KEY (id)); +CREATE TABLE product_meta (id Text NOT NULL, PRIMARY KEY (id)); +CREATE TABLE calories (id Text NOT NULL, PRIMARY KEY (id)); +CREATE TABLE product_metadata (id Text NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/inflection/ydb/sqlc.json b/internal/endtoend/testdata/inflection/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/inflection/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/db.go b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/models.go b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/models.go new file mode 100644 index 0000000000..42c15bfccc --- /dev/null +++ b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/models.go @@ -0,0 +1,20 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Name string +} + +type Exclusions struct { + ID int32 + Name string +} + +type MyData struct { + ID int32 + Name string +} diff --git a/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/query.sql.go b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/query.sql.go new file mode 100644 index 0000000000..d3afa916c8 --- /dev/null +++ b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/go/query.sql.go @@ -0,0 +1,77 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const deleteBarByID = `-- name: DeleteBarByID :one +DELETE FROM bars WHERE id = $id RETURNING id, name +` + +func (q *Queries) DeleteBarByID(ctx context.Context, id int32, opts ...query.ExecuteOption) (Bar, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + row, err := q.db.QueryRow(ctx, deleteBarByID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i Bar + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.ID, &i.Name) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const deleteExclusionByID = `-- name: DeleteExclusionByID :one +DELETE FROM exclusions WHERE id = $id RETURNING id, name +` + +func (q *Queries) DeleteExclusionByID(ctx context.Context, id int32, opts ...query.ExecuteOption) (Exclusions, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + row, err := q.db.QueryRow(ctx, deleteExclusionByID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i Exclusions + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.ID, &i.Name) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const deleteMyDataByID = `-- name: DeleteMyDataByID :one +DELETE FROM my_data WHERE id = $id RETURNING id, name +` + +func (q *Queries) DeleteMyDataByID(ctx context.Context, id int32, opts ...query.ExecuteOption) (MyData, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").Int32(id) + row, err := q.db.QueryRow(ctx, deleteMyDataByID, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var i MyData + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.ID, &i.Name) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} diff --git a/internal/endtoend/testdata/inflection_exclude_table_names/ydb/query.sql b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/query.sql new file mode 100644 index 0000000000..3d160a3947 --- /dev/null +++ b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/query.sql @@ -0,0 +1,8 @@ +-- name: DeleteBarByID :one +DELETE FROM bars WHERE id = $id RETURNING id, name; + +-- name: DeleteMyDataByID :one +DELETE FROM my_data WHERE id = $id RETURNING id, name; + +-- name: DeleteExclusionByID :one +DELETE FROM exclusions WHERE id = $id RETURNING id, name; diff --git a/internal/endtoend/testdata/inflection_exclude_table_names/ydb/schema.sql b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/schema.sql new file mode 100644 index 0000000000..302c720b56 --- /dev/null +++ b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE bars (id Serial NOT NULL, name Text NOT NULL, PRIMARY KEY (id)); +CREATE TABLE my_data (id Serial NOT NULL, name Text NOT NULL, PRIMARY KEY (id)); +CREATE TABLE exclusions (id Serial NOT NULL, name Text NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/inflection_exclude_table_names/ydb/sqlc.json b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/sqlc.json new file mode 100644 index 0000000000..7b9622d67d --- /dev/null +++ b/internal/endtoend/testdata/inflection_exclude_table_names/ydb/sqlc.json @@ -0,0 +1,21 @@ +{ + "version": "2", + "sql": [ + { + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "gen": { + "go": { + "package": "querytest", + "sql_package": "ydb-go-sdk", + "out": "go", + "inflection_exclude_table_names": [ + "my_data", + "exclusions" + ] + } + } + } + ] +} diff --git a/internal/endtoend/testdata/insert_select_case/ydb/go/db.go b/internal/endtoend/testdata/insert_select_case/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_case/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/insert_select_case/ydb/go/models.go b/internal/endtoend/testdata/insert_select_case/ydb/go/models.go new file mode 100644 index 0000000000..af16b72d5f --- /dev/null +++ b/internal/endtoend/testdata/insert_select_case/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Order struct { + ID int64 + Name *string +} diff --git a/internal/endtoend/testdata/insert_select_case/ydb/go/query.sql.go b/internal/endtoend/testdata/insert_select_case/ydb/go/query.sql.go new file mode 100644 index 0000000000..5641387ab1 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_case/ydb/go/query.sql.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const insertOrders = `-- name: InsertOrders :exec +INSERT INTO orders (id, name) +SELECT id, CASE WHEN CAST($name_do_update AS Bool) THEN $name ELSE s.name END AS name +FROM orders s +` + +type InsertOrdersParams struct { + NameDoUpdate bool + Name *string +} + +func (q *Queries) InsertOrders(ctx context.Context, arg InsertOrdersParams) error { + _, err := q.db.ExecContext(ctx, insertOrders, arg.NameDoUpdate, arg.Name) + return err +} diff --git a/internal/endtoend/testdata/insert_select_case/ydb/query.sql b/internal/endtoend/testdata/insert_select_case/ydb/query.sql new file mode 100644 index 0000000000..bcf75b0524 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_case/ydb/query.sql @@ -0,0 +1,4 @@ +-- name: InsertOrders :exec +INSERT INTO orders (id, name) +SELECT id, CASE WHEN CAST($name_do_update AS Bool) THEN $name ELSE s.name END AS name +FROM orders s; diff --git a/internal/endtoend/testdata/insert_select_case/ydb/schema.sql b/internal/endtoend/testdata/insert_select_case/ydb/schema.sql new file mode 100644 index 0000000000..3282c32f67 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_case/ydb/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE orders( + id BigSerial, + name Text, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/insert_select_case/ydb/sqlc.json b/internal/endtoend/testdata/insert_select_case/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_case/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/insert_select_param/ydb/go/db.go b/internal/endtoend/testdata/insert_select_param/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_param/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/insert_select_param/ydb/go/models.go b/internal/endtoend/testdata/insert_select_param/ydb/go/models.go new file mode 100644 index 0000000000..93e9ce7933 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_param/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string +} diff --git a/internal/endtoend/testdata/insert_select_param/ydb/go/query.sql.go b/internal/endtoend/testdata/insert_select_param/ydb/go/query.sql.go new file mode 100644 index 0000000000..714e7cdb97 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_param/ydb/go/query.sql.go @@ -0,0 +1,27 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const insertSelect = `-- name: InsertSelect :exec +INSERT INTO authors (id, name, bio) +SELECT $id, a.name, a.bio +FROM authors a +WHERE a.name = $name +` + +type InsertSelectParams struct { + ID int64 + Name string +} + +func (q *Queries) InsertSelect(ctx context.Context, arg InsertSelectParams) error { + _, err := q.db.ExecContext(ctx, insertSelect, arg.ID, arg.Name) + return err +} diff --git a/internal/endtoend/testdata/insert_select_param/ydb/query.sql b/internal/endtoend/testdata/insert_select_param/ydb/query.sql new file mode 100644 index 0000000000..7e5ffbeaaa --- /dev/null +++ b/internal/endtoend/testdata/insert_select_param/ydb/query.sql @@ -0,0 +1,5 @@ +-- name: InsertSelect :exec +INSERT INTO authors (id, name, bio) +SELECT $id, a.name, a.bio +FROM authors a +WHERE a.name = $name; diff --git a/internal/endtoend/testdata/insert_select_param/ydb/schema.sql b/internal/endtoend/testdata/insert_select_param/ydb/schema.sql new file mode 100644 index 0000000000..2ff7655ba6 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_param/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/insert_select_param/ydb/sqlc.json b/internal/endtoend/testdata/insert_select_param/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/insert_select_param/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/insert_values_public/ydb/go/db.go b/internal/endtoend/testdata/insert_values_public/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/insert_values_public/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/insert_values_public/ydb/go/models.go b/internal/endtoend/testdata/insert_values_public/ydb/go/models.go new file mode 100644 index 0000000000..8bdab5abad --- /dev/null +++ b/internal/endtoend/testdata/insert_values_public/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B int32 +} diff --git a/internal/endtoend/testdata/insert_values_public/ydb/go/query.sql.go b/internal/endtoend/testdata/insert_values_public/ydb/go/query.sql.go new file mode 100644 index 0000000000..43064f9bc2 --- /dev/null +++ b/internal/endtoend/testdata/insert_values_public/ydb/go/query.sql.go @@ -0,0 +1,24 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const insertValues = `-- name: InsertValues :exec +INSERT INTO foo (a, b) VALUES ($a, $b) +` + +type InsertValuesParams struct { + A string + B int32 +} + +func (q *Queries) InsertValues(ctx context.Context, arg InsertValuesParams) error { + _, err := q.db.ExecContext(ctx, insertValues, arg.A, arg.B) + return err +} diff --git a/internal/endtoend/testdata/insert_values_public/ydb/query.sql b/internal/endtoend/testdata/insert_values_public/ydb/query.sql new file mode 100644 index 0000000000..0988176f16 --- /dev/null +++ b/internal/endtoend/testdata/insert_values_public/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: InsertValues :exec +INSERT INTO foo (a, b) VALUES ($a, $b); diff --git a/internal/endtoend/testdata/insert_values_public/ydb/schema.sql b/internal/endtoend/testdata/insert_values_public/ydb/schema.sql new file mode 100644 index 0000000000..2aed058e44 --- /dev/null +++ b/internal/endtoend/testdata/insert_values_public/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (a Text, b Int32, PRIMARY KEY (a, b)); diff --git a/internal/endtoend/testdata/insert_values_public/ydb/sqlc.json b/internal/endtoend/testdata/insert_values_public/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/insert_values_public/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/interval/ydb/go/db.go b/internal/endtoend/testdata/interval/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/interval/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/interval/ydb/go/models.go b/internal/endtoend/testdata/interval/ydb/go/models.go new file mode 100644 index 0000000000..47b07d9af1 --- /dev/null +++ b/internal/endtoend/testdata/interval/ydb/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Foo struct { + Bar bool + Interval time.Duration +} diff --git a/internal/endtoend/testdata/interval/ydb/go/query.sql.go b/internal/endtoend/testdata/interval/ydb/go/query.sql.go new file mode 100644 index 0000000000..9e9da6d32c --- /dev/null +++ b/internal/endtoend/testdata/interval/ydb/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const get = `-- name: Get :many +SELECT bar, interval FROM foo LIMIT $limit +` + +func (q *Queries) Get(ctx context.Context, limit uint64) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, get, limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.Bar, &i.Interval); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/interval/ydb/query.sql b/internal/endtoend/testdata/interval/ydb/query.sql new file mode 100644 index 0000000000..b7845cef3d --- /dev/null +++ b/internal/endtoend/testdata/interval/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: Get :many +SELECT bar, interval FROM foo LIMIT $limit; diff --git a/internal/endtoend/testdata/interval/ydb/schema.sql b/internal/endtoend/testdata/interval/ydb/schema.sql new file mode 100644 index 0000000000..70cd6620f1 --- /dev/null +++ b/internal/endtoend/testdata/interval/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (bar Bool NOT NULL, interval Interval NOT NULL, PRIMARY KEY (bar, "interval")); diff --git a/internal/endtoend/testdata/interval/ydb/sqlc.json b/internal/endtoend/testdata/interval/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/interval/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/join_left_same_table/ydb/go/db.go b/internal/endtoend/testdata/join_left_same_table/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/join_left_same_table/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/join_left_same_table/ydb/go/models.go b/internal/endtoend/testdata/join_left_same_table/ydb/go/models.go new file mode 100644 index 0000000000..34f7c06f5e --- /dev/null +++ b/internal/endtoend/testdata/join_left_same_table/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int32 + Name string + ParentID *int32 +} diff --git a/internal/endtoend/testdata/join_left_same_table/ydb/go/query.sql.go b/internal/endtoend/testdata/join_left_same_table/ydb/go/query.sql.go new file mode 100644 index 0000000000..dfc6dea3ab --- /dev/null +++ b/internal/endtoend/testdata/join_left_same_table/ydb/go/query.sql.go @@ -0,0 +1,55 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const allAuthors = `-- name: AllAuthors :many +SELECT a.id, + a.name, + p.id as alias_id, + p.name as alias_name +FROM authors AS a + LEFT JOIN authors AS p + ON (a.parent_id = p.id) +` + +type AllAuthorsRow struct { + ID int32 + Name string + AliasID *int32 + AliasName *string +} + +func (q *Queries) AllAuthors(ctx context.Context) ([]AllAuthorsRow, error) { + rows, err := q.db.QueryContext(ctx, allAuthors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AllAuthorsRow + for rows.Next() { + var i AllAuthorsRow + if err := rows.Scan( + &i.ID, + &i.Name, + &i.AliasID, + &i.AliasName, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/join_left_same_table/ydb/query.sql b/internal/endtoend/testdata/join_left_same_table/ydb/query.sql new file mode 100644 index 0000000000..79daa2dfd5 --- /dev/null +++ b/internal/endtoend/testdata/join_left_same_table/ydb/query.sql @@ -0,0 +1,8 @@ +-- name: AllAuthors :many +SELECT a.id, + a.name, + p.id as alias_id, + p.name as alias_name +FROM authors AS a + LEFT JOIN authors AS p + ON (a.parent_id = p.id); diff --git a/internal/endtoend/testdata/join_left_same_table/ydb/schema.sql b/internal/endtoend/testdata/join_left_same_table/ydb/schema.sql new file mode 100644 index 0000000000..70ede5589b --- /dev/null +++ b/internal/endtoend/testdata/join_left_same_table/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE authors ( + id Int32 NOT NULL, + name Text NOT NULL, + parent_id Int32, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/join_left_same_table/ydb/sqlc.json b/internal/endtoend/testdata/join_left_same_table/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/join_left_same_table/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/json/ydb/stdlib/go/db.go b/internal/endtoend/testdata/json/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/json/ydb/stdlib/go/models.go b/internal/endtoend/testdata/json/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..ef5c3a0328 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/stdlib/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B []byte + C *string + D *[]byte +} diff --git a/internal/endtoend/testdata/json/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/json/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..7144c0f706 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/stdlib/go/query.sql.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const selectFoo = `-- name: SelectFoo :exec +SELECT a, b, c, d FROM foo +` + +func (q *Queries) SelectFoo(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, selectFoo) + return err +} diff --git a/internal/endtoend/testdata/json/ydb/stdlib/query.sql b/internal/endtoend/testdata/json/ydb/stdlib/query.sql new file mode 100644 index 0000000000..a8629cc2ae --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: SelectFoo :exec +SELECT * FROM foo; diff --git a/internal/endtoend/testdata/json/ydb/stdlib/schema.sql b/internal/endtoend/testdata/json/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..06d8b557f4 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/stdlib/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE foo ( + a Json NOT NULL, + b Yson NOT NULL, + c Json, + d Yson, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/json/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/json/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..ef5c3a0328 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B []byte + C *string + D *[]byte +} diff --git a/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..9ff535bf23 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const selectFoo = `-- name: SelectFoo :exec +SELECT a, b, c, d FROM foo +` + +func (q *Queries) SelectFoo(ctx context.Context, opts ...query.ExecuteOption) error { + err := q.db.Exec(ctx, selectFoo, opts...) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/json/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..a8629cc2ae --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: SelectFoo :exec +SELECT * FROM foo; diff --git a/internal/endtoend/testdata/json/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..06d8b557f4 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE foo ( + a Json NOT NULL, + b Yson NOT NULL, + c Json, + d Yson, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/json/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..485a8c1752 --- /dev/null +++ b/internal/endtoend/testdata/json/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "sql_package": "ydb-go-sdk", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/limit/ydb/go/db.go b/internal/endtoend/testdata/limit/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/limit/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/limit/ydb/go/models.go b/internal/endtoend/testdata/limit/ydb/go/models.go new file mode 100644 index 0000000000..04bc70ad65 --- /dev/null +++ b/internal/endtoend/testdata/limit/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar bool +} diff --git a/internal/endtoend/testdata/limit/ydb/go/query.sql.go b/internal/endtoend/testdata/limit/ydb/go/query.sql.go new file mode 100644 index 0000000000..c229c698a2 --- /dev/null +++ b/internal/endtoend/testdata/limit/ydb/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const limitMe = `-- name: LimitMe :many +SELECT bar FROM foo LIMIT $limit +` + +func (q *Queries) LimitMe(ctx context.Context, limit uint64) ([]bool, error) { + rows, err := q.db.QueryContext(ctx, limitMe, limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []bool + for rows.Next() { + var bar bool + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/limit/ydb/query.sql b/internal/endtoend/testdata/limit/ydb/query.sql new file mode 100644 index 0000000000..eee7776f34 --- /dev/null +++ b/internal/endtoend/testdata/limit/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: LimitMe :many +SELECT bar FROM foo LIMIT $limit; diff --git a/internal/endtoend/testdata/limit/ydb/schema.sql b/internal/endtoend/testdata/limit/ydb/schema.sql new file mode 100644 index 0000000000..1c8e454a7f --- /dev/null +++ b/internal/endtoend/testdata/limit/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (bar Bool NOT NULL, PRIMARY KEY (bar)); diff --git a/internal/endtoend/testdata/limit/ydb/sqlc.json b/internal/endtoend/testdata/limit/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/limit/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/lower/ydb/go/db.go b/internal/endtoend/testdata/lower/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/lower/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/lower/ydb/go/models.go b/internal/endtoend/testdata/lower/ydb/go/models.go new file mode 100644 index 0000000000..061b030b06 --- /dev/null +++ b/internal/endtoend/testdata/lower/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + Bat string +} diff --git a/internal/endtoend/testdata/lower/ydb/go/query.sql.go b/internal/endtoend/testdata/lower/ydb/go/query.sql.go new file mode 100644 index 0000000000..d5c1f04d4f --- /dev/null +++ b/internal/endtoend/testdata/lower/ydb/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const lower = `-- name: Lower :many +SELECT bar FROM foo WHERE bar = $bar AND Unicode::ToLower(bat) = $bat_lower +` + +type LowerParams struct { + Bar string + BatLower string +} + +func (q *Queries) Lower(ctx context.Context, arg LowerParams) ([]string, error) { + rows, err := q.db.QueryContext(ctx, lower, arg.Bar, arg.BatLower) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var bar string + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/lower/ydb/query.sql b/internal/endtoend/testdata/lower/ydb/query.sql new file mode 100644 index 0000000000..a4ce95c06e --- /dev/null +++ b/internal/endtoend/testdata/lower/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: Lower :many +SELECT bar FROM foo WHERE bar = $bar AND Unicode::ToLower(bat) = $bat_lower; diff --git a/internal/endtoend/testdata/lower/ydb/schema.sql b/internal/endtoend/testdata/lower/ydb/schema.sql new file mode 100644 index 0000000000..fb51686ecf --- /dev/null +++ b/internal/endtoend/testdata/lower/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (bar Text NOT NULL, bat Text NOT NULL, PRIMARY KEY (bar, bat)); diff --git a/internal/endtoend/testdata/lower/ydb/sqlc.json b/internal/endtoend/testdata/lower/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/lower/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/lower_switched_order/ydb/go/db.go b/internal/endtoend/testdata/lower_switched_order/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/lower_switched_order/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/lower_switched_order/ydb/go/models.go b/internal/endtoend/testdata/lower_switched_order/ydb/go/models.go new file mode 100644 index 0000000000..061b030b06 --- /dev/null +++ b/internal/endtoend/testdata/lower_switched_order/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + Bat string +} diff --git a/internal/endtoend/testdata/lower_switched_order/ydb/go/query.sql.go b/internal/endtoend/testdata/lower_switched_order/ydb/go/query.sql.go new file mode 100644 index 0000000000..7b1fe15945 --- /dev/null +++ b/internal/endtoend/testdata/lower_switched_order/ydb/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const lowerSwitchedOrder = `-- name: LowerSwitchedOrder :many +SELECT bar FROM foo WHERE bar = $bar AND bat = Unicode::ToLower($bat_lower) +` + +type LowerSwitchedOrderParams struct { + Bar string + BatLower string +} + +func (q *Queries) LowerSwitchedOrder(ctx context.Context, arg LowerSwitchedOrderParams) ([]string, error) { + rows, err := q.db.QueryContext(ctx, lowerSwitchedOrder, arg.Bar, arg.BatLower) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var bar string + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/lower_switched_order/ydb/query.sql b/internal/endtoend/testdata/lower_switched_order/ydb/query.sql new file mode 100644 index 0000000000..d8a6cc9a38 --- /dev/null +++ b/internal/endtoend/testdata/lower_switched_order/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: LowerSwitchedOrder :many +SELECT bar FROM foo WHERE bar = $bar AND bat = Unicode::ToLower($bat_lower); diff --git a/internal/endtoend/testdata/lower_switched_order/ydb/schema.sql b/internal/endtoend/testdata/lower_switched_order/ydb/schema.sql new file mode 100644 index 0000000000..fb51686ecf --- /dev/null +++ b/internal/endtoend/testdata/lower_switched_order/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (bar Text NOT NULL, bat Text NOT NULL, PRIMARY KEY (bar, bat)); diff --git a/internal/endtoend/testdata/lower_switched_order/ydb/sqlc.json b/internal/endtoend/testdata/lower_switched_order/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/lower_switched_order/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From ee9b9181dc35e0db75c4327d599a9286826b3b76 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Wed, 22 Oct 2025 18:41:54 +0300 Subject: [PATCH 16/26] MORE TESTS --- .../mathmatical_operator/ydb/go/db.go | 31 ++++++++++ .../mathmatical_operator/ydb/go/models.go | 9 +++ .../mathmatical_operator/ydb/go/query.sql.go | 42 +++++++++++++ .../mathmatical_operator/ydb/query.sql | 2 + .../mathmatical_operator/ydb/schema.sql | 1 + .../mathmatical_operator/ydb/sqlc.json | 12 ++++ .../testdata/min_max_date/ydb/go/db.go | 31 ++++++++++ .../testdata/min_max_date/ydb/go/models.go | 14 +++++ .../testdata/min_max_date/ydb/go/query.sql.go | 32 ++++++++++ .../testdata/min_max_date/ydb/query.sql | 6 ++ .../testdata/min_max_date/ydb/schema.sql | 5 ++ .../testdata/min_max_date/ydb/sqlc.json | 12 ++++ .../testdata/mix_param_types/ydb/go/db.go | 31 ++++++++++ .../testdata/mix_param_types/ydb/go/models.go | 11 ++++ .../mix_param_types/ydb/go/test.sql.go | 60 +++++++++++++++++++ .../testdata/mix_param_types/ydb/schema.sql | 6 ++ .../testdata/mix_param_types/ydb/sqlc.json | 12 ++++ .../testdata/mix_param_types/ydb/test.sql | 8 +++ .../testdata/nested_select/ydb/go/db.go | 31 ++++++++++ .../testdata/nested_select/ydb/go/models.go | 11 ++++ .../nested_select/ydb/go/query.sql.go | 39 ++++++++++++ .../testdata/nested_select/ydb/query.sql | 10 ++++ .../testdata/nested_select/ydb/schema.sql | 6 ++ .../testdata/nested_select/ydb/sqlc.json | 12 ++++ 24 files changed, 434 insertions(+) create mode 100644 internal/endtoend/testdata/mathmatical_operator/ydb/go/db.go create mode 100644 internal/endtoend/testdata/mathmatical_operator/ydb/go/models.go create mode 100644 internal/endtoend/testdata/mathmatical_operator/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/mathmatical_operator/ydb/query.sql create mode 100644 internal/endtoend/testdata/mathmatical_operator/ydb/schema.sql create mode 100644 internal/endtoend/testdata/mathmatical_operator/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/min_max_date/ydb/go/db.go create mode 100644 internal/endtoend/testdata/min_max_date/ydb/go/models.go create mode 100644 internal/endtoend/testdata/min_max_date/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/min_max_date/ydb/query.sql create mode 100644 internal/endtoend/testdata/min_max_date/ydb/schema.sql create mode 100644 internal/endtoend/testdata/min_max_date/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/mix_param_types/ydb/go/db.go create mode 100644 internal/endtoend/testdata/mix_param_types/ydb/go/models.go create mode 100644 internal/endtoend/testdata/mix_param_types/ydb/go/test.sql.go create mode 100644 internal/endtoend/testdata/mix_param_types/ydb/schema.sql create mode 100644 internal/endtoend/testdata/mix_param_types/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/mix_param_types/ydb/test.sql create mode 100644 internal/endtoend/testdata/nested_select/ydb/go/db.go create mode 100644 internal/endtoend/testdata/nested_select/ydb/go/models.go create mode 100644 internal/endtoend/testdata/nested_select/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/nested_select/ydb/query.sql create mode 100644 internal/endtoend/testdata/nested_select/ydb/schema.sql create mode 100644 internal/endtoend/testdata/nested_select/ydb/sqlc.json diff --git a/internal/endtoend/testdata/mathmatical_operator/ydb/go/db.go b/internal/endtoend/testdata/mathmatical_operator/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/mathmatical_operator/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/mathmatical_operator/ydb/go/models.go b/internal/endtoend/testdata/mathmatical_operator/ydb/go/models.go new file mode 100644 index 0000000000..8a66a8cf24 --- /dev/null +++ b/internal/endtoend/testdata/mathmatical_operator/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Num int32 +} diff --git a/internal/endtoend/testdata/mathmatical_operator/ydb/go/query.sql.go b/internal/endtoend/testdata/mathmatical_operator/ydb/go/query.sql.go new file mode 100644 index 0000000000..20064cca04 --- /dev/null +++ b/internal/endtoend/testdata/mathmatical_operator/ydb/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const math = `-- name: Math :many +SELECT num, num / 1024 AS division FROM foo +` + +type MathRow struct { + Num int32 + Division int32 +} + +func (q *Queries) Math(ctx context.Context) ([]MathRow, error) { + rows, err := q.db.QueryContext(ctx, math) + if err != nil { + return nil, err + } + defer rows.Close() + var items []MathRow + for rows.Next() { + var i MathRow + if err := rows.Scan(&i.Num, &i.Division); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/mathmatical_operator/ydb/query.sql b/internal/endtoend/testdata/mathmatical_operator/ydb/query.sql new file mode 100644 index 0000000000..62fec765cd --- /dev/null +++ b/internal/endtoend/testdata/mathmatical_operator/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: Math :many +SELECT *, num / 1024 AS division FROM foo; diff --git a/internal/endtoend/testdata/mathmatical_operator/ydb/schema.sql b/internal/endtoend/testdata/mathmatical_operator/ydb/schema.sql new file mode 100644 index 0000000000..995f0a34b3 --- /dev/null +++ b/internal/endtoend/testdata/mathmatical_operator/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE foo (num Int32 NOT NULL, PRIMARY KEY (num)); diff --git a/internal/endtoend/testdata/mathmatical_operator/ydb/sqlc.json b/internal/endtoend/testdata/mathmatical_operator/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/mathmatical_operator/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/min_max_date/ydb/go/db.go b/internal/endtoend/testdata/min_max_date/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/min_max_date/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/min_max_date/ydb/go/models.go b/internal/endtoend/testdata/min_max_date/ydb/go/models.go new file mode 100644 index 0000000000..afe5257532 --- /dev/null +++ b/internal/endtoend/testdata/min_max_date/ydb/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Activity struct { + AccountID int64 + EventTime time.Time +} diff --git a/internal/endtoend/testdata/min_max_date/ydb/go/query.sql.go b/internal/endtoend/testdata/min_max_date/ydb/go/query.sql.go new file mode 100644 index 0000000000..f3579ba64b --- /dev/null +++ b/internal/endtoend/testdata/min_max_date/ydb/go/query.sql.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "time" +) + +const activityStats = `-- name: ActivityStats :one +SELECT COUNT(*) AS NumOfActivities, + CAST(MIN(event_time) AS Timestamp) AS MinDate, + CAST(MAX(event_time) AS Timestamp) AS MaxDate +FROM activities +WHERE account_id = $account_id +` + +type ActivityStatsRow struct { + Numofactivities uint64 + Mindate time.Time + Maxdate time.Time +} + +func (q *Queries) ActivityStats(ctx context.Context, accountID int64) (ActivityStatsRow, error) { + row := q.db.QueryRowContext(ctx, activityStats, accountID) + var i ActivityStatsRow + err := row.Scan(&i.Numofactivities, &i.Mindate, &i.Maxdate) + return i, err +} diff --git a/internal/endtoend/testdata/min_max_date/ydb/query.sql b/internal/endtoend/testdata/min_max_date/ydb/query.sql new file mode 100644 index 0000000000..fc97dd18c2 --- /dev/null +++ b/internal/endtoend/testdata/min_max_date/ydb/query.sql @@ -0,0 +1,6 @@ +-- name: ActivityStats :one +SELECT COUNT(*) AS NumOfActivities, + CAST(MIN(event_time) AS Timestamp) AS MinDate, + CAST(MAX(event_time) AS Timestamp) AS MaxDate +FROM activities +WHERE account_id = $account_id; diff --git a/internal/endtoend/testdata/min_max_date/ydb/schema.sql b/internal/endtoend/testdata/min_max_date/ydb/schema.sql new file mode 100644 index 0000000000..dc409aa583 --- /dev/null +++ b/internal/endtoend/testdata/min_max_date/ydb/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE activities ( + account_id Int64 NOT NULL, + event_time Timestamp NOT NULL, + PRIMARY KEY (account_id, event_time) +); diff --git a/internal/endtoend/testdata/min_max_date/ydb/sqlc.json b/internal/endtoend/testdata/min_max_date/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/min_max_date/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/mix_param_types/ydb/go/db.go b/internal/endtoend/testdata/mix_param_types/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/mix_param_types/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/mix_param_types/ydb/go/models.go b/internal/endtoend/testdata/mix_param_types/ydb/go/models.go new file mode 100644 index 0000000000..2f0803b319 --- /dev/null +++ b/internal/endtoend/testdata/mix_param_types/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + ID int32 + Name string + Phone string +} diff --git a/internal/endtoend/testdata/mix_param_types/ydb/go/test.sql.go b/internal/endtoend/testdata/mix_param_types/ydb/go/test.sql.go new file mode 100644 index 0000000000..73bc8daf42 --- /dev/null +++ b/internal/endtoend/testdata/mix_param_types/ydb/go/test.sql.go @@ -0,0 +1,60 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: test.sql + +package querytest + +import ( + "context" +) + +const countOne = `-- name: CountOne :one +SELECT COUNT(1) FROM bar WHERE id = $id AND name <> $name LIMIT $limit +` + +type CountOneParams struct { + ID int32 + Name string + Limit uint64 +} + +func (q *Queries) CountOne(ctx context.Context, arg CountOneParams) (uint64, error) { + row := q.db.QueryRowContext(ctx, countOne, arg.ID, arg.Name, arg.Limit) + var count uint64 + err := row.Scan(&count) + return count, err +} + +const countThree = `-- name: CountThree :one +SELECT COUNT(1) FROM bar WHERE id > $id_gt AND phone <> $phone AND name <> $name +` + +type CountThreeParams struct { + IDGt int32 + Phone string + Name string +} + +func (q *Queries) CountThree(ctx context.Context, arg CountThreeParams) (uint64, error) { + row := q.db.QueryRowContext(ctx, countThree, arg.IDGt, arg.Phone, arg.Name) + var count uint64 + err := row.Scan(&count) + return count, err +} + +const countTwo = `-- name: CountTwo :one +SELECT COUNT(1) FROM bar WHERE id = $id AND name <> $name +` + +type CountTwoParams struct { + ID int32 + Name string +} + +func (q *Queries) CountTwo(ctx context.Context, arg CountTwoParams) (uint64, error) { + row := q.db.QueryRowContext(ctx, countTwo, arg.ID, arg.Name) + var count uint64 + err := row.Scan(&count) + return count, err +} diff --git a/internal/endtoend/testdata/mix_param_types/ydb/schema.sql b/internal/endtoend/testdata/mix_param_types/ydb/schema.sql new file mode 100644 index 0000000000..7c5ef08b37 --- /dev/null +++ b/internal/endtoend/testdata/mix_param_types/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE bar ( + id Serial NOT NULL, + name Text NOT NULL, + phone Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/mix_param_types/ydb/sqlc.json b/internal/endtoend/testdata/mix_param_types/ydb/sqlc.json new file mode 100644 index 0000000000..f4d7ebb36e --- /dev/null +++ b/internal/endtoend/testdata/mix_param_types/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "test.sql" + } + ] +} diff --git a/internal/endtoend/testdata/mix_param_types/ydb/test.sql b/internal/endtoend/testdata/mix_param_types/ydb/test.sql new file mode 100644 index 0000000000..15f8f0378f --- /dev/null +++ b/internal/endtoend/testdata/mix_param_types/ydb/test.sql @@ -0,0 +1,8 @@ +-- name: CountOne :one +SELECT COUNT(1) FROM bar WHERE id = $id AND name <> $name LIMIT $limit; + +-- name: CountTwo :one +SELECT COUNT(1) FROM bar WHERE id = $id AND name <> $name; + +-- name: CountThree :one +SELECT COUNT(1) FROM bar WHERE id > $id_gt AND phone <> $phone AND name <> $name; diff --git a/internal/endtoend/testdata/nested_select/ydb/go/db.go b/internal/endtoend/testdata/nested_select/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/nested_select/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/nested_select/ydb/go/models.go b/internal/endtoend/testdata/nested_select/ydb/go/models.go new file mode 100644 index 0000000000..b3f22ae1ba --- /dev/null +++ b/internal/endtoend/testdata/nested_select/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Test struct { + ID int64 + UpdateTime int64 + Count int64 +} diff --git a/internal/endtoend/testdata/nested_select/ydb/go/query.sql.go b/internal/endtoend/testdata/nested_select/ydb/go/query.sql.go new file mode 100644 index 0000000000..c12aa83e48 --- /dev/null +++ b/internal/endtoend/testdata/nested_select/ydb/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const nestedSelect = `-- name: NestedSelect :one +SELECT latest.id, t.count +FROM ( + SELECT id, MAX(update_time) AS update_time + FROM test + WHERE test.id IN $ids + AND test.update_time >= $start_time + GROUP BY id +) latest +INNER JOIN test t USING (id, update_time) +` + +type NestedSelectParams struct { + Ids []int64 + StartTime int64 +} + +type NestedSelectRow struct { + ID int64 + Count int64 +} + +func (q *Queries) NestedSelect(ctx context.Context, arg NestedSelectParams) (NestedSelectRow, error) { + row := q.db.QueryRowContext(ctx, nestedSelect, arg.Ids, arg.StartTime) + var i NestedSelectRow + err := row.Scan(&i.ID, &i.Count) + return i, err +} diff --git a/internal/endtoend/testdata/nested_select/ydb/query.sql b/internal/endtoend/testdata/nested_select/ydb/query.sql new file mode 100644 index 0000000000..08668557ac --- /dev/null +++ b/internal/endtoend/testdata/nested_select/ydb/query.sql @@ -0,0 +1,10 @@ +-- name: NestedSelect :one +SELECT latest.id, t.count +FROM ( + SELECT id, MAX(update_time) AS update_time + FROM test + WHERE test.id IN sqlc.slice(ids) + AND test.update_time >= $start_time + GROUP BY id +) latest +INNER JOIN test t USING (id, update_time); diff --git a/internal/endtoend/testdata/nested_select/ydb/schema.sql b/internal/endtoend/testdata/nested_select/ydb/schema.sql new file mode 100644 index 0000000000..69ca404743 --- /dev/null +++ b/internal/endtoend/testdata/nested_select/ydb/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE test ( + id Int64 NOT NULL, + update_time Int64 NOT NULL, + count Int64 NOT NULL, + PRIMARY KEY (id, update_time) +); diff --git a/internal/endtoend/testdata/nested_select/ydb/sqlc.json b/internal/endtoend/testdata/nested_select/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/nested_select/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From f8cb775b633578a7776c66ddaebde54e4d62e015 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Thu, 23 Oct 2025 18:42:41 +0300 Subject: [PATCH 17/26] Final tests + convert fixes --- .../testdata/min_max_date/ydb/query.sql | 1 + .../testdata/min_max_date/ydb/schema.sql | 1 + .../testdata/min_max_date/ydb/sqlc.json | 1 + .../testdata/mix_param_types/ydb/schema.sql | 1 + .../testdata/mix_param_types/ydb/sqlc.json | 1 + .../testdata/mix_param_types/ydb/test.sql | 1 + .../testdata/nested_select/ydb/query.sql | 1 + .../testdata/nested_select/ydb/schema.sql | 1 + .../testdata/nested_select/ydb/sqlc.json | 1 + .../on_duplicate_key_update/ydb/go/db.go | 31 +++ .../on_duplicate_key_update/ydb/go/models.go | 11 ++ .../ydb/go/query.sql.go | 40 ++++ .../on_duplicate_key_update/ydb/query.sql | 8 + .../on_duplicate_key_update/ydb/schema.sql | 7 + .../on_duplicate_key_update/ydb/sqlc.json | 13 ++ .../testdata/order_by_binds/ydb/go/db.go | 31 +++ .../testdata/order_by_binds/ydb/go/models.go | 11 ++ .../order_by_binds/ydb/go/query.sql.go | 101 ++++++++++ .../testdata/order_by_binds/ydb/query.sql | 14 ++ .../testdata/order_by_binds/ydb/schema.sql | 7 + .../testdata/order_by_binds/ydb/sqlc.json | 13 ++ .../testdata/order_by_union/ydb/go/db.go | 31 +++ .../testdata/order_by_union/ydb/go/models.go | 15 ++ .../order_by_union/ydb/go/query.sql.go | 40 ++++ .../testdata/order_by_union/ydb/query.sql | 6 + .../testdata/order_by_union/ydb/schema.sql | 12 ++ .../testdata/order_by_union/ydb/sqlc.json | 13 ++ .../output_file_names/ydb/go/db_gen.go | 31 +++ .../output_file_names/ydb/go/models_gen.go | 9 + .../output_file_names/ydb/go/querier_gen.go | 15 ++ .../output_file_names/ydb/go/query.sql.go | 37 ++++ .../testdata/output_file_names/ydb/query.sql | 2 + .../testdata/output_file_names/ydb/schema.sql | 1 + .../testdata/output_file_names/ydb/sqlc.json | 18 ++ .../testdata/output_files_suffix/ydb/go/db.go | 31 +++ .../output_files_suffix/ydb/go/models.go | 9 + .../ydb/go/query.sql_gen.go | 37 ++++ .../output_files_suffix/ydb/query.sql | 3 + .../output_files_suffix/ydb/schema.sql | 2 + .../output_files_suffix/ydb/sqlc.json | 14 ++ .../endtoend/testdata/overrides/ydb/go/db.go | 31 +++ .../testdata/overrides/ydb/go/models.go | 15 ++ .../testdata/overrides/ydb/go/query.sql.go | 21 ++ .../endtoend/testdata/overrides/ydb/query.sql | 3 + .../testdata/overrides/ydb/schema.sql | 7 + .../endtoend/testdata/overrides/ydb/sqlc.json | 19 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 11 ++ .../ydb/stdlib/go/query.sql.go | 21 ++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 6 + .../ydb/stdlib/sqlc.json | 28 +++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 11 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 30 +++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 6 + .../ydb/ydb-go-sdk/sqlc.json | 29 +++ .../overrides_go_types/ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 22 +++ .../ydb/stdlib/go/query.sql.go | 46 +++++ .../overrides_go_types/ydb/stdlib/query.sql | 3 + .../overrides_go_types/ydb/stdlib/schema.sql | 10 + .../overrides_go_types/ydb/stdlib/sqlc.json | 63 ++++++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 22 +++ .../ydb/ydb-go-sdk/go/query.sql.go | 58 ++++++ .../ydb/ydb-go-sdk/query.sql | 3 + .../ydb/ydb-go-sdk/schema.sql | 10 + .../ydb/ydb-go-sdk/sqlc.json | 64 ++++++ .../overrides_pointers/ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 18 ++ .../ydb/stdlib/go/query.sql.go | 21 ++ .../overrides_pointers/ydb/stdlib/query.sql | 3 + .../overrides_pointers/ydb/stdlib/schema.sql | 9 + .../overrides_pointers/ydb/stdlib/sqlc.json | 24 +++ .../params_in_nested_func/ydb/db/db.go | 31 +++ .../params_in_nested_func/ydb/db/models.go | 15 ++ .../params_in_nested_func/ydb/db/query.sql.go | 54 +++++ .../params_in_nested_func/ydb/query.sql | 10 + .../params_in_nested_func/ydb/schema.sql | 11 ++ .../params_in_nested_func/ydb/sqlc.yaml | 9 + .../ydb/go/db.go | 31 +++ .../ydb/go/models.go | 10 + .../ydb/go/query.sql.go | 64 ++++++ .../ydb/query.sql | 5 + .../ydb/schema.sql | 5 + .../ydb/sqlc.json | 12 ++ .../testdata/pattern_matching/ydb/go/db.go | 31 +++ .../pattern_matching/ydb/go/models.go | 9 + .../pattern_matching/ydb/go/query.sql.go | 37 ++++ .../testdata/pattern_matching/ydb/query.sql | 2 + .../testdata/pattern_matching/ydb/schema.sql | 4 + .../testdata/pattern_matching/ydb/sqlc.json | 12 ++ .../ydb/go/db.go | 31 +++ .../ydb/go/models.go | 17 ++ .../ydb/go/querier.go | 17 ++ .../ydb/go/query.sql.go | 32 +++ .../ydb/query.sql | 8 + .../ydb/schema.sql | 8 + .../ydb/sqlc.json | 14 ++ .../query_parameter_limit_to_two/ydb/go/db.go | 31 +++ .../ydb/go/models.go | 18 ++ .../ydb/go/query.sql.go | 149 ++++++++++++++ .../ydb/query.sql | 34 ++++ .../ydb/schema.sql | 15 ++ .../ydb/sqlc.json | 13 ++ .../ydb/go/db.go | 31 +++ .../ydb/go/models.go | 12 ++ .../ydb/go/querier.go | 18 ++ .../ydb/go/query.sql.go | 106 ++++++++++ .../ydb/query.sql | 19 ++ .../ydb/schema.sql | 8 + .../ydb/sqlc.json | 14 ++ .../testdata/select_column_cast/ydb/go/db.go | 31 +++ .../select_column_cast/ydb/go/models.go | 9 + .../select_column_cast/ydb/go/query.sql.go | 37 ++++ .../testdata/select_column_cast/ydb/query.sql | 2 + .../select_column_cast/ydb/schema.sql | 4 + .../testdata/select_column_cast/ydb/sqlc.json | 12 ++ .../single_param_conflict/ydb/go/db.go | 31 +++ .../single_param_conflict/ydb/go/models.go | 19 ++ .../single_param_conflict/ydb/go/query.sql.go | 67 +++++++ .../single_param_conflict/ydb/query.sql | 25 +++ .../single_param_conflict/ydb/schema.sql | 13 ++ .../single_param_conflict/ydb/sqlc.json | 12 ++ .../endtoend/testdata/sqlc_arg/ydb/query.sql | 6 + .../testdata/sqlc_arg/ydb/stdlib/go/db.go | 31 +++ .../testdata/sqlc_arg/ydb/stdlib/go/models.go | 9 + .../sqlc_arg/ydb/stdlib/go/query.sql.go | 64 ++++++ .../testdata/sqlc_arg/ydb/stdlib/query.sql | 5 + .../testdata/sqlc_arg/ydb/stdlib/schema.sql | 4 + .../testdata/sqlc_arg/ydb/stdlib/sqlc.json | 12 ++ .../testdata/sqlc_arg/ydb/ydb-go-sdk/go/db.go | 26 +++ .../sqlc_arg/ydb/ydb-go-sdk/go/models.go | 9 + .../sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go | 84 ++++++++ .../sqlc_arg/ydb/ydb-go-sdk/query.sql | 5 + .../sqlc_arg/ydb/ydb-go-sdk/schema.sql | 4 + .../sqlc_arg/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/sqlc_embed/ydb/stdlib/go/db.go | 31 +++ .../sqlc_embed/ydb/stdlib/go/models.go | 17 ++ .../sqlc_embed/ydb/stdlib/go/query.sql.go | 149 ++++++++++++++ .../testdata/sqlc_embed/ydb/stdlib/query.sql | 18 ++ .../testdata/sqlc_embed/ydb/stdlib/schema.sql | 13 ++ .../testdata/sqlc_embed/ydb/stdlib/sqlc.json | 12 ++ .../sqlc_embed/ydb/ydb-go-sdk/go/db.go | 26 +++ .../sqlc_embed/ydb/ydb-go-sdk/go/models.go | 17 ++ .../sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go | 187 ++++++++++++++++++ .../sqlc_embed/ydb/ydb-go-sdk/query.sql | 18 ++ .../sqlc_embed/ydb/ydb-go-sdk/schema.sql | 13 ++ .../sqlc_embed/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/sqlc_narg/ydb/stdlib/go/db.go | 31 +++ .../sqlc_narg/ydb/stdlib/go/models.go | 10 + .../sqlc_narg/ydb/stdlib/go/query.sql.go | 118 +++++++++++ .../testdata/sqlc_narg/ydb/stdlib/query.sql | 11 ++ .../testdata/sqlc_narg/ydb/stdlib/schema.sql | 5 + .../testdata/sqlc_narg/ydb/stdlib/sqlc.json | 12 ++ .../sqlc_narg/ydb/ydb-go-sdk/go/db.go | 26 +++ .../sqlc_narg/ydb/ydb-go-sdk/go/models.go | 10 + .../sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go | 152 ++++++++++++++ .../sqlc_narg/ydb/ydb-go-sdk/query.sql | 11 ++ .../sqlc_narg/ydb/ydb-go-sdk/schema.sql | 5 + .../sqlc_narg/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../star_expansion/ydb/stdlib/go/db.go | 31 +++ .../star_expansion/ydb/stdlib/go/models.go | 10 + .../star_expansion/ydb/stdlib/go/query.sql.go | 80 ++++++++ .../star_expansion/ydb/stdlib/query.sql | 5 + .../star_expansion/ydb/stdlib/schema.sql | 5 + .../star_expansion/ydb/stdlib/sqlc.json | 12 ++ .../star_expansion/ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/query.sql.go | 91 +++++++++ .../star_expansion/ydb/ydb-go-sdk/query.sql | 5 + .../star_expansion/ydb/ydb-go-sdk/schema.sql | 5 + .../star_expansion/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../star_expansion_join/ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 15 ++ .../ydb/stdlib/go/query.sql.go | 49 +++++ .../star_expansion_join/ydb/stdlib/query.sql | 2 + .../star_expansion_join/ydb/stdlib/schema.sql | 11 ++ .../star_expansion_join/ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 15 ++ .../ydb/ydb-go-sdk/go/query.sql.go | 57 ++++++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 11 ++ .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 10 + .../ydb/stdlib/go/query.sql.go | 37 ++++ .../ydb/stdlib/query.sql | 2 + .../ydb/stdlib/schema.sql | 5 + .../ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/query.sql.go | 45 +++++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 5 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../testdata/types_uuid/ydb/stdlib/go/db.go | 31 +++ .../types_uuid/ydb/stdlib/go/models.go | 15 ++ .../types_uuid/ydb/stdlib/go/query.sql.go | 50 +++++ .../testdata/types_uuid/ydb/stdlib/query.sql | 5 + .../testdata/types_uuid/ydb/stdlib/schema.sql | 6 + .../testdata/types_uuid/ydb/stdlib/sqlc.json | 12 ++ .../types_uuid/ydb/ydb-go-sdk/go/db.go | 26 +++ .../types_uuid/ydb/ydb-go-sdk/go/models.go | 15 ++ .../types_uuid/ydb/ydb-go-sdk/go/query.sql.go | 68 +++++++ .../types_uuid/ydb/ydb-go-sdk/query.sql | 5 + .../types_uuid/ydb/ydb-go-sdk/schema.sql | 6 + .../types_uuid/ydb/ydb-go-sdk/sqlc.json | 13 ++ .../update_set_multiple/ydb/stdlib/go/db.go | 31 +++ .../ydb/stdlib/go/models.go | 10 + .../ydb/stdlib/go/query.sql.go | 24 +++ .../update_set_multiple/ydb/stdlib/query.sql | 2 + .../update_set_multiple/ydb/stdlib/schema.sql | 5 + .../update_set_multiple/ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 10 + .../ydb/ydb-go-sdk/go/query.sql.go | 36 ++++ .../ydb/ydb-go-sdk/query.sql | 2 + .../ydb/ydb-go-sdk/schema.sql | 5 + .../ydb/ydb-go-sdk/sqlc.json | 13 ++ .../ydb/stdlib/query.sql | 14 ++ .../ydb/stdlib/schema.sql | 27 +++ .../ydb/stdlib/sqlc.json | 12 ++ .../ydb/ydb-go-sdk/go/db.go | 26 +++ .../ydb/ydb-go-sdk/go/models.go | 35 ++++ .../ydb/ydb-go-sdk/go/query.sql.go | 117 +++++++++++ .../ydb/ydb-go-sdk/query.sql | 14 ++ .../ydb/ydb-go-sdk/schema.sql | 27 +++ .../ydb/ydb-go-sdk/sqlc.json | 13 ++ internal/engine/ydb/convert.go | 10 + internal/engine/ydb/lib/cpp/datetime.go | 7 + internal/engine/ydb/stdlib.go | 1 - 235 files changed, 5249 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/on_duplicate_key_update/ydb/go/db.go create mode 100644 internal/endtoend/testdata/on_duplicate_key_update/ydb/go/models.go create mode 100644 internal/endtoend/testdata/on_duplicate_key_update/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/on_duplicate_key_update/ydb/query.sql create mode 100644 internal/endtoend/testdata/on_duplicate_key_update/ydb/schema.sql create mode 100644 internal/endtoend/testdata/on_duplicate_key_update/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/order_by_binds/ydb/go/db.go create mode 100644 internal/endtoend/testdata/order_by_binds/ydb/go/models.go create mode 100644 internal/endtoend/testdata/order_by_binds/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/order_by_binds/ydb/query.sql create mode 100644 internal/endtoend/testdata/order_by_binds/ydb/schema.sql create mode 100644 internal/endtoend/testdata/order_by_binds/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/order_by_union/ydb/go/db.go create mode 100644 internal/endtoend/testdata/order_by_union/ydb/go/models.go create mode 100644 internal/endtoend/testdata/order_by_union/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/order_by_union/ydb/query.sql create mode 100644 internal/endtoend/testdata/order_by_union/ydb/schema.sql create mode 100644 internal/endtoend/testdata/order_by_union/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/output_file_names/ydb/go/db_gen.go create mode 100644 internal/endtoend/testdata/output_file_names/ydb/go/models_gen.go create mode 100644 internal/endtoend/testdata/output_file_names/ydb/go/querier_gen.go create mode 100644 internal/endtoend/testdata/output_file_names/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/output_file_names/ydb/query.sql create mode 100644 internal/endtoend/testdata/output_file_names/ydb/schema.sql create mode 100644 internal/endtoend/testdata/output_file_names/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/output_files_suffix/ydb/go/db.go create mode 100644 internal/endtoend/testdata/output_files_suffix/ydb/go/models.go create mode 100644 internal/endtoend/testdata/output_files_suffix/ydb/go/query.sql_gen.go create mode 100644 internal/endtoend/testdata/output_files_suffix/ydb/query.sql create mode 100644 internal/endtoend/testdata/output_files_suffix/ydb/schema.sql create mode 100644 internal/endtoend/testdata/output_files_suffix/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/overrides/ydb/go/db.go create mode 100644 internal/endtoend/testdata/overrides/ydb/go/models.go create mode 100644 internal/endtoend/testdata/overrides/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/overrides/ydb/query.sql create mode 100644 internal/endtoend/testdata/overrides/ydb/schema.sql create mode 100644 internal/endtoend/testdata/overrides/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/overrides_pointers/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/overrides_pointers/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/overrides_pointers/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/params_in_nested_func/ydb/db/db.go create mode 100644 internal/endtoend/testdata/params_in_nested_func/ydb/db/models.go create mode 100644 internal/endtoend/testdata/params_in_nested_func/ydb/db/query.sql.go create mode 100644 internal/endtoend/testdata/params_in_nested_func/ydb/query.sql create mode 100644 internal/endtoend/testdata/params_in_nested_func/ydb/schema.sql create mode 100644 internal/endtoend/testdata/params_in_nested_func/ydb/sqlc.yaml create mode 100644 internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/db.go create mode 100644 internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/models.go create mode 100644 internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/query.sql create mode 100644 internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/schema.sql create mode 100644 internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/pattern_matching/ydb/go/db.go create mode 100644 internal/endtoend/testdata/pattern_matching/ydb/go/models.go create mode 100644 internal/endtoend/testdata/pattern_matching/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/pattern_matching/ydb/query.sql create mode 100644 internal/endtoend/testdata/pattern_matching/ydb/schema.sql create mode 100644 internal/endtoend/testdata/pattern_matching/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/db.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/models.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/querier.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_param_only/ydb/query.sql create mode 100644 internal/endtoend/testdata/query_parameter_limit_param_only/ydb/schema.sql create mode 100644 internal/endtoend/testdata/query_parameter_limit_param_only/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/db.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/models.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_two/ydb/query.sql create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_two/ydb/schema.sql create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_two/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/db.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/models.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/querier.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/query.sql create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/schema.sql create mode 100644 internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/select_column_cast/ydb/go/db.go create mode 100644 internal/endtoend/testdata/select_column_cast/ydb/go/models.go create mode 100644 internal/endtoend/testdata/select_column_cast/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/select_column_cast/ydb/query.sql create mode 100644 internal/endtoend/testdata/select_column_cast/ydb/schema.sql create mode 100644 internal/endtoend/testdata/select_column_cast/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/single_param_conflict/ydb/go/db.go create mode 100644 internal/endtoend/testdata/single_param_conflict/ydb/go/models.go create mode 100644 internal/endtoend/testdata/single_param_conflict/ydb/go/query.sql.go create mode 100644 internal/endtoend/testdata/single_param_conflict/ydb/query.sql create mode 100644 internal/endtoend/testdata/single_param_conflict/ydb/schema.sql create mode 100644 internal/endtoend/testdata/single_param_conflict/ydb/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/query.sql create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/star_expansion/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/star_expansion/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/star_expansion/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/star_expansion/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/star_expansion/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/star_expansion/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/types_uuid/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/types_uuid/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/types_uuid/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/db.go create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/models.go create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json diff --git a/internal/endtoend/testdata/min_max_date/ydb/query.sql b/internal/endtoend/testdata/min_max_date/ydb/query.sql index fc97dd18c2..abfb18e8cb 100644 --- a/internal/endtoend/testdata/min_max_date/ydb/query.sql +++ b/internal/endtoend/testdata/min_max_date/ydb/query.sql @@ -4,3 +4,4 @@ SELECT COUNT(*) AS NumOfActivities, CAST(MAX(event_time) AS Timestamp) AS MaxDate FROM activities WHERE account_id = $account_id; + diff --git a/internal/endtoend/testdata/min_max_date/ydb/schema.sql b/internal/endtoend/testdata/min_max_date/ydb/schema.sql index dc409aa583..e927d59752 100644 --- a/internal/endtoend/testdata/min_max_date/ydb/schema.sql +++ b/internal/endtoend/testdata/min_max_date/ydb/schema.sql @@ -3,3 +3,4 @@ CREATE TABLE activities ( event_time Timestamp NOT NULL, PRIMARY KEY (account_id, event_time) ); + diff --git a/internal/endtoend/testdata/min_max_date/ydb/sqlc.json b/internal/endtoend/testdata/min_max_date/ydb/sqlc.json index 257bc9d140..3e245cf4a5 100644 --- a/internal/endtoend/testdata/min_max_date/ydb/sqlc.json +++ b/internal/endtoend/testdata/min_max_date/ydb/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/mix_param_types/ydb/schema.sql b/internal/endtoend/testdata/mix_param_types/ydb/schema.sql index 7c5ef08b37..50f75de4d5 100644 --- a/internal/endtoend/testdata/mix_param_types/ydb/schema.sql +++ b/internal/endtoend/testdata/mix_param_types/ydb/schema.sql @@ -4,3 +4,4 @@ CREATE TABLE bar ( phone Text NOT NULL, PRIMARY KEY (id) ); + diff --git a/internal/endtoend/testdata/mix_param_types/ydb/sqlc.json b/internal/endtoend/testdata/mix_param_types/ydb/sqlc.json index f4d7ebb36e..773da22c68 100644 --- a/internal/endtoend/testdata/mix_param_types/ydb/sqlc.json +++ b/internal/endtoend/testdata/mix_param_types/ydb/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/mix_param_types/ydb/test.sql b/internal/endtoend/testdata/mix_param_types/ydb/test.sql index 15f8f0378f..ba70955e54 100644 --- a/internal/endtoend/testdata/mix_param_types/ydb/test.sql +++ b/internal/endtoend/testdata/mix_param_types/ydb/test.sql @@ -6,3 +6,4 @@ SELECT COUNT(1) FROM bar WHERE id = $id AND name <> $name; -- name: CountThree :one SELECT COUNT(1) FROM bar WHERE id > $id_gt AND phone <> $phone AND name <> $name; + diff --git a/internal/endtoend/testdata/nested_select/ydb/query.sql b/internal/endtoend/testdata/nested_select/ydb/query.sql index 08668557ac..8121c59e1e 100644 --- a/internal/endtoend/testdata/nested_select/ydb/query.sql +++ b/internal/endtoend/testdata/nested_select/ydb/query.sql @@ -8,3 +8,4 @@ FROM ( GROUP BY id ) latest INNER JOIN test t USING (id, update_time); + diff --git a/internal/endtoend/testdata/nested_select/ydb/schema.sql b/internal/endtoend/testdata/nested_select/ydb/schema.sql index 69ca404743..11b66bf3b0 100644 --- a/internal/endtoend/testdata/nested_select/ydb/schema.sql +++ b/internal/endtoend/testdata/nested_select/ydb/schema.sql @@ -4,3 +4,4 @@ CREATE TABLE test ( count Int64 NOT NULL, PRIMARY KEY (id, update_time) ); + diff --git a/internal/endtoend/testdata/nested_select/ydb/sqlc.json b/internal/endtoend/testdata/nested_select/ydb/sqlc.json index 257bc9d140..3e245cf4a5 100644 --- a/internal/endtoend/testdata/nested_select/ydb/sqlc.json +++ b/internal/endtoend/testdata/nested_select/ydb/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/db.go b/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/models.go b/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/models.go new file mode 100644 index 0000000000..93e9ce7933 --- /dev/null +++ b/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string +} diff --git a/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/query.sql.go b/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/query.sql.go new file mode 100644 index 0000000000..0ce41ee7d7 --- /dev/null +++ b/internal/endtoend/testdata/on_duplicate_key_update/ydb/go/query.sql.go @@ -0,0 +1,40 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const upsertAuthor = `-- name: UpsertAuthor :exec +UPSERT INTO authors (name, bio) +VALUES ($name, $bio) +` + +type UpsertAuthorParams struct { + Name string + Bio *string +} + +func (q *Queries) UpsertAuthor(ctx context.Context, arg UpsertAuthorParams) error { + _, err := q.db.ExecContext(ctx, upsertAuthor, arg.Name, arg.Bio) + return err +} + +const upsertAuthorNamed = `-- name: UpsertAuthorNamed :exec +UPSERT INTO authors (name, bio) +VALUES ($name, $bio) +` + +type UpsertAuthorNamedParams struct { + Name string + Bio *string +} + +func (q *Queries) UpsertAuthorNamed(ctx context.Context, arg UpsertAuthorNamedParams) error { + _, err := q.db.ExecContext(ctx, upsertAuthorNamed, arg.Name, arg.Bio) + return err +} diff --git a/internal/endtoend/testdata/on_duplicate_key_update/ydb/query.sql b/internal/endtoend/testdata/on_duplicate_key_update/ydb/query.sql new file mode 100644 index 0000000000..54efc099e8 --- /dev/null +++ b/internal/endtoend/testdata/on_duplicate_key_update/ydb/query.sql @@ -0,0 +1,8 @@ +-- name: UpsertAuthor :exec +UPSERT INTO authors (name, bio) +VALUES ($name, $bio); + +-- name: UpsertAuthorNamed :exec +UPSERT INTO authors (name, bio) +VALUES ($name, $bio); + diff --git a/internal/endtoend/testdata/on_duplicate_key_update/ydb/schema.sql b/internal/endtoend/testdata/on_duplicate_key_update/ydb/schema.sql new file mode 100644 index 0000000000..1c99aaacc5 --- /dev/null +++ b/internal/endtoend/testdata/on_duplicate_key_update/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + diff --git a/internal/endtoend/testdata/on_duplicate_key_update/ydb/sqlc.json b/internal/endtoend/testdata/on_duplicate_key_update/ydb/sqlc.json new file mode 100644 index 0000000000..3e245cf4a5 --- /dev/null +++ b/internal/endtoend/testdata/on_duplicate_key_update/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + diff --git a/internal/endtoend/testdata/order_by_binds/ydb/go/db.go b/internal/endtoend/testdata/order_by_binds/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/order_by_binds/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/order_by_binds/ydb/go/models.go b/internal/endtoend/testdata/order_by_binds/ydb/go/models.go new file mode 100644 index 0000000000..93e9ce7933 --- /dev/null +++ b/internal/endtoend/testdata/order_by_binds/ydb/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string +} diff --git a/internal/endtoend/testdata/order_by_binds/ydb/go/query.sql.go b/internal/endtoend/testdata/order_by_binds/ydb/go/query.sql.go new file mode 100644 index 0000000000..2005beff5d --- /dev/null +++ b/internal/endtoend/testdata/order_by_binds/ydb/go/query.sql.go @@ -0,0 +1,101 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const listAuthorsColumnSort = `-- name: ListAuthorsColumnSort :many +SELECT id, name, bio FROM authors +WHERE id > $min_id +ORDER BY CASE WHEN $sort_column = 'name' THEN name END +` + +type ListAuthorsColumnSortParams struct { + MinID int64 + SortColumn interface{} +} + +func (q *Queries) ListAuthorsColumnSort(ctx context.Context, arg ListAuthorsColumnSortParams) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, listAuthorsColumnSort, arg.MinID, arg.SortColumn) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listAuthorsColumnSortFnWtihArg = `-- name: ListAuthorsColumnSortFnWtihArg :many +SELECT id, name, bio FROM authors +ORDER BY Math::mod(id, $mod_arg) +` + +func (q *Queries) ListAuthorsColumnSortFnWtihArg(ctx context.Context, modArg int64) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, listAuthorsColumnSortFnWtihArg, modArg) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listAuthorsNameSort = `-- name: ListAuthorsNameSort :many +SELECT id, name, bio FROM authors +WHERE id > $min_id +ORDER BY name ASC +` + +func (q *Queries) ListAuthorsNameSort(ctx context.Context, minID int64) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, listAuthorsNameSort, minID) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/order_by_binds/ydb/query.sql b/internal/endtoend/testdata/order_by_binds/ydb/query.sql new file mode 100644 index 0000000000..332d2b9a26 --- /dev/null +++ b/internal/endtoend/testdata/order_by_binds/ydb/query.sql @@ -0,0 +1,14 @@ +-- name: ListAuthorsColumnSort :many +SELECT * FROM authors +WHERE id > $min_id +ORDER BY CASE WHEN $sort_column = 'name' THEN name END; + +-- name: ListAuthorsColumnSortFnWtihArg :many +SELECT * FROM authors +ORDER BY Math::mod(id, $mod_arg); + +-- name: ListAuthorsNameSort :many +SELECT * FROM authors +WHERE id > $min_id +ORDER BY name ASC; + diff --git a/internal/endtoend/testdata/order_by_binds/ydb/schema.sql b/internal/endtoend/testdata/order_by_binds/ydb/schema.sql new file mode 100644 index 0000000000..1c99aaacc5 --- /dev/null +++ b/internal/endtoend/testdata/order_by_binds/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + diff --git a/internal/endtoend/testdata/order_by_binds/ydb/sqlc.json b/internal/endtoend/testdata/order_by_binds/ydb/sqlc.json new file mode 100644 index 0000000000..3e245cf4a5 --- /dev/null +++ b/internal/endtoend/testdata/order_by_binds/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + diff --git a/internal/endtoend/testdata/order_by_union/ydb/go/db.go b/internal/endtoend/testdata/order_by_union/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/order_by_union/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/order_by_union/ydb/go/models.go b/internal/endtoend/testdata/order_by_union/ydb/go/models.go new file mode 100644 index 0000000000..f7fc5cab3e --- /dev/null +++ b/internal/endtoend/testdata/order_by_union/ydb/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string +} + +type Person struct { + FirstName string +} diff --git a/internal/endtoend/testdata/order_by_union/ydb/go/query.sql.go b/internal/endtoend/testdata/order_by_union/ydb/go/query.sql.go new file mode 100644 index 0000000000..8c539e7245 --- /dev/null +++ b/internal/endtoend/testdata/order_by_union/ydb/go/query.sql.go @@ -0,0 +1,40 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const listAuthorsUnion = `-- name: ListAuthorsUnion :many +SELECT name AS foo FROM authors +UNION +SELECT first_name AS foo FROM people +ORDER BY foo +` + +func (q *Queries) ListAuthorsUnion(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, listAuthorsUnion) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var foo string + if err := rows.Scan(&foo); err != nil { + return nil, err + } + items = append(items, foo) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/order_by_union/ydb/query.sql b/internal/endtoend/testdata/order_by_union/ydb/query.sql new file mode 100644 index 0000000000..53879ba32d --- /dev/null +++ b/internal/endtoend/testdata/order_by_union/ydb/query.sql @@ -0,0 +1,6 @@ +-- name: ListAuthorsUnion :many +SELECT name AS foo FROM authors +UNION +SELECT first_name AS foo FROM people +ORDER BY foo; + diff --git a/internal/endtoend/testdata/order_by_union/ydb/schema.sql b/internal/endtoend/testdata/order_by_union/ydb/schema.sql new file mode 100644 index 0000000000..becb9404fc --- /dev/null +++ b/internal/endtoend/testdata/order_by_union/ydb/schema.sql @@ -0,0 +1,12 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + +CREATE TABLE people ( + first_name Text NOT NULL, + PRIMARY KEY (first_name) +); + diff --git a/internal/endtoend/testdata/order_by_union/ydb/sqlc.json b/internal/endtoend/testdata/order_by_union/ydb/sqlc.json new file mode 100644 index 0000000000..3e245cf4a5 --- /dev/null +++ b/internal/endtoend/testdata/order_by_union/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} + diff --git a/internal/endtoend/testdata/output_file_names/ydb/go/db_gen.go b/internal/endtoend/testdata/output_file_names/ydb/go/db_gen.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/output_file_names/ydb/go/db_gen.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/output_file_names/ydb/go/models_gen.go b/internal/endtoend/testdata/output_file_names/ydb/go/models_gen.go new file mode 100644 index 0000000000..1e2b476e23 --- /dev/null +++ b/internal/endtoend/testdata/output_file_names/ydb/go/models_gen.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type UserTable struct { + ID int64 +} diff --git a/internal/endtoend/testdata/output_file_names/ydb/go/querier_gen.go b/internal/endtoend/testdata/output_file_names/ydb/go/querier_gen.go new file mode 100644 index 0000000000..8008c65e53 --- /dev/null +++ b/internal/endtoend/testdata/output_file_names/ydb/go/querier_gen.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" +) + +type Querier interface { + User(ctx context.Context) ([]int64, error) +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/output_file_names/ydb/go/query.sql.go b/internal/endtoend/testdata/output_file_names/ydb/go/query.sql.go new file mode 100644 index 0000000000..4e4e3228c6 --- /dev/null +++ b/internal/endtoend/testdata/output_file_names/ydb/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const user = `-- name: User :many +SELECT user_table.id FROM user_table +` + +func (q *Queries) User(ctx context.Context) ([]int64, error) { + rows, err := q.db.QueryContext(ctx, user) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int64 + for rows.Next() { + var id int64 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/output_file_names/ydb/query.sql b/internal/endtoend/testdata/output_file_names/ydb/query.sql new file mode 100644 index 0000000000..4f7333943c --- /dev/null +++ b/internal/endtoend/testdata/output_file_names/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: User :many +SELECT user_table.* FROM user_table; diff --git a/internal/endtoend/testdata/output_file_names/ydb/schema.sql b/internal/endtoend/testdata/output_file_names/ydb/schema.sql new file mode 100644 index 0000000000..0766577d24 --- /dev/null +++ b/internal/endtoend/testdata/output_file_names/ydb/schema.sql @@ -0,0 +1 @@ +CREATE TABLE user_table (id BigSerial NOT NULL, PRIMARY KEY (id)); diff --git a/internal/endtoend/testdata/output_file_names/ydb/sqlc.json b/internal/endtoend/testdata/output_file_names/ydb/sqlc.json new file mode 100644 index 0000000000..cc0e0134a7 --- /dev/null +++ b/internal/endtoend/testdata/output_file_names/ydb/sqlc.json @@ -0,0 +1,18 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_interface": true, + "output_db_file_name": "db_gen.go", + "output_models_file_name": "models_gen.go", + "output_querier_file_name": "querier_gen.go", + "output_copyfrom_file_name": "copyfrom_gen.go" + } + ] +} + diff --git a/internal/endtoend/testdata/output_files_suffix/ydb/go/db.go b/internal/endtoend/testdata/output_files_suffix/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/output_files_suffix/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/output_files_suffix/ydb/go/models.go b/internal/endtoend/testdata/output_files_suffix/ydb/go/models.go new file mode 100644 index 0000000000..1e2b476e23 --- /dev/null +++ b/internal/endtoend/testdata/output_files_suffix/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type UserTable struct { + ID int64 +} diff --git a/internal/endtoend/testdata/output_files_suffix/ydb/go/query.sql_gen.go b/internal/endtoend/testdata/output_files_suffix/ydb/go/query.sql_gen.go new file mode 100644 index 0000000000..4e4e3228c6 --- /dev/null +++ b/internal/endtoend/testdata/output_files_suffix/ydb/go/query.sql_gen.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const user = `-- name: User :many +SELECT user_table.id FROM user_table +` + +func (q *Queries) User(ctx context.Context) ([]int64, error) { + rows, err := q.db.QueryContext(ctx, user) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int64 + for rows.Next() { + var id int64 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/output_files_suffix/ydb/query.sql b/internal/endtoend/testdata/output_files_suffix/ydb/query.sql new file mode 100644 index 0000000000..96756b4bf9 --- /dev/null +++ b/internal/endtoend/testdata/output_files_suffix/ydb/query.sql @@ -0,0 +1,3 @@ +-- name: User :many +SELECT user_table.* FROM user_table; + diff --git a/internal/endtoend/testdata/output_files_suffix/ydb/schema.sql b/internal/endtoend/testdata/output_files_suffix/ydb/schema.sql new file mode 100644 index 0000000000..8cb0cc766e --- /dev/null +++ b/internal/endtoend/testdata/output_files_suffix/ydb/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE user_table (id BigSerial NOT NULL, PRIMARY KEY (id)); + diff --git a/internal/endtoend/testdata/output_files_suffix/ydb/sqlc.json b/internal/endtoend/testdata/output_files_suffix/ydb/sqlc.json new file mode 100644 index 0000000000..b3e333b697 --- /dev/null +++ b/internal/endtoend/testdata/output_files_suffix/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "output_files_suffix": "_gen.go" + } + ] +} + diff --git a/internal/endtoend/testdata/overrides/ydb/go/db.go b/internal/endtoend/testdata/overrides/ydb/go/db.go new file mode 100644 index 0000000000..9c19dd4a09 --- /dev/null +++ b/internal/endtoend/testdata/overrides/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/overrides/ydb/go/models.go b/internal/endtoend/testdata/overrides/ydb/go/models.go new file mode 100644 index 0000000000..e6ba74a5a0 --- /dev/null +++ b/internal/endtoend/testdata/overrides/ydb/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + "github.com/sqlc-dev/sqlc-testdata/pkg" +) + +type Foo struct { + Other string + Total int64 + Retyped pkg.CustomType +} diff --git a/internal/endtoend/testdata/overrides/ydb/go/query.sql.go b/internal/endtoend/testdata/overrides/ydb/go/query.sql.go new file mode 100644 index 0000000000..0faba2cde4 --- /dev/null +++ b/internal/endtoend/testdata/overrides/ydb/go/query.sql.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package override + +import ( + "context" +) + +const test = `-- name: Test :one +SELECT 1 +` + +func (q *Queries) Test(ctx context.Context) (int32, error) { + row := q.db.QueryRowContext(ctx, test) + var column_1 int32 + err := row.Scan(&column_1) + return column_1, err +} diff --git a/internal/endtoend/testdata/overrides/ydb/query.sql b/internal/endtoend/testdata/overrides/ydb/query.sql new file mode 100644 index 0000000000..f25a508451 --- /dev/null +++ b/internal/endtoend/testdata/overrides/ydb/query.sql @@ -0,0 +1,3 @@ +-- name: Test :one +SELECT 1; + diff --git a/internal/endtoend/testdata/overrides/ydb/schema.sql b/internal/endtoend/testdata/overrides/ydb/schema.sql new file mode 100644 index 0000000000..a9d8a78142 --- /dev/null +++ b/internal/endtoend/testdata/overrides/ydb/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE foo ( + other Text, + total Int64, + retyped Text, + PRIMARY KEY (other, total, retyped) +); + diff --git a/internal/endtoend/testdata/overrides/ydb/sqlc.json b/internal/endtoend/testdata/overrides/ydb/sqlc.json new file mode 100644 index 0000000000..ee8e61cbf4 --- /dev/null +++ b/internal/endtoend/testdata/overrides/ydb/sqlc.json @@ -0,0 +1,19 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "override", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "overrides": [ + { + "go_type": "github.com/sqlc-dev/sqlc-testdata/pkg.CustomType", + "column": "foo.retyped" + } + ] + } + ] +} + diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/db.go b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..9c19dd4a09 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/models.go b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..06ef973c29 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +type Foo struct { + ID string `utype:"notnull_text" x:"y"` + OtherID string `utype:"nullable_text"` + Notnulltext string `utype:"notnull_text"` +} diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..0faba2cde4 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/go/query.sql.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package override + +import ( + "context" +) + +const test = `-- name: Test :one +SELECT 1 +` + +func (q *Queries) Test(ctx context.Context) (int32, error) { + row := q.db.QueryRowContext(ctx, test) + var column_1 int32 + err := row.Scan(&column_1) + return column_1, err +} diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/query.sql b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/query.sql new file mode 100644 index 0000000000..9da604b57e --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: Test :one +SELECT 1; diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/schema.sql b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..da46a1f46c --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE foo ( + id Text, + other_id Text, + notnulltext Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..3e71c81237 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/stdlib/sqlc.json @@ -0,0 +1,28 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "override", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "overrides": [ + { + "column": "foo.id", + "go_struct_tag": "x:\"y\"" + }, + { + "db_type": "Text", + "go_struct_tag": "utype:\"notnull_text\"" + }, + { + "db_type": "Text", + "go_type": "string", + "nullable": true, + "go_struct_tag": "utype:\"nullable_text\"" + } + ] + } + ] +} diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..060435891a --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..06ef973c29 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +type Foo struct { + ID string `utype:"notnull_text" x:"y"` + OtherID string `utype:"nullable_text"` + Notnulltext string `utype:"notnull_text"` +} diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..6cc951bc6c --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package override + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const test = `-- name: Test :one +SELECT 1 +` + +func (q *Queries) Test(ctx context.Context, opts ...query.ExecuteOption) (int32, error) { + row, err := q.db.QueryRow(ctx, test, opts...) + var column_1 int32 + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + err = row.Scan(&column_1) + if err != nil { + return column_1, xerrors.WithStackTrace(err) + } + return column_1, nil +} diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..9da604b57e --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: Test :one +SELECT 1; diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..da46a1f46c --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE foo ( + id Text, + other_id Text, + notnulltext Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..8c0b2366bc --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_struct_tags/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,29 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "override", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk", + "overrides": [ + { + "column": "foo.id", + "go_struct_tag": "x:\"y\"" + }, + { + "db_type": "Text", + "go_struct_tag": "utype:\"notnull_text\"" + }, + { + "db_type": "Text", + "go_type": "string", + "nullable": true, + "go_struct_tag": "utype:\"nullable_text\"" + } + ] + } + ] +} diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/db.go b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..9c19dd4a09 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/models.go b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..e86b5539c9 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/models.go @@ -0,0 +1,22 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + orm "database/sql" + "github.com/gofrs/uuid" + fuid "github.com/gofrs/uuid" + null "github.com/volatiletech/null/v8" + null_v4 "gopkg.in/guregu/null.v4" +) + +type Foo struct { + ID uuid.UUID + OtherID fuid.UUID + Age orm.NullInt32 + Balance null.Float32 + Bio null_v4.String + About *string +} diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..8c68b44ba7 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/go/query.sql.go @@ -0,0 +1,46 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package override + +import ( + "context" + + "github.com/gofrs/uuid" +) + +const loadFoo = `-- name: LoadFoo :many +SELECT id, other_id, age, balance, bio, about FROM foo WHERE id = $id +` + +func (q *Queries) LoadFoo(ctx context.Context, id uuid.UUID) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, loadFoo, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan( + &i.ID, + &i.OtherID, + &i.Age, + &i.Balance, + &i.Bio, + &i.About, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/query.sql b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/query.sql new file mode 100644 index 0000000000..8c7fb44672 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/query.sql @@ -0,0 +1,3 @@ +-- name: LoadFoo :many +SELECT * FROM foo WHERE id = $id; + diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/schema.sql b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..d5136ad0a2 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/schema.sql @@ -0,0 +1,10 @@ +CREATE TABLE foo ( + id Uuid NOT NULL, + other_id Uuid NOT NULL, + age Int32, + balance Double, + bio Text, + about Text, + PRIMARY KEY (id) +); + diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..ff3c3ad8f9 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/stdlib/sqlc.json @@ -0,0 +1,63 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "override", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "overrides": [ + { + "column": "foo.id", + "go_type": { + "import": "github.com/gofrs/uuid", + "type": "UUID" + } + }, + { + "column": "foo.other_id", + "go_type": { + "import": "github.com/gofrs/uuid", + "package": "fuid", + "type": "UUID" + } + }, + { + "column": "foo.age", + "nullable": true, + "go_type": { + "import": "database/sql", + "package": "orm", + "type": "NullInt32" + } + }, + { + "column": "foo.balance", + "nullable": true, + "go_type": { + "import": "github.com/volatiletech/null/v8", + "type": "Float32" + } + }, + { + "column": "foo.bio", + "nullable": true, + "go_type": { + "import": "gopkg.in/guregu/null.v4", + "type": "String" + } + }, + { + "column": "foo.about", + "nullable": true, + "go_type": { + "type": "string", + "pointer": true + } + } + ] + } + ] +} + diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..060435891a --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..e86b5539c9 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,22 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + orm "database/sql" + "github.com/gofrs/uuid" + fuid "github.com/gofrs/uuid" + null "github.com/volatiletech/null/v8" + null_v4 "gopkg.in/guregu/null.v4" +) + +type Foo struct { + ID uuid.UUID + OtherID fuid.UUID + Age orm.NullInt32 + Balance null.Float32 + Bio null_v4.String + About *string +} diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..65d0bb87f4 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,58 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package override + +import ( + "context" + "errors" + "io" + + "github.com/gofrs/uuid" + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const loadFoo = `-- name: LoadFoo :many +SELECT id, other_id, age, balance, bio, about FROM foo WHERE id = $id +` + +func (q *Queries) LoadFoo(ctx context.Context, id uuid.UUID, opts ...query.ExecuteOption) ([]Foo, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$id").UUID(id) + result, err := q.db.QueryResultSet(ctx, loadFoo, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan( + &i.ID, + &i.OtherID, + &i.Age, + &i.Balance, + &i.Bio, + &i.About, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..8c7fb44672 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,3 @@ +-- name: LoadFoo :many +SELECT * FROM foo WHERE id = $id; + diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..d5136ad0a2 --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,10 @@ +CREATE TABLE foo ( + id Uuid NOT NULL, + other_id Uuid NOT NULL, + age Int32, + balance Double, + bio Text, + about Text, + PRIMARY KEY (id) +); + diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..a4082583bd --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,64 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "override", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "sql_package": "ydb-go-sdk", + "overrides": [ + { + "column": "foo.id", + "go_type": { + "import": "github.com/gofrs/uuid", + "type": "UUID" + } + }, + { + "column": "foo.other_id", + "go_type": { + "import": "github.com/gofrs/uuid", + "package": "fuid", + "type": "UUID" + } + }, + { + "column": "foo.age", + "nullable": true, + "go_type": { + "import": "database/sql", + "package": "orm", + "type": "NullInt32" + } + }, + { + "column": "foo.balance", + "nullable": true, + "go_type": { + "import": "github.com/volatiletech/null/v8", + "type": "Float32" + } + }, + { + "column": "foo.bio", + "nullable": true, + "go_type": { + "import": "gopkg.in/guregu/null.v4", + "type": "String" + } + }, + { + "column": "foo.about", + "nullable": true, + "go_type": { + "type": "string", + "pointer": true + } + } + ] + } + ] +} + diff --git a/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/db.go b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..9c19dd4a09 --- /dev/null +++ b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/models.go b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..5d3c519a64 --- /dev/null +++ b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/models.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package override + +import ( + t "github.com/jackc/pgtype" +) + +type Foo struct { + Other string + Total int64 + Tags string + ByteSeq []byte + Retyped string + Langs *t.Text +} diff --git a/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3fb15c1110 --- /dev/null +++ b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/go/query.sql.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package override + +import ( + "context" + + t "github.com/jackc/pgtype" +) + +const test = `-- name: test :exec +UPDATE foo SET langs = $langs +` + +func (q *Queries) test(ctx context.Context, langs *t.Text) error { + _, err := q.db.ExecContext(ctx, test, langs) + return err +} diff --git a/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/query.sql b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/query.sql new file mode 100644 index 0000000000..445ed8ad8d --- /dev/null +++ b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/query.sql @@ -0,0 +1,3 @@ +-- name: test :exec +UPDATE foo SET langs = $langs; + diff --git a/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/schema.sql b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..dd551c5426 --- /dev/null +++ b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/schema.sql @@ -0,0 +1,9 @@ +CREATE TABLE foo ( + other Text NOT NULL, + total Int64 NOT NULL, + tags Text NOT NULL, + byte_seq String NOT NULL, + retyped Text NOT NULL, + langs Text, + PRIMARY KEY (other, total) +); diff --git a/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..0d2cfbfc3f --- /dev/null +++ b/internal/endtoend/testdata/overrides_pointers/ydb/stdlib/sqlc.json @@ -0,0 +1,24 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "override", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "overrides": [ + { + "go_type": { + "import": "github.com/jackc/pgtype", + "type": "Text", + "package": "t", + "pointer": true + }, + "column": "foo.langs" + } + ] + } + ] +} + diff --git a/internal/endtoend/testdata/params_in_nested_func/ydb/db/db.go b/internal/endtoend/testdata/params_in_nested_func/ydb/db/db.go new file mode 100644 index 0000000000..cd5bbb8e08 --- /dev/null +++ b/internal/endtoend/testdata/params_in_nested_func/ydb/db/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/params_in_nested_func/ydb/db/models.go b/internal/endtoend/testdata/params_in_nested_func/ydb/db/models.go new file mode 100644 index 0000000000..6ed185db01 --- /dev/null +++ b/internal/endtoend/testdata/params_in_nested_func/ydb/db/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package db + +type Routergroup struct { + Groupid *int32 + Groupname string + Defaultconfigid *int32 + Defaultfirmwareversion *string + Parentgroupid *int32 + Firmwarepolicy *string + Styles *string +} diff --git a/internal/endtoend/testdata/params_in_nested_func/ydb/db/query.sql.go b/internal/endtoend/testdata/params_in_nested_func/ydb/db/query.sql.go new file mode 100644 index 0000000000..9807199538 --- /dev/null +++ b/internal/endtoend/testdata/params_in_nested_func/ydb/db/query.sql.go @@ -0,0 +1,54 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package db + +import ( + "context" +) + +const getGroups = `-- name: GetGroups :many +SELECT + rg.groupId, + rg.groupName +FROM + routergroup rg +WHERE + rg.groupName LIKE '%' || COALESCE($groupname, rg.groupName) || '%' AND + rg.groupId = COALESCE($groupid, rg.groupId) +` + +type GetGroupsParams struct { + Groupname string + Groupid *int32 +} + +type GetGroupsRow struct { + Groupid *int32 + Groupname string +} + +func (q *Queries) GetGroups(ctx context.Context, arg GetGroupsParams) ([]GetGroupsRow, error) { + rows, err := q.db.QueryContext(ctx, getGroups, arg.Groupname, arg.Groupid) + if err != nil { + return nil, err + } + defer rows.Close() + var items []GetGroupsRow + for rows.Next() { + var i GetGroupsRow + if err := rows.Scan(&i.Groupid, &i.Groupname); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/params_in_nested_func/ydb/query.sql b/internal/endtoend/testdata/params_in_nested_func/ydb/query.sql new file mode 100644 index 0000000000..33a0cade30 --- /dev/null +++ b/internal/endtoend/testdata/params_in_nested_func/ydb/query.sql @@ -0,0 +1,10 @@ +-- name: GetGroups :many +SELECT + rg.groupId, + rg.groupName +FROM + routergroup rg +WHERE + rg.groupName LIKE '%' || COALESCE($groupName, rg.groupName) || '%' AND + rg.groupId = COALESCE($groupId, rg.groupId); + diff --git a/internal/endtoend/testdata/params_in_nested_func/ydb/schema.sql b/internal/endtoend/testdata/params_in_nested_func/ydb/schema.sql new file mode 100644 index 0000000000..b0a1f71f54 --- /dev/null +++ b/internal/endtoend/testdata/params_in_nested_func/ydb/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE routergroup ( + groupId Serial, + groupName Text NOT NULL, + defaultConfigId Int32, + defaultFirmwareVersion Text, + parentGroupId Int32, + firmwarePolicy Text, + styles Text, + PRIMARY KEY (groupId) +); + diff --git a/internal/endtoend/testdata/params_in_nested_func/ydb/sqlc.yaml b/internal/endtoend/testdata/params_in_nested_func/ydb/sqlc.yaml new file mode 100644 index 0000000000..47b2237157 --- /dev/null +++ b/internal/endtoend/testdata/params_in_nested_func/ydb/sqlc.yaml @@ -0,0 +1,9 @@ +version: '2' +sql: +- schema: schema.sql + queries: query.sql + engine: ydb + gen: + go: + out: db + diff --git a/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/db.go b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/models.go b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/models.go new file mode 100644 index 0000000000..2c4452e14c --- /dev/null +++ b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type User struct { + ID int32 + Name *string +} diff --git a/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/query.sql.go b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/query.sql.go new file mode 100644 index 0000000000..52e7022ffd --- /dev/null +++ b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/go/query.sql.go @@ -0,0 +1,64 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const findByID = `-- name: FindByID :many +SELECT id, name FROM users WHERE $id = id +` + +func (q *Queries) FindByID(ctx context.Context, id int32) ([]User, error) { + rows, err := q.db.QueryContext(ctx, findByID, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan(&i.ID, &i.Name); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const findByIDAndName = `-- name: FindByIDAndName :many +SELECT id, name FROM users WHERE $id = id AND $id = name +` + +func (q *Queries) FindByIDAndName(ctx context.Context, id int32) ([]User, error) { + rows, err := q.db.QueryContext(ctx, findByIDAndName, id) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan(&i.ID, &i.Name); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/query.sql b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/query.sql new file mode 100644 index 0000000000..9ae72f6dea --- /dev/null +++ b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/query.sql @@ -0,0 +1,5 @@ +-- name: FindByID :many +SELECT * FROM users WHERE $id = id; + +-- name: FindByIDAndName :many +SELECT * FROM users WHERE $id = id AND $id = name; diff --git a/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/schema.sql b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/schema.sql new file mode 100644 index 0000000000..4e80b3506a --- /dev/null +++ b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE users ( + id Int32, + name Text, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/sqlc.json b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/params_placeholder_in_left_expr/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/pattern_matching/ydb/go/db.go b/internal/endtoend/testdata/pattern_matching/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/pattern_matching/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/pattern_matching/ydb/go/models.go b/internal/endtoend/testdata/pattern_matching/ydb/go/models.go new file mode 100644 index 0000000000..dc21afed6e --- /dev/null +++ b/internal/endtoend/testdata/pattern_matching/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Pet struct { + Name string +} diff --git a/internal/endtoend/testdata/pattern_matching/ydb/go/query.sql.go b/internal/endtoend/testdata/pattern_matching/ydb/go/query.sql.go new file mode 100644 index 0000000000..dce05c3561 --- /dev/null +++ b/internal/endtoend/testdata/pattern_matching/ydb/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const petsByName = `-- name: PetsByName :many +SELECT name FROM pet WHERE name LIKE $pattern +` + +func (q *Queries) PetsByName(ctx context.Context, pattern string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, petsByName, pattern) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/pattern_matching/ydb/query.sql b/internal/endtoend/testdata/pattern_matching/ydb/query.sql new file mode 100644 index 0000000000..6ee2c2583b --- /dev/null +++ b/internal/endtoend/testdata/pattern_matching/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: PetsByName :many +SELECT * FROM pet WHERE name LIKE $pattern; diff --git a/internal/endtoend/testdata/pattern_matching/ydb/schema.sql b/internal/endtoend/testdata/pattern_matching/ydb/schema.sql new file mode 100644 index 0000000000..9b9d139a9e --- /dev/null +++ b/internal/endtoend/testdata/pattern_matching/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE pet ( + name Text, + PRIMARY KEY (name) +); diff --git a/internal/endtoend/testdata/pattern_matching/ydb/sqlc.json b/internal/endtoend/testdata/pattern_matching/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/pattern_matching/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/db.go b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/models.go b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/models.go new file mode 100644 index 0000000000..fdd5caa33f --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/models.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Notice struct { + ID int32 + Cnt int32 + Status string + NoticeAt *time.Time + CreatedAt time.Time +} diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/querier.go b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/querier.go new file mode 100644 index 0000000000..70b9b5a396 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/querier.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "time" +) + +type Querier interface { + CreateNotice(ctx context.Context, cnt int32, createdAt time.Time) error + MarkNoticeDone(ctx context.Context, noticeAt *time.Time, iD int32) error +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/query.sql.go b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/query.sql.go new file mode 100644 index 0000000000..fca23a0100 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/go/query.sql.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "time" +) + +const createNotice = `-- name: CreateNotice :exec +INSERT INTO notice (cnt, created_at) +VALUES ($cnt, $created_at) +` + +func (q *Queries) CreateNotice(ctx context.Context, cnt int32, createdAt time.Time) error { + _, err := q.db.ExecContext(ctx, createNotice, cnt, createdAt) + return err +} + +const markNoticeDone = `-- name: MarkNoticeDone :exec +UPDATE notice +SET status='done', notice_at=$notice_at +WHERE id=$id +` + +func (q *Queries) MarkNoticeDone(ctx context.Context, noticeAt *time.Time, iD int32) error { + _, err := q.db.ExecContext(ctx, markNoticeDone, noticeAt, iD) + return err +} diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/query.sql b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/query.sql new file mode 100644 index 0000000000..d4703bc494 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/query.sql @@ -0,0 +1,8 @@ +-- name: MarkNoticeDone :exec +UPDATE notice +SET status='done', notice_at=$notice_at +WHERE id=$id; + +-- name: CreateNotice :exec +INSERT INTO notice (cnt, created_at) +VALUES ($cnt, $created_at); diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/schema.sql b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/schema.sql new file mode 100644 index 0000000000..b9d76f9347 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE notice ( + id Int32 NOT NULL, + cnt Int32 NOT NULL, + status Text NOT NULL, + notice_at Timestamp, + created_at Timestamp NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/sqlc.json b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/sqlc.json new file mode 100644 index 0000000000..e7449f5bdb --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "schema": "schema.sql", + "queries": "query.sql", + "query_parameter_limit": 2, + "emit_interface": true, + "name": "querytest" + } + ] +} diff --git a/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/db.go b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/models.go b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/models.go new file mode 100644 index 0000000000..e3699fc2e9 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/models.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string + CountryCode string + Titles *string +} + +type Client struct { + ID int32 + Name string +} diff --git a/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/query.sql.go b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/query.sql.go new file mode 100644 index 0000000000..477ad28a7a --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/go/query.sql.go @@ -0,0 +1,149 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const addNewClient = `-- name: AddNewClient :one +INSERT INTO clients ( + id, name +) VALUES ( + $id, $name +) +RETURNING id, name +` + +func (q *Queries) AddNewClient(ctx context.Context, iD int32, name string) (Client, error) { + row := q.db.QueryRowContext(ctx, addNewClient, iD, name) + var i Client + err := row.Scan(&i.ID, &i.Name) + return i, err +} + +const createAuthor = `-- name: CreateAuthor :one +INSERT INTO authors ( + name, bio, country_code, titles +) VALUES ( + $name, $bio, $country_code, $titles +) +RETURNING id, name, bio, country_code, titles +` + +type CreateAuthorParams struct { + Name string + Bio *string + CountryCode string + Titles *string +} + +func (q *Queries) CreateAuthor(ctx context.Context, arg CreateAuthorParams) (Author, error) { + row := q.db.QueryRowContext(ctx, createAuthor, + arg.Name, + arg.Bio, + arg.CountryCode, + arg.Titles, + ) + var i Author + err := row.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.CountryCode, + &i.Titles, + ) + return i, err +} + +const createAuthorOnlyTitles = `-- name: CreateAuthorOnlyTitles :one +INSERT INTO authors (name, titles) VALUES ($name, $titles) RETURNING id, name, bio, country_code, titles +` + +func (q *Queries) CreateAuthorOnlyTitles(ctx context.Context, name string, titles *string) (Author, error) { + row := q.db.QueryRowContext(ctx, createAuthorOnlyTitles, name, titles) + var i Author + err := row.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.CountryCode, + &i.Titles, + ) + return i, err +} + +const deleteAuthor = `-- name: DeleteAuthor :exec +DELETE FROM authors +WHERE id = $id +` + +func (q *Queries) DeleteAuthor(ctx context.Context, id int64) error { + _, err := q.db.ExecContext(ctx, deleteAuthor, id) + return err +} + +const deleteAuthors = `-- name: DeleteAuthors :exec +DELETE FROM authors +WHERE id IN $ids AND name = $name +` + +func (q *Queries) DeleteAuthors(ctx context.Context, ids []int64, name string) error { + _, err := q.db.ExecContext(ctx, deleteAuthors, ids, name) + return err +} + +const getAuthor = `-- name: GetAuthor :one +SELECT id, name, bio, country_code, titles FROM authors +WHERE name = $name AND country_code = $country_code LIMIT 1 +` + +func (q *Queries) GetAuthor(ctx context.Context, name string, countryCode string) (Author, error) { + row := q.db.QueryRowContext(ctx, getAuthor, name, countryCode) + var i Author + err := row.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.CountryCode, + &i.Titles, + ) + return i, err +} + +const listAuthors = `-- name: ListAuthors :many +SELECT id, name, bio, country_code, titles FROM authors +ORDER BY name +` + +func (q *Queries) ListAuthors(ctx context.Context) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, listAuthors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.CountryCode, + &i.Titles, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/query.sql b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/query.sql new file mode 100644 index 0000000000..2db5f44b13 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/query.sql @@ -0,0 +1,34 @@ +-- name: GetAuthor :one +SELECT * FROM authors +WHERE name = $name AND country_code = $country_code LIMIT 1; + +-- name: ListAuthors :many +SELECT * FROM authors +ORDER BY name; + +-- name: CreateAuthor :one +INSERT INTO authors ( + name, bio, country_code, titles +) VALUES ( + $name, $bio, $country_code, $titles +) +RETURNING *; + +-- name: DeleteAuthor :exec +DELETE FROM authors +WHERE id = $id; + +-- name: DeleteAuthors :exec +DELETE FROM authors +WHERE id IN sqlc.slice(ids) AND name = $name; + +-- name: CreateAuthorOnlyTitles :one +INSERT INTO authors (name, titles) VALUES ($name, $titles) RETURNING *; + +-- name: AddNewClient :one +INSERT INTO clients ( + id, name +) VALUES ( + $id, $name +) +RETURNING *; diff --git a/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/schema.sql b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/schema.sql new file mode 100644 index 0000000000..ab228b3942 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/schema.sql @@ -0,0 +1,15 @@ +-- Example queries for sqlc +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + country_code Text NOT NULL, + titles Text, + PRIMARY KEY (id) +); + +CREATE TABLE clients ( + id Int32, + name Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/sqlc.json b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/sqlc.json new file mode 100644 index 0000000000..90ba79dcf3 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_two/ydb/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "query_parameter_limit": 2 + } + ] + } diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/db.go b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/models.go b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/models.go new file mode 100644 index 0000000000..2dd7d523f8 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/models.go @@ -0,0 +1,12 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Author struct { + ID int64 + Name string + Bio *string + CountryCode string +} diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/querier.go b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/querier.go new file mode 100644 index 0000000000..0d2ece1477 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/querier.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" +) + +type Querier interface { + CreateAuthor(ctx context.Context, arg CreateAuthorParams) (Author, error) + DeleteAuthor(ctx context.Context, arg DeleteAuthorParams) error + GetAuthor(ctx context.Context, arg GetAuthorParams) (Author, error) + ListAuthors(ctx context.Context) ([]Author, error) +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/query.sql.go b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/query.sql.go new file mode 100644 index 0000000000..bd06c190a6 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/go/query.sql.go @@ -0,0 +1,106 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const createAuthor = `-- name: CreateAuthor :one +INSERT INTO authors ( + name, bio, country_code +) VALUES ( + $name, $bio, $country_code +) +RETURNING id, name, bio, country_code +` + +type CreateAuthorParams struct { + Name string + Bio *string + CountryCode string +} + +func (q *Queries) CreateAuthor(ctx context.Context, arg CreateAuthorParams) (Author, error) { + row := q.db.QueryRowContext(ctx, createAuthor, arg.Name, arg.Bio, arg.CountryCode) + var i Author + err := row.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.CountryCode, + ) + return i, err +} + +const deleteAuthor = `-- name: DeleteAuthor :exec +DELETE FROM authors +WHERE id = $id +` + +type DeleteAuthorParams struct { + ID int64 +} + +func (q *Queries) DeleteAuthor(ctx context.Context, arg DeleteAuthorParams) error { + _, err := q.db.ExecContext(ctx, deleteAuthor, arg.ID) + return err +} + +const getAuthor = `-- name: GetAuthor :one +SELECT id, name, bio, country_code FROM authors +WHERE name = $name AND country_code = $country_code LIMIT 1 +` + +type GetAuthorParams struct { + Name string + CountryCode string +} + +func (q *Queries) GetAuthor(ctx context.Context, arg GetAuthorParams) (Author, error) { + row := q.db.QueryRowContext(ctx, getAuthor, arg.Name, arg.CountryCode) + var i Author + err := row.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.CountryCode, + ) + return i, err +} + +const listAuthors = `-- name: ListAuthors :many +SELECT id, name, bio, country_code FROM authors +ORDER BY name +` + +func (q *Queries) ListAuthors(ctx context.Context) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, listAuthors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan( + &i.ID, + &i.Name, + &i.Bio, + &i.CountryCode, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/query.sql b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/query.sql new file mode 100644 index 0000000000..147bc056cc --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/query.sql @@ -0,0 +1,19 @@ +-- name: GetAuthor :one +SELECT * FROM authors +WHERE name = $name AND country_code = $country_code LIMIT 1; + +-- name: ListAuthors :many +SELECT * FROM authors +ORDER BY name; + +-- name: CreateAuthor :one +INSERT INTO authors ( + name, bio, country_code +) VALUES ( + $name, $bio, $country_code +) +RETURNING *; + +-- name: DeleteAuthor :exec +DELETE FROM authors +WHERE id = $id; diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/schema.sql b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/schema.sql new file mode 100644 index 0000000000..8f92b42588 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/schema.sql @@ -0,0 +1,8 @@ +-- Example queries for sqlc +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + country_code Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/sqlc.json b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/sqlc.json new file mode 100644 index 0000000000..33b80d3781 --- /dev/null +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/ydb/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "query_parameter_limit": 0, + "emit_interface": true + } + ] + } diff --git a/internal/endtoend/testdata/select_column_cast/ydb/go/db.go b/internal/endtoend/testdata/select_column_cast/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/select_column_cast/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/select_column_cast/ydb/go/models.go b/internal/endtoend/testdata/select_column_cast/ydb/go/models.go new file mode 100644 index 0000000000..04bc70ad65 --- /dev/null +++ b/internal/endtoend/testdata/select_column_cast/ydb/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar bool +} diff --git a/internal/endtoend/testdata/select_column_cast/ydb/go/query.sql.go b/internal/endtoend/testdata/select_column_cast/ydb/go/query.sql.go new file mode 100644 index 0000000000..b5a04c2fe8 --- /dev/null +++ b/internal/endtoend/testdata/select_column_cast/ydb/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const selectColumnCast = `-- name: SelectColumnCast :many +SELECT CAST(bar AS Int32) FROM foo +` + +func (q *Queries) SelectColumnCast(ctx context.Context) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, selectColumnCast) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var bar int32 + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/select_column_cast/ydb/query.sql b/internal/endtoend/testdata/select_column_cast/ydb/query.sql new file mode 100644 index 0000000000..90070b46ec --- /dev/null +++ b/internal/endtoend/testdata/select_column_cast/ydb/query.sql @@ -0,0 +1,2 @@ +-- name: SelectColumnCast :many +SELECT CAST(bar AS Int32) FROM foo; diff --git a/internal/endtoend/testdata/select_column_cast/ydb/schema.sql b/internal/endtoend/testdata/select_column_cast/ydb/schema.sql new file mode 100644 index 0000000000..bb793068c3 --- /dev/null +++ b/internal/endtoend/testdata/select_column_cast/ydb/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo ( + bar Bool NOT NULL, + PRIMARY KEY (bar) +); diff --git a/internal/endtoend/testdata/select_column_cast/ydb/sqlc.json b/internal/endtoend/testdata/select_column_cast/ydb/sqlc.json new file mode 100644 index 0000000000..257bc9d140 --- /dev/null +++ b/internal/endtoend/testdata/select_column_cast/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "ydb", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/single_param_conflict/ydb/go/db.go b/internal/endtoend/testdata/single_param_conflict/ydb/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/single_param_conflict/ydb/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/single_param_conflict/ydb/go/models.go b/internal/endtoend/testdata/single_param_conflict/ydb/go/models.go new file mode 100644 index 0000000000..873490bee4 --- /dev/null +++ b/internal/endtoend/testdata/single_param_conflict/ydb/go/models.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "github.com/google/uuid" +) + +type Author struct { + ID int64 + Name string + Bio *string +} + +type User struct { + Sub uuid.UUID +} diff --git a/internal/endtoend/testdata/single_param_conflict/ydb/go/query.sql.go b/internal/endtoend/testdata/single_param_conflict/ydb/go/query.sql.go new file mode 100644 index 0000000000..b359da9e1c --- /dev/null +++ b/internal/endtoend/testdata/single_param_conflict/ydb/go/query.sql.go @@ -0,0 +1,67 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/google/uuid" +) + +const getAuthorByID = `-- name: GetAuthorByID :one +SELECT id, name, bio +FROM authors +WHERE id = $id +LIMIT 1 +` + +func (q *Queries) GetAuthorByID(ctx context.Context, id int64) (Author, error) { + row := q.db.QueryRowContext(ctx, getAuthorByID, id) + var i Author + err := row.Scan(&i.ID, &i.Name, &i.Bio) + return i, err +} + +const getAuthorIDByID = `-- name: GetAuthorIDByID :one +SELECT id +FROM authors +WHERE id = $id +LIMIT 1 +` + +func (q *Queries) GetAuthorIDByID(ctx context.Context, id int64) (int64, error) { + row := q.db.QueryRowContext(ctx, getAuthorIDByID, id) + err := row.Scan(&id) + return id, err +} + +const getUser = `-- name: GetUser :one +SELECT sub +FROM users +WHERE sub = $sub +LIMIT 1 +` + +func (q *Queries) GetUser(ctx context.Context, sub uuid.UUID) (uuid.UUID, error) { + row := q.db.QueryRowContext(ctx, getUser, sub) + err := row.Scan(&sub) + return sub, err +} + +const setDefaultName = `-- name: SetDefaultName :one + +UPDATE authors +SET name = 'Default Name' +WHERE id = $id +RETURNING id +` + +// https://github.com/sqlc-dev/sqlc/issues/1235 +func (q *Queries) SetDefaultName(ctx context.Context, id int64) (int64, error) { + row := q.db.QueryRowContext(ctx, setDefaultName, id) + err := row.Scan(&id) + return id, err +} diff --git a/internal/endtoend/testdata/single_param_conflict/ydb/query.sql b/internal/endtoend/testdata/single_param_conflict/ydb/query.sql new file mode 100644 index 0000000000..9004d10728 --- /dev/null +++ b/internal/endtoend/testdata/single_param_conflict/ydb/query.sql @@ -0,0 +1,25 @@ +-- name: GetAuthorIDByID :one +SELECT id +FROM authors +WHERE id = $id +LIMIT 1; + +-- name: GetAuthorByID :one +SELECT id, name, bio +FROM authors +WHERE id = $id +LIMIT 1; + +-- name: GetUser :one +SELECT sub +FROM users +WHERE sub = $sub +LIMIT 1; + +-- https://github.com/sqlc-dev/sqlc/issues/1235 + +-- name: SetDefaultName :one +UPDATE authors +SET name = 'Default Name' +WHERE id = $id +RETURNING id; diff --git a/internal/endtoend/testdata/single_param_conflict/ydb/schema.sql b/internal/endtoend/testdata/single_param_conflict/ydb/schema.sql new file mode 100644 index 0000000000..e66bafd766 --- /dev/null +++ b/internal/endtoend/testdata/single_param_conflict/ydb/schema.sql @@ -0,0 +1,13 @@ +-- Example queries for sqlc +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + +-- https://github.com/sqlc-dev/sqlc/issues/1290 +CREATE TABLE users ( + sub Uuid, + PRIMARY KEY (sub) +); diff --git a/internal/endtoend/testdata/single_param_conflict/ydb/sqlc.json b/internal/endtoend/testdata/single_param_conflict/ydb/sqlc.json new file mode 100644 index 0000000000..a539f95ae7 --- /dev/null +++ b/internal/endtoend/testdata/single_param_conflict/ydb/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/query.sql b/internal/endtoend/testdata/sqlc_arg/ydb/query.sql new file mode 100644 index 0000000000..7fb0228e4f --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/query.sql @@ -0,0 +1,6 @@ +-- name: FuncParamIdent :many +SELECT name FROM foo WHERE name = $slug; + +-- name: FuncParamString :many +SELECT name FROM foo WHERE name = $slug; + diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/db.go b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/models.go b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..d870bb7cde --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Name string +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..cd010d1161 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/go/query.sql.go @@ -0,0 +1,64 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const funcParamIdent = `-- name: FuncParamIdent :many +SELECT name FROM foo WHERE name = $slug +` + +func (q *Queries) FuncParamIdent(ctx context.Context, slug string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, funcParamIdent, slug) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const funcParamString = `-- name: FuncParamString :many +SELECT name FROM foo WHERE name = $slug +` + +func (q *Queries) FuncParamString(ctx context.Context, slug string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, funcParamString, slug) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/query.sql b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/query.sql new file mode 100644 index 0000000000..2dfaa9cd5c --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: FuncParamIdent :many +SELECT name FROM foo WHERE name = sqlc.arg(slug); + +-- name: FuncParamString :many +SELECT name FROM foo WHERE name = sqlc.arg('slug'); diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/schema.sql b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..931b5714ff --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo ( + name Text NOT NULL, + PRIMARY KEY (name) +); diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..d870bb7cde --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,9 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Name string +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..c82651bd90 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,84 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const funcParamIdent = `-- name: FuncParamIdent :many +SELECT name FROM foo WHERE name = $slug +` + +func (q *Queries) FuncParamIdent(ctx context.Context, slug string, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$slug").Text(slug) + result, err := q.db.QueryResultSet(ctx, funcParamIdent, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var name string + if err := row.Scan(&name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const funcParamString = `-- name: FuncParamString :many +SELECT name FROM foo WHERE name = $slug +` + +func (q *Queries) FuncParamString(ctx context.Context, slug string, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$slug").Text(slug) + result, err := q.db.QueryResultSet(ctx, funcParamString, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var name string + if err := row.Scan(&name); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, name) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..2dfaa9cd5c --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: FuncParamIdent :many +SELECT name FROM foo WHERE name = sqlc.arg(slug); + +-- name: FuncParamString :many +SELECT name FROM foo WHERE name = sqlc.arg('slug'); diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..931b5714ff --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,4 @@ +CREATE TABLE foo ( + name Text NOT NULL, + PRIMARY KEY (name) +); diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/db.go b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/models.go b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..11141dad1f --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/models.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Post struct { + ID int32 + UserID int32 + Likes string +} + +type User struct { + ID int32 + Name string + Age *int32 +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..ea9d5854a8 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/go/query.sql.go @@ -0,0 +1,149 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const duplicate = `-- name: Duplicate :one +SELECT users.id, users.name, users.age, users.id, users.name, users.age FROM users +` + +type DuplicateRow struct { + User User + User_2 User +} + +func (q *Queries) Duplicate(ctx context.Context) (DuplicateRow, error) { + row := q.db.QueryRowContext(ctx, duplicate) + var i DuplicateRow + err := row.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.User_2.ID, + &i.User_2.Name, + &i.User_2.Age, + ) + return i, err +} + +const join = `-- name: Join :one +SELECT users.id, users.name, users.age, posts.id, posts.user_id, posts.likes FROM posts +INNER JOIN users ON posts.user_id = users.id +` + +type JoinRow struct { + User User + Post Post +} + +func (q *Queries) Join(ctx context.Context) (JoinRow, error) { + row := q.db.QueryRowContext(ctx, join) + var i JoinRow + err := row.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.Post.ID, + &i.Post.UserID, + &i.Post.Likes, + ) + return i, err +} + +const only = `-- name: Only :one +SELECT users.id, users.name, users.age FROM users +` + +type OnlyRow struct { + User User +} + +func (q *Queries) Only(ctx context.Context) (OnlyRow, error) { + row := q.db.QueryRowContext(ctx, only) + var i OnlyRow + err := row.Scan(&i.User.ID, &i.User.Name, &i.User.Age) + return i, err +} + +const withAlias = `-- name: WithAlias :one +SELECT u.id, u.name, u.age FROM users u +` + +type WithAliasRow struct { + User User +} + +func (q *Queries) WithAlias(ctx context.Context) (WithAliasRow, error) { + row := q.db.QueryRowContext(ctx, withAlias) + var i WithAliasRow + err := row.Scan(&i.User.ID, &i.User.Name, &i.User.Age) + return i, err +} + +const withAsterisk = `-- name: WithAsterisk :one +SELECT users.id, users.name, users.age, id, name, age FROM users +` + +type WithAsteriskRow struct { + User User + ID int32 + Name string + Age *int32 +} + +func (q *Queries) WithAsterisk(ctx context.Context) (WithAsteriskRow, error) { + row := q.db.QueryRowContext(ctx, withAsterisk) + var i WithAsteriskRow + err := row.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.ID, + &i.Name, + &i.Age, + ) + return i, err +} + +const withSubquery = `-- name: WithSubquery :many +SELECT users.id, users.name, users.age, Count(*) AS total_count FROM users +` + +type WithSubqueryRow struct { + User User + TotalCount uint64 +} + +func (q *Queries) WithSubquery(ctx context.Context) ([]WithSubqueryRow, error) { + rows, err := q.db.QueryContext(ctx, withSubquery) + if err != nil { + return nil, err + } + defer rows.Close() + var items []WithSubqueryRow + for rows.Next() { + var i WithSubqueryRow + if err := rows.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.TotalCount, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/query.sql b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/query.sql new file mode 100644 index 0000000000..b93f139ab5 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/query.sql @@ -0,0 +1,18 @@ +-- name: Only :one +SELECT sqlc.embed(users) FROM users; + +-- name: WithAlias :one +SELECT sqlc.embed(u) FROM users u; + +-- name: WithSubquery :many +SELECT sqlc.embed(users), Count(*) AS total_count FROM users; + +-- name: WithAsterisk :one +SELECT sqlc.embed(users), * FROM users; + +-- name: Duplicate :one +SELECT sqlc.embed(users), sqlc.embed(users) FROM users; + +-- name: Join :one +SELECT sqlc.embed(users), sqlc.embed(posts) FROM posts +INNER JOIN users ON posts.user_id = users.id; diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/schema.sql b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..a5b6bb73ec --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/schema.sql @@ -0,0 +1,13 @@ +CREATE TABLE users ( + id Int32 NOT NULL, + name Text NOT NULL, + age Int32, + PRIMARY KEY (id) +); + +CREATE TABLE posts ( + id Int32 NOT NULL, + user_id Int32 NOT NULL, + likes Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..11141dad1f --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Post struct { + ID int32 + UserID int32 + Likes string +} + +type User struct { + ID int32 + Name string + Age *int32 +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..1e3a254606 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,187 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const duplicate = `-- name: Duplicate :one +SELECT users.id, users.name, users.age, users.id, users.name, users.age FROM users +` + +type DuplicateRow struct { + User User + User_2 User +} + +func (q *Queries) Duplicate(ctx context.Context, opts ...query.ExecuteOption) (DuplicateRow, error) { + row, err := q.db.QueryRow(ctx, duplicate, opts...) + var i DuplicateRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.User_2.ID, + &i.User_2.Name, + &i.User_2.Age, + ) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const join = `-- name: Join :one +SELECT users.id, users.name, users.age, posts.id, posts.user_id, posts.likes FROM posts +INNER JOIN users ON posts.user_id = users.id +` + +type JoinRow struct { + User User + Post Post +} + +func (q *Queries) Join(ctx context.Context, opts ...query.ExecuteOption) (JoinRow, error) { + row, err := q.db.QueryRow(ctx, join, opts...) + var i JoinRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.Post.ID, + &i.Post.UserID, + &i.Post.Likes, + ) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const only = `-- name: Only :one +SELECT users.id, users.name, users.age FROM users +` + +type OnlyRow struct { + User User +} + +func (q *Queries) Only(ctx context.Context, opts ...query.ExecuteOption) (OnlyRow, error) { + row, err := q.db.QueryRow(ctx, only, opts...) + var i OnlyRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.User.ID, &i.User.Name, &i.User.Age) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const withAlias = `-- name: WithAlias :one +SELECT u.id, u.name, u.age FROM users u +` + +type WithAliasRow struct { + User User +} + +func (q *Queries) WithAlias(ctx context.Context, opts ...query.ExecuteOption) (WithAliasRow, error) { + row, err := q.db.QueryRow(ctx, withAlias, opts...) + var i WithAliasRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan(&i.User.ID, &i.User.Name, &i.User.Age) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const withAsterisk = `-- name: WithAsterisk :one +SELECT users.id, users.name, users.age, id, name, age FROM users +` + +type WithAsteriskRow struct { + User User + ID int32 + Name string + Age *int32 +} + +func (q *Queries) WithAsterisk(ctx context.Context, opts ...query.ExecuteOption) (WithAsteriskRow, error) { + row, err := q.db.QueryRow(ctx, withAsterisk, opts...) + var i WithAsteriskRow + if err != nil { + return i, xerrors.WithStackTrace(err) + } + err = row.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.ID, + &i.Name, + &i.Age, + ) + if err != nil { + return i, xerrors.WithStackTrace(err) + } + return i, nil +} + +const withSubquery = `-- name: WithSubquery :many +SELECT users.id, users.name, users.age, Count(*) AS total_count FROM users +` + +type WithSubqueryRow struct { + User User + TotalCount uint64 +} + +func (q *Queries) WithSubquery(ctx context.Context, opts ...query.ExecuteOption) ([]WithSubqueryRow, error) { + result, err := q.db.QueryResultSet(ctx, withSubquery, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []WithSubqueryRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i WithSubqueryRow + if err := row.Scan( + &i.User.ID, + &i.User.Name, + &i.User.Age, + &i.TotalCount, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..b93f139ab5 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,18 @@ +-- name: Only :one +SELECT sqlc.embed(users) FROM users; + +-- name: WithAlias :one +SELECT sqlc.embed(u) FROM users u; + +-- name: WithSubquery :many +SELECT sqlc.embed(users), Count(*) AS total_count FROM users; + +-- name: WithAsterisk :one +SELECT sqlc.embed(users), * FROM users; + +-- name: Duplicate :one +SELECT sqlc.embed(users), sqlc.embed(users) FROM users; + +-- name: Join :one +SELECT sqlc.embed(users), sqlc.embed(posts) FROM posts +INNER JOIN users ON posts.user_id = users.id; diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..a5b6bb73ec --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,13 @@ +CREATE TABLE users ( + id Int32 NOT NULL, + name Text NOT NULL, + age Int32, + PRIMARY KEY (id) +); + +CREATE TABLE posts ( + id Int32 NOT NULL, + user_id Int32 NOT NULL, + likes Text NOT NULL, + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/db.go b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/models.go b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..3267e09252 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + MaybeBar *string +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..d54a5745e7 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/go/query.sql.go @@ -0,0 +1,118 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const identOnNonNullable = `-- name: IdentOnNonNullable :many +SELECT bar FROM foo WHERE bar = $bar +` + +func (q *Queries) IdentOnNonNullable(ctx context.Context, bar *string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, identOnNonNullable, bar) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var bar string + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const identOnNullable = `-- name: IdentOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = $maybe_bar +` + +func (q *Queries) IdentOnNullable(ctx context.Context, maybeBar *string) ([]*string, error) { + rows, err := q.db.QueryContext(ctx, identOnNullable, maybeBar) + if err != nil { + return nil, err + } + defer rows.Close() + var items []*string + for rows.Next() { + var maybe_bar *string + if err := rows.Scan(&maybe_bar); err != nil { + return nil, err + } + items = append(items, maybe_bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const stringOnNonNullable = `-- name: StringOnNonNullable :many +SELECT bar FROM foo WHERE bar = $bar +` + +func (q *Queries) StringOnNonNullable(ctx context.Context, bar *string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, stringOnNonNullable, bar) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var bar string + if err := rows.Scan(&bar); err != nil { + return nil, err + } + items = append(items, bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const stringOnNullable = `-- name: StringOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = $maybe_bar +` + +func (q *Queries) StringOnNullable(ctx context.Context, maybeBar *string) ([]*string, error) { + rows, err := q.db.QueryContext(ctx, stringOnNullable, maybeBar) + if err != nil { + return nil, err + } + defer rows.Close() + var items []*string + for rows.Next() { + var maybe_bar *string + if err := rows.Scan(&maybe_bar); err != nil { + return nil, err + } + items = append(items, maybe_bar) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/query.sql b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/query.sql new file mode 100644 index 0000000000..103c7378b8 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/query.sql @@ -0,0 +1,11 @@ +-- name: IdentOnNonNullable :many +SELECT bar FROM foo WHERE bar = sqlc.narg(bar); + +-- name: IdentOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = sqlc.narg(maybe_bar); + +-- name: StringOnNonNullable :many +SELECT bar FROM foo WHERE bar = sqlc.narg('bar'); + +-- name: StringOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = sqlc.narg('maybe_bar'); diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/schema.sql b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..03b21cefe9 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + bar Text NOT NULL, + maybe_bar Text, + PRIMARY KEY (bar) +); diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..3267e09252 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Bar string + MaybeBar *string +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..f7b1371309 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,152 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const identOnNonNullable = `-- name: IdentOnNonNullable :many +SELECT bar FROM foo WHERE bar = $bar +` + +func (q *Queries) IdentOnNonNullable(ctx context.Context, bar *string, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$bar").BeginOptional().Text(bar).EndOptional() + result, err := q.db.QueryResultSet(ctx, identOnNonNullable, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var bar string + if err := row.Scan(&bar); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, bar) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const identOnNullable = `-- name: IdentOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = $maybe_bar +` + +func (q *Queries) IdentOnNullable(ctx context.Context, maybeBar *string, opts ...query.ExecuteOption) ([]*string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$maybe_bar").BeginOptional().Text(maybeBar).EndOptional() + result, err := q.db.QueryResultSet(ctx, identOnNullable, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var maybe_bar *string + if err := row.Scan(&maybe_bar); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, maybe_bar) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const stringOnNonNullable = `-- name: StringOnNonNullable :many +SELECT bar FROM foo WHERE bar = $bar +` + +func (q *Queries) StringOnNonNullable(ctx context.Context, bar *string, opts ...query.ExecuteOption) ([]string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$bar").BeginOptional().Text(bar).EndOptional() + result, err := q.db.QueryResultSet(ctx, stringOnNonNullable, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var bar string + if err := row.Scan(&bar); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, bar) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const stringOnNullable = `-- name: StringOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = $maybe_bar +` + +func (q *Queries) StringOnNullable(ctx context.Context, maybeBar *string, opts ...query.ExecuteOption) ([]*string, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$maybe_bar").BeginOptional().Text(maybeBar).EndOptional() + result, err := q.db.QueryResultSet(ctx, stringOnNullable, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []*string + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var maybe_bar *string + if err := row.Scan(&maybe_bar); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, maybe_bar) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..103c7378b8 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,11 @@ +-- name: IdentOnNonNullable :many +SELECT bar FROM foo WHERE bar = sqlc.narg(bar); + +-- name: IdentOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = sqlc.narg(maybe_bar); + +-- name: StringOnNonNullable :many +SELECT bar FROM foo WHERE bar = sqlc.narg('bar'); + +-- name: StringOnNullable :many +SELECT maybe_bar FROM foo WHERE maybe_bar = sqlc.narg('maybe_bar'); diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..03b21cefe9 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + bar Text NOT NULL, + maybe_bar Text, + PRIMARY KEY (bar) +); diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/db.go b/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/models.go b/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..5eebad25b8 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..bab6a8c623 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/stdlib/go/query.sql.go @@ -0,0 +1,80 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const starExpansion = `-- name: StarExpansion :many +SELECT a, b, a, b, foo.a, foo.b FROM foo +` + +type StarExpansionRow struct { + A string + B string + A_2 string + B_2 string + A_3 string + B_3 string +} + +func (q *Queries) StarExpansion(ctx context.Context) ([]StarExpansionRow, error) { + rows, err := q.db.QueryContext(ctx, starExpansion) + if err != nil { + return nil, err + } + defer rows.Close() + var items []StarExpansionRow + for rows.Next() { + var i StarExpansionRow + if err := rows.Scan( + &i.A, + &i.B, + &i.A_2, + &i.B_2, + &i.A_3, + &i.B_3, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const starQuotedExpansion = `-- name: StarQuotedExpansion :many +SELECT t.a, t.b FROM foo t +` + +func (q *Queries) StarQuotedExpansion(ctx context.Context) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, starQuotedExpansion) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.A, &i.B); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/stdlib/query.sql b/internal/endtoend/testdata/star_expansion/ydb/stdlib/query.sql new file mode 100644 index 0000000000..070b7830cd --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: StarExpansion :many +SELECT *, *, foo.* FROM foo; + +-- name: StarQuotedExpansion :many +SELECT t.* FROM foo t; diff --git a/internal/endtoend/testdata/star_expansion/ydb/stdlib/schema.sql b/internal/endtoend/testdata/star_expansion/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..c197ae9eb3 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Text, + b Text, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/star_expansion/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/star_expansion/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..5eebad25b8 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..dd5d79b0f6 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,91 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const starExpansion = `-- name: StarExpansion :many +SELECT a, b, a, b, foo.a, foo.b FROM foo +` + +type StarExpansionRow struct { + A string + B string + A_2 string + B_2 string + A_3 string + B_3 string +} + +func (q *Queries) StarExpansion(ctx context.Context, opts ...query.ExecuteOption) ([]StarExpansionRow, error) { + result, err := q.db.QueryResultSet(ctx, starExpansion, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []StarExpansionRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i StarExpansionRow + if err := row.Scan( + &i.A, + &i.B, + &i.A_2, + &i.B_2, + &i.A_3, + &i.B_3, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const starQuotedExpansion = `-- name: StarQuotedExpansion :many +SELECT t.a, t.b FROM foo t +` + +func (q *Queries) StarQuotedExpansion(ctx context.Context, opts ...query.ExecuteOption) ([]Foo, error) { + result, err := q.db.QueryResultSet(ctx, starQuotedExpansion, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.A, &i.B); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..070b7830cd --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: StarExpansion :many +SELECT *, *, foo.* FROM foo; + +-- name: StarQuotedExpansion :many +SELECT t.* FROM foo t; diff --git a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..c197ae9eb3 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Text, + b Text, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/db.go b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/models.go b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..b0a2b24f86 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + C string + D string +} + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..5262133f91 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/go/query.sql.go @@ -0,0 +1,49 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const starExpansionJoin = `-- name: StarExpansionJoin :many +SELECT a, b, c, d FROM foo, bar +` + +type StarExpansionJoinRow struct { + A string + B string + C string + D string +} + +func (q *Queries) StarExpansionJoin(ctx context.Context) ([]StarExpansionJoinRow, error) { + rows, err := q.db.QueryContext(ctx, starExpansionJoin) + if err != nil { + return nil, err + } + defer rows.Close() + var items []StarExpansionJoinRow + for rows.Next() { + var i StarExpansionJoinRow + if err := rows.Scan( + &i.A, + &i.B, + &i.C, + &i.D, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql new file mode 100644 index 0000000000..9322d7b413 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: StarExpansionJoin :many +SELECT * FROM foo, bar; diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..7785eb367f --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE foo ( + a Text, + b Text, + PRIMARY KEY (a, b) +); + +CREATE TABLE bar ( + c Text, + d Text, + PRIMARY KEY (c, d) +); diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..b0a2b24f86 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Bar struct { + C string + D string +} + +type Foo struct { + A string + B string +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..e60a2fa699 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,57 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const starExpansionJoin = `-- name: StarExpansionJoin :many +SELECT a, b, c, d FROM foo, bar +` + +type StarExpansionJoinRow struct { + A string + B string + C string + D string +} + +func (q *Queries) StarExpansionJoin(ctx context.Context, opts ...query.ExecuteOption) ([]StarExpansionJoinRow, error) { + result, err := q.db.QueryResultSet(ctx, starExpansionJoin, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []StarExpansionJoinRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i StarExpansionJoinRow + if err := row.Scan( + &i.A, + &i.B, + &i.C, + &i.D, + ); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..9322d7b413 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: StarExpansionJoin :many +SELECT * FROM foo, bar; diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..7785eb367f --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE foo ( + a Text, + b Text, + PRIMARY KEY (a, b) +); + +CREATE TABLE bar ( + c Text, + d Text, + PRIMARY KEY (c, d) +); diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/db.go b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/models.go b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..d6eb5ef403 --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A int32 + B int32 +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..769c49f53c --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const subqueryCalcColumn = `-- name: SubqueryCalcColumn :many +SELECT sum FROM (SELECT a + b AS sum FROM foo) AS f +` + +func (q *Queries) SubqueryCalcColumn(ctx context.Context) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, subqueryCalcColumn) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var sum int32 + if err := rows.Scan(&sum); err != nil { + return nil, err + } + items = append(items, sum) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql new file mode 100644 index 0000000000..16f1683204 --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: SubqueryCalcColumn :many +SELECT sum FROM (SELECT a + b AS sum FROM foo) AS f; diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..a419c0fcbb --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Int32, + b Int32, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..d6eb5ef403 --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + A int32 + B int32 +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..b37ae027a4 --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,45 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const subqueryCalcColumn = `-- name: SubqueryCalcColumn :many +SELECT sum FROM (SELECT a + b AS sum FROM foo) AS f +` + +func (q *Queries) SubqueryCalcColumn(ctx context.Context, opts ...query.ExecuteOption) ([]int32, error) { + result, err := q.db.QueryResultSet(ctx, subqueryCalcColumn, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []int32 + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var sum int32 + if err := row.Scan(&sum); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, sum) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..16f1683204 --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: SubqueryCalcColumn :many +SELECT sum FROM (SELECT a + b AS sum FROM foo) AS f; diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..a419c0fcbb --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + a Int32, + b Int32, + PRIMARY KEY (a, b) +); diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/db.go b/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/models.go b/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..2afd2c4308 --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "github.com/google/uuid" +) + +type Foo struct { + Description *string + Bar *uuid.UUID + Baz uuid.UUID +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..6d5d6630f1 --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/go/query.sql.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/google/uuid" +) + +const find = `-- name: Find :one +SELECT bar FROM foo WHERE baz = $baz +` + +func (q *Queries) Find(ctx context.Context, baz uuid.UUID) (*uuid.UUID, error) { + row := q.db.QueryRowContext(ctx, find, baz) + var bar *uuid.UUID + err := row.Scan(&bar) + return bar, err +} + +const list = `-- name: List :many +SELECT description, bar, baz FROM foo +` + +func (q *Queries) List(ctx context.Context) ([]Foo, error) { + rows, err := q.db.QueryContext(ctx, list) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.Description, &i.Bar, &i.Baz); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql b/internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql new file mode 100644 index 0000000000..042143c5cb --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql @@ -0,0 +1,5 @@ +-- name: List :many +SELECT * FROM foo; + +-- name: Find :one +SELECT bar FROM foo WHERE baz = $baz; diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql b/internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..2b74d3a61a --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE foo ( + description Text, + bar Uuid, + baz Uuid NOT NULL, + PRIMARY KEY (baz) +); diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..2afd2c4308 --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "github.com/google/uuid" +) + +type Foo struct { + Description *string + Bar *uuid.UUID + Baz uuid.UUID +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..56a3b558ac --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,68 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/google/uuid" + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const find = `-- name: Find :one +SELECT bar FROM foo WHERE baz = $baz +` + +func (q *Queries) Find(ctx context.Context, baz uuid.UUID, opts ...query.ExecuteOption) (*uuid.UUID, error) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$baz").UUID(baz) + row, err := q.db.QueryRow(ctx, find, + append(opts, query.WithParameters(parameters.Build()))..., + ) + var bar *uuid.UUID + if err != nil { + return bar, xerrors.WithStackTrace(err) + } + err = row.Scan(&bar) + if err != nil { + return bar, xerrors.WithStackTrace(err) + } + return bar, nil +} + +const list = `-- name: List :many +SELECT description, bar, baz FROM foo +` + +func (q *Queries) List(ctx context.Context, opts ...query.ExecuteOption) ([]Foo, error) { + result, err := q.db.QueryResultSet(ctx, list, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Foo + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Foo + if err := row.Scan(&i.Description, &i.Bar, &i.Baz); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..042143c5cb --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,5 @@ +-- name: List :many +SELECT * FROM foo; + +-- name: Find :one +SELECT bar FROM foo WHERE baz = $baz; diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..2b74d3a61a --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE foo ( + description Text, + bar Uuid, + baz Uuid NOT NULL, + PRIMARY KEY (baz) +); diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/db.go b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/models.go b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..ee2c5c5577 --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Name string + Slug string +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..09d2aecd57 --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/go/query.sql.go @@ -0,0 +1,24 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const updateSetMultiple = `-- name: UpdateSetMultiple :exec +UPDATE foo SET name = $name, slug = $slug +` + +type UpdateSetMultipleParams struct { + Name string + Slug string +} + +func (q *Queries) UpdateSetMultiple(ctx context.Context, arg UpdateSetMultipleParams) error { + _, err := q.db.ExecContext(ctx, updateSetMultiple, arg.Name, arg.Slug) + return err +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql new file mode 100644 index 0000000000..e469cd7bc3 --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: UpdateSetMultiple :exec +UPDATE foo SET name = $name, slug = $slug; diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..850b7f573e --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + name Text NOT NULL, + slug Text NOT NULL, + PRIMARY KEY (name, slug) +); diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..ee2c5c5577 --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,10 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +type Foo struct { + Name string + Slug string +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..fc5baf4b7f --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,36 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const updateSetMultiple = `-- name: UpdateSetMultiple :exec +UPDATE foo SET name = $name, slug = $slug +` + +type UpdateSetMultipleParams struct { + Name string + Slug string +} + +func (q *Queries) UpdateSetMultiple(ctx context.Context, arg UpdateSetMultipleParams, opts ...query.ExecuteOption) error { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$name").Text(arg.Name) + parameters = parameters.Param("$slug").Text(arg.Slug) + err := q.db.Exec(ctx, updateSetMultiple, + append(opts, query.WithParameters(parameters.Build()))..., + ) + if err != nil { + return xerrors.WithStackTrace(err) + } + return nil +} diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..e469cd7bc3 --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,2 @@ +-- name: UpdateSetMultiple :exec +UPDATE foo SET name = $name, slug = $slug; diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..850b7f573e --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE foo ( + name Text NOT NULL, + slug Text NOT NULL, + PRIMARY KEY (name, slug) +); diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql new file mode 100644 index 0000000000..161c72ce5b --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql @@ -0,0 +1,14 @@ +-- name: ListAuthors :many +SELECT id, name AS name, bio +FROM authors; + +-- name: ListAuthorsIdenticalAlias :many +SELECT id, name AS name, bio +FROM authors; + +-- name: ListMetrics :many +SELECT DateTime::Format("%Y-%m-%d", time) AS bucket, city_name, Avg(temp_c) +FROM weather_metrics +WHERE time > DateTime::Now() - Interval("P6M") +GROUP BY bucket, city_name +ORDER BY bucket DESC; diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql new file mode 100644 index 0000000000..0e76f561e3 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql @@ -0,0 +1,27 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + +CREATE TABLE weather_metrics ( + time Timestamp NOT NULL, + timezone_shift Int32, + city_name Text, + temp_c Double, + feels_like_c Double, + temp_min_c Double, + temp_max_c Double, + pressure_hpa Double, + humidity_percent Double, + wind_speed_ms Double, + wind_deg Int32, + rain_1h_mm Double, + rain_3h_mm Double, + snow_1h_mm Double, + snow_3h_mm Double, + clouds_percent Int32, + weather_type_id Int32, + PRIMARY KEY (time, city_name) +); diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json new file mode 100644 index 0000000000..d8c24916cd --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/db.go b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/db.go new file mode 100644 index 0000000000..68d478eceb --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +type DBTX interface { + Exec(ctx context.Context, sql string, opts ...query.ExecuteOption) error + Query(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Result, error) + QueryResultSet(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.ClosableResultSet, error) + QueryRow(ctx context.Context, sql string, opts ...query.ExecuteOption) (query.Row, error) +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/models.go new file mode 100644 index 0000000000..6f29248f82 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,35 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Author struct { + ID int64 + Name string + Bio *string +} + +type WeatherMetric struct { + Time time.Time + TimezoneShift *int32 + CityName string + TempC *float64 + FeelsLikeC *float64 + TempMinC *float64 + TempMaxC *float64 + PressureHpa *float64 + HumidityPercent *float64 + WindSpeedMs *float64 + WindDeg *int32 + Rain1hMm *float64 + Rain3hMm *float64 + Snow1hMm *float64 + Snow3hMm *float64 + CloudsPercent *int32 + WeatherTypeID *int32 +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go new file mode 100644 index 0000000000..db444754c4 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,117 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" + "errors" + "io" + + "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" + "github.com/ydb-platform/ydb-go-sdk/v3/query" +) + +const listAuthors = `-- name: ListAuthors :many +SELECT id, name AS name, bio +FROM authors +` + +func (q *Queries) ListAuthors(ctx context.Context, opts ...query.ExecuteOption) ([]Author, error) { + result, err := q.db.QueryResultSet(ctx, listAuthors, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Author + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Author + if err := row.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const listAuthorsIdenticalAlias = `-- name: ListAuthorsIdenticalAlias :many +SELECT id, name AS name, bio +FROM authors +` + +func (q *Queries) ListAuthorsIdenticalAlias(ctx context.Context, opts ...query.ExecuteOption) ([]Author, error) { + result, err := q.db.QueryResultSet(ctx, listAuthorsIdenticalAlias, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []Author + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i Author + if err := row.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} + +const listMetrics = `-- name: ListMetrics :many +SELECT DateTime::Format("%Y-%m-%d")(time) AS bucket, city_name, Avg(temp_c) +FROM weather_metrics +WHERE time > DateTime::MakeTimestamp(DateTime::Now()) - Interval("P6M") +GROUP BY bucket, city_name +ORDER BY bucket DESC +` + +type ListMetricsRow struct { + Bucket []byte + CityName string + Avg interface{} +} + +func (q *Queries) ListMetrics(ctx context.Context, opts ...query.ExecuteOption) ([]ListMetricsRow, error) { + result, err := q.db.QueryResultSet(ctx, listMetrics, opts...) + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var items []ListMetricsRow + for { + row, err := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, xerrors.WithStackTrace(err) + } + var i ListMetricsRow + if err := row.Scan(&i.Bucket, &i.CityName, &i.Avg); err != nil { + return nil, xerrors.WithStackTrace(err) + } + items = append(items, i) + } + if err := result.Close(ctx); err != nil { + return nil, xerrors.WithStackTrace(err) + } + return items, nil +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql new file mode 100644 index 0000000000..8bff7c5ce3 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,14 @@ +-- name: ListAuthors :many +SELECT id, name AS name, bio +FROM authors; + +-- name: ListAuthorsIdenticalAlias :many +SELECT id, name AS name, bio +FROM authors; + +-- name: ListMetrics :many +SELECT DateTime::Format("%Y-%m-%d")(time) AS bucket, city_name, Avg(temp_c) +FROM weather_metrics +WHERE time > DateTime::MakeTimestamp(DateTime::Now()) - Interval("P6M") +GROUP BY bucket, city_name +ORDER BY bucket DESC; diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql new file mode 100644 index 0000000000..0e76f561e3 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,27 @@ +CREATE TABLE authors ( + id BigSerial, + name Text NOT NULL, + bio Text, + PRIMARY KEY (id) +); + +CREATE TABLE weather_metrics ( + time Timestamp NOT NULL, + timezone_shift Int32, + city_name Text, + temp_c Double, + feels_like_c Double, + temp_min_c Double, + temp_max_c Double, + pressure_hpa Double, + humidity_percent Double, + wind_speed_ms Double, + wind_deg Int32, + rain_1h_mm Double, + rain_3h_mm Double, + snow_1h_mm Double, + snow_3h_mm Double, + clouds_percent Int32, + weather_type_id Int32, + PRIMARY KEY (time, city_name) +); diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json new file mode 100644 index 0000000000..d7b476c328 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "engine": "ydb", + "sql_package": "ydb-go-sdk", + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index 8c8796edc8..451e93b7c1 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -3320,6 +3320,16 @@ func (c *cc) handleInvokeSuffix(base ast.Node, invokeCtx *parser.Invoke_exprCont } switch baseNode := base.(type) { + case *ast.FuncCall: + funcCall.Func = baseNode.Func + + if c.isLambdaFunction(baseNode.Func.Name) { + funcCall.Func.Name = baseNode.Func.Name + "_call" + } + + funcCall.Funcname.Items = append(funcCall.Funcname.Items, &ast.String{Str: funcCall.Func.Name}) + return funcCall + case *ast.ColumnRef: if len(baseNode.Fields.Items) > 0 { var nameParts []string diff --git a/internal/engine/ydb/lib/cpp/datetime.go b/internal/engine/ydb/lib/cpp/datetime.go index d15cc87feb..ecd2342e3f 100644 --- a/internal/engine/ydb/lib/cpp/datetime.go +++ b/internal/engine/ydb/lib/cpp/datetime.go @@ -640,6 +640,13 @@ func dateTimeFormatFuncs() []*catalog.Function { }, ReturnType: &ast.TypeName{Name: "any"}, }, + { + Name: "datetime_format_call", + Args: []*catalog.Argument{ + {Type: &ast.TypeName{Name: "any"}}, + }, + ReturnType: &ast.TypeName{Name: "string"}, + }, } } diff --git a/internal/engine/ydb/stdlib.go b/internal/engine/ydb/stdlib.go index 69ef6b223e..8abf4c7f96 100644 --- a/internal/engine/ydb/stdlib.go +++ b/internal/engine/ydb/stdlib.go @@ -15,7 +15,6 @@ func defaultSchema(name string) *catalog.Schema { s.Funcs = append(s.Funcs, lib.AggregateFunctions()...) s.Funcs = append(s.Funcs, lib.WindowFunctions()...) s.Funcs = append(s.Funcs, lib.CppFunctions()...) - // TODO: add container functions if return s From 94015119930afafa0a66cc04a197b48aa36786c2 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Thu, 23 Oct 2025 18:49:53 +0300 Subject: [PATCH 18/26] fixed incorrect func name --- internal/engine/ydb/convert.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index 451e93b7c1..6025a3ed93 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -3323,9 +3323,7 @@ func (c *cc) handleInvokeSuffix(base ast.Node, invokeCtx *parser.Invoke_exprCont case *ast.FuncCall: funcCall.Func = baseNode.Func - if c.isLambdaFunction(baseNode.Func.Name) { - funcCall.Func.Name = baseNode.Func.Name + "_call" - } + funcCall.Func.Name = baseNode.Func.Name + "_call" funcCall.Funcname.Items = append(funcCall.Funcname.Items, &ast.String{Str: funcCall.Func.Name}) return funcCall From b2dd6153e1e8ae7aae35542a9c86641714c1016a Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Thu, 23 Oct 2025 19:19:16 +0300 Subject: [PATCH 19/26] fixed uuid issue --- internal/codegen/golang/query.go | 2 +- .../overrides_go_types/ydb/ydb-go-sdk/go/models.go | 2 +- .../overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go | 4 ++-- .../testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json | 7 ------- .../testdata/star_expansion_join/ydb/stdlib/query.sql | 1 + .../testdata/star_expansion_join/ydb/stdlib/schema.sql | 1 + .../testdata/star_expansion_join/ydb/stdlib/sqlc.json | 1 + .../testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql | 1 + .../testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql | 1 + .../testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json | 1 + .../subquery_calculated_column/ydb/stdlib/query.sql | 1 + .../subquery_calculated_column/ydb/stdlib/schema.sql | 1 + .../subquery_calculated_column/ydb/stdlib/sqlc.json | 1 + .../subquery_calculated_column/ydb/ydb-go-sdk/query.sql | 1 + .../subquery_calculated_column/ydb/ydb-go-sdk/schema.sql | 1 + .../subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json | 1 + internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql | 1 + .../endtoend/testdata/types_uuid/ydb/stdlib/schema.sql | 1 + internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json | 1 + .../endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql | 1 + .../endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql | 1 + .../endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json | 1 + .../testdata/update_set_multiple/ydb/stdlib/query.sql | 1 + .../testdata/update_set_multiple/ydb/stdlib/schema.sql | 1 + .../testdata/update_set_multiple/ydb/stdlib/sqlc.json | 1 + .../testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql | 1 + .../testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql | 1 + .../testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json | 1 + .../valid_group_by_reference/ydb/stdlib/schema.sql | 1 + .../testdata/valid_group_by_reference/ydb/stdlib/sqlc.json | 1 + .../valid_group_by_reference/ydb/ydb-go-sdk/query.sql | 1 + .../valid_group_by_reference/ydb/ydb-go-sdk/schema.sql | 1 + .../valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json | 1 + 33 files changed, 33 insertions(+), 11 deletions(-) diff --git a/internal/codegen/golang/query.go b/internal/codegen/golang/query.go index bdeda3f4d8..0dd1423eb7 100644 --- a/internal/codegen/golang/query.go +++ b/internal/codegen/golang/query.go @@ -340,7 +340,7 @@ func ydbBuilderMethodForColumnType(dbType string) string { case "tztimestamp": return "TzTimestamp" case "uuid": - return "UUID" + return "Uuid" case "yson": return "YSON" diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go index e86b5539c9..47089344a1 100644 --- a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/models.go @@ -6,8 +6,8 @@ package override import ( orm "database/sql" - "github.com/gofrs/uuid" fuid "github.com/gofrs/uuid" + "github.com/google/uuid" null "github.com/volatiletech/null/v8" null_v4 "gopkg.in/guregu/null.v4" ) diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go index 65d0bb87f4..525443bbd6 100644 --- a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go @@ -10,7 +10,7 @@ import ( "errors" "io" - "github.com/gofrs/uuid" + "github.com/google/uuid" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -22,7 +22,7 @@ SELECT id, other_id, age, balance, bio, about FROM foo WHERE id = $id func (q *Queries) LoadFoo(ctx context.Context, id uuid.UUID, opts ...query.ExecuteOption) ([]Foo, error) { parameters := ydb.ParamsBuilder() - parameters = parameters.Param("$id").UUID(id) + parameters = parameters.Param("$id").Uuid(id) result, err := q.db.QueryResultSet(ctx, loadFoo, append(opts, query.WithParameters(parameters.Build()))..., ) diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json index a4082583bd..570ad35f4c 100644 --- a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/sqlc.json @@ -9,13 +9,6 @@ "queries": "query.sql", "sql_package": "ydb-go-sdk", "overrides": [ - { - "column": "foo.id", - "go_type": { - "import": "github.com/gofrs/uuid", - "type": "UUID" - } - }, { "column": "foo.other_id", "go_type": { diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql index 9322d7b413..c9fd836c46 100644 --- a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/query.sql @@ -1,2 +1,3 @@ -- name: StarExpansionJoin :many SELECT * FROM foo, bar; + diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql index 7785eb367f..9291752901 100644 --- a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/schema.sql @@ -9,3 +9,4 @@ CREATE TABLE bar ( d Text, PRIMARY KEY (c, d) ); + diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json index d8c24916cd..b2b893aad1 100644 --- a/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/star_expansion_join/ydb/stdlib/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql index 9322d7b413..c9fd836c46 100644 --- a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/query.sql @@ -1,2 +1,3 @@ -- name: StarExpansionJoin :many SELECT * FROM foo, bar; + diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql index 7785eb367f..9291752901 100644 --- a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/schema.sql @@ -9,3 +9,4 @@ CREATE TABLE bar ( d Text, PRIMARY KEY (c, d) ); + diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json index d7b476c328..799d3a9e06 100644 --- a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,4 @@ } ] } + diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql index 16f1683204..b0f85df783 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/query.sql @@ -1,2 +1,3 @@ -- name: SubqueryCalcColumn :many SELECT sum FROM (SELECT a + b AS sum FROM foo) AS f; + diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql index a419c0fcbb..68003be1e8 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/schema.sql @@ -3,3 +3,4 @@ CREATE TABLE foo ( b Int32, PRIMARY KEY (a, b) ); + diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json index d8c24916cd..b2b893aad1 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/stdlib/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql index 16f1683204..b0f85df783 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/query.sql @@ -1,2 +1,3 @@ -- name: SubqueryCalcColumn :many SELECT sum FROM (SELECT a + b AS sum FROM foo) AS f; + diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql index a419c0fcbb..68003be1e8 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/schema.sql @@ -3,3 +3,4 @@ CREATE TABLE foo ( b Int32, PRIMARY KEY (a, b) ); + diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json index d7b476c328..799d3a9e06 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,4 @@ } ] } + diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql b/internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql index 042143c5cb..7c8226661d 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/query.sql @@ -3,3 +3,4 @@ SELECT * FROM foo; -- name: Find :one SELECT bar FROM foo WHERE baz = $baz; + diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql b/internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql index 2b74d3a61a..7a887c1ca1 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/schema.sql @@ -4,3 +4,4 @@ CREATE TABLE foo ( baz Uuid NOT NULL, PRIMARY KEY (baz) ); + diff --git a/internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json index d8c24916cd..b2b893aad1 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/types_uuid/ydb/stdlib/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql index 042143c5cb..7c8226661d 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/query.sql @@ -3,3 +3,4 @@ SELECT * FROM foo; -- name: Find :one SELECT bar FROM foo WHERE baz = $baz; + diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql index 2b74d3a61a..7a887c1ca1 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/schema.sql @@ -4,3 +4,4 @@ CREATE TABLE foo ( baz Uuid NOT NULL, PRIMARY KEY (baz) ); + diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json index d7b476c328..799d3a9e06 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,4 @@ } ] } + diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql index e469cd7bc3..d478e98345 100644 --- a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/query.sql @@ -1,2 +1,3 @@ -- name: UpdateSetMultiple :exec UPDATE foo SET name = $name, slug = $slug; + diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql index 850b7f573e..ae52c193a5 100644 --- a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/schema.sql @@ -3,3 +3,4 @@ CREATE TABLE foo ( slug Text NOT NULL, PRIMARY KEY (name, slug) ); + diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json index d8c24916cd..b2b893aad1 100644 --- a/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/update_set_multiple/ydb/stdlib/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql index e469cd7bc3..d478e98345 100644 --- a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/query.sql @@ -1,2 +1,3 @@ -- name: UpdateSetMultiple :exec UPDATE foo SET name = $name, slug = $slug; + diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql index 850b7f573e..ae52c193a5 100644 --- a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/schema.sql @@ -3,3 +3,4 @@ CREATE TABLE foo ( slug Text NOT NULL, PRIMARY KEY (name, slug) ); + diff --git a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json index d7b476c328..799d3a9e06 100644 --- a/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/update_set_multiple/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,4 @@ } ] } + diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql index 0e76f561e3..a1ec1a0101 100644 --- a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/schema.sql @@ -25,3 +25,4 @@ CREATE TABLE weather_metrics ( weather_type_id Int32, PRIMARY KEY (time, city_name) ); + diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json index d8c24916cd..b2b893aad1 100644 --- a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/sqlc.json @@ -10,3 +10,4 @@ } ] } + diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql index 8bff7c5ce3..13b1943886 100644 --- a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/query.sql @@ -12,3 +12,4 @@ FROM weather_metrics WHERE time > DateTime::MakeTimestamp(DateTime::Now()) - Interval("P6M") GROUP BY bucket, city_name ORDER BY bucket DESC; + diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql index 0e76f561e3..a1ec1a0101 100644 --- a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/schema.sql @@ -25,3 +25,4 @@ CREATE TABLE weather_metrics ( weather_type_id Int32, PRIMARY KEY (time, city_name) ); + diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json index d7b476c328..799d3a9e06 100644 --- a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/sqlc.json @@ -11,3 +11,4 @@ } ] } + From c745457ee8142306444c9a6bde629e71c0da055c Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Thu, 23 Oct 2025 19:24:09 +0300 Subject: [PATCH 20/26] fixed uuid in types_uuid test --- .../endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go index 56a3b558ac..eafcbff878 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go @@ -22,7 +22,7 @@ SELECT bar FROM foo WHERE baz = $baz func (q *Queries) Find(ctx context.Context, baz uuid.UUID, opts ...query.ExecuteOption) (*uuid.UUID, error) { parameters := ydb.ParamsBuilder() - parameters = parameters.Param("$baz").UUID(baz) + parameters = parameters.Param("$baz").Uuid(baz) row, err := q.db.QueryRow(ctx, find, append(opts, query.WithParameters(parameters.Build()))..., ) From b0c78640fe3230400b20e6792a3f86b185034555 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Thu, 23 Oct 2025 19:31:09 +0300 Subject: [PATCH 21/26] fixed test --- .../ydb/stdlib/go/db.go | 31 ++++++ .../ydb/stdlib/go/models.go | 35 ++++++ .../ydb/stdlib/go/query.sql.go | 103 ++++++++++++++++++ .../ydb/stdlib/query.sql | 5 +- 4 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/query.sql.go diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/db.go b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/db.go new file mode 100644 index 0000000000..3b320aa168 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/models.go b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/models.go new file mode 100644 index 0000000000..6f29248f82 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/models.go @@ -0,0 +1,35 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package querytest + +import ( + "time" +) + +type Author struct { + ID int64 + Name string + Bio *string +} + +type WeatherMetric struct { + Time time.Time + TimezoneShift *int32 + CityName string + TempC *float64 + FeelsLikeC *float64 + TempMinC *float64 + TempMaxC *float64 + PressureHpa *float64 + HumidityPercent *float64 + WindSpeedMs *float64 + WindDeg *int32 + Rain1hMm *float64 + Rain3hMm *float64 + Snow1hMm *float64 + Snow3hMm *float64 + CloudsPercent *int32 + WeatherTypeID *int32 +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/query.sql.go b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/query.sql.go new file mode 100644 index 0000000000..6d0bbc69d6 --- /dev/null +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/go/query.sql.go @@ -0,0 +1,103 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const listAuthors = `-- name: ListAuthors :many +SELECT id, name AS name, bio +FROM authors +` + +func (q *Queries) ListAuthors(ctx context.Context) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, listAuthors) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listAuthorsIdenticalAlias = `-- name: ListAuthorsIdenticalAlias :many +SELECT id, name AS name, bio +FROM authors +` + +func (q *Queries) ListAuthorsIdenticalAlias(ctx context.Context) ([]Author, error) { + rows, err := q.db.QueryContext(ctx, listAuthorsIdenticalAlias) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Author + for rows.Next() { + var i Author + if err := rows.Scan(&i.ID, &i.Name, &i.Bio); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listMetrics = `-- name: ListMetrics :many +SELECT DateTime::Format("%Y-%m-%d")(time) AS bucket, city_name, Avg(temp_c) +FROM weather_metrics +WHERE time > DateTime::MakeTimestamp(DateTime::Now()) - Interval("P6M") +GROUP BY bucket, city_name +ORDER BY bucket DESC +` + +type ListMetricsRow struct { + Bucket []byte + CityName string + Avg interface{} +} + +func (q *Queries) ListMetrics(ctx context.Context) ([]ListMetricsRow, error) { + rows, err := q.db.QueryContext(ctx, listMetrics) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListMetricsRow + for rows.Next() { + var i ListMetricsRow + if err := rows.Scan(&i.Bucket, &i.CityName, &i.Avg); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql index 161c72ce5b..13b1943886 100644 --- a/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/stdlib/query.sql @@ -7,8 +7,9 @@ SELECT id, name AS name, bio FROM authors; -- name: ListMetrics :many -SELECT DateTime::Format("%Y-%m-%d", time) AS bucket, city_name, Avg(temp_c) +SELECT DateTime::Format("%Y-%m-%d")(time) AS bucket, city_name, Avg(temp_c) FROM weather_metrics -WHERE time > DateTime::Now() - Interval("P6M") +WHERE time > DateTime::MakeTimestamp(DateTime::Now()) - Interval("P6M") GROUP BY bucket, city_name ORDER BY bucket DESC; + From 2461778c290f050b8be1cec465e2e9d280817bc5 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 27 Oct 2025 14:48:09 +0300 Subject: [PATCH 22/26] rewrited ydb-go-sdk codegen to ranges back (+ upped testada go.mod version to 1.23) --- examples/authors/ydb/query.sql.go | 8 +- internal/codegen/golang/imports.go | 12 +- .../templates/ydb-go-sdk/queryCode.tmpl | 6 +- .../array_in/ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../cast_null/ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../coalesce/ydb/ydb-go-sdk/go/query.sql.go | 38 +---- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 44 +----- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 14 +- internal/endtoend/testdata/go.mod | 4 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../join_alias/ydb/ydb-go-sdk/go/query.sql.go | 14 +- .../join_from/ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 20 +-- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 38 +---- .../params_two/ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 14 +- .../ydb/ydb-go-sdk/go/query.sql.go | 14 +- .../ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 26 +-- .../sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go | 14 +- .../sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go | 26 +-- .../sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go | 32 +--- .../ydb/ydb-go-sdk/go/query.sql.go | 14 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../types_uuid/ydb/ydb-go-sdk/go/query.sql.go | 8 +- .../ydb/ydb-go-sdk/go/query.sql.go | 20 +-- internal/engine/ydb/convert.go | 148 ++++++++++++++++++ 38 files changed, 222 insertions(+), 436 deletions(-) diff --git a/examples/authors/ydb/query.sql.go b/examples/authors/ydb/query.sql.go index 5d2b0f9ec2..6d3c6743a9 100644 --- a/examples/authors/ydb/query.sql.go +++ b/examples/authors/ydb/query.sql.go @@ -7,8 +7,6 @@ package authors import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -99,11 +97,7 @@ func (q *Queries) ListAuthors(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []Author - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/codegen/golang/imports.go b/internal/codegen/golang/imports.go index fa146f3a62..d1522a31ba 100644 --- a/internal/codegen/golang/imports.go +++ b/internal/codegen/golang/imports.go @@ -276,7 +276,7 @@ func (i *importer) interfaceImports() fileImports { }) std["context"] = struct{}{} - + sqlpkg := parseDriver(i.Options.SqlPackage) if sqlpkg.IsYDBGoSDK() { pkg[ImportSpec{Path: "github.com/ydb-platform/ydb-go-sdk/v3/query"}] = struct{}{} @@ -418,13 +418,10 @@ func (i *importer) queryImports(filename string) fileImports { if sqlpkg.IsYDBGoSDK() { hasParams := false - hasManyQueries := false for _, q := range gq { if !q.Arg.isEmpty() { hasParams = true - } - if q.Cmd == metadata.CmdMany { - hasManyQueries = true + break } } if hasParams { @@ -432,11 +429,6 @@ func (i *importer) queryImports(filename string) fileImports { } pkg[ImportSpec{Path: "github.com/ydb-platform/ydb-go-sdk/v3/query"}] = struct{}{} pkg[ImportSpec{Path: "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors"}] = struct{}{} - - if hasManyQueries { - std["errors"] = struct{}{} - std["io"] = struct{}{} - } } if i.Options.WrapErrors { diff --git a/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl b/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl index 9a36f789cc..9c60ded05f 100644 --- a/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl +++ b/internal/codegen/golang/templates/ydb-go-sdk/queryCode.tmpl @@ -107,11 +107,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{if $.EmitMethodsWithDBA {{else}} var items []{{.Ret.DefineType}} {{end -}} - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { {{- if $.WrapErrors}} return nil, xerrors.WithStackTrace(fmt.Errorf("query {{.MethodName}}: %w", err)) diff --git a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go index 03c23d23d3..e19eb4c476 100644 --- a/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/array_in/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -37,11 +35,7 @@ func (q *Queries) In(ctx context.Context, arg InParams, opts ...query.ExecuteOpt return nil, xerrors.WithStackTrace(err) } var items []int32 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go index 90a61cbebc..5f1e1209a5 100644 --- a/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -25,11 +23,7 @@ func (q *Queries) CastCoalesce(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go index c33f6bad9e..64f1d0f7d4 100644 --- a/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "time" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -37,11 +35,7 @@ func (q *Queries) ListNullable(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []ListNullableRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go index d898ffdfb9..0dd8e8c0a4 100644 --- a/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/coalesce/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -25,11 +23,7 @@ func (q *Queries) CoalesceNumeric(ctx context.Context, opts ...query.ExecuteOpti return nil, xerrors.WithStackTrace(err) } var items []int64 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -62,11 +56,7 @@ func (q *Queries) CoalesceNumericColumns(ctx context.Context, opts ...query.Exec return nil, xerrors.WithStackTrace(err) } var items []CoalesceNumericColumnsRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -98,11 +88,7 @@ func (q *Queries) CoalesceNumericNull(ctx context.Context, opts ...query.Execute return nil, xerrors.WithStackTrace(err) } var items []CoalesceNumericNullRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -129,11 +115,7 @@ func (q *Queries) CoalesceString(ctx context.Context, opts ...query.ExecuteOptio return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -166,11 +148,7 @@ func (q *Queries) CoalesceStringColumns(ctx context.Context, opts ...query.Execu return nil, xerrors.WithStackTrace(err) } var items []CoalesceStringColumnsRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -202,11 +180,7 @@ func (q *Queries) CoalesceStringNull(ctx context.Context, opts ...query.ExecuteO return nil, xerrors.WithStackTrace(err) } var items []CoalesceStringNullRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go index 794063615f..dc63f12992 100644 --- a/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/coalesce_as/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -31,11 +29,7 @@ func (q *Queries) SumBaz(ctx context.Context, opts ...query.ExecuteOption) ([]Su return nil, xerrors.WithStackTrace(err) } var items []SumBazRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go index 1183786fb8..7f14ed3178 100644 --- a/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/comparisons/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) AlsoNotEqual(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []bool - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -54,11 +48,7 @@ func (q *Queries) Equal(ctx context.Context, opts ...query.ExecuteOption) ([]boo return nil, xerrors.WithStackTrace(err) } var items []bool - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -84,11 +74,7 @@ func (q *Queries) GreaterThan(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []bool - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -114,11 +100,7 @@ func (q *Queries) GreaterThanOrEqual(ctx context.Context, opts ...query.ExecuteO return nil, xerrors.WithStackTrace(err) } var items []bool - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -144,11 +126,7 @@ func (q *Queries) LessThan(ctx context.Context, opts ...query.ExecuteOption) ([] return nil, xerrors.WithStackTrace(err) } var items []bool - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -174,11 +152,7 @@ func (q *Queries) LessThanOrEqual(ctx context.Context, opts ...query.ExecuteOpti return nil, xerrors.WithStackTrace(err) } var items []bool - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -204,11 +178,7 @@ func (q *Queries) NotEqual(ctx context.Context, opts ...query.ExecuteOption) ([] return nil, xerrors.WithStackTrace(err) } var items []bool - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go index 562a2b62e5..bc97bc28a3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/ddl_alter_table_rename/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) Placeholder(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go index 77eed3be9a..c975d37405 100644 --- a/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/emit_db_and_json_tags/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]Us return nil, xerrors.WithStackTrace(err) } var items []User - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go index 77eed3be9a..c975d37405 100644 --- a/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/emit_db_tags/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]Us return nil, xerrors.WithStackTrace(err) } var items []User - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go index 594e0f1ef1..6a3374d949 100644 --- a/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/emit_methods_with_db_argument/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) GetAll(ctx context.Context, db DBTX, opts ...query.ExecuteOpti return nil, xerrors.WithStackTrace(err) } var items []User - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go index 3ab6bf3d65..7c5ec17d00 100644 --- a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -25,11 +23,7 @@ func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]*F return nil, xerrors.WithStackTrace(err) } var items []*Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -59,11 +53,7 @@ func (q *Queries) GetAllAByB(ctx context.Context, b *int32, opts ...query.Execut return nil, xerrors.WithStackTrace(err) } var items []int32 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/go.mod b/internal/endtoend/testdata/go.mod index f42403edb9..4d94c38024 100644 --- a/internal/endtoend/testdata/go.mod +++ b/internal/endtoend/testdata/go.mod @@ -1,8 +1,6 @@ module github.com/sqlc-dev/sqlc/endtoend -go 1.22.5 - -toolchain go1.24.6 +go 1.23.0 require ( github.com/go-sql-driver/mysql v1.7.0 diff --git a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go index 4714433548..64020eff3f 100644 --- a/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/identical_tables/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) IdenticalTable(ctx context.Context, opts ...query.ExecuteOptio return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go index 483504d510..582c8a5359 100644 --- a/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/join_alias/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -38,11 +36,7 @@ func (q *Queries) AliasExpand(ctx context.Context, id int32, opts ...query.Execu return nil, xerrors.WithStackTrace(err) } var items []AliasExpandRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -80,11 +74,7 @@ func (q *Queries) AliasJoin(ctx context.Context, id int32, opts ...query.Execute return nil, xerrors.WithStackTrace(err) } var items []AliasJoinRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go index 7756b16aea..7928a83dee 100644 --- a/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/join_from/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -29,11 +27,7 @@ func (q *Queries) MultiFrom(ctx context.Context, login string, opts ...query.Exe return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go index 26a7f5d5cd..f8c9dbbbf2 100644 --- a/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/join_two_tables/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -27,11 +25,7 @@ func (q *Queries) TwoJoins(ctx context.Context, opts ...query.ExecuteOption) ([] return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go index 34cf9c50af..31cd751993 100644 --- a/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/join_where_clause/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -38,11 +36,7 @@ func (q *Queries) JoinNoConstraints(ctx context.Context, arg JoinNoConstraintsPa return nil, xerrors.WithStackTrace(err) } var items []int32 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -81,11 +75,7 @@ func (q *Queries) JoinParamWhereClause(ctx context.Context, arg JoinParamWhereCl return nil, xerrors.WithStackTrace(err) } var items []int32 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -118,11 +108,7 @@ func (q *Queries) JoinWhereClause(ctx context.Context, owner string, opts ...que return nil, xerrors.WithStackTrace(err) } var items []int32 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go index 525443bbd6..ed3211d7b5 100644 --- a/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/overrides_go_types/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package override import ( "context" - "errors" - "io" "github.com/google/uuid" "github.com/ydb-platform/ydb-go-sdk/v3" @@ -30,11 +28,7 @@ func (q *Queries) LoadFoo(ctx context.Context, id uuid.UUID, opts ...query.Execu return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go index e5f2158c2f..932001ec89 100644 --- a/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -84,11 +82,7 @@ func (q *Queries) LimitSQLCArg(ctx context.Context, limit uint64, opts ...query. return nil, xerrors.WithStackTrace(err) } var items []LimitSQLCArgRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -131,11 +125,7 @@ func (q *Queries) ListUserOrders(ctx context.Context, minPrice *types.Decimal, o return nil, xerrors.WithStackTrace(err) } var items []ListUserOrdersRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -174,11 +164,7 @@ func (q *Queries) ListUserParenExpr(ctx context.Context, arg ListUserParenExprPa return nil, xerrors.WithStackTrace(err) } var items []User - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -225,11 +211,7 @@ func (q *Queries) ListUsersByFamily(ctx context.Context, arg ListUsersByFamilyPa return nil, xerrors.WithStackTrace(err) } var items []ListUsersByFamilyRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -265,11 +247,7 @@ func (q *Queries) ListUsersByID(ctx context.Context, id int64, opts ...query.Exe return nil, xerrors.WithStackTrace(err) } var items []ListUsersByIDRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -304,11 +282,7 @@ func (q *Queries) ListUsersWithLimit(ctx context.Context, limit uint64, opts ... return nil, xerrors.WithStackTrace(err) } var items []ListUsersWithLimitRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go index 8ab13b0b61..1074b46f9d 100644 --- a/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/params_two/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -36,11 +34,7 @@ func (q *Queries) FooByAandB(ctx context.Context, arg FooByAandBParams, opts ... return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go index d7dd757a20..72977df92e 100644 --- a/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_distinct/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -25,11 +23,7 @@ func (q *Queries) GetBars(ctx context.Context, opts ...query.ExecuteOption) ([]B return nil, xerrors.WithStackTrace(err) } var items []Bar - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go index f1617d5335..ec42f11fb6 100644 --- a/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -30,11 +28,7 @@ func (q *Queries) FooLimit(ctx context.Context, limit uint64, opts ...query.Exec return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -71,11 +65,7 @@ func (q *Queries) FooLimitOffset(ctx context.Context, arg FooLimitOffsetParams, return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go index 24789ce06e..a9246a7ea3 100644 --- a/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) GetAll(ctx context.Context, opts ...query.ExecuteOption) ([]Us return nil, xerrors.WithStackTrace(err) } var items []User - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -59,11 +53,7 @@ func (q *Queries) GetIDAll(ctx context.Context, opts ...query.ExecuteOption) ([] return nil, xerrors.WithStackTrace(err) } var items []int32 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go index 63f4c60f91..3f625960fb 100644 --- a/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_text_array/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -33,11 +31,7 @@ func (q *Queries) SelectTextArray(ctx context.Context, param []string, opts ...q return nil, xerrors.WithStackTrace(err) } var items [][]string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go index 23aadb8217..66889546a7 100644 --- a/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/select_union/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -27,11 +25,7 @@ func (q *Queries) SelectUnion(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -59,11 +53,7 @@ func (q *Queries) SelectUnionAliased(ctx context.Context, opts ...query.ExecuteO return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -91,11 +81,7 @@ func (q *Queries) SelectUnionOther(ctx context.Context, opts ...query.ExecuteOpt return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -134,11 +120,7 @@ func (q *Queries) SelectUnionWithLimit(ctx context.Context, arg SelectUnionWithL return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go index c82651bd90..8d138a3b5c 100644 --- a/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/sqlc_arg/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -29,11 +27,7 @@ func (q *Queries) FuncParamIdent(ctx context.Context, slug string, opts ...query return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -63,11 +57,7 @@ func (q *Queries) FuncParamString(ctx context.Context, slug string, opts ...quer return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go index 1e3a254606..d313950863 100644 --- a/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/sqlc_embed/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -161,11 +159,7 @@ func (q *Queries) WithSubquery(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []WithSubqueryRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go index f7b1371309..fa5a934c95 100644 --- a/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/sqlc_narg/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -29,11 +27,7 @@ func (q *Queries) IdentOnNonNullable(ctx context.Context, bar *string, opts ...q return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -63,11 +57,7 @@ func (q *Queries) IdentOnNullable(ctx context.Context, maybeBar *string, opts .. return nil, xerrors.WithStackTrace(err) } var items []*string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -97,11 +87,7 @@ func (q *Queries) StringOnNonNullable(ctx context.Context, bar *string, opts ... return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -131,11 +117,7 @@ func (q *Queries) StringOnNullable(ctx context.Context, maybeBar *string, opts . return nil, xerrors.WithStackTrace(err) } var items []*string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go index 64e9be9b75..9d3d8e8eb5 100644 --- a/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -34,11 +32,7 @@ func (q *Queries) FuncNullable(ctx context.Context, favourites []int32, opts ... return nil, xerrors.WithStackTrace(err) } var items []*string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -73,11 +67,7 @@ func (q *Queries) FuncNullableNot(ctx context.Context, favourites []int32, opts return nil, xerrors.WithStackTrace(err) } var items []*string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -119,11 +109,7 @@ func (q *Queries) FuncParamIdent(ctx context.Context, arg FuncParamIdentParams, return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -158,11 +144,7 @@ func (q *Queries) FuncParamSoloArg(ctx context.Context, favourites []int32, opts return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -204,11 +186,7 @@ func (q *Queries) FuncParamString(ctx context.Context, arg FuncParamStringParams return nil, xerrors.WithStackTrace(err) } var items []string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go index dd5d79b0f6..fde739eae0 100644 --- a/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/star_expansion/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -33,11 +31,7 @@ func (q *Queries) StarExpansion(ctx context.Context, opts ...query.ExecuteOption return nil, xerrors.WithStackTrace(err) } var items []StarExpansionRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -70,11 +64,7 @@ func (q *Queries) StarQuotedExpansion(ctx context.Context, opts ...query.Execute return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go index e60a2fa699..7f6ffb02a7 100644 --- a/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/star_expansion_join/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -31,11 +29,7 @@ func (q *Queries) StarExpansionJoin(ctx context.Context, opts ...query.ExecuteOp return nil, xerrors.WithStackTrace(err) } var items []StarExpansionJoinRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go index b37ae027a4..11d5080765 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/subquery_calculated_column/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -24,11 +22,7 @@ func (q *Queries) SubqueryCalcColumn(ctx context.Context, opts ...query.ExecuteO return nil, xerrors.WithStackTrace(err) } var items []int32 - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go index eafcbff878..4173783643 100644 --- a/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/types_uuid/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/google/uuid" "github.com/ydb-platform/ydb-go-sdk/v3" @@ -47,11 +45,7 @@ func (q *Queries) List(ctx context.Context, opts ...query.ExecuteOption) ([]Foo, return nil, xerrors.WithStackTrace(err) } var items []Foo - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go index db444754c4..0082d0de6a 100644 --- a/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go +++ b/internal/endtoend/testdata/valid_group_by_reference/ydb/ydb-go-sdk/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" "github.com/ydb-platform/ydb-go-sdk/v3/query" @@ -25,11 +23,7 @@ func (q *Queries) ListAuthors(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []Author - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -56,11 +50,7 @@ func (q *Queries) ListAuthorsIdenticalAlias(ctx context.Context, opts ...query.E return nil, xerrors.WithStackTrace(err) } var items []Author - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -96,11 +86,7 @@ func (q *Queries) ListMetrics(ctx context.Context, opts ...query.ExecuteOption) return nil, xerrors.WithStackTrace(err) } var items []ListMetricsRow - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index 6025a3ed93..0217d33bef 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -3922,3 +3922,151 @@ func (c *cc) VisitSql_stmt(n *parser.Sql_stmtContext) interface{} { return expr } + +func (c *cc) VisitNamed_nodes_stmt(n *parser.Named_nodes_stmtContext) interface{} { + return todo("VisitNamed_nodes_stmt", n) +} + +func (c *cc) VisitDeclare_stmt(n *parser.Declare_stmtContext) interface{} { + return todo("VisitDeclare_stmt", n) +} + +func (c *cc) VisitImport_stmt(n *parser.Import_stmtContext) interface{} { + return todo("VisitImport_stmt", n) +} + +func (c *cc) VisitExport_stmt(n *parser.Export_stmtContext) interface{} { + return todo("VisitExport_stmt", n) +} + +func (c *cc) VisitAlter_external_table_stmt(n *parser.Alter_external_table_stmtContext) interface{} { + return todo("VisitAlter_external_table_stmt", n) +} + +func (c *cc) VisitDefine_action_or_subquery_stmt(n *parser.Define_action_or_subquery_stmtContext) interface{} { + return todo("VisitDefine_action_or_subquery_stmt", n) +} + +func (c *cc) VisitIf_stmt(n *parser.If_stmtContext) interface{} { + return todo("VisitIf_stmt", n) +} + +func (c *cc) VisitFor_stmt(n *parser.For_stmtContext) interface{} { + return todo("VisitFor_stmt", n) +} + +func (c *cc) VisitCreate_object_stmt(n *parser.Create_object_stmtContext) interface{} { + return todo("VisitCreate_object_stmt", n) +} + +func (c *cc) VisitAlter_object_stmt(n *parser.Alter_object_stmtContext) interface{} { + return todo("VisitAlter_object_stmt", n) +} + +func (c *cc) VisitDrop_object_stmt(n *parser.Drop_object_stmtContext) interface{} { + return todo("VisitDrop_object_stmt", n) +} + +func (c *cc) VisitCreate_external_data_source_stmt(n *parser.Create_external_data_source_stmtContext) interface{} { + return todo("VisitCreate_external_data_source_stmt", n) +} + +func (c *cc) VisitAlter_external_data_source_stmt(n *parser.Alter_external_data_source_stmtContext) interface{} { + return todo("VisitAlter_external_data_source_stmt", n) +} + +func (c *cc) VisitDrop_external_data_source_stmt(n *parser.Drop_external_data_source_stmtContext) interface{} { + return todo("VisitDrop_external_data_source_stmt", n) +} + +func (c *cc) VisitCreate_replication_stmt(n *parser.Create_replication_stmtContext) interface{} { + return todo("VisitCreate_replication_stmt", n) +} + +func (c *cc) VisitDrop_replication_stmt(n *parser.Drop_replication_stmtContext) interface{} { + return todo("VisitDrop_replication_stmt", n) +} + +func (c *cc) VisitCreate_topic_stmt(n *parser.Create_topic_stmtContext) interface{} { + return todo("VisitCreate_topic_stmt", n) +} + +func (c *cc) VisitAlter_topic_stmt(n *parser.Alter_topic_stmtContext) interface{} { + return todo("VisitAlter_topic_stmt", n) +} + +func (c *cc) VisitDrop_topic_stmt(n *parser.Drop_topic_stmtContext) interface{} { + return todo("VisitDrop_topic_stmt", n) +} + +func (c *cc) VisitGrant_permissions_stmt(n *parser.Grant_permissions_stmtContext) interface{} { + return todo("VisitGrant_permissions_stmt", n) +} + +func (c *cc) VisitRevoke_permissions_stmt(n *parser.Revoke_permissions_stmtContext) interface{} { + return todo("VisitRevoke_permissions_stmt", n) +} + +func (c *cc) VisitAlter_table_store_stmt(n *parser.Alter_table_store_stmtContext) interface{} { + return todo("VisitAlter_table_store_stmt", n) +} + +func (c *cc) VisitUpsert_object_stmt(n *parser.Upsert_object_stmtContext) interface{} { + return todo("VisitUpsert_object_stmt", n) +} + +func (c *cc) VisitAlter_replication_stmt(n *parser.Alter_replication_stmtContext) interface{} { + return todo("VisitAlter_replication_stmt", n) +} + +func (c *cc) VisitCreate_resource_pool_stmt(n *parser.Create_resource_pool_stmtContext) interface{} { + return todo("VisitCreate_resource_pool_stmt", n) +} + +func (c *cc) VisitAlter_resource_pool_stmt(n *parser.Alter_resource_pool_stmtContext) interface{} { + return todo("VisitAlter_resource_pool_stmt", n) +} + +func (c *cc) VisitDrop_resource_pool_stmt(n *parser.Drop_resource_pool_stmtContext) interface{} { + return todo("VisitDrop_resource_pool_stmt", n) +} + +func (c *cc) VisitCreate_backup_collection_stmt(n *parser.Create_backup_collection_stmtContext) interface{} { + return todo("VisitCreate_backup_collection_stmt", n) +} + +func (c *cc) VisitAlter_backup_collection_stmt(n *parser.Alter_backup_collection_stmtContext) interface{} { + return todo("VisitAlter_backup_collection_stmt", n) +} + +func (c *cc) VisitDrop_backup_collection_stmt(n *parser.Drop_backup_collection_stmtContext) interface{} { + return todo("VisitDrop_backup_collection_stmt", n) +} + +func (c *cc) VisitAnalyze_stmt(n *parser.Analyze_stmtContext) interface{} { + return todo("VisitAnalyze_stmt", n) +} + +func (c *cc) VisitCreate_resource_pool_classifier_stmt(n *parser.Create_resource_pool_classifier_stmtContext) interface{} { + return todo("VisitCreate_resource_pool_classifier_stmt", n) +} + +func (c *cc) VisitAlter_resource_pool_classifier_stmt(n *parser.Alter_resource_pool_classifier_stmtContext) interface{} { + return todo("VisitAlter_resource_pool_classifier_stmt", n) +} + +func (c *cc) VisitDrop_resource_pool_classifier_stmt(n *parser.Drop_resource_pool_classifier_stmtContext) interface{} { + return todo("VisitDrop_resource_pool_classifier_stmt", n) +} + +func (c *cc) VisitBackup_stmt(n *parser.Backup_stmtContext) interface{} { + return todo("VisitBackup_stmt", n) +} + +func (c *cc) VisitRestore_stmt(n *parser.Restore_stmtContext) interface{} { + return todo("VisitRestore_stmt", n) +} + +func (c *cc) VisitAlter_sequence_stmt(n *parser.Alter_sequence_stmtContext) interface{} { + return todo("VisitAlter_sequence_stmt", n) +} From 52f6c4d6efd24d2d97948997a0902ea03f91e330 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 27 Oct 2025 14:56:32 +0300 Subject: [PATCH 23/26] rewrited parseStringLiteral func to be more understandable --- internal/engine/ydb/convert.go | 10 +++------- internal/engine/ydb/utils.go | 6 ++++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/internal/engine/ydb/convert.go b/internal/engine/ydb/convert.go index 0217d33bef..a48334afd8 100755 --- a/internal/engine/ydb/convert.go +++ b/internal/engine/ydb/convert.go @@ -479,7 +479,7 @@ func (c *cc) VisitObject_feature_value(n *parser.Object_feature_valueContext) in return bindPar case n.STRING_VALUE() != nil: - value, _ := parseStringValue(n.STRING_VALUE().GetText()) + value, _ := parseStringLiteral(n.STRING_VALUE().GetText()) return &ast.A_Const{Val: NewIdentifier(value), Location: c.pos(n.GetStart())} case n.Bool_value() != nil: @@ -3728,13 +3728,9 @@ func (c *cc) VisitLiteral_value(n *parser.Literal_valueContext) interface{} { case n.STRING_VALUE() != nil: // !!! debug !!! (problem with quoted strings) originalText := n.STRING_VALUE().GetText() - content, hasSuffix := parseStringValue(originalText) + content, _ := parseStringLiteral(originalText) - if hasSuffix { - return &ast.A_Const{Val: &ast.String{Str: originalText}, Location: c.pos(n.GetStart())} - } else { - return &ast.A_Const{Val: &ast.String{Str: content}, Location: c.pos(n.GetStart())} - } + return &ast.A_Const{Val: &ast.String{Str: content}, Location: c.pos(n.GetStart())} case n.Bool_value() != nil: var i bool diff --git a/internal/engine/ydb/utils.go b/internal/engine/ydb/utils.go index a8a6900e94..c1f25fe610 100755 --- a/internal/engine/ydb/utils.go +++ b/internal/engine/ydb/utils.go @@ -296,8 +296,10 @@ func (c *cc) collectEqualityOps(ctx parser.ICond_exprContext) []antlr.TerminalNo return ops } - -func parseStringValue(s string) (value string, hasSuffix bool) { +// parseStringLiteral parses a string literal from a YQL query and returns the value and whether it has a suffix. +// If a valid suffix is found, it is stripped and the content is returned. +// FIXME: rewrite this logic to correctly handle the type based on the suffix. +func parseStringLiteral(s string) (value string, hasSuffix bool) { if len(s) < 2 { return s, false } From 6783d19b91e31a4a3b08cf69663b030554f9cc2e Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 27 Oct 2025 15:06:46 +0300 Subject: [PATCH 24/26] fixed ydb-go-sdk test with newer generation --- .../params_duplicate/ydb/go/query.sql.go | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go b/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go index 74299f3dab..cde028cafc 100644 --- a/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go +++ b/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - "errors" - "io" "github.com/ydb-platform/ydb-go-sdk/v3" "github.com/ydb-platform/ydb-go-sdk/v3/pkg/xerrors" @@ -30,11 +28,7 @@ func (q *Queries) SelectUserByID(ctx context.Context, id int64, opts ...query.Ex return nil, xerrors.WithStackTrace(err) } var items []*string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -67,11 +61,7 @@ func (q *Queries) SelectUserByName(ctx context.Context, name *string, opts ...qu return nil, xerrors.WithStackTrace(err) } var items []*string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } @@ -102,11 +92,7 @@ func (q *Queries) SelectUserQuestion(ctx context.Context, question int64, opts . return nil, xerrors.WithStackTrace(err) } var items []*string - for { - row, err := result.NextRow(ctx) - if errors.Is(err, io.EOF) { - break - } + for row, err := range result.Rows(ctx) { if err != nil { return nil, xerrors.WithStackTrace(err) } From 3b8d7ecabfc48f0befdfe38231bb29f3f20b3f35 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 27 Oct 2025 15:40:32 +0300 Subject: [PATCH 25/26] resolved limit issue --- internal/codegen/golang/query.go | 3 --- internal/codegen/golang/ydb_type.go | 16 +++------------- internal/compiler/resolve.go | 17 +++++++++++++++-- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/internal/codegen/golang/query.go b/internal/codegen/golang/query.go index 0dd1423eb7..c825ac3dce 100644 --- a/internal/codegen/golang/query.go +++ b/internal/codegen/golang/query.go @@ -347,9 +347,6 @@ func ydbBuilderMethodForColumnType(dbType string) string { case "integer": // LIMIT/OFFSET parameters support return "Uint64" - case "Integer": // Invalid YDB type - fallback to Uint64 - return "Uint64" - //TODO: support other types default: // Check for decimal types diff --git a/internal/codegen/golang/ydb_type.go b/internal/codegen/golang/ydb_type.go index 61ab421457..572f79f334 100644 --- a/internal/codegen/golang/ydb_type.go +++ b/internal/codegen/golang/ydb_type.go @@ -43,7 +43,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col // // use the smallest type they have which is NullInt16 // return "sql.NullInt16" return "*int8" - case "int16": + case "int16", "smallint": if notNull { return "int16" } @@ -52,7 +52,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col } // return "sql.NullInt16" return "*int16" - case "int", "int32": //ydb doesn't have int type, but we need it to support untyped constants + case "int", "int32", "integer": if notNull { return "int32" } @@ -61,7 +61,7 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col } // return "sql.NullInt32" return "*int32" - case "int64": + case "int64", "bigint": if notNull { return "int64" } @@ -218,16 +218,6 @@ func YDBType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.Col case "any": return "interface{}" - case "integer": - // integer type is used for LIMIT/OFFSET parameters - use uint64 for semantic correctness - if notNull { - return "uint64" - } - if emitPointersForNull { - return "*uint64" - } - return "*uint64" - default: if strings.HasPrefix(columnType, "decimal") { if notNull { diff --git a/internal/compiler/resolve.go b/internal/compiler/resolve.go index b1fbb1990e..39685d640e 100644 --- a/internal/compiler/resolve.go +++ b/internal/compiler/resolve.go @@ -5,6 +5,7 @@ import ( "log/slog" "strconv" + "github.com/sqlc-dev/sqlc/internal/config" "github.com/sqlc-dev/sqlc/internal/sql/ast" "github.com/sqlc-dev/sqlc/internal/sql/astutils" "github.com/sqlc-dev/sqlc/internal/sql/catalog" @@ -118,11 +119,17 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar, case *limitOffset: defaultP := named.NewInferredParam("offset", true) p, isNamed := params.FetchMerge(ref.ref.Number, defaultP) + + dataType := "integer" + if comp.conf.Engine == config.EngineYDB { + dataType = "uint64" + } + a = append(a, Parameter{ Number: ref.ref.Number, Column: &Column{ Name: p.Name(), - DataType: "integer", + DataType: dataType, NotNull: p.NotNull(), IsNamedParam: isNamed, }, @@ -131,11 +138,17 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar, case *limitCount: defaultP := named.NewInferredParam("limit", true) p, isNamed := params.FetchMerge(ref.ref.Number, defaultP) + + dataType := "integer" + if comp.conf.Engine == config.EngineYDB { + dataType = "uint64" + } + a = append(a, Parameter{ Number: ref.ref.Number, Column: &Column{ Name: p.Name(), - DataType: "integer", + DataType: dataType, NotNull: p.NotNull(), IsNamedParam: isNamed, }, From 7b0a77e9895277a57ec9e13edec0f2fb8448eb11 Mon Sep 17 00:00:00 2001 From: Viktor Pentyukhov Date: Mon, 27 Oct 2025 16:08:19 +0300 Subject: [PATCH 26/26] Rewrited slices logic not replace them --- internal/codegen/golang/gen.go | 10 +++++++--- .../codegen/golang/templates/stdlib/queryCode.tmpl | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/codegen/golang/gen.go b/internal/codegen/golang/gen.go index aa5ac77895..28beaa5af3 100644 --- a/internal/codegen/golang/gen.go +++ b/internal/codegen/golang/gen.go @@ -42,6 +42,7 @@ type tmplCtx struct { OmitSqlcVersion bool BuildTags string WrapErrors bool + EmitSliceExpansion bool } func (t *tmplCtx) OutputQuery(sourceName string) bool { @@ -55,6 +56,10 @@ func (t *tmplCtx) codegenDbarg() string { return "" } +func (t *tmplCtx) shouldExpandSlices(q Query) bool { + return t.EmitSliceExpansion && q.Arg.HasSqlcSlices() +} + // Called as a global method since subtemplate queryCodeStdExec does not have // access to the toplevel tmplCtx func (t *tmplCtx) codegenEmitPreparedQueries() bool { @@ -181,6 +186,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum, EmitMethodsWithDBArgument: options.EmitMethodsWithDbArgument, EmitEnumValidMethod: options.EmitEnumValidMethod, EmitAllEnumValues: options.EmitAllEnumValues, + EmitSliceExpansion: options.Engine != "ydb", UsesCopyFrom: usesCopyFrom(queries), UsesBatch: usesBatch(queries), SQLDriver: parseDriver(options.SqlPackage), @@ -218,8 +224,6 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum, } } - isYDBEngine := func() bool { return options.Engine == "ydb" } - funcMap := template.FuncMap{ "lowerTitle": sdk.LowerTitle, "comment": sdk.DoubleSlashComment, @@ -234,7 +238,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum, "emitPreparedQueries": tctx.codegenEmitPreparedQueries, "queryMethod": tctx.codegenQueryMethod, "queryRetval": tctx.codegenQueryRetval, - "isYDBEngine": isYDBEngine, + "shouldExpandSlices": tctx.shouldExpandSlices, } tmpl := template.Must( diff --git a/internal/codegen/golang/templates/stdlib/queryCode.tmpl b/internal/codegen/golang/templates/stdlib/queryCode.tmpl index 2f29369fb5..17e18fa86d 100644 --- a/internal/codegen/golang/templates/stdlib/queryCode.tmpl +++ b/internal/codegen/golang/templates/stdlib/queryCode.tmpl @@ -125,7 +125,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{ dbarg }} {{.Arg.Pair}} {{end}} {{define "queryCodeStdExec"}} - {{- if and (not isYDBEngine) .Arg.HasSqlcSlices }} + {{- if shouldExpandSlices . }} query := {{.ConstantName}} var queryParams []interface{} {{- if .Arg.Struct }}