From c46eac3121d850bd303c3f39d482e72cf6cbf8b2 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 19 Oct 2019 12:38:24 +0300 Subject: [PATCH] Fixed 3 H2 SQL Errors Three different SQL queries were causing errors on a H2 database. Found causes: - [42001-199] Extra parentheses around subquery: '... FROM (subquery)' - [HY004 not found] H2 performs query type checks at compile time and thus parametized variables inside SELECT need to be implicitly cast to a type Fixes: - Removed extra parentheses around 2 queries - Added a cast to CHAR to a query Affects issues: - Fixed #1183 --- .../database/queries/analysis/ActivityIndexQueries.java | 7 ++++--- .../storage/database/queries/objects/GeoInfoQueries.java | 4 ++-- .../plan/storage/database/queries/objects/PingQueries.java | 5 ++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java index 77b6baa10..7008fd122 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java @@ -143,17 +143,18 @@ public class ActivityIndexQueries { public static Query> fetchActivityIndexGroupingsOn(long date, UUID serverUUID, long threshold) { String selectActivityIndex = selectActivityIndexSQL(); - String selectIndexes = SELECT + "? as activity_group, activity_index" + + // ? inside SELECT needs to be implicitly cast to a type because of H2 compile time type checks. + String selectIndexes = SELECT + "CAST(? as CHAR) as activity_group, activity_index" + FROM + UserInfoTable.TABLE_NAME + " u" + LEFT_JOIN + '(' + selectActivityIndex + ") s on s." + SessionsTable.USER_UUID + "=u." + UserInfoTable.USER_UUID + WHERE + "u." + UserInfoTable.SERVER_UUID + "=?" + AND + "u." + UserInfoTable.REGISTERED + "<=?"; - String selectCount = SELECT + "activity_group, COUNT(1) as count" + FROM + + String selectCount = SELECT + "indexes.activity_group, COUNT(1) as count" + FROM + '(' + selectIndexes + ") indexes" + WHERE + "COALESCE(indexes.activity_index,0)>=?" + AND + "COALESCE(indexes.activity_index,0)