|
98 | 98 | import tech.ydb.table.transaction.Transaction; |
99 | 99 | import tech.ydb.table.transaction.TxControl; |
100 | 100 | import tech.ydb.table.values.ListType; |
| 101 | +import tech.ydb.table.values.OptionalValue; |
101 | 102 | import tech.ydb.table.values.PrimitiveValue; |
102 | 103 | import tech.ydb.table.values.StructValue; |
103 | 104 | import tech.ydb.table.values.TupleValue; |
@@ -228,43 +229,41 @@ private static YdbTable.ColumnMeta buildColumnMeta(TableColumn column) { |
228 | 229 | } |
229 | 230 | if (column.hasDefaultValue()) { |
230 | 231 | 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())); |
235 | 233 | } |
236 | 234 |
|
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 |
240 | 239 | .newBuilder() |
241 | | - .setName(sequenceDescription.getName()); |
| 240 | + .setName(seqName != null ? seqName : "_serial_column_" + column.getName()); |
242 | 241 |
|
243 | | - if (sequenceDescription.getMinValue() != null) { |
244 | | - sequenceDescriptionBuilder.setMinValue(sequenceDescription.getMinValue()); |
| 242 | + if (seqDescription.getMinValue() != null) { |
| 243 | + seqBuilder.setMinValue(seqDescription.getMinValue()); |
245 | 244 | } |
246 | 245 |
|
247 | | - if (sequenceDescription.getMaxValue() != null) { |
248 | | - sequenceDescriptionBuilder.setMaxValue(sequenceDescription.getMaxValue()); |
| 246 | + if (seqDescription.getMaxValue() != null) { |
| 247 | + seqBuilder.setMaxValue(seqDescription.getMaxValue()); |
249 | 248 | } |
250 | 249 |
|
251 | | - if (sequenceDescription.getStartValue() != null) { |
252 | | - sequenceDescriptionBuilder.setStartValue(sequenceDescription.getStartValue()); |
| 250 | + if (seqDescription.getStartValue() != null) { |
| 251 | + seqBuilder.setStartValue(seqDescription.getStartValue()); |
253 | 252 | } |
254 | 253 |
|
255 | | - if (sequenceDescription.getCache() != null) { |
256 | | - sequenceDescriptionBuilder.setCache(sequenceDescription.getCache()); |
| 254 | + if (seqDescription.getCache() != null) { |
| 255 | + seqBuilder.setCache(seqDescription.getCache()); |
257 | 256 | } |
258 | 257 |
|
259 | | - if (sequenceDescription.getIncrement() != null) { |
260 | | - sequenceDescriptionBuilder.setIncrement(sequenceDescription.getIncrement()); |
| 258 | + if (seqDescription.getIncrement() != null) { |
| 259 | + seqBuilder.setIncrement(seqDescription.getIncrement()); |
261 | 260 | } |
262 | 261 |
|
263 | | - if (sequenceDescription.getCycle() != null) { |
264 | | - sequenceDescriptionBuilder.setCycle(sequenceDescription.getCycle()); |
| 262 | + if (seqDescription.getCycle() != null) { |
| 263 | + seqBuilder.setCycle(seqDescription.getCycle()); |
265 | 264 | } |
266 | 265 |
|
267 | | - builder.setFromSequence(sequenceDescriptionBuilder.build()); |
| 266 | + builder.setFromSequence(seqBuilder.build()); |
268 | 267 | } |
269 | 268 | } |
270 | 269 |
|
@@ -442,7 +441,9 @@ public CompletableFuture<Status> createTable( |
442 | 441 | } |
443 | 442 |
|
444 | 443 | for (ColumnFamily family : description.getColumnFamilies()) { |
445 | | - request.addColumnFamilies(buildColumnFamily(family)); |
| 444 | + if (!"default".equals(family.getName())) { |
| 445 | + request.addColumnFamilies(buildColumnFamily(family)); |
| 446 | + } |
446 | 447 | } |
447 | 448 |
|
448 | 449 | for (TableColumn column : description.getColumns()) { |
@@ -839,40 +840,53 @@ private static Result<TableDescription> mapDescribeTable(Result<YdbTable.Describ |
839 | 840 |
|
840 | 841 | if (column.hasFromSequence()) { |
841 | 842 | YdbTable.SequenceDescription pbSeq = column.getFromSequence(); |
842 | | - SequenceDescription.Builder sequenceDescriptionBuilder = new SequenceDescription.Builder(); |
| 843 | + SequenceDescription.Builder seqBuilder = new SequenceDescription.Builder(); |
843 | 844 |
|
844 | 845 | if (pbSeq.hasName()) { |
845 | | - sequenceDescriptionBuilder.setName(pbSeq.getName()); |
| 846 | + seqBuilder.setName(pbSeq.getName()); |
846 | 847 | } |
847 | 848 | if (pbSeq.hasMinValue()) { |
848 | | - sequenceDescriptionBuilder.setMinValue(pbSeq.getMinValue()); |
| 849 | + seqBuilder.setMinValue(pbSeq.getMinValue()); |
849 | 850 | } |
850 | 851 | if (pbSeq.hasMaxValue()) { |
851 | | - sequenceDescriptionBuilder.setMaxValue(pbSeq.getMaxValue()); |
| 852 | + seqBuilder.setMaxValue(pbSeq.getMaxValue()); |
852 | 853 | } |
853 | 854 | if (pbSeq.hasStartValue()) { |
854 | | - sequenceDescriptionBuilder.setStartValue(pbSeq.getStartValue()); |
| 855 | + seqBuilder.setStartValue(pbSeq.getStartValue()); |
855 | 856 | } |
856 | 857 | if (pbSeq.hasCache()) { |
857 | | - sequenceDescriptionBuilder.setCache(pbSeq.getCache()); |
| 858 | + seqBuilder.setCache(pbSeq.getCache()); |
858 | 859 | } |
859 | 860 | if (pbSeq.hasIncrement()) { |
860 | | - sequenceDescriptionBuilder.setIncrement(pbSeq.getIncrement()); |
| 861 | + seqBuilder.setIncrement(pbSeq.getIncrement()); |
861 | 862 | } |
862 | 863 | if (pbSeq.hasCycle()) { |
863 | | - sequenceDescriptionBuilder.setCycle(pbSeq.getCycle()); |
| 864 | + seqBuilder.setCycle(pbSeq.getCycle()); |
864 | 865 | } |
865 | 866 |
|
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())); |
869 | 868 | continue; |
870 | 869 | } |
871 | 870 |
|
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)); |
876 | 890 | } |
877 | 891 | description.setPrimaryKeys(desc.getPrimaryKeyList()); |
878 | 892 | for (int i = 0; i < desc.getIndexesCount(); i++) { |
|
0 commit comments