-
Notifications
You must be signed in to change notification settings - Fork 611
Description
I had the following SQL statment:
SELECT
CASE
WHEN "metrics_all"."METRIC_ID" IS NULL OR "metrics_all"."SUB_METRIC" IS NULL THEN NULL
WHEN "metrics_all"."METRIC_ID" > "metrics_all"."SUB_METRIC" THEN "metrics_all"."METRIC_ID"
ELSE "metrics_all"."SUB_METRIC"
END AS "MET"
FROM
"mrs"."metrics_all" AS "metrics_all"
GROUP BY
CASE
WHEN "metrics_all"."METRIC_ID" IS NULL
OR "metrics_all"."SUB_METRIC" IS NULL THEN NULL
WHEN "metrics_all"."METRIC_ID" > "metrics_all"."SUB_METRIC" THEN "metrics_all"."METRIC_ID"
ELSE "metrics_all"."SUB_METRIC"
END
This SQL statment could be excuted by Command-line Client and clickhouse-jdbc-0.2.4:

But could not be exceuted by clickhouse-jdbc-0.3.1,because the SQL parse is mandatory ,and got the following error:
2021-09-15 19:58:44,058 | WARN | main | Parse error at line 3, column 48. Encountered: OR. If you believe the SQL is valid, please feel free to open an issue on Github with this warning and the following SQL attached.
SELECT
CASE
WHEN "metrics_all"."METRIC_ID" IS NULL OR "metrics_all"."SUB_METRIC" IS NULL THEN NULL
WHEN "metrics_all"."METRIC_ID" > "metrics_all"."SUB_METRIC" THEN "metrics_all"."METRIC_ID"
ELSE "metrics_all"."SUB_METRIC"
END AS "TEMP(Test)(2280873464)(0)"
FROM
"mrs"."metrics_all" AS "metrics_all"
GROUP BY
CASE
WHEN "metrics_all"."METRIC_ID" IS NULL
OR "metrics_all"."SUB_METRIC" IS NULL THEN NULL
WHEN "metrics_all"."METRIC_ID" > "metrics_all"."SUB_METRIC" THEN "metrics_all"."METRIC_ID"
ELSE "metrics_all"."SUB_METRIC"
END | ru.yandex.clickhouse.jdbc.parser.ClickHouseSqlParser.parse(ClickHouseSqlParser.java:71)
It seemed that the parser can not resolve 'OR' between 'When' and 'Then', so I had to add brackets like this to make it work:
SELECT
CASE
WHEN ("metrics_all"."METRIC_ID" IS NULL OR "metrics_all"."SUB_METRIC") IS NULL THEN NULL
WHEN "metrics_all"."METRIC_ID" > "metrics_all"."SUB_METRIC" THEN "metrics_all"."METRIC_ID"
ELSE "metrics_all"."SUB_METRIC"
END AS "MET"
FROM
"mrs"."metrics_all" AS "metrics_all"
GROUP BY
CASE
WHEN "metrics_all"."METRIC_ID" IS NULL
OR "metrics_all"."SUB_METRIC" IS NULL THEN NULL
WHEN "metrics_all"."METRIC_ID" > "metrics_all"."SUB_METRIC" THEN "metrics_all"."METRIC_ID"
ELSE "metrics_all"."SUB_METRIC"
END