@@ -9,10 +9,9 @@ import (
99 "github.com/ydb-platform/ydb-go-sdk/v3/balancers"
1010 "github.com/ydb-platform/ydb-go-sdk/v3/credentials"
1111 "github.com/ydb-platform/ydb-go-sdk/v3/internal/bind"
12- "github.com/ydb-platform/ydb-go-sdk/v3/internal/connector"
1312 "github.com/ydb-platform/ydb-go-sdk/v3/internal/dsn"
14- tableSql "github.com/ydb-platform/ydb-go-sdk/v3/internal/table/conn"
1513 "github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
14+ "github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql"
1615)
1716
1817const tablePathPrefixTransformer = "table_path_prefix"
@@ -44,6 +43,22 @@ func UnregisterDsnParser(registrationID int) {
4443 dsnParsers [registrationID ] = nil
4544}
4645
46+ var stringToType = map [string ]QueryMode {
47+ "data" : DataQueryMode ,
48+ "scan" : ScanQueryMode ,
49+ "scheme" : SchemeQueryMode ,
50+ "scripting" : ScriptingQueryMode ,
51+ "query" : QueryExecuteQueryMode ,
52+ }
53+
54+ func queryModeFromString (s string ) QueryMode {
55+ if t , ok := stringToType [s ]; ok {
56+ return t
57+ }
58+
59+ return unknownQueryMode
60+ }
61+
4762//nolint:funlen
4863func parseConnectionString (dataSourceName string ) (opts []Option , _ error ) {
4964 info , err := dsn .Parse (dataSourceName )
@@ -60,45 +75,52 @@ func parseConnectionString(dataSourceName string) (opts []Option, _ error) {
6075 opts = append (opts , WithBalancer (balancers .FromConfig (balancer )))
6176 }
6277 if queryMode := info .Params .Get ("go_query_mode" ); queryMode != "" {
63- mode := tableSql .QueryModeFromString (queryMode )
64- if mode == tableSql .UnknownQueryMode {
78+ switch mode := queryModeFromString (queryMode ); mode {
79+ case QueryExecuteQueryMode :
80+ opts = append (opts , withConnectorOptions (xsql .WithQueryService (true )))
81+ case unknownQueryMode :
6582 return nil , xerrors .WithStackTrace (fmt .Errorf ("unknown query mode: %s" , queryMode ))
83+ default :
84+ opts = append (opts , withConnectorOptions (xsql .WithDefaultQueryMode (modeToMode (mode ))))
6685 }
67- opts = append (opts , withConnectorOptions (connector .WithDefaultQueryMode (mode )))
6886 } else if queryMode := info .Params .Get ("query_mode" ); queryMode != "" {
69- mode := tableSql .QueryModeFromString (queryMode )
70- if mode == tableSql .UnknownQueryMode {
87+ switch mode := queryModeFromString (queryMode ); mode {
88+ case QueryExecuteQueryMode :
89+ opts = append (opts , withConnectorOptions (xsql .WithQueryService (true )))
90+ case unknownQueryMode :
7191 return nil , xerrors .WithStackTrace (fmt .Errorf ("unknown query mode: %s" , queryMode ))
92+ default :
93+ opts = append (opts , withConnectorOptions (xsql .WithDefaultQueryMode (modeToMode (mode ))))
7294 }
73- opts = append (opts , withConnectorOptions (connector .WithDefaultQueryMode (mode )))
7495 }
7596 if fakeTx := info .Params .Get ("go_fake_tx" ); fakeTx != "" {
7697 for _ , queryMode := range strings .Split (fakeTx , "," ) {
77- mode := tableSql . QueryModeFromString (queryMode )
78- if mode == tableSql . UnknownQueryMode {
98+ switch mode := queryModeFromString (queryMode ); mode {
99+ case unknownQueryMode :
79100 return nil , xerrors .WithStackTrace (fmt .Errorf ("unknown query mode: %s" , queryMode ))
101+ default :
102+ opts = append (opts , withConnectorOptions (WithFakeTx (mode )))
80103 }
81- opts = append (opts , withConnectorOptions (connector .WithFakeTx (mode )))
82104 }
83105 }
84106 if info .Params .Has ("go_query_bind" ) {
85- var binders []connector .Option
107+ var binders []xsql .Option
86108 queryTransformers := strings .Split (info .Params .Get ("go_query_bind" ), "," )
87109 for _ , transformer := range queryTransformers {
88110 switch transformer {
89111 case "declare" :
90- binders = append (binders , connector .WithQueryBind (bind.AutoDeclare {}))
112+ binders = append (binders , xsql .WithQueryBind (bind.AutoDeclare {}))
91113 case "positional" :
92- binders = append (binders , connector .WithQueryBind (bind.PositionalArgs {}))
114+ binders = append (binders , xsql .WithQueryBind (bind.PositionalArgs {}))
93115 case "numeric" :
94- binders = append (binders , connector .WithQueryBind (bind.NumericArgs {}))
116+ binders = append (binders , xsql .WithQueryBind (bind.NumericArgs {}))
95117 default :
96118 if strings .HasPrefix (transformer , tablePathPrefixTransformer ) {
97119 prefix , err := extractTablePathPrefixFromBinderName (transformer )
98120 if err != nil {
99121 return nil , xerrors .WithStackTrace (err )
100122 }
101- binders = append (binders , connector .WithQueryBind (bind .TablePathPrefix (prefix )))
123+ binders = append (binders , xsql .WithQueryBind (bind .TablePathPrefix (prefix )))
102124 } else {
103125 return nil , xerrors .WithStackTrace (
104126 fmt .Errorf ("unknown query rewriter: %s" , transformer ),
0 commit comments