Skip to content

dev: Auto Declare when using ydb.Params or another way to understand how to make Declare for variables added to ydb.Params #1713

Open
@flymedllva

Description

@flymedllva

Now it is not at all clear how to work with ydb.ParamsFromMap(m)/ydb.ParamsBuilder().Build(), let's say I do the filling of ydb.Params using these methods, using various if-then witches, but it is not clear how I should do Declare after that.

It seems only while adding a variable to Builder to change the SQL query, which seems to completely kill the essence of the builder.

Besides, it is not clear how to work with scanner/builder in the bundle

  • YDB -> Go Struct Field - it is necessary to use a scanner, which is not clear what type of field to scan into, because the types do not coincide.
  • Go Struct Field -> YDB - it is necessary to build with Builder and make Declare manually, formally types coincide.

To understand a simple example of how it is comfortable to use this builder now:

var (
	declareSb strings.Builder
	sqlSb     strings.Builder
	ydbPb     = ydb.ParamsBuilder()
)
sqlSb.WriteString(`$data = AsList(AsStruct(1 AS id),AsStruct(2 AS id));`)
sqlSb.WriteString(`SELECT id FROM AS_TABLE($data) WHERE`)
if a > 0 {
	declareSb.WriteString("DECLARE $a AS Uint64;\n")
	sqlSb.WriteString(" id = $a")
	ydbPb = ydbPb.Param("$a").Uint64(a)
} else {
	declareSb.WriteString("DECLARE $b AS Uint64;\n")
	sqlSb.WriteString(" id = $b")
	ydbPb = ydbPb.Param("$b").Uint64(uint64(b))
}
sqlSb.WriteString(";")
declareSb.WriteString(
	sqlSb.String(),
)
sql := declareSb.String()
params := ydbPb.Build()

err = db.Query().Do(ctx, func(ctx context.Context, s query.Session) (err error) {
	row, err := s.QueryRow(ctx, sql, query.WithParameters(params))
	...
})

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions