Skip to content

Commit 4be04b8

Browse files
authored
Merge pull request #552 from alex268/master
Updated serial/default value columns support
2 parents ffe6c1d + 9ad3239 commit 4be04b8

File tree

5 files changed

+746
-318
lines changed

5 files changed

+746
-318
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
* @author Kirill Kurdyukov
77
*/
88
public class SequenceDescription {
9+
public static final SequenceDescription DEFAULT = SequenceDescription.newBuilder().build();
910

11+
@Nullable
1012
private final String name;
1113
@Nullable
1214
private final Long minValue;
@@ -31,6 +33,7 @@ private SequenceDescription(Builder builder) {
3133
this.cycle = builder.cycle;
3234
}
3335

36+
@Nullable
3437
public String getName() {
3538
return name;
3639
}
@@ -70,7 +73,7 @@ public static Builder newBuilder() {
7073
}
7174

7275
public static class Builder {
73-
private String name = "sequence_default";
76+
private String name;
7477
private Long minValue;
7578
private Long maxValue;
7679
private Long startValue;
@@ -114,10 +117,6 @@ public Builder setCycle(@Nullable Boolean cycle) {
114117
}
115118

116119
public SequenceDescription build() {
117-
if (name == null) {
118-
throw new IllegalStateException("name is required");
119-
}
120-
121120
return new SequenceDescription(this);
122121
}
123122
}

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

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -141,32 +141,62 @@ public Builder addColumn(TableColumn column) {
141141
}
142142

143143
public Builder addNonnullColumn(String name, Type type) {
144-
return addNonnullColumn(name, type, (String) null);
144+
return addColumn(new TableColumn(name, type, null));
145145
}
146146

147147
public Builder addNonnullColumn(String name, Type type, String family) {
148-
columns.put(name, new TableColumn(name, type, family));
149-
return this;
148+
return addColumn(new TableColumn(name, type, family));
149+
}
150+
151+
public Builder addNonnullColumn(String name, Type type, PrimitiveValue defaultValue) {
152+
return addColumn(new TableColumn(name, type, null, defaultValue));
150153
}
151154

155+
public Builder addNullableColumn(String name, Type type) {
156+
return addColumn(new TableColumn(name, OptionalType.of(type)));
157+
}
158+
159+
public Builder addNullableColumn(String name, Type type, String family) {
160+
return addColumn(new TableColumn(name, OptionalType.of(type), family));
161+
}
162+
163+
public Builder addNullableColumn(String name, Type type, PrimitiveValue defaultValue) {
164+
return addColumn(new TableColumn(name, OptionalType.of(type), null, defaultValue));
165+
}
166+
167+
public Builder addSmallSerialColumn(String name) {
168+
return addColumn(new TableColumn(name, PrimitiveType.Int16, null, SequenceDescription.DEFAULT));
169+
}
170+
171+
public Builder addSerialColumn(String name) {
172+
return addColumn(new TableColumn(name, PrimitiveType.Int32, null, SequenceDescription.DEFAULT));
173+
}
174+
175+
public Builder addBigSerialColumn(String name) {
176+
return addColumn(new TableColumn(name, PrimitiveType.Int64, null, SequenceDescription.DEFAULT));
177+
}
178+
179+
@Deprecated
152180
public Builder addColumn(String name, Type type, PrimitiveValue defaultValue) {
153-
columns.put(name, new TableColumn(name, type, null, defaultValue));
154-
return this;
181+
return addColumn(new TableColumn(name, type, null, defaultValue));
155182
}
156183

184+
@Deprecated
157185
public Builder addColumn(String name, Type type, String family, PrimitiveValue defaultValue) {
158-
columns.put(name, new TableColumn(name, type, family, defaultValue));
159-
return this;
186+
return addColumn(new TableColumn(name, type, family, defaultValue));
160187
}
161188

189+
@Deprecated
162190
public Builder addSequenceColumn(String name, Type type) {
163191
return addSequenceColumn(name, type, null, SequenceDescription.newBuilder().build());
164192
}
165193

194+
@Deprecated
166195
public Builder addSequenceColumn(String name, Type type, String family) {
167196
return addSequenceColumn(name, type, family, SequenceDescription.newBuilder().build());
168197
}
169198

199+
@Deprecated
170200
public Builder addSequenceColumn(
171201
String name,
172202
Type type,
@@ -193,38 +223,32 @@ public Builder addSequenceColumn(
193223
throw new IllegalArgumentException("Type " + type + " cannot be used as a sequence column");
194224
}
195225

196-
public Builder addSmallSerialColumn(String name) {
197-
return addSmallSerialColumn(name, null, SequenceDescription.newBuilder().build());
198-
}
199-
200-
public Builder addSerialColumn(String name) {
201-
return addSerialColumn(name, null, SequenceDescription.newBuilder().build());
202-
}
203-
204-
public Builder addBigSerialColumn(String name) {
205-
return addBigSerialColumn(name, null, SequenceDescription.newBuilder().build());
206-
}
207-
226+
@Deprecated
208227
public Builder addSmallSerialColumn(String name, SequenceDescription sequenceDescription) {
209228
return addSmallSerialColumn(name, null, sequenceDescription);
210229
}
211230

231+
@Deprecated
212232
public Builder addSerialColumn(String name, SequenceDescription sequenceDescription) {
213233
return addSerialColumn(name, null, sequenceDescription);
214234
}
215235

236+
@Deprecated
216237
public Builder addBigSerialColumn(String name, SequenceDescription sequenceDescription) {
217238
return addBigSerialColumn(name, null, sequenceDescription);
218239
}
219240

241+
@Deprecated
220242
public Builder addSmallSerialColumn(String name, String family, SequenceDescription sequenceDescription) {
221243
return addSequenceColumn(name, PrimitiveType.Int16, family, sequenceDescription);
222244
}
223245

246+
@Deprecated
224247
public Builder addSerialColumn(String name, String family, SequenceDescription sequenceDescription) {
225248
return addSequenceColumn(name, PrimitiveType.Int32, family, sequenceDescription);
226249
}
227250

251+
@Deprecated
228252
public Builder addBigSerialColumn(String name, String family, SequenceDescription sequenceDescription) {
229253
return addSequenceColumn(name, PrimitiveType.Int64, family, sequenceDescription);
230254
}
@@ -234,15 +258,6 @@ public Builder addKeyRange(KeyRange value) {
234258
return this;
235259
}
236260

237-
public Builder addNullableColumn(String name, Type type) {
238-
return addNullableColumn(name, type, null);
239-
}
240-
241-
public Builder addNullableColumn(String name, Type type, String family) {
242-
columns.put(name, new TableColumn(name, OptionalType.of(type), family));
243-
return this;
244-
}
245-
246261
public Builder setPrimaryKey(String name) {
247262
checkColumnKnown(name);
248263
primaryKeys = ImmutableList.of(name);

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

Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
import tech.ydb.table.transaction.Transaction;
9999
import tech.ydb.table.transaction.TxControl;
100100
import tech.ydb.table.values.ListType;
101+
import tech.ydb.table.values.OptionalValue;
101102
import tech.ydb.table.values.PrimitiveValue;
102103
import tech.ydb.table.values.StructValue;
103104
import tech.ydb.table.values.TupleValue;
@@ -228,43 +229,41 @@ private static YdbTable.ColumnMeta buildColumnMeta(TableColumn column) {
228229
}
229230
if (column.hasDefaultValue()) {
230231
if (column.getLiteralDefaultValue() != null) {
231-
builder.setFromLiteral(ValueProtos.TypedValue.newBuilder()
232-
.setType(column.getType().toPb())
233-
.setValue(column.getLiteralDefaultValue().toPb()).build()
234-
);
232+
builder.setFromLiteral(ProtoValue.toTypedValue(column.getLiteralDefaultValue()));
235233
}
236234

237-
if (column.getSequenceDescription() != null) {
238-
SequenceDescription sequenceDescription = column.getSequenceDescription();
239-
YdbTable.SequenceDescription.Builder sequenceDescriptionBuilder = YdbTable.SequenceDescription
235+
SequenceDescription seqDescription = column.getSequenceDescription();
236+
if (seqDescription != null) {
237+
String seqName = seqDescription.getName();
238+
YdbTable.SequenceDescription.Builder seqBuilder = YdbTable.SequenceDescription
240239
.newBuilder()
241-
.setName(sequenceDescription.getName());
240+
.setName(seqName != null ? seqName : "_serial_column_" + column.getName());
242241

243-
if (sequenceDescription.getMinValue() != null) {
244-
sequenceDescriptionBuilder.setMinValue(sequenceDescription.getMinValue());
242+
if (seqDescription.getMinValue() != null) {
243+
seqBuilder.setMinValue(seqDescription.getMinValue());
245244
}
246245

247-
if (sequenceDescription.getMaxValue() != null) {
248-
sequenceDescriptionBuilder.setMaxValue(sequenceDescription.getMaxValue());
246+
if (seqDescription.getMaxValue() != null) {
247+
seqBuilder.setMaxValue(seqDescription.getMaxValue());
249248
}
250249

251-
if (sequenceDescription.getStartValue() != null) {
252-
sequenceDescriptionBuilder.setStartValue(sequenceDescription.getStartValue());
250+
if (seqDescription.getStartValue() != null) {
251+
seqBuilder.setStartValue(seqDescription.getStartValue());
253252
}
254253

255-
if (sequenceDescription.getCache() != null) {
256-
sequenceDescriptionBuilder.setCache(sequenceDescription.getCache());
254+
if (seqDescription.getCache() != null) {
255+
seqBuilder.setCache(seqDescription.getCache());
257256
}
258257

259-
if (sequenceDescription.getIncrement() != null) {
260-
sequenceDescriptionBuilder.setIncrement(sequenceDescription.getIncrement());
258+
if (seqDescription.getIncrement() != null) {
259+
seqBuilder.setIncrement(seqDescription.getIncrement());
261260
}
262261

263-
if (sequenceDescription.getCycle() != null) {
264-
sequenceDescriptionBuilder.setCycle(sequenceDescription.getCycle());
262+
if (seqDescription.getCycle() != null) {
263+
seqBuilder.setCycle(seqDescription.getCycle());
265264
}
266265

267-
builder.setFromSequence(sequenceDescriptionBuilder.build());
266+
builder.setFromSequence(seqBuilder.build());
268267
}
269268
}
270269

@@ -442,7 +441,9 @@ public CompletableFuture<Status> createTable(
442441
}
443442

444443
for (ColumnFamily family : description.getColumnFamilies()) {
445-
request.addColumnFamilies(buildColumnFamily(family));
444+
if (!"default".equals(family.getName())) {
445+
request.addColumnFamilies(buildColumnFamily(family));
446+
}
446447
}
447448

448449
for (TableColumn column : description.getColumns()) {
@@ -839,40 +840,53 @@ private static Result<TableDescription> mapDescribeTable(Result<YdbTable.Describ
839840

840841
if (column.hasFromSequence()) {
841842
YdbTable.SequenceDescription pbSeq = column.getFromSequence();
842-
SequenceDescription.Builder sequenceDescriptionBuilder = new SequenceDescription.Builder();
843+
SequenceDescription.Builder seqBuilder = new SequenceDescription.Builder();
843844

844845
if (pbSeq.hasName()) {
845-
sequenceDescriptionBuilder.setName(pbSeq.getName());
846+
seqBuilder.setName(pbSeq.getName());
846847
}
847848
if (pbSeq.hasMinValue()) {
848-
sequenceDescriptionBuilder.setMinValue(pbSeq.getMinValue());
849+
seqBuilder.setMinValue(pbSeq.getMinValue());
849850
}
850851
if (pbSeq.hasMaxValue()) {
851-
sequenceDescriptionBuilder.setMaxValue(pbSeq.getMaxValue());
852+
seqBuilder.setMaxValue(pbSeq.getMaxValue());
852853
}
853854
if (pbSeq.hasStartValue()) {
854-
sequenceDescriptionBuilder.setStartValue(pbSeq.getStartValue());
855+
seqBuilder.setStartValue(pbSeq.getStartValue());
855856
}
856857
if (pbSeq.hasCache()) {
857-
sequenceDescriptionBuilder.setCache(pbSeq.getCache());
858+
seqBuilder.setCache(pbSeq.getCache());
858859
}
859860
if (pbSeq.hasIncrement()) {
860-
sequenceDescriptionBuilder.setIncrement(pbSeq.getIncrement());
861+
seqBuilder.setIncrement(pbSeq.getIncrement());
861862
}
862863
if (pbSeq.hasCycle()) {
863-
sequenceDescriptionBuilder.setCycle(pbSeq.getCycle());
864+
seqBuilder.setCycle(pbSeq.getCycle());
864865
}
865866

866-
description.addColumn(new TableColumn(column.getName(), type, column.getFamily(),
867-
sequenceDescriptionBuilder.build()));
868-
867+
description.addColumn(new TableColumn(column.getName(), type, column.getFamily(), seqBuilder.build()));
869868
continue;
870869
}
871870

872-
description.addColumn(new TableColumn(column.getName(), type, column.getFamily(),
873-
column.hasFromLiteral() ? (PrimitiveValue)
874-
ProtoValue.fromPb(type, column.getFromLiteral().getValue()) : null)
875-
);
871+
PrimitiveValue defaultValue = null;
872+
if (column.hasFromLiteral()) {
873+
TypedValue literalPb = column.getFromLiteral();
874+
875+
Type literalType = type;
876+
Value<?> literalValue = ProtoValue.fromPb(literalType, literalPb.getValue());
877+
if (literalType.getKind() == Type.Kind.OPTIONAL) { // unwrap optional value
878+
OptionalValue optional = literalValue.asOptional();
879+
if (optional.isPresent()) {
880+
literalType = type.unwrapOptional();
881+
literalValue = optional.get();
882+
}
883+
}
884+
if (literalType.getKind() == Type.Kind.PRIMITIVE) {
885+
defaultValue = literalValue.asData();
886+
}
887+
}
888+
889+
description.addColumn(new TableColumn(column.getName(), type, column.getFamily(), defaultValue));
876890
}
877891
description.setPrimaryKeys(desc.getPrimaryKeyList());
878892
for (int i = 0; i < desc.getIndexesCount(); i++) {

0 commit comments

Comments
 (0)