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/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..5f9e587013 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() { @@ -413,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 { @@ -424,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/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..bdeda3f4d8 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" @@ -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": @@ -342,8 +344,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 +417,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/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/codegen/golang/ydb_type.go b/internal/codegen/golang/ydb_type.go index ada576795d..75a92fcc60 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" } @@ -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" @@ -181,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" } @@ -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..b3cd2a53c8 --- /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 = $i +` + +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 new file mode 100644 index 0000000000..e8d221cefe --- /dev/null +++ b/internal/endtoend/testdata/alias/ydb/stdlib/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/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..a7f0d9dc2c --- /dev/null +++ b/internal/endtoend/testdata/alias/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 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) { + parameters := ydb.ParamsBuilder() + parameters = parameters.Param("$i").Int32(i) + row, err := q.db.QueryRow(ctx, aliasBar, + 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/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..03c23d23d3 --- /dev/null +++ b/internal/endtoend/testdata/array_in/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 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 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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/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..d0f523428d --- /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) ([]byte, error) { + row := q.db.QueryRowContext(ctx, fSubstring2) + var substring []byte + err := row.Scan(&substring) + return substring, err +} + +const fSubstring3 = `-- name: FSubstring3 :one +SELECT Substring("abcdef", 2, 3) +` + +func (q *Queries) FSubstring3(ctx context.Context) ([]byte, error) { + row := q.db.QueryRowContext(ctx, fSubstring3) + var substring []byte + 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) ([]byte, error) { + row := q.db.QueryRowContext(ctx, fToBytes) + var tobytes []byte + 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) ([]byte, error) { + row := q.db.QueryRowContext(ctx, fVersion) + var version []byte + 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/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..b0723c7f4f --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/query.sql @@ -0,0 +1,10 @@ +-- 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..7e97e62564 --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/ydb/schema.sql @@ -0,0 +1,9 @@ +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..e85f2a696f --- /dev/null +++ b/internal/endtoend/testdata/case_sensitive/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/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..cb686c2288 --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/query.sql @@ -0,0 +1,10 @@ +-- 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..1312538949 --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/ydb/schema.sql @@ -0,0 +1,5 @@ +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..e85f2a696f --- /dev/null +++ b/internal/endtoend/testdata/case_stmt_bool/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/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..c4d69e44dd --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/query.sql @@ -0,0 +1,10 @@ +-- 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..1312538949 --- /dev/null +++ b/internal/endtoend/testdata/case_text/ydb/schema.sql @@ -0,0 +1,5 @@ +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..e85f2a696f --- /dev/null +++ b/internal/endtoend/testdata/case_text/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/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..5abb61063e --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/query.sql @@ -0,0 +1,6 @@ +-- 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..eaa52079a5 --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/ydb/schema.sql @@ -0,0 +1,8 @@ +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..bb070aeeba --- /dev/null +++ b/internal/endtoend/testdata/case_value_param/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/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..58febc7ab3 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/query.sql @@ -0,0 +1,6 @@ +-- 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..6ca25109f3 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/stdlib/schema.sql @@ -0,0 +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 new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/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/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..58febc7ab3 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,6 @@ +-- 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..6ca25109f3 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/schema.sql @@ -0,0 +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 new file mode 100644 index 0000000000..41b4416e16 --- /dev/null +++ b/internal/endtoend/testdata/cast_coalesce/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,16 @@ +{ + "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..d87e614af9 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/query.sql @@ -0,0 +1,11 @@ +-- 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..6ca25109f3 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/stdlib/schema.sql @@ -0,0 +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 new file mode 100644 index 0000000000..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/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/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..d87e614af9 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,11 @@ +-- 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..6ca25109f3 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/schema.sql @@ -0,0 +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 new file mode 100644 index 0000000000..41b4416e16 --- /dev/null +++ b/internal/endtoend/testdata/cast_null/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,16 @@ +{ + "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..0196291aaf --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/query.sql @@ -0,0 +1,7 @@ +-- 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..64a2bbae25 --- /dev/null +++ b/internal/endtoend/testdata/cast_param/ydb/schema.sql @@ -0,0 +1,8 @@ +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..c5959ba446 --- /dev/null +++ b/internal/endtoend/testdata/cast_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/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/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..e06fbc6499 --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/go/models.go @@ -0,0 +1,132 @@ +// 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 *[]byte + B *string +} + +type DtCharacterNotNull struct { + ID int32 + A []byte + 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 + 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 + 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..1cc688315c --- /dev/null +++ b/internal/endtoend/testdata/datatype/ydb/ydb-go-sdk/sql/numeric.sql @@ -0,0 +1,57 @@ +-- 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), + -- 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, + -- 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/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/go.mod b/internal/endtoend/testdata/go.mod index e2a7ea704b..f42403edb9 100644 --- a/internal/endtoend/testdata/go.mod +++ b/internal/endtoend/testdata/go.mod @@ -1,35 +1,47 @@ 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 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 ) 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/pgvector/pgvector-go v0.1.1 // indirect + github.com/jonboulle/clockwork v0.5.0 // 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 + 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..8b6231f9b5 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,62 @@ 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-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= 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/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= +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/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.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/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= @@ -45,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= @@ -64,16 +119,16 @@ 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= 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 +156,10 @@ 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/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= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= @@ -123,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= @@ -132,10 +208,27 @@ 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/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= @@ -147,18 +240,36 @@ 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-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.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +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= +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 +280,22 @@ 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.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.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +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= @@ -187,10 +303,41 @@ 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= +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 +345,12 @@ 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= +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= 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_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_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_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_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_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_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/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/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_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..74299f3dab --- /dev/null +++ b/internal/endtoend/testdata/params_duplicate/ydb/go/query.sql.go @@ -0,0 +1,123 @@ +// 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 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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_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/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..60cddb5501 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/query.sql @@ -0,0 +1,45 @@ +-- 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..49e4adf991 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/schema.sql @@ -0,0 +1,28 @@ +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..17d4acefc5 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/stdlib/sqlc.json @@ -0,0 +1,25 @@ +{ + "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..e5f2158c2f --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,325 @@ +// 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" + "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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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 := 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, + &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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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..36e036a6a2 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/query.sql @@ -0,0 +1,46 @@ +-- 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..49e4adf991 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/schema.sql @@ -0,0 +1,28 @@ +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..9cf331d753 --- /dev/null +++ b/internal/endtoend/testdata/params_location/ydb/ydb-go-sdk/sqlc.json @@ -0,0 +1,26 @@ +{ + "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..8ab13b0b61 --- /dev/null +++ b/internal/endtoend/testdata/params_two/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" + "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 := 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/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..d7dd757a20 --- /dev/null +++ b/internal/endtoend/testdata/select_distinct/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 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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..93a3d6b98d --- /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, id int32) (bool, error) { + row := q.db.QueryRowContext(ctx, barExists, id) + var exists bool + err := row.Scan(&exists) + return exists, 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_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_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..f1617d5335 --- /dev/null +++ b/internal/endtoend/testdata/select_limit/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,92 @@ +// 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 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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_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_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..e9d9702c03 --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/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 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) (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 not_exists bool + if err != nil { + return not_exists, xerrors.WithStackTrace(err) + } + err = row.Scan(¬_exists) + if err != nil { + return not_exists, xerrors.WithStackTrace(err) + } + 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 new file mode 100644 index 0000000000..497c85bfcf --- /dev/null +++ b/internal/endtoend/testdata/select_not_exists/ydb-go-sdk/query.sql @@ -0,0 +1,10 @@ +-- name: BarNotExists :one +SELECT + NOT 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..24789ce06e --- /dev/null +++ b/internal/endtoend/testdata/select_star/ydb/ydb-go-sdk/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" + "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 +} + +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 := result.NextRow(ctx) + if errors.Is(err, io.EOF) { + break + } + 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/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/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..64e9be9b75 --- /dev/null +++ b/internal/endtoend/testdata/sqlc_slice/ydb/ydb-go-sdk/go/query.sql.go @@ -0,0 +1,252 @@ +// 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 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 := 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 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 := 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 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 := 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 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 := 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 + 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 := 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 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/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/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..5a1d37c0fc 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{ @@ -47,7 +47,7 @@ func TestDelete(t *testing.T) { }, }, Batch: false, - OnCols: nil, + OnCols: &ast.List{Items: []ast.Node{}}, OnSelectStmt: nil, }, }, @@ -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{ @@ -83,7 +83,7 @@ func TestDelete(t *testing.T) { }, }, Batch: true, - OnCols: nil, + OnCols: &ast.List{Items: []ast.Node{}}, OnSelectStmt: nil, }, }, @@ -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..f98333b16d 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{ @@ -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, }, }, @@ -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{ @@ -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, }, }, @@ -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{ @@ -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 fb818a5d5b..564a612b0d 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" @@ -680,7 +681,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 { @@ -690,7 +694,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() @@ -731,7 +735,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 { @@ -850,11 +854,14 @@ 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 - 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 { @@ -998,6 +1005,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()), } @@ -1015,7 +1023,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 @@ -1056,7 +1064,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 { @@ -1491,8 +1499,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,12 +1620,44 @@ 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} + case *ast.RangeFunction: + 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} + case *ast.RangeFunction: + 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 } + + 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 } @@ -1620,11 +1667,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, - 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 { @@ -1635,13 +1682,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) @@ -1824,36 +1946,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, @@ -2694,9 +2813,18 @@ 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}}}, - Rexpr: operand, + Lexpr: operand, Location: c.pos(n.GetStart()), } } @@ -2800,48 +2928,87 @@ 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.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 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("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: + expr, ok := n.Case_expr().Accept(c).(ast.Node) + if !ok { + return todo("VisitIn_atom_expr", n.Case_expr()) } return expr - case n.LPAREN() != nil && n.Select_stmt() != nil && n.RPAREN() != nil: + case n.An_id_or_type() != nil: + if n.NAMESPACE() != nil { + 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()), + } + + case n.Select_stmt() != nil: selectStmt, ok := n.Select_stmt().Accept(c).(ast.Node) if !ok { - return todo("VisitAtom_expr", n.Select_stmt()) + return todo("VisitIn_atom_expr", n.Select_stmt()) } return selectStmt + case n.Value_constructor() != nil: + return todo("VisitIn_atom_expr", n.Value_constructor()) + + case n.Bitcast_expr() != nil: + 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("VisitIn_atom_expr", n.Dict_literal()) + + case n.Struct_literal() != nil: + return todo("VisitIn_atom_expr", n.Struct_literal()) + // TODO: check other cases default: return todo("VisitAtom_expr", n) @@ -2966,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 { @@ -2999,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{ @@ -3200,16 +3368,34 @@ 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()) + 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()) @@ -3262,6 +3448,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) @@ -3305,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 @@ -3386,6 +3607,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/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/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"}}, + }, + }, + } +} 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"}}, 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) } } } 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 + } +}