Skip to content

Commit f79cf23

Browse files
committed
fixed code
1 parent 0aa3b95 commit f79cf23

File tree

4 files changed

+19
-21
lines changed

4 files changed

+19
-21
lines changed

jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.clickhouse.jdbc.internal.ExceptionUtils;
1212
import com.clickhouse.jdbc.internal.FeatureManager;
1313
import com.clickhouse.jdbc.internal.JdbcConfiguration;
14-
import com.clickhouse.jdbc.internal.JdbcUtils;
1514
import com.clickhouse.jdbc.internal.ParsedPreparedStatement;
1615
import com.clickhouse.jdbc.internal.SqlParser;
1716
import com.clickhouse.jdbc.metadata.DatabaseMetaDataImpl;
@@ -24,7 +23,6 @@
2423
import java.sql.Clob;
2524
import java.sql.Connection;
2625
import java.sql.DatabaseMetaData;
27-
import java.sql.JDBCType;
2826
import java.sql.NClob;
2927
import java.sql.PreparedStatement;
3028
import java.sql.ResultSet;

jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -801,11 +801,7 @@ private String encodeObject(Object x, Long length) throws SQLException {
801801
} else if (x instanceof java.sql.Array) {
802802
com.clickhouse.jdbc.types.Array array = (com.clickhouse.jdbc.types.Array) x;
803803
int nestedLevel = Math.max(1, array.getNestedLevel());
804-
if (array.getBaseDataType() == ClickHouseDataType.Tuple) {
805-
return encodeTuple((Object[]) array.getArray());
806-
} else {
807-
return encodeArray((Object[]) array.getArray(), Math.max(1, array.getNestedLevel()), array.getBaseDataType());
808-
}
804+
return encodeArray((Object[]) array.getArray(), nestedLevel, array.getBaseDataType());
809805
} else if (x instanceof Object[]) {
810806
StringBuilder arrayString = new StringBuilder();
811807
arrayString.append(O_BRACKET);
@@ -927,11 +923,16 @@ public String encodeArray(Object[] elements, int levels, ClickHouseDataType elem
927923
}
928924
arraySb.append(',');
929925
cursor.pos++;
930-
} else if (cursor.isTuples) {
926+
} else if (cursor.arrayObjAsTuple) {
927+
arraySb.append(encodeTuple((Object[]) ((Array)element).getArray())).append(',');
928+
cursor.pos++;
929+
} else if (cursor.arrayAsTuple) {
931930
arraySb.append(encodeTuple((Object[]) element)).append(',');
932931
cursor.pos++;
933-
} else if (cursor.level == 1 && element.getClass().isArray() && elementType == ClickHouseDataType.Tuple) {
934-
cursor.isTuples = true;
932+
} else if (cursor.level == 1 && elementType == ClickHouseDataType.Tuple && element instanceof Array ) {
933+
cursor.arrayObjAsTuple = true;
934+
} else if (cursor.level == 1 && elementType == ClickHouseDataType.Tuple && element instanceof Object[] ) {
935+
cursor.arrayAsTuple = true;
935936
} else if (cursor.level == 1) {
936937
arraySb.append(encodeObject(element)).append(',');
937938
cursor.pos++;
@@ -950,8 +951,8 @@ private static final class ArrayProcessingCursor {
950951
Object[] array; // current array
951952
int pos; // processing position
952953
int level;
953-
boolean isTuples = false;
954-
boolean isElements = false;
954+
boolean arrayAsTuple = false;
955+
boolean arrayObjAsTuple = false;
955956
public ArrayProcessingCursor(Object[] array, int pos, int level) {
956957
this.array = array;
957958
this.pos = pos;
@@ -960,7 +961,8 @@ public ArrayProcessingCursor(Object[] array, int pos, int level) {
960961
}
961962

962963
private String encodeTuple(Object[] array) throws SQLException {
963-
StringBuilder sb = new StringBuilder('(');
964+
StringBuilder sb = new StringBuilder();
965+
sb.append('(');
964966
if (array != null) {
965967
appendArrayElements(array, sb);
966968
}

jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -380,18 +380,15 @@ public void testCreateArray() throws SQLException {
380380

381381
final String baseType = "Tuple(String, Int8)";
382382
final String tableName = "array_create_test";
383-
final String arrayType = "Array(Array(" + baseType + "))";
383+
final String arrayType = "Array(" + baseType + ")";
384384
try (Statement stmt = conn.createStatement()) {
385385
stmt.executeUpdate("CREATE TABLE " +tableName + " (v1 " + arrayType + ") ENGINE MergeTree ORDER BY ()");
386386

387387

388388
Struct tuple1 = conn.createStruct(baseType, new Object[]{"v1", (byte)10});
389389
Struct tuple2 = conn.createStruct(baseType, new Object[]{"v2", (byte)20});
390390

391-
Struct[][] srcArray = new Struct[][] {
392-
new Struct[] { tuple1},
393-
new Struct[] { tuple1, tuple2},
394-
};
391+
Struct[] srcArray = new Struct[] { tuple1, tuple2};
395392

396393
Array arrayValue = conn.createArrayOf("Tuple(String, Int8)", srcArray );
397394
assertEquals(arrayValue.getBaseTypeName(), baseType);
@@ -427,8 +424,8 @@ public void testCreateArray() throws SQLException {
427424
Assert.assertTrue(rs.next());
428425
Array array1 = rs.getArray(1);
429426
Object[] elements = (Object[]) array1.getArray();
430-
Object[] storedTuple1 = (Object[]) ((List<?>)elements[0]).get(0);
431-
Object[] storedTuple2 = (Object[]) ((List<?>)elements[1]).get(1);
427+
Object[] storedTuple1 = (Object[]) elements[0];
428+
Object[] storedTuple2 = (Object[]) elements[1];
432429
Assert.assertEquals(storedTuple1, tuple1.getAttributes());
433430
Assert.assertEquals(storedTuple2, tuple2.getAttributes());
434431

jdbc-v2/src/test/java/com/clickhouse/jdbc/DataTypeTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,8 @@ public void testArrayTypes() throws SQLException {
918918
try (PreparedStatement stmt = conn.prepareStatement("INSERT INTO test_arrays VALUES ( 1, ?, ?, ?, ?)")) {
919919
stmt.setArray(1, conn.createArrayOf("Int8", array));
920920
stmt.setArray(2, conn.createArrayOf("String", arraystr));
921-
stmt.setArray(3, conn.createArrayOf("Tuple", arraytuple));
921+
stmt.setArray(3, conn.createArrayOf("Tuple(Int8, String)", arraytuple));
922+
stmt.setArray(3, conn.createArrayOf("Tuple(Int8, String)", arraytuple));
922923
stmt.setArray(4, conn.createArrayOf("Date", arraydate));
923924
stmt.executeUpdate();
924925
}

0 commit comments

Comments
 (0)