Skip to content

Commit 051cd5d

Browse files
feat(TableService): CreateTable with default value options
1 parent 29e756f commit 051cd5d

File tree

4 files changed

+66
-100
lines changed

4 files changed

+66
-100
lines changed

table/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050
<configuration>
5151
<environmentVariables>
5252
<TESTCONTAINERS_REUSE_ENABLE>true</TESTCONTAINERS_REUSE_ENABLE>
53-
<YDB_DOCKER_IMAGE>ydbplatform/local-ydb:trunk</YDB_DOCKER_IMAGE>
53+
<YDB_DOCKER_IMAGE>ydbplatform/local-ydb:latest</YDB_DOCKER_IMAGE>
54+
<YDB_ENDPOINT>grpc://localhost:2136</YDB_ENDPOINT>
5455
</environmentVariables>
5556
</configuration>
5657
</plugin>

table/src/main/java/tech/ydb/table/description/SequenceDescription.java

Lines changed: 24 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,30 @@
77
*/
88
public class SequenceDescription {
99

10+
private final String name;
11+
@Nullable
12+
private final Long minValue;
13+
@Nullable
14+
private final Long maxValue;
15+
@Nullable
16+
private final Long startValue;
17+
@Nullable
18+
private final Long cache;
19+
@Nullable
20+
private final Long increment;
21+
@Nullable
22+
private final Boolean cycle;
23+
24+
private SequenceDescription(Builder builder) {
25+
this.name = builder.name;
26+
this.minValue = builder.minValue;
27+
this.maxValue = builder.maxValue;
28+
this.startValue = builder.startValue;
29+
this.cache = builder.cache;
30+
this.increment = builder.increment;
31+
this.cycle = builder.cycle;
32+
}
33+
1034
public String getName() {
1135
return name;
1236
}
@@ -41,61 +65,6 @@ public Boolean getCycle() {
4165
return cycle;
4266
}
4367

44-
@Nullable
45-
public SetVal getSetVal() {
46-
return setVal;
47-
}
48-
49-
public static class SetVal {
50-
@Nullable
51-
private final Long nextValue;
52-
@Nullable
53-
private final Boolean nextUsed;
54-
55-
public SetVal(@Nullable Long nextValue, @Nullable Boolean nextUsed) {
56-
this.nextValue = nextValue;
57-
this.nextUsed = nextUsed;
58-
}
59-
60-
@Nullable
61-
public Long getNextValue() {
62-
return nextValue;
63-
}
64-
65-
@Nullable
66-
public Boolean getNextUsed() {
67-
return nextUsed;
68-
}
69-
}
70-
71-
@Nullable
72-
private final String name;
73-
@Nullable
74-
private final Long minValue;
75-
@Nullable
76-
private final Long maxValue;
77-
@Nullable
78-
private final Long startValue;
79-
@Nullable
80-
private final Long cache;
81-
@Nullable
82-
private final Long increment;
83-
@Nullable
84-
private final Boolean cycle;
85-
@Nullable
86-
private final SetVal setVal;
87-
88-
private SequenceDescription(Builder builder) {
89-
this.name = builder.name;
90-
this.minValue = builder.minValue;
91-
this.maxValue = builder.maxValue;
92-
this.startValue = builder.startValue;
93-
this.cache = builder.cache;
94-
this.increment = builder.increment;
95-
this.cycle = builder.cycle;
96-
this.setVal = builder.setVal;
97-
}
98-
9968
public static Builder newBuilder() {
10069
return new Builder();
10170
}
@@ -108,7 +77,6 @@ public static class Builder {
10877
private Long cache;
10978
private Long increment;
11079
private Boolean cycle;
111-
private SetVal setVal;
11280

11381
public Builder setName(String name) {
11482
this.name = name;
@@ -145,11 +113,6 @@ public Builder setCycle(@Nullable Boolean cycle) {
145113
return this;
146114
}
147115

148-
public Builder setSetVal(@Nullable Long nextValue, @Nullable Boolean nextUsed) {
149-
this.setVal = new SetVal(nextValue, nextUsed);
150-
return this;
151-
}
152-
153116
public SequenceDescription build() {
154117
if (name == null) {
155118
throw new IllegalStateException("name is required");

table/src/main/java/tech/ydb/table/impl/BaseSession.java

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -237,24 +237,10 @@ private static YdbTable.ColumnMeta buildColumnMeta(TableColumn column) {
237237
}
238238

239239
if (column.getSequenceDescription() != null) {
240-
YdbTable.SequenceDescription.Builder sequenceDescriptionBuilder = YdbTable.SequenceDescription.newBuilder();
241240
SequenceDescription sequenceDescription = column.getSequenceDescription();
242-
sequenceDescriptionBuilder.setName(sequenceDescription.getName());
243-
244-
if (sequenceDescription.getSetVal() != null) {
245-
YdbTable.SequenceDescription.SetVal.Builder setValBuilder = YdbTable.SequenceDescription.SetVal.newBuilder();
246-
SequenceDescription.SetVal setVal = sequenceDescription.getSetVal();
247-
248-
if (setVal.getNextValue() != null) {
249-
setValBuilder.setNextValue(setVal.getNextValue());
250-
}
251-
252-
if (setVal.getNextUsed() != null) {
253-
setValBuilder.setNextUsed(setVal.getNextUsed());
254-
}
255-
256-
sequenceDescriptionBuilder.setSetVal(setValBuilder.build());
257-
}
241+
YdbTable.SequenceDescription.Builder sequenceDescriptionBuilder = YdbTable.SequenceDescription
242+
.newBuilder()
243+
.setName(sequenceDescription.getName());
258244

259245
if (sequenceDescription.getMinValue() != null) {
260246
sequenceDescriptionBuilder.setMinValue(sequenceDescription.getMinValue());
@@ -820,6 +806,7 @@ private static ChangefeedDescription.State mapChangefeedState(YdbTable.Changefee
820806
}
821807
}
822808

809+
@SuppressWarnings("checkstyle:MethodLength")
823810
private static Result<TableDescription> mapDescribeTable(Result<YdbTable.DescribeTableResult> describeResult,
824811
DescribeTableSettings settings) {
825812
if (!describeResult.isSuccess()) {
@@ -880,12 +867,6 @@ private static Result<TableDescription> mapDescribeTable(Result<YdbTable.Describ
880867
if (pbSeq.hasCycle()) {
881868
sequenceDescriptionBuilder.setCycle(pbSeq.getCycle());
882869
}
883-
if (pbSeq.hasSetVal()) {
884-
YdbTable.SequenceDescription.SetVal setVal = pbSeq.getSetVal();
885-
Long nextValue = setVal.hasNextValue() ? setVal.getNextValue() : null;
886-
Boolean nextUsed = setVal.hasNextUsed() ? setVal.getNextUsed() : null;
887-
sequenceDescriptionBuilder.setSetVal(nextValue, nextUsed);
888-
}
889870

890871
description.addColumn(new TableColumn(column.getName(), type, column.getFamily(),
891872
sequenceDescriptionBuilder.build()));

table/src/test/java/tech/ydb/table/integration/CreateTableTest.java

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
import tech.ydb.table.values.PrimitiveValue;
1919
import tech.ydb.test.junit4.GrpcTransportRule;
2020

21+
import java.time.Duration;
22+
import java.time.temporal.ChronoUnit;
23+
2124
/**
2225
* @author Kirill Kurdyukov
2326
*/
@@ -43,10 +46,10 @@ public void smallSerialTest() {
4346

4447
Status createStatus = ctx.supplyStatus(session ->
4548
session.createTable(tablePath, tableDescription, new CreateTableSettings())).join();
46-
Assert.assertTrue("Create table with indexes " + createStatus, createStatus.isSuccess());
49+
Assert.assertTrue("Create table with small serial " + createStatus, createStatus.isSuccess());
4750

4851
Result<TableDescription> describeResult = ctx.supplyResult(session -> session.describeTable(tablePath)).join();
49-
Assert.assertTrue("Describe table with indexes " + describeResult.getStatus(), describeResult.isSuccess());
52+
Assert.assertTrue("Describe table with small serial " + describeResult.getStatus(), describeResult.isSuccess());
5053
TableColumn tableColumn = describeResult.getValue().getColumns().get(0);
5154
Assert.assertNotNull(tableColumn.getSequenceDescription());
5255
Assert.assertEquals("sequence_default", tableColumn.getSequenceDescription().getName());
@@ -64,10 +67,10 @@ public void serialTest() {
6467

6568
Status createStatus = ctx.supplyStatus(session ->
6669
session.createTable(tablePath, tableDescription, new CreateTableSettings())).join();
67-
Assert.assertTrue("Create table with indexes " + createStatus, createStatus.isSuccess());
70+
Assert.assertTrue("Create table with serial " + createStatus, createStatus.isSuccess());
6871

6972
Result<TableDescription> describeResult = ctx.supplyResult(session -> session.describeTable(tablePath)).join();
70-
Assert.assertTrue("Describe table with indexes " + describeResult.getStatus(), describeResult.isSuccess());
73+
Assert.assertTrue("Describe table with serial " + describeResult.getStatus(), describeResult.isSuccess());
7174
TableColumn tableColumn = describeResult.getValue().getColumns().get(0);
7275
Assert.assertNotNull(tableColumn.getSequenceDescription());
7376
Assert.assertEquals("sequence_default", tableColumn.getSequenceDescription().getName());
@@ -87,10 +90,10 @@ public void bigSerialTest() {
8790

8891
Status createStatus = ctx.supplyStatus(session ->
8992
session.createTable(tablePath, tableDescription, new CreateTableSettings())).join();
90-
Assert.assertTrue("Create table with indexes " + createStatus, createStatus.isSuccess());
93+
Assert.assertTrue("Create table with big serial " + createStatus, createStatus.isSuccess());
9194

9295
Result<TableDescription> describeResult = ctx.supplyResult(session -> session.describeTable(tablePath)).join();
93-
Assert.assertTrue("Describe table with indexes " + describeResult.getStatus(), describeResult.isSuccess());
96+
Assert.assertTrue("Describe table with big serial " + describeResult.getStatus(), describeResult.isSuccess());
9497
TableDescription description = describeResult.getValue();
9598
TableColumn tableColumn = description.getColumns().get(0);
9699
Assert.assertNotNull(tableColumn.getSequenceDescription());
@@ -119,12 +122,13 @@ public void defaultValueTest() {
119122
Assert.assertNull(tableColumn.getSequenceDescription());
120123
Assert.assertEquals("text", tableColumn.getLiteralDefaultValue().getText());
121124
Assert.assertEquals(PrimitiveType.Text, tableColumn.getType());
122-
123125
ctx.supplyStatus(session -> session.dropTable(tablePath)).join();
126+
127+
124128
}
125129

126130
@Test
127-
public void customSequenceDescriptionTest() {
131+
public void customSequenceDescriptionTest() throws InterruptedException {
128132
String tablePath = ydbTransport.getDatabase() + "/default_value_table";
129133

130134
TableDescription tableDescription = TableDescription.newBuilder()
@@ -134,20 +138,19 @@ public void customSequenceDescriptionTest() {
134138
.setMinValue(10L)
135139
.setName("custom_sequence_description")
136140
.setCycle(true)
137-
.setSetVal(11L, true)
138141
.setIncrement(2L)
139142
.setStartValue(12L)
140143
.build()
141144
)
142145
.setPrimaryKey("id")
143146
.build();
144147

145-
Status createStatus = ctx.supplyStatus(session ->
146-
session.createTable(tablePath, tableDescription, new CreateTableSettings())).join();
147-
Assert.assertTrue("Create table with indexes " + createStatus, createStatus.isSuccess());
148-
148+
Thread.sleep(10_000);
149+
Status createStatus = ctx.supplyStatus(session -> session.createTable(tablePath, tableDescription)).join();
150+
Assert.assertTrue("Create table with sequence description " + createStatus, createStatus.isSuccess());
149151
Result<TableDescription> describeResult = ctx.supplyResult(session -> session.describeTable(tablePath)).join();
150-
Assert.assertTrue("Describe table with indexes " + describeResult.getStatus(), describeResult.isSuccess());
152+
Assert.assertTrue("Describe table with sequence description " + describeResult.getStatus(),
153+
describeResult.isSuccess());
151154
TableDescription description = describeResult.getValue();
152155
SequenceDescription sequenceDescription = description.getColumns().get(0).getSequenceDescription();
153156
Assert.assertNotNull(sequenceDescription);
@@ -158,7 +161,25 @@ public void customSequenceDescriptionTest() {
158161
Assert.assertEquals(true, sequenceDescription.getCycle());
159162
Assert.assertEquals(2L, (long) sequenceDescription.getIncrement());
160163
Assert.assertEquals(12L, (long) sequenceDescription.getStartValue());
161-
162164
ctx.supplyStatus(session -> session.dropTable(tablePath)).join();
165+
166+
createStatus = ctx.supplyStatus(session -> session.createTable(tablePath + "_copy", description)).join();
167+
Assert.assertTrue("Create copy table with sequence description " + createStatus,
168+
createStatus.isSuccess());
169+
Result<TableDescription> describeResultCopy = ctx.supplyResult(session ->
170+
session.describeTable(tablePath)).join();
171+
Assert.assertTrue("Describe copy table with sequence description " + describeResultCopy.getStatus(),
172+
describeResultCopy.isSuccess());
173+
SequenceDescription sequenceDescriptionCopy = describeResultCopy.getValue()
174+
.getColumns().get(0).getSequenceDescription();
175+
Assert.assertNotNull(sequenceDescription);
176+
Assert.assertEquals("custom_sequence_description", sequenceDescriptionCopy.getName());
177+
Assert.assertEquals(Integer.MAX_VALUE, sequenceDescriptionCopy.getMaxValue().intValue());
178+
Assert.assertEquals(10L, (long) sequenceDescriptionCopy.getMinValue());
179+
Assert.assertEquals(5L, (long) sequenceDescriptionCopy.getCache());
180+
Assert.assertEquals(true, sequenceDescriptionCopy.getCycle());
181+
Assert.assertEquals(2L, (long) sequenceDescriptionCopy.getIncrement());
182+
Assert.assertEquals(12L, (long) sequenceDescriptionCopy.getStartValue());
183+
ctx.supplyStatus(session -> session.dropTable(tablePath + "_copy")).join();
163184
}
164185
}

0 commit comments

Comments
 (0)