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 }