-
Notifications
You must be signed in to change notification settings - Fork 614
Closed
Description
Description
For a prepared statement, the sqlParser cannot correctly get argument count, resulting in setObject() throwing ArrayIndexOutOfBoundsException.
Steps to reproduce
For the following sql, the argument count parsed is 0, which should be 10 normally.
WITH ? AS starting_time, ? AS ending_time, ? AS session_timeout, ? AS starting_event, ? AS ending_event, SessionData AS (
WITH
date,
arraySort(
groupArray(
(
tracking.event.time,
tracking.event.event
)
)
) AS _sorted_events,
arrayEnumerate(_sorted_events) AS _event_serial,
arrayDifference(_sorted_events.1) AS _event_time_diff,
arrayFilter(
(x, y, z) -> y > session_timeout OR z.2 = starting_event,
_event_serial,
_event_time_diff,
_sorted_events
) AS _gap_index_1,
arrayFilter(
(x, y) -> y.2 = ending_event,
_event_serial,
_sorted_events
) AS _gap_index_2_,
arrayMap(
x -> x + 1,
_gap_index_2_
) AS _gap_index_2,
arrayMap(x -> if (has(_gap_index_1,x) OR has(_gap_index_2,x), 1, 0), _event_serial) AS _session_splitter,
arraySplit((x, y) -> y, _sorted_events, _session_splitter) AS _session_chain
SELECT
date,
user_id AS user_id,
arrayJoin(_session_chain) AS event_chain,
arrayCompact(x -> x.2, event_chain) AS event_chain_dedup
FROM tracking.event
WHERE
project=? AND time>=starting_time AND time<ending_time
AND event NOT IN (?, ?, ?, ?)
GROUP BY
date,
user_id
),
SessionOverallInfo AS (
SELECT
date,
COUNT(*) AS number_of_sessions
FROM SessionData
GROUP BY date
)
SELECT
SessionOverallInfo.date, SessionOverallInfo.number_of_sessions AS number_of_total_sessions
FROM
SessionOverallInfo
ORDER BY
SessionOverallInfo.date
Error Log or Exception StackTrace
ArrayIndexOutOfBoundsException com.clickhouse.jdbc.PreparedStatementImpl in setObject: Index 0 out of bounds for length 0
com.clickhouse.jdbc.PreparedStatementImpl in setObject at line 610
com.clickhouse.jdbc.PreparedStatementImpl in setObject at line 544
com.clickhouse.jdbc.PreparedStatementImpl in setObject at line 252
com.clickhouse.jdbc.PreparedStatementImpl in setObject at line 258
...
Expected Behaviour
For the sql above, the correct argument number should be 10.
Environment
- Client version: 0.9.0
- Language version: kotlin 2.1.0 / JDK-21
ClickHouse Server
- ClickHouse Server version: 24.6.1.4423