Skip to content

Commit b66105e

Browse files
committed
re-implemented with detached result set
1 parent 7ac7a55 commit b66105e

File tree

10 files changed

+1124
-331
lines changed

10 files changed

+1124
-331
lines changed

clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseColumn.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737

3838
import java.io.Serializable;
3939
import java.lang.reflect.Array;
40-
import java.math.BigInteger;
41-
import java.sql.SQLException;
4240
import java.time.OffsetDateTime;
4341
import java.util.ArrayList;
4442
import java.util.Arrays;
@@ -93,7 +91,6 @@ public final class ClickHouseColumn implements Serializable {
9391
private List<String> parameters;
9492
private ClickHouseEnum enumConstants;
9593
private Map<String, ClickHouseColumn> jsonPredefinedPaths;
96-
private ValueFunction valueFunction;
9794

9895
private int arrayLevel;
9996
private ClickHouseColumn arrayBaseColumn;
@@ -856,18 +853,6 @@ public boolean isNestedType() {
856853
return dataType.isNested();
857854
}
858855

859-
public boolean hasValueFunction() {
860-
return valueFunction != null;
861-
}
862-
863-
public void setValueFunction(ValueFunction valueFunction) {
864-
this.valueFunction = valueFunction;
865-
}
866-
867-
public ValueFunction getValueFunction() {
868-
return valueFunction;
869-
}
870-
871856
public int getArrayNestedLevel() {
872857
return arrayLevel;
873858
}
@@ -1212,8 +1197,4 @@ public String toString() {
12121197
return builder.append(' ').append(originalTypeName).toString();
12131198
}
12141199

1215-
public interface ValueFunction {
1216-
1217-
Object produceValue(Object[] row);
1218-
}
12191200
}

client-v2/src/main/java/com/clickhouse/client/api/data_formats/ClickHouseBinaryFormatReader.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.clickhouse.client.api.data_formats;
22

33
import com.clickhouse.client.api.metadata.TableSchema;
4-
import com.clickhouse.data.ClickHouseColumn;
54
import com.clickhouse.data.value.ClickHouseBitmap;
65
import com.clickhouse.data.value.ClickHouseGeoMultiPolygonValue;
76
import com.clickhouse.data.value.ClickHouseGeoPointValue;
@@ -12,7 +11,12 @@
1211
import java.math.BigInteger;
1312
import java.net.Inet4Address;
1413
import java.net.Inet6Address;
15-
import java.time.*;
14+
import java.time.Duration;
15+
import java.time.Instant;
16+
import java.time.LocalDate;
17+
import java.time.LocalDateTime;
18+
import java.time.OffsetDateTime;
19+
import java.time.ZonedDateTime;
1620
import java.time.temporal.TemporalAmount;
1721
import java.util.List;
1822
import java.util.Map;
@@ -546,13 +550,4 @@ public interface ClickHouseBinaryFormatReader extends AutoCloseable {
546550
TemporalAmount getTemporalAmount(int index);
547551

548552
TemporalAmount getTemporalAmount(String colName);
549-
550-
/**
551-
* ! Experimental ! Might change in the future.
552-
* Sets a value function of a column. If column has a value function then reader will pass current row
553-
* as Object[] to a function. The least is responsible for returning correct value or null.
554-
* @param index - column index starting with 1
555-
* @param function - function that will be used to calculate column value from current row.
556-
*/
557-
default void setValueFunction(int index, ClickHouseColumn.ValueFunction function) {}
558553
}

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

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -131,16 +131,11 @@ public boolean readToPOJO(Map<String, POJOFieldDeserializer> deserializers, Obje
131131
return true;
132132
}
133133

134-
@Override
135-
public void setValueFunction(int index, ClickHouseColumn.ValueFunction function) {
136-
columns[index - 1].setValueFunction(function);
137-
}
138-
139134
/**
140135
* It is still internal method and should be used with care.
141136
* Usually this method is called to read next record into internal object and affects hasNext() method.
142137
* So after calling this one:
143-
* - hasNext(), next() should not be called
138+
* - hasNext(), next() and get methods cannot be called
144139
* - stream should be read with readRecord() method fully
145140
*
146141
* @param record
@@ -153,11 +148,7 @@ public boolean readRecord(Map<String, Object> record) throws IOException {
153148
}
154149

155150
boolean firstColumn = true;
156-
boolean hasValueFunctionColumn = false;
157151
for (ClickHouseColumn column : columns) {
158-
if (column.hasValueFunction()) {
159-
hasValueFunctionColumn = true;
160-
}
161152
try {
162153
Object val = binaryStreamReader.readValue(column);
163154
if (val != null) {
@@ -174,16 +165,6 @@ public boolean readRecord(Map<String, Object> record) throws IOException {
174165
throw e;
175166
}
176167
}
177-
178-
if (hasValueFunctionColumn) {
179-
// This variant of readRecord is called only for POJO serialization and this logic should be avoided.
180-
Object[] row = record.values().toArray();
181-
for (ClickHouseColumn column : columns) {
182-
if (column.hasValueFunction()) {
183-
record.put(column.getColumnName(), column.getValueFunction().produceValue(row));
184-
}
185-
}
186-
}
187168
return true;
188169
}
189170

@@ -193,13 +174,9 @@ protected boolean readRecord(Object[] record) throws IOException {
193174
}
194175

195176
boolean firstColumn = true;
196-
boolean hasValueFunctionColumn = false;
197177
for (int i = 0; i < columns.length; i++) {
198178
try {
199179
ClickHouseColumn column = columns[i];
200-
if (column.hasValueFunction()) {
201-
hasValueFunctionColumn = true;
202-
}
203180
Object val = binaryStreamReader.readValue(column);
204181
if (val != null) {
205182
record[i] = val;
@@ -216,14 +193,6 @@ protected boolean readRecord(Object[] record) throws IOException {
216193
}
217194
}
218195

219-
if (hasValueFunctionColumn) {
220-
for (int i = 0; i < columns.length; i++) {
221-
ClickHouseColumn column = columns[i];
222-
if (column.hasValueFunction()) {
223-
record[i] = column.getValueFunction().produceValue(record);
224-
}
225-
}
226-
}
227196
return true;
228197
}
229198

client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.clickhouse.client.api.command.CommandResponse;
1414
import com.clickhouse.client.api.command.CommandSettings;
1515
import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader;
16+
import com.clickhouse.client.api.data_formats.internal.AbstractBinaryFormatReader;
1617
import com.clickhouse.client.api.data_formats.internal.BinaryStreamReader;
1718
import com.clickhouse.client.api.enums.Protocol;
1819
import com.clickhouse.client.api.insert.InsertResponse;

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

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader;
44
import com.clickhouse.client.api.metadata.TableSchema;
55
import com.clickhouse.client.api.query.QueryResponse;
6-
import com.clickhouse.data.ClickHouseColumn;
76
import com.clickhouse.data.ClickHouseDataType;
87
import com.clickhouse.jdbc.internal.ExceptionUtils;
98
import com.clickhouse.jdbc.internal.FeatureManager;
@@ -50,9 +49,9 @@ public class ResultSetImpl implements ResultSet, JdbcV2Wrapper {
5049

5150
private final FeatureManager featureManager;
5251

53-
private static final int AFTER_LAST = -1;
54-
private static final int BEFORE_FIRST = 0;
55-
private static final int FIRST_ROW = 1;
52+
public static final int AFTER_LAST = -1;
53+
public static final int BEFORE_FIRST = 0;
54+
public static final int FIRST_ROW = 1;
5655
private int rowPos;
5756

5857
private int fetchSize;
@@ -157,14 +156,6 @@ public void close() throws SQLException {
157156
}
158157
}
159158

160-
public void setValueFunction(int colIndex, ClickHouseColumn.ValueFunction valueFunction) {
161-
reader.setValueFunction(colIndex, valueFunction);
162-
}
163-
164-
public void hideLastNColumns(int n) {
165-
metaData.setColumnCount(metaData.getOriginalColumnCount() - n);
166-
}
167-
168159
@Override
169160
public boolean wasNull() throws SQLException {
170161
checkClosed();

0 commit comments

Comments
 (0)