Skip to content

Commit e70a069

Browse files
author
Paultagoras
committed
Updating default detection
1 parent abfd5c2 commit e70a069

File tree

4 files changed

+60
-75
lines changed

4 files changed

+60
-75
lines changed

client-v2/src/main/java/com/clickhouse/client/api/internal/TableSchemaParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public TableSchema createFromBinaryResponse(ClickHouseResponse response, String
2222
try {
2323
p.clear();
2424
p.load(new StringReader(values));
25-
schema.addColumn(p.getProperty("name"), p.getProperty("type"));
25+
schema.addColumn(p.getProperty("name"), p.getProperty("type"), p.getProperty("default_type"));
2626
} catch ( IOException e) {
2727
throw new RuntimeException("Failed to parse table schema", e);
2828
}

client-v2/src/main/java/com/clickhouse/client/api/metadata/TableSchema.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,11 @@ public boolean hasDefaults() {
5858
}
5959

6060
public void addColumn(String name, String type) {
61+
addColumn(name, type, "");
62+
}
63+
public void addColumn(String name, String type, String defaultType) {
6164
columns.add(ClickHouseColumn.of(name, type));
62-
if (type.toUpperCase().contains("DEFAULT")) {
65+
if (defaultType.toUpperCase().contains("DEFAULT")) {
6366
hasDefaults = true;
6467
}
6568
Map<String, Object> columnMetadata = metadata.computeIfAbsent(name, k -> new HashMap<>());
@@ -84,5 +87,17 @@ public String indexToName(int index) {
8487
public int nameToIndex(String name) {
8588
return colIndex.get(name).intValue();
8689
}
90+
91+
@Override
92+
public String toString() {
93+
return "TableSchema{" +
94+
"tableName='" + tableName + '\'' +
95+
", databaseName='" + databaseName + '\'' +
96+
", columns=" + columns +
97+
", metadata=" + metadata +
98+
", colIndex=" + colIndex +
99+
", hasDefaults=" + hasDefaults +
100+
'}';
101+
}
87102
}
88103

client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void insertSimplePOJOs() throws Exception {
5959
String createSQL = SamplePOJO.generateTableCreateSQL(tableName);
6060
System.out.println(createSQL);
6161
createTable(createSQL);
62-
62+
System.out.println(client.getTableSchema(tableName, "default"));
6363
client.register(SamplePOJO.class, client.getTableSchema(tableName, "default"));
6464
List<Object> simplePOJOs = new ArrayList<>();
6565

client-v2/src/test/java/com/clickhouse/client/insert/SamplePOJO.java

Lines changed: 42 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -454,78 +454,48 @@ public void setNestedInnerString(List<String> nestedInnerString) {
454454
this.nestedInnerString = nestedInnerString;
455455
}
456456

457-
458-
public static TableSchema generateTableSchema(String tableName) {
459-
TableSchema schema = new TableSchema();
460-
schema.setDatabaseName("default");
461-
schema.setTableName(tableName);
462-
schema.addColumn("int8", "Int8");
463-
schema.addColumn("int8_default", "Int8 DEFAULT 0");
464-
schema.addColumn("int16", "Int16");
465-
schema.addColumn("int16_default", "Int16 DEFAULT 0");
466-
schema.addColumn("int32", "Int32");
467-
schema.addColumn("int32_default", "Int32 DEFAULT 0");
468-
schema.addColumn("int64", "Int64");
469-
schema.addColumn("int64_default", "Int64 DEFAULT 0");
470-
schema.addColumn("int128", "Int128");
471-
schema.addColumn("int128_default", "Int128 DEFAULT 0");
472-
schema.addColumn("int256", "Int256");
473-
schema.addColumn("int256_default", "Int256 DEFAULT 0");
474-
475-
schema.addColumn("uint8", "UInt8");
476-
schema.addColumn("uint16", "UInt16");
477-
schema.addColumn("uint32", "UInt32");
478-
schema.addColumn("uint64", "UInt64");
479-
schema.addColumn("uint128", "UInt128");
480-
schema.addColumn("uint256", "UInt256");
481-
482-
schema.addColumn("float32", "Float32");
483-
schema.addColumn("float64", "Float64");
484-
485-
schema.addColumn("decimal32", "Decimal32(2)");
486-
schema.addColumn("decimal64", "Decimal64(3)");
487-
schema.addColumn("decimal128", "Decimal128(4)");
488-
schema.addColumn("decimal256", "Decimal256(5)");
489-
490-
schema.addColumn("bool", "UInt8");
491-
492-
schema.addColumn("string", "String");
493-
schema.addColumn("fixedString", "FixedString(3)");
494-
495-
schema.addColumn("date", "Date");
496-
schema.addColumn("date32", "Date");
497-
498-
schema.addColumn("dateTime", "DateTime");
499-
schema.addColumn("dateTime64", "DateTime64(3)");
500-
501-
schema.addColumn("uuid", "UUID");
502-
503-
schema.addColumn("enum8", "Enum8('a' = 1, 'b' = 2, 'c' = 3, 'd' = 4, 'e' = 5, 'f' = 6, 'g' = 7, 'h' = 8, 'i' = 9, 'j' = 10, 'k' = 11, 'l' = 12, 'm' = 13, 'n' = 14, 'o' = 15, 'p' = 16, 'q' = 17, 'r' = 18, 's' = 19, 't' = 20, 'u' = 21, 'v' = 22, 'w' = 23, 'x' = 24, 'y' = 25, 'z' = 26)");
504-
schema.addColumn("enum16", "Enum16('a' = 1, 'b' = 2, 'c' = 3, 'd' = 4, 'e' = 5, 'f' = 6, 'g' = 7, 'h' = 8, 'i' = 9, 'j' = 10, 'k' = 11, 'l' = 12, 'm' = 13, 'n' = 14, 'o' = 15, 'p' = 16, 'q' = 17, 'r' = 18, 's' = 19, 't' = 20, 'u' = 21, 'v' = 22, 'w' = 23, 'x' = 24, 'y' = 25, 'z' = 26)");
505-
506-
schema.addColumn("ipv4", "IPv4");
507-
schema.addColumn("ipv6", "IPv6");
508-
509-
schema.addColumn("array", "Array(String)");
510-
schema.addColumn("tuple", "Tuple(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32)");
511-
schema.addColumn("map", "Map(String, Int32)");
512-
513-
schema.addColumn("nested", "Nested (innerInt Int32, innerString String)");
514-
return schema;
515-
}
516-
517457
public static String generateTableCreateSQL(String tableName) {
518-
TableSchema schema = generateTableSchema(tableName);
519-
StringBuilder sb = new StringBuilder();
520-
sb.append("CREATE TABLE ").append(schema.getTableName()).append(" (");
521-
for (int i = 0; i < schema.getColumns().size(); i++) {
522-
if (i > 0) {
523-
sb.append(", ");
524-
}
525-
ClickHouseColumn column = schema.getColumns().get(i);
526-
sb.append(column.getColumnName()).append(" ").append(column.getOriginalTypeName()).append(column.hasDefault() ? 0 : "");
527-
}
528-
sb.append(") ENGINE = Memory");
529-
return sb.toString();
458+
return "CREATE TABLE " + tableName + " (" +
459+
"int8 Int8, " +
460+
"int8_default Int8 DEFAULT 0, " +
461+
"int16 Int16, " +
462+
"int16_default Int16 DEFAULT 0, " +
463+
"int32 Int32, " +
464+
"int32_default Int32 DEFAULT 0, " +
465+
"int64 Int64, " +
466+
"int64_default Int64 DEFAULT 0, " +
467+
"int128 Int128, " +
468+
"int128_default Int128 DEFAULT 0, " +
469+
"int256 Int256, " +
470+
"int256_default Int256 DEFAULT 0, " +
471+
"uint8 UInt8, " +
472+
"uint16 UInt16, " +
473+
"uint32 UInt32, " +
474+
"uint64 UInt64, " +
475+
"uint128 UInt128, " +
476+
"uint256 UInt256, " +
477+
"float32 Float32, " +
478+
"float64 Float64, " +
479+
"decimal32 Decimal32(2), " +
480+
"decimal64 Decimal64(3), " +
481+
"decimal128 Decimal128(4), " +
482+
"decimal256 Decimal256(5), " +
483+
"bool UInt8, " +
484+
"string String, " +
485+
"fixedString FixedString(3), " +
486+
"date Date, " +
487+
"date32 Date, " +
488+
"dateTime DateTime, " +
489+
"dateTime64 DateTime64(3), " +
490+
"uuid UUID, " +
491+
"enum8 Enum8('a' = 1, 'b' = 2, 'c' = 3, 'd' = 4, 'e' = 5, 'f' = 6, 'g' = 7, 'h' = 8, 'i' = 9, 'j' = 10, 'k' = 11, 'l' = 12, 'm' = 13, 'n' = 14, 'o' = 15, 'p' = 16, 'q' = 17, 'r' = 18, 's' = 19, 't' = 20, 'u' = 21, 'v' = 22, 'w' = 23, 'x' = 24, 'y' = 25, 'z' = 26), " +
492+
"enum16 Enum16('a' = 1, 'b' = 2, 'c' = 3, 'd' = 4, 'e' = 5, 'f' = 6, 'g' = 7, 'h' = 8, 'i' = 9, 'j' = 10, 'k' = 11, 'l' = 12, 'm' = 13, 'n' = 14, 'o' = 15, 'p' = 16, 'q' = 17, 'r' = 18, 's' = 19, 't' = 20, 'u' = 21, 'v' = 22, 'w' = 23, 'x' = 24, 'y' = 25, 'z' = 26), " +
493+
"ipv4 IPv4, " +
494+
"ipv6 IPv6, " +
495+
"array Array(String), " +
496+
"tuple Tuple(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32), " +
497+
"map Map(String, Int32), " +
498+
"nested Nested (innerInt Int32, innerString String)" +
499+
") ENGINE = Memory";
530500
}
531501
}

0 commit comments

Comments
 (0)