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  }