Skip to content

Commit 1c948a1

Browse files
committed
Support getting table schema from a query with params
1 parent b2aae91 commit 1c948a1

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

client-v2/src/main/java/com/clickhouse/client/api/Client.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1866,7 +1866,7 @@ public TableSchema getTableSchema(String table) {
18661866
*/
18671867
public TableSchema getTableSchema(String table, String database) {
18681868
final String sql = "DESCRIBE TABLE " + table + " FORMAT " + ClickHouseFormat.TSKV.name();
1869-
return getTableSchemaImpl(sql, table, null, database);
1869+
return getTableSchemaImpl(sql, table, null, database, null);
18701870
}
18711871

18721872
/**
@@ -1875,16 +1875,22 @@ public TableSchema getTableSchema(String table, String database) {
18751875
* @return table schema for the query
18761876
*/
18771877
public TableSchema getTableSchemaFromQuery(String sql) {
1878+
return getTableSchemaFromQuery(sql, null);
1879+
}
1880+
1881+
public TableSchema getTableSchemaFromQuery(String sql, Map<String, Object> params) {
18781882
final String describeQuery = "DESC (" + sql + ") FORMAT " + ClickHouseFormat.TSKV.name();
1879-
return getTableSchemaImpl(describeQuery, null, sql, getDefaultDatabase());
1883+
return getTableSchemaImpl(describeQuery, null, sql, getDefaultDatabase(), params);
18801884
}
18811885

1882-
private TableSchema getTableSchemaImpl(String describeQuery, String name, String originalQuery, String database) {
1886+
private TableSchema getTableSchemaImpl(
1887+
String describeQuery, String name, String originalQuery, String database, Map<String, Object> queryParams) {
18831888
int operationTimeout = getOperationTimeout();
18841889

18851890
QuerySettings settings = new QuerySettings().setDatabase(database);
1886-
try (QueryResponse response = operationTimeout == 0 ? query(describeQuery, settings).get() :
1887-
query(describeQuery, settings).get(getOperationTimeout(), TimeUnit.SECONDS)) {
1891+
try (QueryResponse response = operationTimeout == 0
1892+
? query(describeQuery, queryParams, settings).get()
1893+
: query(describeQuery, queryParams, settings).get(getOperationTimeout(), TimeUnit.SECONDS)) {
18881894
return TableSchemaParser.readTSKV(response.getInputStream(), name, originalQuery, database);
18891895
} catch (TimeoutException e) {
18901896
throw new ClientException("Operation has likely timed out after " + getOperationTimeout() + " seconds.", e);

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1626,7 +1626,7 @@ public void testGetTableSchemaError() {
16261626
}
16271627

16281628
@Test(groups = {"integration"})
1629-
public void testGetTableSchemaFromQuery() throws Exception {
1629+
public void testGetTableSchemaFromQuery() {
16301630
TableSchema schema = client.getTableSchemaFromQuery("SELECT toUInt32(1) as col1, 'value' as col2");
16311631
Assert.assertNotNull(schema);
16321632
Assert.assertEquals(schema.getColumns().size(), 2);
@@ -1636,6 +1636,18 @@ public void testGetTableSchemaFromQuery() throws Exception {
16361636
Assert.assertEquals(schema.getColumns().get(1).getDataType(), ClickHouseDataType.String);
16371637
}
16381638

1639+
@Test(groups = {"integration"})
1640+
public void testGetTableSchemaFromQueryWithParams() {
1641+
TableSchema schema = client.getTableSchemaFromQuery("SELECT toUInt32(1) as col1, {param1:String} as col2",
1642+
Map.of("param1", "value"));
1643+
Assert.assertNotNull(schema);
1644+
Assert.assertEquals(schema.getColumns().size(), 2);
1645+
Assert.assertEquals(schema.getColumns().get(0).getColumnName(), "col1");
1646+
Assert.assertEquals(schema.getColumns().get(0).getDataType(), ClickHouseDataType.UInt32);
1647+
Assert.assertEquals(schema.getColumns().get(1).getColumnName(), "col2");
1648+
Assert.assertEquals(schema.getColumns().get(1).getDataType(), ClickHouseDataType.String);
1649+
}
1650+
16391651
@Test(groups = {"integration"})
16401652
public void testServerTimeZoneFromHeader() {
16411653

0 commit comments

Comments
 (0)