Skip to content

Commit 7f09cc8

Browse files
committed
Fix ResultSet#findColumn - return actual column's index instead of 0
1 parent 36d52d7 commit 7f09cc8

File tree

3 files changed

+52
-1
lines changed

3 files changed

+52
-1
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,23 @@ public String columnIndexToName(int index) {
104104
return indexToName(index - 1);
105105
}
106106

107+
/**
108+
* Takes column name and return corresponding index (starting from 1).
109+
* Equals to {@code nameToIndex(name) + 1}.
110+
*
111+
* @param name - column name
112+
* @return - column index starting from 1
113+
*/
107114
public int nameToColumnIndex(String name) {
108115
return nameToIndex(name) + 1;
109116
}
110117

118+
/**
119+
* Takes column name and return corresponding index (starting from 0).
120+
*
121+
* @param name - column name
122+
* @return - column index starting from 0
123+
*/
111124
public int nameToIndex(String name) {
112125
Integer index = colIndex.get(name);
113126
if (index == null) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ public Object getObject(String columnLabel) throws SQLException {
469469
public int findColumn(String columnLabel) throws SQLException {
470470
checkClosed();
471471
try {
472-
return reader.getSchema().getColumnByName(columnLabel).getColumnIndex();
472+
return reader.getSchema().nameToColumnIndex(columnLabel);
473473
} catch (Exception e) {
474474
throw ExceptionUtils.toSqlState(String.format("Method: findColumn(\"%s\") encountered an exception.", columnLabel), String.format("SQL: [%s]", parentStatement.getLastStatementSql()), e);
475475
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.clickhouse.jdbc;
2+
3+
import static org.testng.Assert.assertEquals;
4+
import static org.testng.Assert.assertTrue;
5+
6+
import java.sql.Connection;
7+
import java.sql.ResultSet;
8+
import java.sql.SQLException;
9+
import java.sql.Statement;
10+
11+
import org.testng.annotations.Test;
12+
13+
public class ResultSetImplTest extends JdbcIntegrationTest {
14+
15+
@Test(groups = "integration")
16+
public void shouldReturnColumnIndex() throws SQLException {
17+
runQuery("CREATE TABLE rs_test_data (id UInt32, val UInt8) ENGINE = MergeTree ORDER BY (id)");
18+
runQuery("INSERT INTO rs_test_data VALUES (1, 10), (2, 20)");
19+
20+
try (Connection conn = getJdbcConnection()) {
21+
try (Statement stmt = conn.createStatement()) {
22+
try (ResultSet rs = stmt.executeQuery("SELECT * FROM rs_test_data ORDER BY id")) {
23+
assertTrue(rs.next());
24+
assertEquals(rs.findColumn("id"), 1);
25+
assertEquals(rs.getInt(1), 1);
26+
assertEquals(rs.findColumn("val"), 2);
27+
assertEquals(rs.getInt(2), 10);
28+
29+
assertTrue(rs.next());
30+
assertEquals(rs.findColumn("id"), 1);
31+
assertEquals(rs.getInt(1), 2);
32+
assertEquals(rs.findColumn("val"), 2);
33+
assertEquals(rs.getInt(2), 20);
34+
}
35+
}
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)