Compare commits

..
26 Commits
Author SHA1 Message Date
Rob Bygrave 4610dbb26e Version 14.8.0 2024-10-25 14:28:58 +13:00
Rob BygraveandGitHub b26382f99c Merge pull request #3507 from ebean-orm/feature/agent-1480
Bump ebean-agent to 14.8.0
2024-10-25 14:18:20 +13:00
Rob Bygrave 2fba89f846 Bump ebean-agent to 14.8.0
This ebean agent is required to support the fluid QueryBuilder API change.
2024-10-25 14:17:46 +13:00
Rob Bygrave e4f13da868 Merge branch 'dynamic-property-group-by' 2024-10-24 16:13:01 +13:00
Rob Bygrave 32cd081fce #3504 Tidy test only and final method 2024-10-24 16:12:45 +13:00
Rob Bygrave f6da332998 Add test for TestReflectiveModificationUpdate 2024-10-24 08:37:02 +13:00
Alexander Wagner d8f321d87b Fix: dynamic property group by with alias 2024-10-22 13:24:12 +02:00
Rob Bygrave c868d8a23b Fix test for Postgres TestDistinctOnQuery 2024-10-22 19:00:52 +13:00
Rob Bygrave d77c14d866 Fix test for Postgres TestDistinctOnQuery 2024-10-22 08:14:01 +13:00
Rob BygraveandGitHub 423d906848 Merge pull request #3499 from ebean-orm/feature/3489
Potentially breaking change: Throw PersistenceException for unknown property in select clause
2024-10-18 19:25:46 +13:00
Rob Bygrave 100d33cc94 Potentially breaking change: Throw PersistenceException for unknown property in select clause 2024-10-18 19:12:53 +13:00
Rob BygraveandGitHub 20cf6a9c00 Merge pull request #3498 from ebean-orm/feature/migrate-avaje-lang-to-jspecify
Migrate to JSpecify NullMarked/Nullable from avaje.lang NonNullApi/Nullable
2024-10-18 16:56:19 +13:00
Rob BygraveandGitHub e2c12268f7 Merge branch 'master' into feature/migrate-avaje-lang-to-jspecify 2024-10-18 16:52:53 +13:00
Rob BygraveandGitHub 937f6296e1 Merge pull request #3497 from ebean-orm/feature/fluid-self-querybuilder
Fix SELF of QueryBuilder, QueryBean, IQueryBean for fluid use
2024-10-18 16:48:26 +13:00
Rob Bygrave 24749567d2 Migrate to JSpecify NullMarked/Nullable from avaje.lang NonNullApi/Nullable 2024-10-18 16:46:41 +13:00
Rob Bygrave 7045240778 Merge branch 'transaction-readonly' 2024-10-18 16:27:18 +13:00
Rob Bygrave 6ceea85b94 Move markNotQueryOnly() into init transaction methods of PersistRequest 2024-10-18 16:26:49 +13:00
Rob Bygrave e04ac50800 Fix SELF of QueryBuilder, QueryBean, IQueryBean for fluid use
Currently, the SELF response type of QueryBuilder returns as Object when really we want it to return the SELF generic type of QueryBuilder, QueryBean, IQueryBean etc

Note that this change requires an updated ebean-agent
2024-10-18 16:18:39 +13:00
Noemi Praml a452fc0e21 call request.markNotQueryOnly 2024-10-17 16:30:42 +02:00
Noemi Praml 4438d5db7d Fixes in DefaultPersister 2024-10-17 16:19:19 +02:00
Noemi Praml 9ca6fa31e5 more tests 2024-10-17 16:19:03 +02:00
Rob BygraveandGitHub e0a00bea34 Merge pull request #3496 from mumbler6/fix-flaky
fixed flaky test in ToStringBuilderTest.java
2024-10-17 21:36:15 +13:00
mumbler6 b24b549298 fixed flaky test in ToStringBuilderTest.java 2024-10-15 22:41:51 -05:00
Rob Bygrave 51d0f4efcc Fix test TestOrderedList for Postgres ANY 2024-10-15 22:14:45 +13:00
Noemi Praml e08985d7c5 suggested solution 2024-10-14 16:53:48 +02:00
Noemi Praml 4f984ff2d4 add: failing test 2024-10-14 16:53:00 +02:00
121 changed files with 684 additions and 366 deletions
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-clickhouse</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-db2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hana</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mariadb</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mysql</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -22,13 +22,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -47,19 +47,19 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-net-postgis-types</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-nuodb</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-oracle</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -22,13 +22,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -47,19 +47,19 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlite</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -41,7 +41,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -60,13 +60,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<artifactId>composites</artifactId>
+4 -8
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>ebean api</name>
@@ -26,14 +26,10 @@
<version>1.0</version>
</dependency>
<!--
Class retention Nonnull and Nullable annotations
to assist with IDE auto-completion with Ebean API
-->
<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-lang</artifactId>
<version>1.1</version>
<groupId>org.jspecify</groupId>
<artifactId>jspecify</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
@@ -1,10 +1,9 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -20,7 +19,7 @@ import java.util.concurrent.TimeUnit;
* This also propagates MDC context from the current thread to the
* background task if defined.
*/
@NonNullApi
@NullMarked
public interface BackgroundExecutor {
/**
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import java.util.List;
import java.util.Optional;
@@ -30,7 +30,7 @@ import java.util.Optional;
*
* @see BeanRepository
*/
@NonNullApi
@NullMarked
public abstract class BeanFinder<I,T> {
protected final Database database;
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.bean.EntityBean;
import java.util.Collection;
@@ -36,7 +36,7 @@ import java.util.Collection;
* @param <I> The ID type
* @param <T> The Bean type
*/
@NonNullApi
@NullMarked
public abstract class BeanRepository<I, T> extends BeanFinder<I, T> {
/**
+3 -3
View File
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.annotation.TxIsolation;
import io.ebean.cache.ServerCacheManager;
import io.ebean.plugin.Property;
@@ -57,7 +57,7 @@ import java.util.concurrent.Callable;
*
* }</pre>
*/
@NonNullApi
@NullMarked
public final class DB {
private static final DbContext context = DbContext.getInstance();
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
import io.ebean.cache.ServerCacheManager;
@@ -83,7 +83,7 @@ import java.util.concurrent.Callable;
* @see DatabaseFactory
* @see DatabaseConfig
*/
@NonNullApi
@NullMarked
public interface Database {
/**
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.docstore.DocQueryContext;
import io.ebean.docstore.RawDoc;
@@ -14,7 +14,7 @@ import java.util.function.Predicate;
/**
* Document storage operations.
*/
@NonNullApi
@NullMarked
public interface DocumentStore {
/**
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -42,7 +42,7 @@ import java.util.stream.Stream;
*
* }</pre>
*/
@NonNullApi
@NullMarked
public interface DtoQuery<T> extends CancelableQuery {
/**
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.search.*;
import jakarta.persistence.NonUniqueResultException;
@@ -31,7 +31,7 @@ import java.util.function.Predicate;
*
* @see Query#where()
*/
@NonNullApi
@NullMarked
public interface ExpressionList<T> {
/**
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.service.SpiFetchGroupQuery;
/**
@@ -61,7 +61,7 @@ import io.ebean.service.SpiFetchGroupQuery;
*
* @param <T> The bean type the Fetch group can be applied to
*/
@NonNullApi
@NullMarked
public interface FetchGroup<T> {
/**
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
/**
* Builds a FetchGroup by adding fetch clauses.
@@ -23,7 +23,7 @@ import io.avaje.lang.NonNullApi;
*
* }</pre>
*/
@NonNullApi
@NullMarked
public interface FetchGroupBuilder<T> {
/**
+2 -2
View File
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import java.util.List;
import java.util.Set;
@@ -79,7 +79,7 @@ import java.util.Set;
*
* @param <T> the entity bean type
*/
@NonNullApi
@NullMarked
public interface Filter<T> {
/**
+3 -3
View File
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import java.util.List;
/**
@@ -60,7 +60,7 @@ import java.util.List;
* @see BeanRepository
* @see BeanFinder
*/
@NonNullApi
@NullMarked
public class Finder<I, T> {
/**
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
/**
* Options to be used with insert such as ON CONFLICT DO UPDATE | NOTHING.
+1 -1
View File
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
/**
* Used to specify Paging on a Query as an alternative to setting each of the
+2 -2
View File
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
/**
* Object relational query for finding a List, Set, Map or single entity bean.
@@ -149,7 +149,7 @@ import io.avaje.lang.NonNullApi;
*
* @param <T> the type of Entity bean this query will fetch.
*/
@NonNullApi
@NullMarked
public interface Query<T> extends CancelableQuery, QueryBuilder<Query<T>, T> {
/**
@@ -1,6 +1,6 @@
package io.ebean;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -20,7 +20,7 @@ import java.util.stream.Stream;
* @param <SELF> The type of the builder
* @param <T> The entity bean type
*/
public interface QueryBuilder<SELF, T> extends QueryBuilderProjection<SELF, T> {
public interface QueryBuilder<SELF extends QueryBuilder<SELF, T>, T> extends QueryBuilderProjection<SELF, T> {
/**
* Set root table alias.
@@ -6,7 +6,7 @@ package io.ebean;
* @param <SELF> The builder type
* @param <T> The entity bean type
*/
public interface QueryBuilderProjection<SELF, T> {
public interface QueryBuilderProjection<SELF extends QueryBuilderProjection<SELF, T>, T> {
/**
* Apply the path properties replacing the select and fetch clauses.
@@ -1,7 +1,7 @@
package io.ebean;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import javax.sql.DataSource;
import java.io.Serializable;
@@ -40,7 +40,7 @@ import java.util.function.Predicate;
*
* }</pre>
*/
@NonNullApi
@NullMarked
public interface SqlQuery extends Serializable, CancelableQuery {
/**
+1 -1
View File
@@ -1,6 +1,6 @@
package io.ebean.cache;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.meta.MetricVisitor;
import java.util.LinkedHashMap;
+1 -1
View File
@@ -7,7 +7,7 @@ module io.ebean.api {
requires transitive java.sql;
requires transitive io.avaje.config;
requires transitive io.avaje.lang;
requires transitive org.jspecify;
requires transitive jakarta.persistence.api;
requires transitive io.ebean.annotation;
requires transitive io.ebean.datasource.api;
@@ -1 +1 @@
ebean-version: 145
ebean-version: 148
@@ -213,7 +213,7 @@ class ToStringBuilderTest {
final int id;
final Map<String, ParamValue> map = new HashMap<>();
final Map<String, ParamValue> map = new LinkedHashMap<>();
ParamStore(final int id) {
+26 -26
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>ebean bom</name>
@@ -89,25 +89,25 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -125,13 +125,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -155,37 +155,37 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>kotlin-querybean-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-redis</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-spring-txn</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<!-- platforms -->
@@ -193,79 +193,79 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-clickhouse</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-db2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-h2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-hana</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mariadb</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mysql</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-nuodb</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-oracle</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlite</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlserver</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>
+2 -2
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<artifactId>ebean-core-type</artifactId>
@@ -16,7 +16,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -1,6 +1,6 @@
package io.ebean.core.type;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import java.lang.annotation.Annotation;
@@ -1,6 +1,6 @@
package io.ebean.core.type;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
/**
* A ScalarType that has variations based on the mapped JDBC type (like VARCHAR, CLOB, JSON etc).
@@ -1,6 +1,6 @@
package io.ebean.core.type;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.DatabaseBuilder;
/**
+6 -6
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<artifactId>ebean-core</artifactId>
@@ -22,7 +22,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -46,7 +46,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -159,21 +159,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -1,6 +1,6 @@
package io.ebeaninternal.api;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.bean.BeanCollectionLoader;
import io.ebean.bean.CallOrigin;
@@ -1,6 +1,6 @@
package io.ebeaninternal.api;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.CacheMode;
import io.ebean.CountDistinctOrder;
import io.ebean.ExpressionList;
@@ -1,6 +1,6 @@
package io.ebeaninternal.api;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
/**
* SQL query binding (for SqlQuery and DtoQuery).
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.core;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
@@ -70,7 +70,7 @@ import static java.util.stream.StreamSupport.stream;
/**
* The default server side implementation of EbeanServer.
*/
@NonNullApi
@NullMarked
public final class DefaultServer implements SpiServer, SpiEbeanServer {
private static final System.Logger log = CoreLog.internal;
@@ -146,6 +146,7 @@ public abstract class PersistRequest extends BeanRequest implements BatchPostExe
public void initTransIfRequired() {
createImplicitTransIfRequired();
persistCascade = transaction.isPersistCascade();
transaction.markNotQueryOnly();
}
/**
@@ -228,6 +228,7 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
docStoreMode = calcDocStoreMode(transaction, type);
}
checkBatchEscalationOnCascade();
transaction.markNotQueryOnly();
}
/**
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.core;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.bean.EntityBean;
import io.ebean.meta.MetricVisitor;
@@ -62,6 +62,11 @@ class DynamicPropertyAggregationFormula extends DynamicPropertyBase {
ctx.appendParseSelect(parsedFormula, alias);
}
@Override
public final void appendGroupBy(DbSqlContext ctx, boolean subQuery) {
ctx.appendParseSelect(parsedFormula, null);
}
@Override
public boolean isLobForPlatform() {
return false;
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.deploy.meta;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.annotation.*;
import io.ebean.config.ScalarTypeConverter;
import io.ebean.config.dbplatform.DbDefaultValue;
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.el;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.Filter;
import io.ebeaninternal.server.deploy.BeanDescriptor;
@@ -12,7 +12,7 @@ import java.util.regex.Pattern;
/**
* Default implementation of the Filter interface.
*/
@NonNullApi
@NullMarked
public final class ElFilter<T> implements Filter<T> {
private final BeanDescriptor<T> beanDescriptor;
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.executor;
import io.avaje.applog.AppLog;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.config.BackgroundExecutorWrapper;
import io.ebeaninternal.api.SpiBackgroundExecutor;
@@ -12,7 +12,7 @@ import static java.lang.System.Logger.Level.*;
/**
* The default implementation of the BackgroundExecutor.
*/
@NonNullApi
@NullMarked
public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
private static final System.Logger log = AppLog.getLogger("io.ebean.BackgroundExecutor");
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.expression;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.event.BeanQueryRequest;
import io.ebean.search.*;
@@ -18,7 +18,7 @@ import java.util.function.Predicate;
/**
* Default implementation of ExpressionList.
*/
@NonNullApi
@NullMarked
public class DefaultExpressionList<T> implements SpiExpressionList<T> {
private static final String AND = " and ";
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.expression;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebeaninternal.api.SpiExpressionList;
import io.ebeaninternal.api.SpiQuery;
@@ -9,7 +9,7 @@ import io.ebeaninternal.api.SpiQuery;
import jakarta.persistence.PersistenceException;
import java.util.*;
@NonNullApi
@NullMarked
public final class FilterExpressionList<T> extends DefaultExpressionList<T> {
private static final String notAllowedMessage = "This method is not allowed on a filter";
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.expression;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.event.BeanQueryRequest;
import io.ebean.search.*;
@@ -18,7 +18,7 @@ import java.util.function.Predicate;
/**
* Junction implementation.
*/
@NonNullApi
@NullMarked
final class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, ExpressionList<T> {
DefaultExpressionList<T> exprList;
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.query;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.FetchConfig;
import io.ebean.FetchGroup;
import io.ebean.FetchGroupBuilder;
@@ -10,7 +10,7 @@ import io.ebeaninternal.server.querydefn.SpiFetchGroup;
/**
* Default implementation of the FetchGroupBuilder.
*/
@NonNullApi
@NullMarked
final class DFetchGroupBuilder<T> implements FetchGroupBuilder<T> {
private static final FetchConfig DEFAULT_FETCH = FetchConfig.ofDefault();
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.query;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.service.SpiFetchGroupQuery;
import io.ebeaninternal.api.SpiQueryFetch;
@@ -23,7 +23,7 @@ import java.util.stream.Stream;
/**
* Implementation of FetchGroup query for use to create FetchGroup via query beans.
*/
@NonNullApi
@NullMarked
final class DefaultFetchGroupQuery<T> implements SpiFetchGroupQuery<T>, SpiQueryFetch {
private static final FetchConfig FETCH_CACHE = FetchConfig.ofCache();
@@ -92,6 +92,13 @@ public interface STreeProperty extends ScalarDataReader<Object> {
*/
void appendSelect(DbSqlContext ctx, boolean subQuery);
/**
* Append to group by.
*/
default void appendGroupBy(DbSqlContext ctx, boolean subQuery) {
appendSelect(ctx, subQuery);
}
/**
* Append to the from clause.
*/
@@ -11,6 +11,7 @@ import io.ebeaninternal.server.deploy.InheritInfo;
import io.ebeaninternal.server.deploy.TableJoin;
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
import io.ebeaninternal.server.querydefn.OrmQueryProperties;
import jakarta.persistence.PersistenceException;
import java.util.*;
@@ -440,12 +441,9 @@ public final class SqlTreeBuilder {
} else {
// find the property including searching the
// sub class hierarchy if required
STreeProperty p = desc.findPropertyWithDynamic(propName, queryProps.getPath());
if (p == null) {
log.log(ERROR, "property [{0}] not found on {1} for query - excluding it.", propName, desc);
p = desc.findProperty("id");
selectProps.add(p);
throw new PersistenceException("Property not found - " + SplitName.add(queryProps.getPath(), propName));
} else if (p.isId() && excludeIdProperty()) {
// do not bother to include id for normal queries as the
@@ -163,7 +163,7 @@ class SqlTreeNodeBean implements SqlTreeNode {
}
for (STreeProperty property : properties) {
if (!property.isAggregation()) {
property.appendSelect(ctx, subQuery);
property.appendGroupBy(ctx, subQuery);
}
}
for (SqlTreeNode child : children) {
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.querydefn;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.DtoQuery;
import io.ebean.ProfileLocation;
import io.ebean.QueryIterator;
@@ -23,7 +23,7 @@ import java.util.stream.Stream;
/**
* Default implementation of DtoQuery.
*/
@NonNullApi
@NullMarked
public final class DefaultDtoQuery<T> extends AbstractQuery implements SpiDtoQuery<T> {
private final SpiEbeanServer server;
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.querydefn;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.bean.CallOrigin;
import io.ebean.bean.ObjectGraphNode;
@@ -35,7 +35,7 @@ import java.util.stream.Stream;
/**
* Default implementation of an Object Relational query.
*/
@NonNullApi
@NullMarked
public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
private static final String DEFAULT_QUERY_NAME = "default";
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.querydefn;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebeaninternal.api.BindParams;
import io.ebeaninternal.api.SpiEbeanServer;
@@ -19,7 +19,7 @@ import java.util.function.Predicate;
/**
* Default implementation of SQuery - SQL Query.
*/
@NonNullApi
@NullMarked
public final class DefaultRelationalQuery extends AbstractQuery implements SpiSqlQuery {
private static final long serialVersionUID = -1098305779779591068L;
@@ -417,6 +417,10 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes {
@Override
public final void markNotQueryOnly() {
this.queryOnly = false;
// if the transaction is readonly, it should not allow updates/deletes
if (localReadOnly){
throw new IllegalStateException("This transaction is read-only");
}
}
@Override
@@ -1,6 +1,6 @@
package io.ebeanservice.docstore.none;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.DocStoreQueueEntry;
import io.ebean.DocumentStore;
import io.ebean.PagedList;
@@ -17,7 +17,7 @@ import java.util.function.Predicate;
/**
* DocumentStore that barfs it is used.
*/
@NonNullApi
@NullMarked
public final class NoneDocStore implements DocumentStore {
public static IllegalStateException implementationNotInClassPath() {
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>ebean ddl generation</name>
@@ -28,14 +28,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
@@ -65,7 +65,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
+2 -2
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -14,7 +14,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>ebean net postgis types</name>
@@ -19,14 +19,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<!-- provided scope -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
@@ -54,7 +54,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -78,7 +78,7 @@
<extensions>true</extensions>
<configuration>
<tiles>
<tile>io.ebean.tile:enhancement:14.6.0</tile>
<tile>io.ebean.tile:enhancement:14.8.0</tile>
</tiles>
</configuration>
</plugin>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>ebean postgis types</name>
@@ -19,14 +19,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<!-- provided scope -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
@@ -62,7 +62,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -86,7 +86,7 @@
<extensions>true</extensions>
<configuration>
<tiles>
<tile>io.ebean.tile:enhancement:14.6.0</tile>
<tile>io.ebean.tile:enhancement:14.8.0</tile>
</tiles>
</configuration>
</plugin>
+9 -13
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>ebean querybean</name>
@@ -17,7 +17,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
@@ -28,14 +28,10 @@
<scope>provided</scope>
</dependency>
<!--
Class retention Nonnull and Nullable annotations
to assist with IDE auto-completion with Ebean API
-->
<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-lang</artifactId>
<version>1.1</version>
<groupId>org.jspecify</groupId>
<artifactId>jspecify</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
@@ -63,14 +59,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -84,7 +80,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
@@ -100,7 +96,7 @@
<extensions>true</extensions>
<configuration>
<tiles>
<tile>io.ebean.tile:enhancement:14.6.0</tile>
<tile>io.ebean.tile:enhancement:14.8.0</tile>
</tiles>
</configuration>
</plugin>
@@ -44,7 +44,7 @@ import java.util.Collection;
* @param <T> the entity bean type (normal entity bean type e.g. Customer)
* @param <R> the specific query bean type (e.g. QCustomer)
*/
public interface IQueryBean<T, R> extends QueryBuilder<R, T> {
public interface IQueryBean<T, R extends IQueryBean<T, R>> extends QueryBuilder<R, T> {
/**
* Return the underlying query.
@@ -64,6 +64,7 @@ public interface IQueryBean<T, R> extends QueryBuilder<R, T> {
*
* @param properties The properties to include in the DISTINCT ON clause.
*/
@SuppressWarnings("unchecked")
R distinctOn(TQProperty<R, ?>... properties);
/**
@@ -1,7 +1,7 @@
package io.ebean.typequery;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.Query;
/**
@@ -1,6 +1,6 @@
package io.ebean.typequery;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import io.ebean.Query;
import java.util.Collection;
@@ -1,7 +1,7 @@
package io.ebean.typequery;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import io.ebean.*;
import io.ebean.search.MultiMatch;
import io.ebean.search.TextCommonTerms;
@@ -56,8 +56,8 @@ import java.util.stream.Stream;
* @param <T> the entity bean type (normal entity bean type e.g. Customer)
* @param <R> the specific root query bean type (e.g. QCustomer)
*/
@NonNullApi
public abstract class QueryBean<T, R> implements IQueryBean<T, R> {
@NullMarked
public abstract class QueryBean<T, R extends QueryBean<T, R>> implements IQueryBean<T, R> {
/**
* The underlying query.
@@ -1,6 +1,6 @@
package io.ebean.typequery;
import io.avaje.lang.Nullable;
import org.jspecify.annotations.Nullable;
import java.util.Collection;
@@ -1,5 +1,9 @@
package org.querytest;
import io.ebean.QueryBuilder;
import io.ebean.QueryBuilderProjection;
import io.ebean.typequery.IQueryBean;
import io.ebean.typequery.QueryBean;
import org.example.domain.Customer;
import org.example.domain.query.QCustomer;
import org.junit.jupiter.api.Test;
@@ -46,4 +50,29 @@ class QueryAlsoIfTest {
q.findList();
assertThat(q.getGeneratedSql()).isEqualTo("select /* QueryAlsoIfTest.notApply */ t0.id, t0.name from be_customer t0 where t0.name is not null");
}
@Test
void queryBuilders_expect_fluidUseOfSELF() {
var q = new QCustomer();
checkQueryBean(q);
checkIQueryBean(q);
checkQueryBuilder(q);
checkQueryBuilderProjection(q);
}
private void checkQueryBean(QueryBean<?, ?> queryBean) {
queryBean.setFirstRow(10).setMaxRows(10);
}
private void checkIQueryBean(IQueryBean<?, ?> iQueryBean) {
iQueryBean.setFirstRow(10).setMaxRows(20);
}
private void checkQueryBuilderProjection(QueryBuilderProjection<?, ?> queryBuilder) {
queryBuilder.fetch("a").fetch("b");
}
private void checkQueryBuilder(QueryBuilder<?,?> queryBuilder) {
queryBuilder.setFirstRow(10).setMaxRows(10);
}
}
+7 -7
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<artifactId>ebean-redis</artifactId>
@@ -29,35 +29,35 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
@@ -72,7 +72,7 @@
<extensions>true</extensions>
<configuration>
<tiles>
<tile>io.ebean.tile:enhancement:14.6.0</tile>
<tile>io.ebean.tile:enhancement:14.8.0</tile>
</tiles>
</configuration>
</plugin>
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<artifactId>ebean-spring-txn</artifactId>
@@ -28,7 +28,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
@@ -77,7 +77,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -99,7 +99,7 @@
<extensions>true</extensions>
<configuration>
<tiles>
<tile>io.ebean.tile:enhancement:14.6.0</tile>
<tile>io.ebean.tile:enhancement:14.8.0</tile>
</tiles>
</configuration>
</plugin>
+7 -7
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>ebean test</name>
@@ -33,20 +33,20 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
@@ -149,14 +149,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -309,7 +309,7 @@
<extensions>true</extensions>
<configuration>
<tiles>
<tile>io.ebean.tile:enhancement:14.6.0</tile>
<tile>io.ebean.tile:enhancement:14.8.0</tile>
</tiles>
</configuration>
</plugin>
@@ -1,5 +1,7 @@
package io.ebean.xtest.base;
import io.ebean.DB;
import io.ebean.Query;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DtoQuery;
import io.ebean.QueryIterator;
@@ -9,6 +11,7 @@ import io.ebean.test.LoggedSql;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
@@ -406,6 +409,24 @@ public class DtoQuery2Test extends BaseTestCase {
assertThat(robs).isNotEmpty();
}
@Test
void dto_test_formula_with_group_by() {
ResetBasicData.reset();
Query<Contact> query = server().find(Contact.class)
.select("concat(first_name, last_name) as custname, count(*) as cnt")
.orderBy("custname desc");
List<DCustFormula> ret = query.asDto(DCustFormula.class).findList();
String sql = query.getGeneratedSql();
assertThat(sql)
.describedAs("group by formula only")
.contains("from contact t0 group by concat(first_name, last_name) order by custname desc");
assertThat(ret.get(0).getCustname()).isEqualTo("TracyRed");
assertThat(ret.get(0).getCnt()).isEqualTo(1L);
}
public static class DCust {
final Integer id;
@@ -614,4 +635,33 @@ public class DtoQuery2Test extends BaseTestCase {
return this;
}
}
public static class DCustFormula {
String custname;
Long cnt;
public DCustFormula() {}
public void setCustname(String custname) {
this.custname = custname;
}
public String getCustname() {
return custname;
}
public void setCnt(Long cnt) {
this.cnt = cnt;
}
public Long getCnt() {
return cnt;
}
@Override
public String toString() {
return getCustname() + ": " + getCnt();
}
}
}
@@ -0,0 +1,90 @@
package io.ebean.xtest.base;
import io.ebean.BeanState;
import io.ebean.DB;
import io.ebean.bean.EntityBean;
import io.ebean.bean.EntityBeanIntercept;
import io.ebean.test.LoggedSql;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import org.tests.model.converstation.User;
import java.lang.reflect.Field;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class TestReflectiveModificationUpdate extends BaseTestCase {
@Test
void statelessUpdate_via_reflection() throws NoSuchFieldException, IllegalAccessException {
// populate db with a user
User seed = new User();
seed.setName("someName");
seed.setEmail("some@junk.com");
seed.save();
Field field = User.class.getDeclaredField("email");
field.setAccessible(true);
// our bean to perform stateless update
User user = new User();
user.setId(seed.getId());
user.setName("mod");
field.set(user, "change@junk.com");
// need to set property loaded state to include in the stateless update
BeanState beanState = DB.beanState(user);
beanState.setPropertyLoaded("email", true);
LoggedSql.start();
user.update();
List<String> sql = LoggedSql.stop();
assertThat(sql).hasSize(1);
assertThat(sql.get(0)).contains("update c_user set name=?, email=?, when_modified=? where id=?");
}
@Test
void normalUpdate_via_reflection() throws NoSuchFieldException, IllegalAccessException {
// populate db with a user
User seed = new User();
seed.setName("someName");
seed.setEmail("some@junk.com");
seed.save();
Field field = User.class.getDeclaredField("email");
field.setAccessible(true);
// fetching the bean from database, so a "normal update"
User user = DB.find(User.class, seed.getId());
user.setName("mod");
// ideally we get the old value first (if there are change listeners etc)
Object oldValue = field.get(user);
// reflectively modify
field.set(user, "change@junk.com");
// BeanState beanState = DB.beanState(user);
// need to use EntityBeanIntercept rather than BeanState
// so this isn't great !!
EntityBean eb = (EntityBean) user;
EntityBeanIntercept ebi = eb._ebean_getIntercept();
int pos = ebi.findProperty("email");
// EITHER ideally mark as dirty with the original value
//ebi.setChangedPropertyValue(pos, true, oldValue);
// OR just mark as changed
ebi.markPropertyAsChanged(pos);
LoggedSql.start();
user.update();
List<String> sql = LoggedSql.stop();
assertThat(sql).hasSize(1);
assertThat(sql.get(0)).contains("update c_user set name=?, email=?, version=?, when_modified=? where id=? and version=?");
}
}
@@ -1,6 +1,6 @@
package io.ebean.xtest.internal.api;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.*;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
@@ -38,7 +38,7 @@ import java.util.stream.Stream;
/**
* Test double for SpiEbeanServer.
*/
@NonNullApi
@NullMarked
public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
String name;
@@ -1,6 +1,6 @@
package io.ebean.xtest.internal.api;
import io.avaje.lang.NonNullApi;
import org.jspecify.annotations.NullMarked;
import io.ebean.*;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
@@ -25,7 +25,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
@NonNullApi
@NullMarked
public class TDSpiServer implements SpiServer {
@Override
public void shutdown() {
@@ -12,14 +12,14 @@ import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class WriteJsonTest {
class WriteJsonTest {
@Test
public void test_push() {
void test_push() {
ResetBasicData.reset();
FetchPath fetchPath = PathProperties.parse("id,status,name,customer(id,name,billingAddress(street,city)),details(qty,product(sku,prodName))");
FetchPath fetchPath = PathProperties.parse("id,status,customer(id,name,billingAddress(line1,city)),details(orderQty,product(sku,name))");
Query<Order> query = DB.find(Order.class);
@@ -20,7 +20,7 @@ public class TestMappedSuper extends BaseTestCase {
// select includes a transient property
TMapSuperEntity e2 = DB.find(TMapSuperEntity.class)
.where().idEq(e.getId())
.select("id, name, myint, someObject, bananan")
.select("id, name, myint, someObject")
.findOne();
assertNotNull(e2);
@@ -230,8 +230,13 @@ public class TestOrderedList extends BaseTestCase {
LoggedSql.start();
masterDbNew.getDetails().size();
sql = LoggedSql.stop();
assertThat(sql).hasSize(1).first().asString()
.startsWith("select t0.master_id, t0.id, t0.name, t0.version, t0.sort_order, t0.master_id from om_cache_ordered_detail t0 where (t0.master_id) in (?) order by t0.master_id, t0.sort_order;");
if (isPostgresCompatible()) {
assertThat(sql).hasSize(1).first().asString()
.startsWith("select t0.master_id, t0.id, t0.name, t0.version, t0.sort_order, t0.master_id from om_cache_ordered_detail t0 where (t0.master_id) = any(?) order by t0.master_id, t0.sort_order;");
} else {
assertThat(sql).hasSize(1).first().asString()
.startsWith("select t0.master_id, t0.id, t0.name, t0.version, t0.sort_order, t0.master_id from om_cache_ordered_detail t0 where (t0.master_id) in (?) order by t0.master_id, t0.sort_order;");
}
assertThat(masterDbNew.getDetails()).containsExactly(detail2, detail1);
}
@@ -2,9 +2,11 @@ package org.tests.model.noid;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DB;
import jakarta.persistence.PersistenceException;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
class TestInsertNoIdBean extends BaseTestCase {
@@ -19,4 +21,15 @@ class TestInsertNoIdBean extends BaseTestCase {
int rowCount = DB.find(NoIdBean.class).findCount();
assertThat(rowCount).isGreaterThan(0);
}
@Test
void testInvalidSelectColumn_expect_PersistenceException() {
assertThatThrownBy(() ->
DB.find(NoIdBean.class)
.select("does_not_exist_user_id, name")
.where().eq("name", "foo")
.findList()
).isInstanceOf(PersistenceException.class)
.hasMessageContaining("Property not found - does_not_exist_user_id");
}
}
@@ -57,7 +57,7 @@ class TestDistinctOnQuery extends BaseTestCase {
.setMaxRows(10);
List<OrderDetail> lines = DB.find(OrderDetail.class)
.select("product, orderQty, shipQty, created")
.select("product, orderQty, shipQty, cretime")
.where().in("id", subQuery)
.orderBy().asc("cretime")
.findList();
@@ -65,7 +65,7 @@ class TestDistinctOnQuery extends BaseTestCase {
assertThat(lines).isNotEmpty();
List<String> sql = LoggedSql.stop();
assertThat(sql).hasSize(1);
assertThat(sql.get(0)).contains("select t0.id, t0.product_id, t0.order_qty, t0.ship_qty, t0.id from o_order_detail t0 where t0.id in (select distinct on (t0.product_id) t0.id from o_order_detail t0 order by t0.product_id, t0.updtime desc limit 10) order by t0.cretime");
assertThat(sql.get(0)).contains("select t0.id, t0.product_id, t0.order_qty, t0.ship_qty, t0.cretime from o_order_detail t0 where t0.id in (select distinct on (t0.product_id) t0.id from o_order_detail t0 order by t0.product_id, t0.updtime desc limit 10) order by t0.cretime");
}
@ForPlatform({Platform.POSTGRES, Platform.YUGABYTE})
@@ -9,10 +9,10 @@ import jakarta.persistence.PersistenceException;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class TestInvalidFetchPath extends BaseTestCase {
class TestInvalidFetchPath extends BaseTestCase {
@Test
public void invalidFetchPathAndProperties_expect_error() {
void invalidFetchPathAndProperties_expect_error() {
assertThrows(PersistenceException.class, () ->
DB.find(Customer.class)
.fetch("notValidPath", "notHaveProps")
@@ -20,7 +20,7 @@ public class TestInvalidFetchPath extends BaseTestCase {
}
@Test
public void invalidFetchPath_expect_error() {
void invalidFetchPath_expect_error() {
assertThrows(PersistenceException.class, () ->
DB.find(Customer.class)
.fetch("notValidPath")
@@ -28,9 +28,10 @@ public class TestInvalidFetchPath extends BaseTestCase {
}
@Test
public void fetchWithInvalidPropertyName_expect_allowed() {
DB.find(Customer.class)
.fetch("billingAddress", "invalidPropertyName")
.findList();
void fetchWithInvalidPropertyName_expect_error() {
assertThrows(PersistenceException.class, () ->
DB.find(Customer.class)
.fetch("billingAddress", "invalidPropertyName")
.findList());
}
}
@@ -0,0 +1,122 @@
package org.tests.transaction;
import io.ebean.DB;
import io.ebean.Transaction;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Country;
import org.tests.model.basic.Customer;
import org.tests.model.basic.OrderDetail;
import org.tests.model.basic.ResetBasicData;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
public class TestTransactionReadOnly extends BaseTestCase {
@Test
public void testReadOnlyTransactionWithUpdateQuery() {
ResetBasicData.reset();
try (Transaction txn = DB.beginTransaction()) {
txn.setReadOnly(true);
assertThatThrownBy(() -> DB.update(Customer.class).set("name", "Rob2").where().eq("name", "Rob").update())
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.sqlUpdate("update o_customer set name = ? where name = ?")
.setParameter(1, "Rob2")
.setParameter(2, "Rob").execute())
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.createUpdate(Customer.class, "update customer set name = ? where name = ?")
.setParameter(1, "Rob2")
.setParameter(2, "Rob").execute())
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
Customer customer = DB.find(Customer.class).where().eq("name", "Rob").findOne();
customer.setName("Rob2");
assertThatThrownBy(() -> DB.save(customer))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
txn.commit();
}
}
@Test
public void testReadOnlyTransactionWithDeleteQuery() {
ResetBasicData.reset();
try (Transaction txn = DB.beginTransaction()) {
txn.setReadOnly(true);
assertThatThrownBy(() -> DB.find(OrderDetail.class).where().eq("id", 1).delete())
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.sqlUpdate("delete o_order_detail where id = ?")
.setParameter(1, 1).execute())
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.createUpdate(OrderDetail.class, "delete o_order_detail where id = ?")
.setParameter(1, 1).execute())
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
OrderDetail orderDetail = DB.find(OrderDetail.class).where().eq("id", 1).findOne();
assertThatThrownBy(() -> DB.delete(orderDetail))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.deleteAll(Arrays.asList(orderDetail)))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
txn.commit();
}
}
@Test
public void testReadOnlyTransactionWithInsertQuery() {
ResetBasicData.reset();
try (Transaction txn = DB.beginTransaction()) {
txn.setReadOnly(true);
Country country = new Country();
country.setName("Germany");
country.setCode("DE");
assertThatThrownBy(() -> DB.save(country))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.saveAll(country))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.insert(country))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
assertThatThrownBy(() -> DB.insertAll(Arrays.asList(country)))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("This transaction is read-only");
txn.commit();
}
}
}
@@ -14,10 +14,10 @@ import java.net.URL;
import static org.junit.jupiter.api.Assertions.*;
import static org.assertj.core.api.Assertions.assertThat;
public class TestFileType extends BaseTestCase {
class TestFileType extends BaseTestCase {
private File file = getFile("/profile-image.jpg");
private File file2 = getFile("/java-64.png");
private final File file = getFile("/profile-image.jpg");
private final File file2 = getFile("/java-64.png");
private File newTempFile() throws IOException {
File tempFile = File.createTempFile("testfile", "txt");
@@ -113,7 +113,7 @@ public class TestFileType extends BaseTestCase {
DB.save(bean0);
SomeFileBean bean1 = DB.find(SomeFileBean.class)
.select("name, file")
.select("name, content")
.setId(bean0.getId())
.findOne();
@@ -124,7 +124,7 @@ public class TestFileType extends BaseTestCase {
DB.save(bean1);
SomeFileBean bean2 = DB.find(SomeFileBean.class)
.select("name, file")
.select("name, content")
.setId(bean0.getId())
.findOne();
@@ -146,7 +146,7 @@ public class TestFileType extends BaseTestCase {
DB.save(bean0);
SomeFileBean bean1 = DB.find(SomeFileBean.class)
.select("name, file")
.select("name, content")
.setId(bean0.getId())
.findOne();
@@ -161,7 +161,7 @@ public class TestFileType extends BaseTestCase {
SomeFileBean bean2 = DB.find(SomeFileBean.class)
.select("name, file")
.select("name, content")
.setId(bean0.getId())
.findOne();
@@ -173,7 +173,7 @@ public class TestFileType extends BaseTestCase {
DB.save(bean2);
SomeFileBean bean3 = DB.find(SomeFileBean.class)
.select("name, file")
.select("name, content")
.setId(bean0.getId())
.findOne();
@@ -194,7 +194,7 @@ public class TestFileType extends BaseTestCase {
DB.save(bean0);
SomeFileBean bean1 = DB.find(SomeFileBean.class)
.select("name, file")
.select("name, content")
.setId(bean0.getId())
.findOne();
@@ -48,7 +48,7 @@ public class TestFileTypeFetching extends BaseTestCase {
DB.update(statelessUpdateBean);
SomeFileBean bean2 = DB.find(SomeFileBean.class)
.select("file")
.select("content")
.setId(bean0.getId())
.findOne();
+2 -2
View File
@@ -15,8 +15,8 @@ mvn -T 4 clean package
mvn -T 4 deploy -pl '!composites,!platforms' -Pcentral -DskipTests -DskipStagingRepositoryClose=true -DstagingProgressTimeoutMinutes=9
## git commit, git tag, git push --tags
git commit -am 'Version 14.6.0'
git tag 14.6.0
git commit -am 'Version 14.8.0'
git tag 14.8.0
git push --tags
## convert to javax
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
</parent>
<name>kotlin querybean generator</name>
@@ -21,7 +21,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -35,7 +35,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
@@ -56,14 +56,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
<scope>test</scope>
</dependency>
+14 -14
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.7.0</version>
<version>14.8.0</version>
<relativePath>../..</relativePath>
</parent>
@@ -15,67 +15,67 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-clickhouse</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-db2</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hana</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hsqldb</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mysql</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mariadb</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-nuodb</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-oracle</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlanywhere</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlite</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>14.7.0</version>
<version>14.8.0</version>
</dependency>
</dependencies>

Some files were not shown because too many files have changed in this diff Show More