Skip to content

Commit 2cb71e1

Browse files
authored
Merge pull request #1556 from ydb-platform/params-as-map
Added experimental ydb.ParamsFromMap and ydb.MustParamsFromMap for build query parameters
2 parents 4008d75 + b6b0597 commit 2cb71e1

File tree

3 files changed

+78
-0
lines changed

3 files changed

+78
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
* Added experimental ydb.ParamsFromMap and ydb.MustParamsFromMap for build query parameters
12
* Refactored coordination traces
23
* gRPC connection will be forcefully closed on DNS resolver errors from now on
34

example_test.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,3 +510,46 @@ func ExampleOpen_advanced() {
510510
defer db.Close(ctx) // cleanup resources
511511
fmt.Printf("connected to %s, database '%s'", db.Endpoint(), db.Name())
512512
}
513+
514+
// func ExampleParamsMap
515+
func ExampleMustParamsFromMap() {
516+
ctx := context.TODO()
517+
db, err := ydb.Open(
518+
ctx,
519+
"grpc://localhost:2135/local",
520+
ydb.WithAnonymousCredentials(),
521+
ydb.WithBalancer(
522+
balancers.PreferLocationsWithFallback(
523+
balancers.RandomChoice(), "a", "b",
524+
),
525+
),
526+
ydb.WithSessionPoolSizeLimit(100),
527+
)
528+
if err != nil {
529+
fmt.Printf("Driver failed: %v", err)
530+
}
531+
defer db.Close(ctx) // cleanup resources
532+
fmt.Printf("connected to %s, database '%s'", db.Endpoint(), db.Name())
533+
534+
res, err := db.Query().QueryRow(ctx, `
535+
DECLARE $textArg AS Text;
536+
DECLARE $intArg AS Int64;
537+
538+
SELECT $textArg AS TextField, $intArg AS IntField
539+
`, query.WithParameters(ydb.MustParamsFromMap(map[string]any{
540+
"$textArg": "asd",
541+
"$intArg": int64(123),
542+
})))
543+
if err != nil {
544+
fmt.Printf("query failed")
545+
}
546+
547+
var result struct {
548+
TextField string
549+
IntField int64
550+
}
551+
err = res.ScanStruct(&result)
552+
if err != nil {
553+
fmt.Printf("scan failed")
554+
}
555+
}

params_map.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package ydb
2+
3+
import (
4+
"database/sql/driver"
5+
"fmt"
6+
7+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/bind"
8+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/params"
9+
)
10+
11+
// MustParamsFromMap build parameters from named map, panic if error
12+
//
13+
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
14+
func MustParamsFromMap(m map[string]any) *params.Parameters {
15+
p, err := ParamsFromMap(m)
16+
if err != nil {
17+
panic(fmt.Sprintf("ydb: MustParamsFromMap failed with error: %v", err))
18+
}
19+
20+
return p
21+
}
22+
23+
// ParamsFromMap build parameters from named map
24+
//
25+
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
26+
func ParamsFromMap(m map[string]any) (*params.Parameters, error) {
27+
namedParameters := make([]any, 0, len(m))
28+
for name, val := range m {
29+
namedParameters = append(namedParameters, driver.NamedValue{Name: name, Value: val})
30+
}
31+
p, err := bind.Params(namedParameters...)
32+
33+
return (*params.Parameters)(&p), err
34+
}

0 commit comments

Comments
 (0)