From 984bb2d40f61bcc97e15bed0d1c00b9ef7503021 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Fri, 3 Apr 2026 15:06:56 +0200 Subject: [PATCH] fix: sort ClickHouse migration scripts by numeric version prefix Alphabetical sort put V10/V11 before V2-V9 ("V11" < "V1_" in ASCII), causing the route_diagrams projection to run before the table existed. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../app/config/ClickHouseSchemaInitializer.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 5394d131..f8783ee2 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 @@ -35,7 +35,17 @@ public class ClickHouseSchemaInitializer { PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] scripts = resolver.getResources("classpath:clickhouse/*.sql"); - Arrays.sort(scripts, Comparator.comparing(Resource::getFilename)); + // Sort by numeric version prefix (V1, V2, ..., V10, V11) — not alphabetically + Arrays.sort(scripts, Comparator.comparingInt(r -> { + String name = r.getFilename(); + if (name != null && name.startsWith("V")) { + int end = name.indexOf('_'); + if (end > 1) { + try { return Integer.parseInt(name.substring(1, end)); } catch (NumberFormatException ignored) {} + } + } + return Integer.MAX_VALUE; + })); for (Resource script : scripts) { String sql = script.getContentAsString(StandardCharsets.UTF_8);