github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/query/options/execute_test.go (about) 1 package options 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 "google.golang.org/grpc" 8 9 "github.com/ydb-platform/ydb-go-sdk/v3/internal/allocator" 10 "github.com/ydb-platform/ydb-go-sdk/v3/internal/params" 11 internal "github.com/ydb-platform/ydb-go-sdk/v3/internal/query/tx" 12 ) 13 14 type txMock func() *internal.Control 15 16 func (tx txMock) txControl() *internal.Control { 17 if tx == nil { 18 return internal.NewControl(internal.WithTxID("")) 19 } 20 21 return tx() 22 } 23 24 func TestExecuteSettings(t *testing.T) { 25 for _, tt := range []struct { 26 name string 27 tx txMock 28 txOpts []Execute 29 settings executeSettings 30 }{ 31 { 32 name: "WithTxID", 33 tx: func() *internal.Control { 34 return internal.NewControl(internal.WithTxID("test")) 35 }, 36 settings: executeSettings{ 37 execMode: ExecModeExecute, 38 statsMode: StatsModeNone, 39 txControl: internal.NewControl(internal.WithTxID("test")), 40 syntax: SyntaxYQL, 41 }, 42 }, 43 { 44 name: "WithStats", 45 txOpts: []Execute{ 46 WithStatsMode(StatsModeFull, nil), 47 }, 48 settings: executeSettings{ 49 execMode: ExecModeExecute, 50 statsMode: StatsModeFull, 51 txControl: internal.NewControl(internal.WithTxID("")), 52 syntax: SyntaxYQL, 53 }, 54 }, 55 { 56 name: "WithExecMode", 57 txOpts: []Execute{ 58 WithExecMode(ExecModeExplain), 59 }, 60 settings: executeSettings{ 61 execMode: ExecModeExplain, 62 statsMode: StatsModeNone, 63 txControl: internal.NewControl(internal.WithTxID("")), 64 syntax: SyntaxYQL, 65 }, 66 }, 67 { 68 name: "WithSyntax", 69 txOpts: []Execute{ 70 WithSyntax(SyntaxPostgreSQL), 71 }, 72 settings: executeSettings{ 73 execMode: ExecModeExecute, 74 statsMode: StatsModeNone, 75 txControl: internal.NewControl(internal.WithTxID("")), 76 syntax: SyntaxPostgreSQL, 77 }, 78 }, 79 { 80 name: "WithGrpcOptions", 81 txOpts: []Execute{ 82 WithCallOptions(grpc.CallContentSubtype("test")), 83 }, 84 settings: executeSettings{ 85 execMode: ExecModeExecute, 86 statsMode: StatsModeNone, 87 txControl: internal.NewControl(internal.WithTxID("")), 88 syntax: SyntaxYQL, 89 callOptions: []grpc.CallOption{ 90 grpc.CallContentSubtype("test"), 91 }, 92 }, 93 }, 94 { 95 name: "WithParams", 96 txOpts: []Execute{ 97 WithParameters( 98 params.Builder{}.Param("$a").Text("A").Build(), 99 ), 100 }, 101 settings: executeSettings{ 102 execMode: ExecModeExecute, 103 statsMode: StatsModeNone, 104 txControl: internal.NewControl(internal.WithTxID("")), 105 syntax: SyntaxYQL, 106 params: *params.Builder{}.Param("$a").Text("A").Build(), 107 }, 108 }, 109 { 110 name: "WithCommitTx", 111 txOpts: []Execute{ 112 WithCommit(), 113 }, 114 settings: executeSettings{ 115 execMode: ExecModeExecute, 116 statsMode: StatsModeNone, 117 txControl: internal.NewControl(internal.WithTxID(""), internal.CommitTx()), 118 syntax: SyntaxYQL, 119 params: nil, 120 }, 121 }, 122 { 123 name: "WithResourcePool", 124 txOpts: []Execute{ 125 WithResourcePool("test-pool-id"), 126 }, 127 settings: executeSettings{ 128 execMode: ExecModeExecute, 129 statsMode: StatsModeNone, 130 txControl: internal.NewControl(internal.WithTxID("")), 131 syntax: SyntaxYQL, 132 resourcePool: "test-pool-id", 133 }, 134 }, 135 } { 136 t.Run(tt.name, func(t *testing.T) { 137 a := allocator.New() 138 settings := ExecuteSettings( 139 append( 140 []Execute{WithTxControl(tt.tx.txControl())}, 141 tt.txOpts..., 142 )..., 143 ) 144 require.Equal(t, tt.settings.Syntax(), settings.Syntax()) 145 require.Equal(t, tt.settings.ExecMode(), settings.ExecMode()) 146 require.Equal(t, tt.settings.StatsMode(), settings.StatsMode()) 147 require.Equal(t, tt.settings.ResourcePool(), settings.ResourcePool()) 148 require.Equal(t, tt.settings.TxControl().ToYDB(a).String(), settings.TxControl().ToYDB(a).String()) 149 require.Equal(t, tt.settings.Params().ToYDB(a), settings.Params().ToYDB(a)) 150 require.Equal(t, tt.settings.CallOptions(), settings.CallOptions()) 151 }) 152 } 153 }