From 86e53e3b479b54fdb23742089adbd40f75193cb1 Mon Sep 17 00:00:00 2001 From: "robin.bygrave" Date: Tue, 28 Jul 2026 19:47:51 +1200 Subject: [PATCH 1/2] DB2 exists - use existsWithCaseWhen true, similar to #3849 Fixes exists() query regression with DB2 by using the platform flag existsWithCaseWhen = true; --- .../io/ebean/platform/db2/BaseDB2Platform.java | 1 + .../io/ebean/platform/db2/DB2PlatformTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java diff --git a/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java b/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java index 45dd36897b..0570b2d294 100644 --- a/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java +++ b/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java @@ -19,6 +19,7 @@ public BaseDB2Platform() { this.supportsNativeJavaTime = false; this.truncateTable = "truncate table %s reuse storage ignore delete triggers immediate"; this.likeClauseRaw = "like ?"; + this.existsWithCaseWhen = true; this.sqlLimiter = new AnsiSqlRowsLimiter(); this.dbIdentity.setSupportsGetGeneratedKeys(true); diff --git a/platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java b/platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java new file mode 100644 index 0000000000..b3a7a4b65a --- /dev/null +++ b/platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java @@ -0,0 +1,15 @@ +package io.ebean.platform.db2; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class DB2PlatformTest { + + @Test + void existsWithCaseWhen_trueForDB2() { + DB2LuwPlatform platform = new DB2LuwPlatform(); + + assertTrue(platform.existsWithCaseWhen()); + } +} From e87188538ecd00fa4b1faa18a65a52163998abf7 Mon Sep 17 00:00:00 2001 From: "robin.bygrave" Date: Tue, 28 Jul 2026 19:57:38 +1200 Subject: [PATCH 2/2] DB2 using existsFromClause = " from sysibm.sysdummy1"; --- .../src/main/java/io/ebean/platform/db2/BaseDB2Platform.java | 1 + .../src/test/java/io/ebean/platform/db2/DB2PlatformTest.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java b/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java index 0570b2d294..c5574a7a3c 100644 --- a/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java +++ b/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java @@ -20,6 +20,7 @@ public BaseDB2Platform() { this.truncateTable = "truncate table %s reuse storage ignore delete triggers immediate"; this.likeClauseRaw = "like ?"; this.existsWithCaseWhen = true; + this.existsFromClause = " from sysibm.sysdummy1"; this.sqlLimiter = new AnsiSqlRowsLimiter(); this.dbIdentity.setSupportsGetGeneratedKeys(true); diff --git a/platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java b/platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java index b3a7a4b65a..de06a04318 100644 --- a/platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java +++ b/platforms/db2/src/test/java/io/ebean/platform/db2/DB2PlatformTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; class DB2PlatformTest { @@ -11,5 +12,6 @@ void existsWithCaseWhen_trueForDB2() { DB2LuwPlatform platform = new DB2LuwPlatform(); assertTrue(platform.existsWithCaseWhen()); + assertEquals(" from sysibm.sysdummy1", platform.existsFromClause()); } }