ClickHouse / ClickHouse/clickhouse-java

[client-v2] getTableSchema and insert concatenate the raw table name into SQL — names needing backquotes cannot be used

Open
#3,089 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
1.6k
Forks
636
Avg merge
2d 16h
Merged PRs (30d)
28

Description

### Describe the bug

`Client.getTableSchema(table, database)` and `Client.insert(tableName, ...)` paste the table name into SQL as-is:

```java
"DESCRIBE TABLE " + table // Client.java:2010 (0.10.0)
"INSERT INTO " + tableName // Client.java:1592 (0.10.0)
```

So a valid table name that needs backquotes, like `my-table`, fails with a server syntax error even though the table exists.

### Steps to reproduce

```java
client.queryAll("CREATE TABLE `my-table` (id Int64) ENGINE = MergeTree ORDER BY id");
client.getTableSchema("my-table", "default"); // server syntax error
client.insert("my-table", data, settings); // same
```

### Expected behaviour

The parameter is documented as a table name, so the client should quote it when building the SQL:

```sql
DESCRIBE TABLE `my-table`
INSERT INTO `my-table`
```

Back-compat: pre-quoted names (`` `my-table` `` passed by the caller) work today as a workaround, so already-quoted input should be detected and passed through unchanged (like JDBC's `Statement.enquoteIdentifier`).

### Configuration

- client-v2 0.9.5 and 0.10.0 (latest) are both affected.

### Additional context

[flink-connector-clickhouse](https://github.com/ClickHouse/flink-connector-clickhouse) uses both methods and currently has to reject table names that need quoting; once this is fixed the connector can lift that restriction (a canary test watches for it).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.