From 1a00eed389cb38be831d094fcadf40c1046a1404 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Tue, 31 Mar 2026 22:06:31 +0200 Subject: [PATCH] fix: schema initializer skips comment-only SQL segments The V4 DDL had a semicolon inside a comment which caused the split-on-semicolon logic to produce a comment-only segment that ClickHouse rejected as empty query. Fixed the comment and made the initializer strip comment-only segments before execution. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../server/app/config/ClickHouseSchemaInitializer.java | 8 +++++++- .../resources/clickhouse/V4__stats_tables_and_mvs.sql | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java index c9b3c49c..5394d131 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java @@ -42,7 +42,13 @@ public class ClickHouseSchemaInitializer { log.info("Executing ClickHouse schema script: {}", script.getFilename()); for (String statement : sql.split(";")) { String trimmed = statement.trim(); - if (!trimmed.isEmpty()) { + // Skip empty segments and comment-only segments + String withoutComments = trimmed.lines() + .filter(line -> !line.stripLeading().startsWith("--")) + .map(String::trim) + .filter(line -> !line.isEmpty()) + .reduce("", (a, b) -> a + b); + if (!withoutComments.isEmpty()) { clickHouseJdbc.execute(trimmed); } } diff --git a/cameleer3-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql b/cameleer3-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql index f0e402a4..09450132 100644 --- a/cameleer3-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql +++ b/cameleer3-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql @@ -1,6 +1,6 @@ -- V4__stats_tables_and_mvs.sql -- Materialized views replacing TimescaleDB continuous aggregates. --- Tables use AggregatingMergeTree; MVs use -State combinators. +-- Tables use AggregatingMergeTree, MVs use -State combinators. -- stats_1m_all (global)