Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
* @author Kirill Kurdyukov
*/
public class SequenceDescription {
public static final SequenceDescription DEFAULT = SequenceDescription.newBuilder().build();

@Nullable
private final String name;
@Nullable
private final Long minValue;
Expand All @@ -31,6 +33,7 @@ private SequenceDescription(Builder builder) {
this.cycle = builder.cycle;
}

@Nullable
public String getName() {
return name;
}
Expand Down Expand Up @@ -70,7 +73,7 @@ public static Builder newBuilder() {
}

public static class Builder {
private String name = "sequence_default";
private String name;
private Long minValue;
private Long maxValue;
private Long startValue;
Expand Down Expand Up @@ -114,10 +117,6 @@ public Builder setCycle(@Nullable Boolean cycle) {
}

public SequenceDescription build() {
if (name == null) {
throw new IllegalStateException("name is required");
}

return new SequenceDescription(this);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,32 +141,62 @@ public Builder addColumn(TableColumn column) {
}

public Builder addNonnullColumn(String name, Type type) {
return addNonnullColumn(name, type, (String) null);
return addColumn(new TableColumn(name, type, null));
}

public Builder addNonnullColumn(String name, Type type, String family) {
columns.put(name, new TableColumn(name, type, family));
return this;
return addColumn(new TableColumn(name, type, family));
}

public Builder addNonnullColumn(String name, Type type, PrimitiveValue defaultValue) {
return addColumn(new TableColumn(name, type, null, defaultValue));
}

public Builder addNullableColumn(String name, Type type) {
return addColumn(new TableColumn(name, OptionalType.of(type)));
}

public Builder addNullableColumn(String name, Type type, String family) {
return addColumn(new TableColumn(name, OptionalType.of(type), family));
}

public Builder addNullableColumn(String name, Type type, PrimitiveValue defaultValue) {
return addColumn(new TableColumn(name, OptionalType.of(type), null, defaultValue));
}

public Builder addSmallSerialColumn(String name) {
return addColumn(new TableColumn(name, PrimitiveType.Int16, null, SequenceDescription.DEFAULT));
}

public Builder addSerialColumn(String name) {
return addColumn(new TableColumn(name, PrimitiveType.Int32, null, SequenceDescription.DEFAULT));
}

public Builder addBigSerialColumn(String name) {
return addColumn(new TableColumn(name, PrimitiveType.Int64, null, SequenceDescription.DEFAULT));
}

@Deprecated
public Builder addColumn(String name, Type type, PrimitiveValue defaultValue) {
columns.put(name, new TableColumn(name, type, null, defaultValue));
return this;
return addColumn(new TableColumn(name, type, null, defaultValue));
}

@Deprecated
public Builder addColumn(String name, Type type, String family, PrimitiveValue defaultValue) {
columns.put(name, new TableColumn(name, type, family, defaultValue));
return this;
return addColumn(new TableColumn(name, type, family, defaultValue));
}

@Deprecated
public Builder addSequenceColumn(String name, Type type) {
return addSequenceColumn(name, type, null, SequenceDescription.newBuilder().build());
}

@Deprecated
public Builder addSequenceColumn(String name, Type type, String family) {
return addSequenceColumn(name, type, family, SequenceDescription.newBuilder().build());
}

@Deprecated
public Builder addSequenceColumn(
String name,
Type type,
Expand All @@ -193,38 +223,32 @@ public Builder addSequenceColumn(
throw new IllegalArgumentException("Type " + type + " cannot be used as a sequence column");
}

public Builder addSmallSerialColumn(String name) {
return addSmallSerialColumn(name, null, SequenceDescription.newBuilder().build());
}

public Builder addSerialColumn(String name) {
return addSerialColumn(name, null, SequenceDescription.newBuilder().build());
}

public Builder addBigSerialColumn(String name) {
return addBigSerialColumn(name, null, SequenceDescription.newBuilder().build());
}

@Deprecated
public Builder addSmallSerialColumn(String name, SequenceDescription sequenceDescription) {
return addSmallSerialColumn(name, null, sequenceDescription);
}

@Deprecated
public Builder addSerialColumn(String name, SequenceDescription sequenceDescription) {
return addSerialColumn(name, null, sequenceDescription);
}

@Deprecated
public Builder addBigSerialColumn(String name, SequenceDescription sequenceDescription) {
return addBigSerialColumn(name, null, sequenceDescription);
}

@Deprecated
public Builder addSmallSerialColumn(String name, String family, SequenceDescription sequenceDescription) {
return addSequenceColumn(name, PrimitiveType.Int16, family, sequenceDescription);
}

@Deprecated
public Builder addSerialColumn(String name, String family, SequenceDescription sequenceDescription) {
return addSequenceColumn(name, PrimitiveType.Int32, family, sequenceDescription);
}

@Deprecated
public Builder addBigSerialColumn(String name, String family, SequenceDescription sequenceDescription) {
return addSequenceColumn(name, PrimitiveType.Int64, family, sequenceDescription);
}
Expand All @@ -234,15 +258,6 @@ public Builder addKeyRange(KeyRange value) {
return this;
}

public Builder addNullableColumn(String name, Type type) {
return addNullableColumn(name, type, null);
}

public Builder addNullableColumn(String name, Type type, String family) {
columns.put(name, new TableColumn(name, OptionalType.of(type), family));
return this;
}

public Builder setPrimaryKey(String name) {
checkColumnKnown(name);
primaryKeys = ImmutableList.of(name);
Expand Down
88 changes: 51 additions & 37 deletions table/src/main/java/tech/ydb/table/impl/BaseSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
import tech.ydb.table.transaction.Transaction;
import tech.ydb.table.transaction.TxControl;
import tech.ydb.table.values.ListType;
import tech.ydb.table.values.OptionalValue;
import tech.ydb.table.values.PrimitiveValue;
import tech.ydb.table.values.StructValue;
import tech.ydb.table.values.TupleValue;
Expand Down Expand Up @@ -228,43 +229,41 @@ private static YdbTable.ColumnMeta buildColumnMeta(TableColumn column) {
}
if (column.hasDefaultValue()) {
if (column.getLiteralDefaultValue() != null) {
builder.setFromLiteral(ValueProtos.TypedValue.newBuilder()
.setType(column.getType().toPb())
.setValue(column.getLiteralDefaultValue().toPb()).build()
);
builder.setFromLiteral(ProtoValue.toTypedValue(column.getLiteralDefaultValue()));
}

if (column.getSequenceDescription() != null) {
SequenceDescription sequenceDescription = column.getSequenceDescription();
YdbTable.SequenceDescription.Builder sequenceDescriptionBuilder = YdbTable.SequenceDescription
SequenceDescription seqDescription = column.getSequenceDescription();
if (seqDescription != null) {
String seqName = seqDescription.getName();
YdbTable.SequenceDescription.Builder seqBuilder = YdbTable.SequenceDescription
.newBuilder()
.setName(sequenceDescription.getName());
.setName(seqName != null ? seqName : "_serial_column_" + column.getName());

if (sequenceDescription.getMinValue() != null) {
sequenceDescriptionBuilder.setMinValue(sequenceDescription.getMinValue());
if (seqDescription.getMinValue() != null) {
seqBuilder.setMinValue(seqDescription.getMinValue());
}

if (sequenceDescription.getMaxValue() != null) {
sequenceDescriptionBuilder.setMaxValue(sequenceDescription.getMaxValue());
if (seqDescription.getMaxValue() != null) {
seqBuilder.setMaxValue(seqDescription.getMaxValue());
}

if (sequenceDescription.getStartValue() != null) {
sequenceDescriptionBuilder.setStartValue(sequenceDescription.getStartValue());
if (seqDescription.getStartValue() != null) {
seqBuilder.setStartValue(seqDescription.getStartValue());
}

if (sequenceDescription.getCache() != null) {
sequenceDescriptionBuilder.setCache(sequenceDescription.getCache());
if (seqDescription.getCache() != null) {
seqBuilder.setCache(seqDescription.getCache());
}

if (sequenceDescription.getIncrement() != null) {
sequenceDescriptionBuilder.setIncrement(sequenceDescription.getIncrement());
if (seqDescription.getIncrement() != null) {
seqBuilder.setIncrement(seqDescription.getIncrement());
}

if (sequenceDescription.getCycle() != null) {
sequenceDescriptionBuilder.setCycle(sequenceDescription.getCycle());
if (seqDescription.getCycle() != null) {
seqBuilder.setCycle(seqDescription.getCycle());
}

builder.setFromSequence(sequenceDescriptionBuilder.build());
builder.setFromSequence(seqBuilder.build());
}
}

Expand Down Expand Up @@ -442,7 +441,9 @@ public CompletableFuture<Status> createTable(
}

for (ColumnFamily family : description.getColumnFamilies()) {
request.addColumnFamilies(buildColumnFamily(family));
if (!"default".equals(family.getName())) {
request.addColumnFamilies(buildColumnFamily(family));
}
}

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

if (column.hasFromSequence()) {
YdbTable.SequenceDescription pbSeq = column.getFromSequence();
SequenceDescription.Builder sequenceDescriptionBuilder = new SequenceDescription.Builder();
SequenceDescription.Builder seqBuilder = new SequenceDescription.Builder();

if (pbSeq.hasName()) {
sequenceDescriptionBuilder.setName(pbSeq.getName());
seqBuilder.setName(pbSeq.getName());
}
if (pbSeq.hasMinValue()) {
sequenceDescriptionBuilder.setMinValue(pbSeq.getMinValue());
seqBuilder.setMinValue(pbSeq.getMinValue());
}
if (pbSeq.hasMaxValue()) {
sequenceDescriptionBuilder.setMaxValue(pbSeq.getMaxValue());
seqBuilder.setMaxValue(pbSeq.getMaxValue());
}
if (pbSeq.hasStartValue()) {
sequenceDescriptionBuilder.setStartValue(pbSeq.getStartValue());
seqBuilder.setStartValue(pbSeq.getStartValue());
}
if (pbSeq.hasCache()) {
sequenceDescriptionBuilder.setCache(pbSeq.getCache());
seqBuilder.setCache(pbSeq.getCache());
}
if (pbSeq.hasIncrement()) {
sequenceDescriptionBuilder.setIncrement(pbSeq.getIncrement());
seqBuilder.setIncrement(pbSeq.getIncrement());
}
if (pbSeq.hasCycle()) {
sequenceDescriptionBuilder.setCycle(pbSeq.getCycle());
seqBuilder.setCycle(pbSeq.getCycle());
}

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

description.addColumn(new TableColumn(column.getName(), type, column.getFamily(), seqBuilder.build()));
continue;
}

description.addColumn(new TableColumn(column.getName(), type, column.getFamily(),
column.hasFromLiteral() ? (PrimitiveValue)
ProtoValue.fromPb(type, column.getFromLiteral().getValue()) : null)
);
PrimitiveValue defaultValue = null;
if (column.hasFromLiteral()) {
TypedValue literalPb = column.getFromLiteral();

Type literalType = type;
Value<?> literalValue = ProtoValue.fromPb(literalType, literalPb.getValue());
if (literalType.getKind() == Type.Kind.OPTIONAL) { // unwrap optional value
OptionalValue optional = literalValue.asOptional();
if (optional.isPresent()) {
literalType = type.unwrapOptional();
literalValue = optional.get();
}
}
if (literalType.getKind() == Type.Kind.PRIMITIVE) {
defaultValue = literalValue.asData();
}
}

description.addColumn(new TableColumn(column.getName(), type, column.getFamily(), defaultValue));
}
description.setPrimaryKeys(desc.getPrimaryKeyList());
for (int i = 0; i < desc.getIndexesCount(); i++) {
Expand Down
Loading