github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/tests/integration/table_create_table_partitions_test.go (about)

     1  //go:build integration
     2  
     3  package integration
     4  
     5  import (
     6  	"context"
     7  	"errors"
     8  	"fmt"
     9  	"os"
    10  	"path"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  
    15  	"github.com/ydb-platform/ydb-go-sdk/v3"
    16  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/xtest"
    17  	"github.com/ydb-platform/ydb-go-sdk/v3/log"
    18  	"github.com/ydb-platform/ydb-go-sdk/v3/table"
    19  	"github.com/ydb-platform/ydb-go-sdk/v3/table/options"
    20  	"github.com/ydb-platform/ydb-go-sdk/v3/table/types"
    21  	"github.com/ydb-platform/ydb-go-sdk/v3/trace"
    22  )
    23  
    24  func TestTableCreateTablePartitions(sourceTest *testing.T) {
    25  	t := xtest.MakeSyncedTest(sourceTest)
    26  	ctx := xtest.Context(t)
    27  
    28  	db, err := ydb.Open(ctx, os.Getenv("YDB_CONNECTION_STRING"),
    29  		ydb.WithLogger(
    30  			newLoggerWithMinLevel(t, log.WARN),
    31  			trace.MatchDetails(`ydb\.(driver|discovery|retry|scheme).*`),
    32  		),
    33  	)
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  	defer func() {
    38  		_ = db.Close(ctx)
    39  	}()
    40  
    41  	t.Run("uniform partitions", func(t *testing.T) {
    42  		err := db.Table().Do(ctx,
    43  			func(ctx context.Context, session table.Session) error {
    44  				tablePath := path.Join(db.Name(), "uniformTable")
    45  
    46  				err := session.CreateTable(ctx, tablePath,
    47  					options.WithColumn("key", types.Optional(types.TypeUint64)),
    48  					options.WithColumn("value", types.Optional(types.TypeJSON)),
    49  					options.WithPrimaryKeyColumn("key"),
    50  
    51  					options.WithPartitions(options.WithUniformPartitions(4)),
    52  				)
    53  				if err != nil {
    54  					return fmt.Errorf("failed to create table: %w", err)
    55  				}
    56  
    57  				desc, err := session.DescribeTable(ctx, tablePath, options.WithShardKeyBounds())
    58  				if err != nil {
    59  					return fmt.Errorf("failed to get table description: %w", err)
    60  				}
    61  				if len(desc.KeyRanges) != 4 {
    62  					return errors.New("key ranges len is not as expected")
    63  				}
    64  
    65  				return nil
    66  			},
    67  		)
    68  		assert.NoError(t, err)
    69  	})
    70  
    71  	t.Run("explicit partitions", func(t *testing.T) {
    72  		err := db.Table().Do(ctx,
    73  			func(ctx context.Context, session table.Session) error {
    74  				tablePath := path.Join(db.Name(), "explicitTable")
    75  
    76  				err := session.CreateTable(ctx, tablePath,
    77  					options.WithColumn("key", types.Optional(types.TypeUint64)),
    78  					options.WithColumn("value", types.Optional(types.TypeJSON)),
    79  					options.WithPrimaryKeyColumn("key"),
    80  
    81  					options.WithPartitions(
    82  						options.WithExplicitPartitions(
    83  							types.TupleValue(types.OptionalValue(types.Uint64Value(100))),
    84  							types.TupleValue(types.OptionalValue(types.Uint64Value(300))),
    85  							types.TupleValue(types.OptionalValue(types.Uint64Value(400))),
    86  						),
    87  					),
    88  				)
    89  				if err != nil {
    90  					return fmt.Errorf("failed to create table: %w", err)
    91  				}
    92  
    93  				desc, err := session.DescribeTable(ctx, tablePath, options.WithShardKeyBounds())
    94  				if err != nil {
    95  					return fmt.Errorf("failed to get table description: %w", err)
    96  				}
    97  				if len(desc.KeyRanges) != 4 {
    98  					return errors.New("key ranges len is not as expected")
    99  				}
   100  
   101  				return nil
   102  			},
   103  		)
   104  		assert.NoError(t, err)
   105  	})
   106  }