Skip to content

Commit 3f07638

Browse files
authored
Merge pull request #1145 from zhicwu/develop
Allow negative fetch size
2 parents 9b03edd + df39547 commit 3f07638

File tree

5 files changed

+75
-7
lines changed

5 files changed

+75
-7
lines changed

clickhouse-jdbc/src/main/java/com/clickhouse/jdbc/ClickHouseResultSet.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public class ClickHouseResultSet extends AbstractResultSet {
4646
private Iterator<ClickHouseRecord> rowCursor;
4747
private int rowNumber;
4848
private int lastReadColumn; // 1-based
49-
private int fetchSize;
5049

5150
protected final String database;
5251
protected final String table;
@@ -92,7 +91,6 @@ public class ClickHouseResultSet extends AbstractResultSet {
9291

9392
this.maxRows = 0;
9493
this.nullAsDefault = false;
95-
this.fetchSize = 0;
9694
}
9795

9896
public ClickHouseResultSet(String database, String table, ClickHouseStatement statement,
@@ -130,7 +128,6 @@ public ClickHouseResultSet(String database, String table, ClickHouseStatement st
130128

131129
this.maxRows = statement.getMaxRows();
132130
this.nullAsDefault = statement.getNullAsDefault() > 1;
133-
this.fetchSize = statement.getFetchSize();
134131
}
135132

136133
protected void ensureRead(int columnIndex) throws SQLException {
@@ -383,7 +380,7 @@ public double getDouble(String columnLabel) throws SQLException {
383380
public int getFetchSize() throws SQLException {
384381
ensureOpen();
385382

386-
return fetchSize;
383+
return statement != null ? statement.getFetchSize() : 0;
387384
}
388385

389386
@Override
@@ -729,8 +726,6 @@ public boolean next() throws SQLException {
729726
@Override
730727
public void setFetchSize(int rows) throws SQLException {
731728
ensureOpen();
732-
733-
this.fetchSize = rows;
734729
}
735730

736731
@Override

clickhouse-jdbc/src/main/java/com/clickhouse/jdbc/internal/ClickHouseStatementImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,8 @@ public int getFetchDirection() throws SQLException {
563563
@Override
564564
public void setFetchSize(int rows) throws SQLException {
565565
if (rows < 0) {
566-
throw SqlExceptionUtils.clientError("Fetch size cannot be negative number");
566+
log.warn("Negative fetch size is treated as 0.");
567+
rows = 0;
567568
}
568569

569570
ensureOpen();

clickhouse-jdbc/src/test/java/com/clickhouse/jdbc/ClickHouseResultSetTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616
import java.util.TimeZone;
1717
import java.util.function.BiFunction;
1818

19+
import com.clickhouse.client.ClickHouseColumn;
20+
import com.clickhouse.client.ClickHouseConfig;
1921
import com.clickhouse.client.ClickHouseDataType;
2022
import com.clickhouse.client.ClickHouseRecord;
2123
import com.clickhouse.client.ClickHouseValues;
2224
import com.clickhouse.client.data.ClickHouseDateTimeValue;
2325
import com.clickhouse.client.data.ClickHouseOffsetDateTimeValue;
26+
import com.clickhouse.client.data.ClickHouseSimpleResponse;
2427
import com.clickhouse.client.data.UnsignedByte;
2528
import com.clickhouse.client.data.UnsignedInteger;
2629

@@ -366,4 +369,39 @@ public void testNullValue(String columnType, String defaultValue, Class<?> clazz
366369
throw e;
367370
}
368371
}
372+
373+
@Test(groups = "unit")
374+
public void testFetchSizeOfDetachedResultSet() throws SQLException {
375+
try (ClickHouseResultSet rs = new ClickHouseResultSet("", "",
376+
ClickHouseSimpleResponse.of(new ClickHouseConfig(), ClickHouseColumn.parse("s String"),
377+
new Object[][] { new Object[] { "a" } }))) {
378+
Assert.assertEquals(rs.getFetchSize(), 0);
379+
rs.setFetchSize(2);
380+
Assert.assertEquals(rs.getFetchSize(), 0);
381+
rs.setFetchSize(-1);
382+
Assert.assertEquals(rs.getFetchSize(), 0);
383+
}
384+
}
385+
386+
@Test(groups = "integration")
387+
public void testFetchSize() throws SQLException {
388+
try (ClickHouseConnection conn = newConnection(new Properties()); Statement stmt = conn.createStatement()) {
389+
try (ResultSet rs = stmt.executeQuery("select 1")) {
390+
Assert.assertEquals(rs.getFetchSize(), 0);
391+
rs.setFetchSize(2);
392+
Assert.assertEquals(rs.getFetchSize(), 0);
393+
rs.setFetchSize(-1);
394+
Assert.assertEquals(rs.getFetchSize(), 0);
395+
}
396+
397+
stmt.setFetchSize(1);
398+
try (ResultSet rs = stmt.executeQuery("select 1")) {
399+
Assert.assertEquals(rs.getFetchSize(), 1);
400+
rs.setFetchSize(2);
401+
Assert.assertEquals(rs.getFetchSize(), 1);
402+
rs.setFetchSize(-1);
403+
Assert.assertEquals(rs.getFetchSize(), 1);
404+
}
405+
}
406+
}
369407
}

clickhouse-jdbc/src/test/java/com/clickhouse/jdbc/ClickHouseStatementTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,27 @@ public void testExecuteUpdate() throws SQLException {
498498
}
499499
}
500500

501+
@Test(groups = "integration")
502+
public void testFetchSize() throws SQLException {
503+
try (Connection conn = newConnection(new Properties()); Statement stmt = conn.createStatement()) {
504+
Assert.assertEquals(stmt.getFetchSize(), 0);
505+
506+
stmt.setFetchSize(0);
507+
Assert.assertEquals(stmt.getFetchSize(), 0);
508+
stmt.setFetchSize(-1);
509+
Assert.assertEquals(stmt.getFetchSize(), 0);
510+
stmt.setFetchSize(Integer.MIN_VALUE);
511+
Assert.assertEquals(stmt.getFetchSize(), 0);
512+
513+
stmt.setFetchSize(1);
514+
Assert.assertEquals(stmt.getFetchSize(), 1);
515+
stmt.setFetchSize(Integer.MAX_VALUE);
516+
Assert.assertEquals(stmt.getFetchSize(), Integer.MAX_VALUE);
517+
stmt.setFetchSize(0);
518+
Assert.assertEquals(stmt.getFetchSize(), 0);
519+
}
520+
}
521+
501522
@Test(groups = "integration")
502523
public void testSimpleAggregateFunction() throws SQLException {
503524
try (ClickHouseConnection conn = newConnection(new Properties());

clickhouse-jdbc/src/test/java/com/clickhouse/jdbc/CombinedResultSetTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,17 @@ public void testSingleResultSet(CombinedResultSet combined) throws SQLException
132132
combined.close();
133133
Assert.assertTrue(combined.isClosed());
134134
}
135+
136+
@Test(groups = "unit")
137+
public void testFetchSize() throws SQLException {
138+
try (CombinedResultSet rs = new CombinedResultSet(new ClickHouseResultSet("", "",
139+
ClickHouseSimpleResponse.of(new ClickHouseConfig(), ClickHouseColumn.parse("s String"),
140+
new Object[][] { new Object[] { "a" }, new Object[] { "b" } })))) {
141+
Assert.assertEquals(rs.getFetchSize(), 0);
142+
rs.setFetchSize(2);
143+
Assert.assertEquals(rs.getFetchSize(), 0);
144+
rs.setFetchSize(-1);
145+
Assert.assertEquals(rs.getFetchSize(), 0);
146+
}
147+
}
135148
}

0 commit comments

Comments
 (0)