clickhouse-java icon indicating copy to clipboard operation
clickhouse-java copied to clipboard

NullPointerException when creating PreparedStatement for INSERT statement when inserting into certain tables

Open lukaseder opened this issue 6 months ago • 1 comments

Description

It's not possible to insert into certain table names using prepared statements, unless the table names are quoted. Static statements don't require quoting.

Steps to reproduce

try (Statement s = connection.createStatement()) {
    try {
        s.executeUpdate("create table events (s String) engine Log()");
        s.executeUpdate("insert into events (s) values ('a')");

        try (PreparedStatement p = connection.prepareStatement("insert into events (s) values ('a')")) {
            p.executeUpdate();
        }
    }
    finally {
        s.executeUpdate("drop table events");
    }
}

Error Log or Exception StackTrace

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.antlr.v4.runtime.tree.TerminalNode.getText()" because the return value of "com.clickhouse.jdbc.internal.ClickHouseParser$IdentifierContext.IDENTIFIER()" is null
	at com.clickhouse.jdbc.internal.ParsedPreparedStatement.enterInsertStmt(ParsedPreparedStatement.java:218)
	at com.clickhouse.jdbc.internal.ClickHouseParser$InsertStmtContext.enterRule(ClickHouseParser.java:7712)
	at org.antlr.v4.runtime.tree.ParseTreeWalker.enterRule(ParseTreeWalker.java:50)
	at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:33)
	at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:36)
	at com.clickhouse.jdbc.internal.SqlParser.parsePreparedStatement(SqlParser.java:40)
	at com.clickhouse.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:383)
	at com.clickhouse.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:161)
	at org.jooq.testscripts.JDBC.main(JDBC.java:43)

Expected Behaviour

Since the static statement works, the prepared statement should work as well.

A workaround is to quote the name: "events".

Environment

  • Client version: 0.9.0
  • Language version: OpenJDK Runtime Environment Temurin-21.0.2+13 (build 21.0.2+13-LTS)
  • OS: Microsoft Windows [Version 10.0.26100.4061]

ClickHouse Server

  • ClickHouse Server version: 25.5.2.47

lukaseder avatar Jun 12 '25 08:06 lukaseder

@lukaseder thank you for reporting! This is probably related to a keyword problem. We will look into it.

chernser avatar Jun 12 '25 17:06 chernser