mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-09-20 19:17:55 +00:00
Compare commits
24
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c5288b6ec | ||
|
|
b485fb7440 | ||
|
|
b07f909dd3 | ||
|
|
fa92e7a4b7 | ||
|
|
1823ef288a | ||
|
|
7b2128b02f | ||
|
|
3c84a902e8 | ||
|
|
3ce95c34cb | ||
|
|
d817dcb549 | ||
|
|
5f218e1fdb | ||
|
|
59daf5689a | ||
|
|
44efed5cd9 | ||
|
|
be28314e31 | ||
|
|
053d82b54a | ||
|
|
0141e2effa | ||
|
|
a33bb4d4c8 | ||
|
|
d0348210be | ||
|
|
753cf66cf0 | ||
|
|
4a8b4dd5fb | ||
|
|
2faf7008db | ||
|
|
76c25cbe83 | ||
|
|
5c36a725f4 | ||
|
|
b99d4f5a51 | ||
|
|
7d18942357 |
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-clickhouse</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-db2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-h2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-hana</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-mariadb</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-mysql</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-nuodb</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-oracle</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -47,19 +47,19 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-postgis-types</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-sqlite</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-sqlserver</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -42,13 +42,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -41,7 +41,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-jackson-mapper</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -60,13 +60,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-all</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>composites</artifactId>
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<name>ebean api</name>
|
||||
|
||||
@@ -40,6 +40,13 @@ public interface QueryBuilderProjection<SELF, T> {
|
||||
*/
|
||||
SELF select(String fetchProperties);
|
||||
|
||||
/**
|
||||
* Set DISTINCT ON clause. This is a Postgres only SQL feature.
|
||||
*
|
||||
* @param distinctOn The properties to include in the DISTINCT ON clause.
|
||||
*/
|
||||
SELF distinctOn(String distinctOn);
|
||||
|
||||
/**
|
||||
* Apply the fetchGroup which defines what part of the object graph to load.
|
||||
*/
|
||||
|
||||
@@ -4,22 +4,8 @@ public final class AnsiSqlRowsLimiter implements SqlLimiter {
|
||||
|
||||
@Override
|
||||
public SqlLimitResponse limit(SqlLimitRequest request) {
|
||||
String dbSql = request.getDbSql();
|
||||
StringBuilder sb = new StringBuilder(50 + dbSql.length());
|
||||
sb.append("select ");
|
||||
if (request.isDistinct()) {
|
||||
sb.append("distinct ");
|
||||
}
|
||||
sb.append(dbSql);
|
||||
int firstRow = request.getFirstRow();
|
||||
if (firstRow > 0) {
|
||||
sb.append(" offset ").append(firstRow).append(" rows");
|
||||
}
|
||||
int maxRows = request.getMaxRows();
|
||||
if (maxRows > 0) {
|
||||
sb.append(" fetch next ").append(maxRows).append(" rows only");
|
||||
}
|
||||
String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery());
|
||||
final var ansiSql = request.ansiOffsetRows();
|
||||
final var sql = request.getDbPlatform().completeSql(ansiSql, request.getOrmQuery());
|
||||
return new SqlLimitResponse(sql);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,21 +199,12 @@ public class DatabasePlatform {
|
||||
|
||||
protected SqlExceptionTranslator exceptionTranslator = new SqlCodeTranslator();
|
||||
|
||||
protected InsertSqlSyntaxExtension insertSqlSyntaxExtension = new StandardInsertSqlSyntax();
|
||||
|
||||
/**
|
||||
* Instantiates a new database platform.
|
||||
*/
|
||||
public DatabasePlatform() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Insert SQL syntax helper.
|
||||
*/
|
||||
public InsertSqlSyntaxExtension insertSqlSyntaxExtension() {
|
||||
return insertSqlSyntaxExtension;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate the SQLException into a specific persistence exception if possible.
|
||||
*/
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
package io.ebean.config.dbplatform;
|
||||
|
||||
/**
|
||||
* Insert SQL syntax to allow support for ClickHouse type optimisation for inserts.
|
||||
*/
|
||||
public interface InsertSqlSyntaxExtension {
|
||||
|
||||
/**
|
||||
* Start the columns.
|
||||
*/
|
||||
String startColumns();
|
||||
|
||||
/**
|
||||
* End of the columns.
|
||||
*/
|
||||
String endColumns();
|
||||
|
||||
/**
|
||||
* Return true for insert to use standard binding.
|
||||
*/
|
||||
boolean useBinding();
|
||||
|
||||
/**
|
||||
* Start types for non-standard binding (e.g. ClickHouse).
|
||||
*/
|
||||
String startTypes();
|
||||
|
||||
/**
|
||||
* End types for non-standard binding (e.g. ClickHouse).
|
||||
*/
|
||||
String endTypes();
|
||||
}
|
||||
@@ -7,23 +7,16 @@ public final class LimitOffsetSqlLimiter implements SqlLimiter {
|
||||
|
||||
@Override
|
||||
public SqlLimitResponse limit(SqlLimitRequest request) {
|
||||
String dbSql = request.getDbSql();
|
||||
StringBuilder sb = new StringBuilder(50 + dbSql.length());
|
||||
sb.append("select ");
|
||||
if (request.isDistinct()) {
|
||||
sb.append("distinct ");
|
||||
}
|
||||
sb.append(dbSql);
|
||||
final var buffer = request.selectDistinctOnSql();
|
||||
int maxRows = request.getMaxRows();
|
||||
if (maxRows > 0) {
|
||||
sb.append(" limit ").append(maxRows);
|
||||
buffer.append(" limit ").append(maxRows);
|
||||
}
|
||||
int firstRow = request.getFirstRow();
|
||||
if (firstRow > 0) {
|
||||
sb.append(" offset ").append(firstRow);
|
||||
buffer.append(" offset ").append(firstRow);
|
||||
}
|
||||
String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery());
|
||||
return new SqlLimitResponse(sql);
|
||||
return new SqlLimitResponse(request.getDbPlatform().completeSql(buffer.toString(), request.getOrmQuery()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,21 @@ import io.ebean.Query;
|
||||
*/
|
||||
public interface SqlLimitRequest {
|
||||
|
||||
/**
|
||||
* Return ANSI SQL Offset and next rows.
|
||||
*/
|
||||
String ansiOffsetRows();
|
||||
|
||||
/**
|
||||
* Create and return buffer including the select distinct clause.
|
||||
*/
|
||||
StringBuilder selectDistinct();
|
||||
|
||||
/**
|
||||
* Create and return buffer including the select distinct on clause.
|
||||
*/
|
||||
StringBuilder selectDistinctOnSql();
|
||||
|
||||
/**
|
||||
* Return true if the query uses distinct.
|
||||
*/
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
package io.ebean.config.dbplatform;
|
||||
|
||||
/**
|
||||
* Standard Insert SQL syntax.
|
||||
*/
|
||||
public final class StandardInsertSqlSyntax implements InsertSqlSyntaxExtension {
|
||||
|
||||
@Override
|
||||
public String startColumns() {
|
||||
return " (";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String endColumns() {
|
||||
return ") values (";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useBinding() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String startTypes() {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String endTypes() {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
+26
-26
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<name>ebean bom</name>
|
||||
@@ -89,25 +89,25 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core-type</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -125,13 +125,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-jackson-mapper</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-ddl-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -155,37 +155,37 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>querybean-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>kotlin-querybean-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-test</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-redis</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-spring-txn</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- platforms -->
|
||||
@@ -193,79 +193,79 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-clickhouse</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-db2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-h2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-hana</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-mariadb</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-mysql</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-nuodb</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-oracle</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-postgis</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-postgis-types</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-sqlite</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-sqlserver</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>ebean-core-type</artifactId>
|
||||
@@ -16,7 +16,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
+7
-6
@@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>ebean-core</artifactId>
|
||||
@@ -22,7 +22,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -46,7 +46,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core-type</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -159,21 +159,21 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-h2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-sqlserver</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<argLine>-Dnet.bytebuddy.experimental=true</argLine>
|
||||
<useSystemClassLoader>false</useSystemClassLoader>
|
||||
<trimStackTrace>false</trimStackTrace>
|
||||
<failIfNoTests>false</failIfNoTests>
|
||||
|
||||
@@ -84,10 +84,17 @@ public final class LoadBeanRequest extends LoadRequest {
|
||||
return idList;
|
||||
}
|
||||
|
||||
public SpiQuery<?> createQuery(SpiEbeanServer server) {
|
||||
final SpiQuery<?> query = server.createQuery(beanType());
|
||||
query.usingTransaction(transaction);
|
||||
configureQuery(query);
|
||||
return query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the query for lazy loading execution.
|
||||
*/
|
||||
public void configureQuery(SpiQuery<?> query) {
|
||||
private void configureQuery(SpiQuery<?> query) {
|
||||
query.setMode(Mode.LAZYLOAD_BEAN);
|
||||
query.setPersistenceContext(loadBuffer.persistenceContext());
|
||||
query.setLoadDescription(mode(), description());
|
||||
|
||||
@@ -94,6 +94,7 @@ public final class LoadManyRequest extends LoadRequest {
|
||||
public SpiQuery<?> createQuery(SpiEbeanServer server) {
|
||||
BeanPropertyAssocMany<?> many = many();
|
||||
SpiQuery<?> query = many.newQuery(server);
|
||||
query.usingTransaction(transaction);
|
||||
String orderBy = many.lazyFetchOrderBy();
|
||||
if (orderBy != null) {
|
||||
query.orderBy(orderBy);
|
||||
|
||||
@@ -439,6 +439,11 @@ public interface SpiQuery<T> extends Query<T>, SpiQueryFetch, TxnProfileEventCod
|
||||
@Override
|
||||
SpiQuery<T> copy();
|
||||
|
||||
/**
|
||||
* Return the distinct on clause.
|
||||
*/
|
||||
String distinctOn();
|
||||
|
||||
/**
|
||||
* Return a copy of the query attaching to a different EbeanServer.
|
||||
*/
|
||||
@@ -549,7 +554,6 @@ public interface SpiQuery<T> extends Query<T>, SpiQueryFetch, TxnProfileEventCod
|
||||
* Return true if the query should include the Id property.
|
||||
* <p>
|
||||
* distinct and single attribute queries exclude the Id property.
|
||||
* </p>
|
||||
*/
|
||||
boolean isWithId();
|
||||
|
||||
|
||||
@@ -126,9 +126,7 @@ final class DefaultBeanLoader {
|
||||
if (loadRequest.checkEmpty()) {
|
||||
throw new RuntimeException("Nothing in batch?");
|
||||
}
|
||||
final SpiQuery<?> query = server.createQuery(loadRequest.beanType());
|
||||
query.usingTransaction(loadRequest.transaction());
|
||||
loadRequest.configureQuery(query);
|
||||
final SpiQuery<?> query = loadRequest.createQuery(server);
|
||||
loadRequest.postLoad(executeQuery(loadRequest, query));
|
||||
}
|
||||
|
||||
|
||||
@@ -449,6 +449,9 @@ public final class InternalConfiguration {
|
||||
*/
|
||||
private DataTimeZone initDataTimeZone() {
|
||||
String tz = config.getDataTimeZone();
|
||||
if ("NoTimeZone".equals(tz)) {
|
||||
return new NoDataTimeZone();
|
||||
}
|
||||
if (tz == null) {
|
||||
if (isMySql(getPlatform())) {
|
||||
return new MySqlDataTimeZone();
|
||||
|
||||
+1
-1
@@ -514,7 +514,7 @@ final class BeanDescriptorCacheHelp<T> {
|
||||
|
||||
if (natKeys != null && !natKeys.isEmpty()) {
|
||||
if (natLog.isLoggable(DEBUG)) {
|
||||
natLog.log(DEBUG, " MPUT {0}({1}, {2})", cacheName, naturalKey, natKeys.keySet());
|
||||
natLog.log(DEBUG, " MPUT {0}({1}, {2})", cacheName, Arrays.toString(naturalKey), natKeys.keySet());
|
||||
}
|
||||
naturalKeyCache.putAll(natKeys);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import io.ebean.DatabaseBuilder;
|
||||
import io.ebean.Model;
|
||||
import io.ebean.RawSqlBuilder;
|
||||
import io.ebean.annotation.ConstraintMode;
|
||||
import io.ebean.annotation.Platform;
|
||||
import io.ebean.bean.BeanCollection;
|
||||
import io.ebean.bean.EntityBean;
|
||||
import io.ebean.config.*;
|
||||
@@ -633,8 +632,6 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
|
||||
}
|
||||
|
||||
private void registerDescriptor(DeployBeanInfo<?> info) {
|
||||
platformUsesColumnDefinitions(info);
|
||||
|
||||
BeanDescriptor<?> desc = new BeanDescriptor<>(this, info.getDescriptor());
|
||||
descMap.put(desc.type().getName(), desc);
|
||||
if (desc.isDocStoreMapped()) {
|
||||
@@ -647,23 +644,6 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
|
||||
}
|
||||
}
|
||||
|
||||
private void platformUsesColumnDefinitions(DeployBeanInfo<?> info) {
|
||||
if (databasePlatform.isPlatform(Platform.CLICKHOUSE) && !DbOffline.isGenerateMigration()) {
|
||||
// ClickHouse uses column definition to optimise JDBC bulk inserts
|
||||
DbPlatformTypeMapping typeMapping = databasePlatform.dbTypeMap();
|
||||
for (DeployBeanProperty property : info.getDescriptor().propertiesAll()) {
|
||||
if (property.getDbColumnDefn() == null) {
|
||||
DbPlatformType dbPlatformType = typeMapping.get(property.getDbType());
|
||||
String columnDefn = dbPlatformType.renderType(property.getDbLength(), property.getDbScale());
|
||||
if (property.isNullable()) {
|
||||
columnDefn = "Nullable(" + columnDefn + ")";
|
||||
}
|
||||
property.setDbColumnDefn(columnDefn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the initial deployment information for the entities.
|
||||
* <p>
|
||||
|
||||
@@ -43,11 +43,6 @@ public interface ImportedId {
|
||||
*/
|
||||
void dmlAppend(GenerateDmlRequest request);
|
||||
|
||||
/**
|
||||
* Append column and type for Insert (ClickHouse).
|
||||
*/
|
||||
void dmlType(GenerateDmlRequest request);
|
||||
|
||||
/**
|
||||
* Bind the value from the bean.
|
||||
*/
|
||||
|
||||
@@ -66,16 +66,6 @@ public final class ImportedIdEmbedded implements ImportedId {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
boolean update = request.isUpdate();
|
||||
for (ImportedIdSimple anImported : imported) {
|
||||
if (anImported.isInclude(update)) {
|
||||
anImported.dmlType(request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String importedIdClause() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
@@ -37,7 +37,6 @@ public final class ImportedIdSimple implements ImportedId, Comparable<ImportedId
|
||||
|
||||
final BeanPropertyAssoc<?> owner;
|
||||
final String localDbColumn;
|
||||
private final String localColumnDefn;
|
||||
private final String localSqlFormula;
|
||||
final BeanProperty foreignProperty;
|
||||
private final int position;
|
||||
@@ -50,7 +49,6 @@ public final class ImportedIdSimple implements ImportedId, Comparable<ImportedId
|
||||
this.localDbColumn = InternString.intern(localDbColumn);
|
||||
this.localSqlFormula = InternString.intern(localSqlFormula);
|
||||
this.foreignProperty = foreignProperty;
|
||||
this.localColumnDefn = foreignProperty.dbColumnDefn();
|
||||
this.position = position;
|
||||
this.insertable = insertable;
|
||||
this.updateable = updateable;
|
||||
@@ -145,11 +143,6 @@ public final class ImportedIdSimple implements ImportedId, Comparable<ImportedId
|
||||
request.appendColumn(localDbColumn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
request.appendColumnDefn(localDbColumn, localColumnDefn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String importedIdClause() {
|
||||
return localDbColumn + " = ?";
|
||||
|
||||
@@ -75,7 +75,7 @@ final class SubQueryExpression extends AbstractExpression implements Unsupported
|
||||
|
||||
@Override
|
||||
public void addSql(SpiExpressionRequest request) {
|
||||
request.property(propName).append(op.expression).append('(').parse(sql).append(')');
|
||||
request.property(propName).append(op.expression).append('(').append(sql).append(')');
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-13
@@ -15,26 +15,14 @@ public final class GenerateDmlRequest {
|
||||
private String prefix2;
|
||||
private int insertMode;
|
||||
private int bindColumnCount;
|
||||
private boolean hasColumnDefn;
|
||||
|
||||
GenerateDmlRequest append(String s) {
|
||||
sb.append(s);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append column and type for Insert (ClickHouse).
|
||||
*/
|
||||
public void appendColumnDefn(String columnName, String columnDefn) {
|
||||
if (hasColumnDefn) {
|
||||
sb.append(", ");
|
||||
} else {
|
||||
hasColumnDefn = true;
|
||||
}
|
||||
sb.append(columnName).append(' ').append(columnDefn);
|
||||
}
|
||||
|
||||
public void appendColumn(String column) {
|
||||
//String bind = (insertMode > 0) ? "?" : "=?";
|
||||
appendColumn(column, "?");
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import io.ebean.InsertOptions;
|
||||
import io.ebean.annotation.Platform;
|
||||
import io.ebean.bean.EntityBean;
|
||||
import io.ebean.config.dbplatform.DatabasePlatform;
|
||||
import io.ebean.config.dbplatform.InsertSqlSyntaxExtension;
|
||||
import io.ebeaninternal.server.core.PersistRequestBean;
|
||||
import io.ebeaninternal.server.deploy.BeanDescriptor;
|
||||
import io.ebeaninternal.server.deploy.InheritInfo;
|
||||
@@ -38,13 +37,10 @@ final class InsertMeta {
|
||||
private final Bindable shadowFKey;
|
||||
private final String[] identityDbColumns;
|
||||
private final Platform platform;
|
||||
private final InsertSqlSyntaxExtension insertMetaSql;
|
||||
|
||||
private final InsertMetaOptions options;
|
||||
|
||||
InsertMeta(DatabasePlatform dbPlatform, BeanDescriptor<?> desc, Bindable shadowFKey, BindableId id, BindableList all) {
|
||||
this.platform = dbPlatform.platform();
|
||||
this.insertMetaSql = dbPlatform.insertSqlSyntaxExtension();
|
||||
this.options = InsertMetaPlatform.create(platform, desc, this);
|
||||
this.discriminator = discriminator(desc);
|
||||
this.id = id;
|
||||
@@ -178,7 +174,7 @@ final class InsertMeta {
|
||||
request.append(defaultValues());
|
||||
return;
|
||||
}
|
||||
request.append(insertMetaSql.startColumns());
|
||||
request.append(" (");
|
||||
if (!nullId) {
|
||||
id.dmlAppend(request);
|
||||
}
|
||||
@@ -193,28 +189,9 @@ final class InsertMeta {
|
||||
} else {
|
||||
allExcludeDraftOnly.dmlAppend(request);
|
||||
}
|
||||
request.append(insertMetaSql.endColumns());
|
||||
if (insertMetaSql.useBinding()) {
|
||||
request.append(request.insertBindBuffer());
|
||||
request.append(")");
|
||||
} else {
|
||||
request.append(insertMetaSql.startTypes());
|
||||
if (!nullId) {
|
||||
id.dmlType(request);
|
||||
}
|
||||
if (shadowFKey != null) {
|
||||
shadowFKey.dmlType(request);
|
||||
}
|
||||
if (discriminator != null) {
|
||||
discriminator.dmlType(request);
|
||||
}
|
||||
if (draftTable) {
|
||||
all.dmlType(request);
|
||||
} else {
|
||||
allExcludeDraftOnly.dmlType(request);
|
||||
}
|
||||
request.append(insertMetaSql.endTypes());
|
||||
}
|
||||
request.append(") values (");
|
||||
request.append(request.insertBindBuffer());
|
||||
request.append(")");
|
||||
}
|
||||
|
||||
private String defaultValues() {
|
||||
|
||||
@@ -33,11 +33,6 @@ public interface Bindable {
|
||||
*/
|
||||
void dmlAppend(GenerateDmlRequest request);
|
||||
|
||||
/**
|
||||
* Append column and type for Insert (ClickHouse).
|
||||
*/
|
||||
void dmlType(GenerateDmlRequest request);
|
||||
|
||||
/**
|
||||
* Bind given the request and bean. The bean could be the oldValues bean
|
||||
* when binding a update or delete where clause with ALL concurrency mode.
|
||||
|
||||
@@ -40,11 +40,6 @@ class BindableAssocOne implements Bindable {
|
||||
importedId.dmlAppend(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
importedId.dmlType(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException {
|
||||
EntityBean assocBean = (EntityBean) assocOne.getValue(bean);
|
||||
|
||||
-5
@@ -39,11 +39,6 @@ public final class BindableDiscriminator implements Bindable {
|
||||
request.appendColumn(columnName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
throw new IllegalArgumentException("Not supported");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlBind(BindableRequest bindRequest, EntityBean bean) throws SQLException {
|
||||
bindRequest.bind(discValue, sqlType);
|
||||
|
||||
@@ -35,13 +35,6 @@ final class BindableEmbedded implements Bindable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
for (Bindable item : items) {
|
||||
item.dmlType(request);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToUpdate(PersistRequestBean<?> request, List<Bindable> list) {
|
||||
if (request.isAddToUpdate(embProp)) {
|
||||
|
||||
-5
@@ -41,11 +41,6 @@ final class BindableEncryptedProperty implements Bindable {
|
||||
request.appendColumn(prop.dbColumn(), prop.dbBind());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
request.appendColumnDefn(prop.dbColumn(), prop.dbColumnDefn());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException {
|
||||
Object value = null;
|
||||
|
||||
-7
@@ -81,13 +81,6 @@ final class BindableIdEmbedded implements BindableId {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
for (BeanProperty prop : props) {
|
||||
request.appendColumn(prop.dbColumnDefn());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deriveConcatenatedId(PersistRequestBean<?> persist) {
|
||||
if (matches == null) {
|
||||
|
||||
@@ -28,11 +28,6 @@ final class BindableIdEmpty implements BindableId {
|
||||
// nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlBind(BindableRequest request, EntityBean bean) {
|
||||
// nothing
|
||||
|
||||
+4
-5
@@ -58,18 +58,17 @@ final class BindableIdScalar implements BindableId {
|
||||
|
||||
@Override
|
||||
public void dmlAppend(GenerateDmlRequest request) {
|
||||
|
||||
request.appendColumn(uidProp.dbColumn());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
request.appendColumnDefn(uidProp.dbColumn(), uidProp.dbColumnDefn());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException {
|
||||
|
||||
Object value = uidProp.getValue(bean);
|
||||
|
||||
request.bind(value, uidProp);
|
||||
|
||||
// used for summary logging
|
||||
request.setIdValue(value);
|
||||
}
|
||||
|
||||
@@ -60,13 +60,6 @@ public final class BindableList implements Bindable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
for (Bindable item : items) {
|
||||
item.dmlType(request);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlBind(BindableRequest bindRequest, EntityBean bean) throws SQLException {
|
||||
for (Bindable item : items) {
|
||||
|
||||
@@ -36,11 +36,6 @@ class BindableProperty implements Bindable {
|
||||
request.appendColumn(prop.dbColumn());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
request.appendColumnDefn(prop.dbColumn(), prop.dbColumnDefn());
|
||||
}
|
||||
|
||||
/**
|
||||
* Normal binding of a property value from the bean.
|
||||
*/
|
||||
|
||||
-5
@@ -41,11 +41,6 @@ final class BindablePropertyVersion implements Bindable {
|
||||
request.appendColumn(prop.dbColumn());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
request.appendColumnDefn(prop.dbColumn(), prop.dbColumnDefn());
|
||||
}
|
||||
|
||||
/**
|
||||
* Normal binding of a property value from the bean.
|
||||
*/
|
||||
|
||||
-5
@@ -45,11 +45,6 @@ public final class BindableUnidirectional implements Bindable {
|
||||
importedId.dmlAppend(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlType(GenerateDmlRequest request) {
|
||||
importedId.dmlType(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException {
|
||||
PersistRequestBean<?> persistRequest = request.persistRequest();
|
||||
|
||||
@@ -3,7 +3,6 @@ package io.ebeaninternal.server.query;
|
||||
import io.ebean.*;
|
||||
import io.ebean.annotation.Platform;
|
||||
import io.ebean.config.dbplatform.DatabasePlatform;
|
||||
import io.ebean.config.dbplatform.SqlLimitRequest;
|
||||
import io.ebean.config.dbplatform.SqlLimitResponse;
|
||||
import io.ebean.config.dbplatform.SqlLimiter;
|
||||
import io.ebean.event.readaudit.ReadAuditQueryPlan;
|
||||
@@ -533,7 +532,7 @@ final class CQueryBuilder {
|
||||
private final boolean distinct;
|
||||
private final boolean countSingleAttribute;
|
||||
private final String dbOrderBy;
|
||||
private boolean useSqlLimiter;
|
||||
private final boolean useSqlLimiter;
|
||||
private boolean hasWhere;
|
||||
|
||||
private BuildReq(String selectClause, OrmQueryRequest<?> request, CQueryPredicates predicates, SqlTree select) {
|
||||
@@ -550,13 +549,15 @@ final class CQueryBuilder {
|
||||
this.distinct = query.isDistinct() || select.isSqlDistinct();
|
||||
this.dbOrderBy = predicates.dbOrderBy();
|
||||
this.countSingleAttribute = query.isCountDistinct() && query.isSingleAttribute();
|
||||
this.useSqlLimiter = selectClause == null
|
||||
&& query.hasMaxRowsOrFirstRow()
|
||||
&& (select.distinctOn() != null || select.manyProperty() == null || query.isSingleAttribute());
|
||||
}
|
||||
|
||||
private void appendSelect() {
|
||||
if (selectClause != null) {
|
||||
sb.append(selectClause);
|
||||
} else {
|
||||
useSqlLimiter = (query.hasMaxRowsOrFirstRow() && (select.manyProperty() == null || query.isSingleAttribute()));
|
||||
if (!useSqlLimiter) {
|
||||
appendSelectDistinct();
|
||||
}
|
||||
@@ -581,7 +582,7 @@ final class CQueryBuilder {
|
||||
if (request.isInlineCountDistinct()) {
|
||||
sb.append(')');
|
||||
}
|
||||
if (distinct && dbOrderBy != null) {
|
||||
if (distinct && dbOrderBy != null && query.distinctOn() == null) {
|
||||
// add the orderBy columns to the select clause (due to distinct)
|
||||
String[] tokens = DbOrderByTrim.trim(dbOrderBy).split(",");
|
||||
for (String token : tokens) {
|
||||
@@ -733,7 +734,7 @@ final class CQueryBuilder {
|
||||
}
|
||||
if (useSqlLimiter) {
|
||||
// use LIMIT/OFFSET, ROW_NUMBER() or rownum type SQL query limitation
|
||||
SqlLimitRequest r = new OrmQueryLimitRequest(sb.toString(), dbOrderBy, query, dbPlatform, distinct);
|
||||
var r = new OrmQueryLimitRequest(sb.toString(), dbOrderBy, query, dbPlatform, distinct, select.distinctOn(), hint(), inlineSqlComment());
|
||||
return sqlLimiter.limit(r);
|
||||
} else {
|
||||
if (updateStatement) {
|
||||
|
||||
@@ -62,6 +62,7 @@ public final class CQueryPredicates {
|
||||
*/
|
||||
private String dbFilterMany;
|
||||
private String dbOrderBy;
|
||||
private String dbDistinctOn;
|
||||
private String dbUpdateClause;
|
||||
/**
|
||||
* Includes from where and order by clauses.
|
||||
@@ -209,6 +210,10 @@ public final class CQueryPredicates {
|
||||
}
|
||||
}
|
||||
if (buildSql) {
|
||||
final String distinctOn = query.distinctOn();
|
||||
if (distinctOn != null) {
|
||||
dbDistinctOn = deployParser.parse(distinctOn);
|
||||
}
|
||||
predicateIncludes = deployParser.includes();
|
||||
}
|
||||
}
|
||||
@@ -231,6 +236,9 @@ public final class CQueryPredicates {
|
||||
if (dbOrderBy != null) {
|
||||
dbOrderBy = alias.parse(dbOrderBy);
|
||||
}
|
||||
if (dbDistinctOn != null) {
|
||||
dbDistinctOn = alias.parse(dbDistinctOn);
|
||||
}
|
||||
}
|
||||
|
||||
private String parseOrderBy() {
|
||||
@@ -351,6 +359,13 @@ public final class CQueryPredicates {
|
||||
return dbOrderBy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the db distinct on clause.
|
||||
*/
|
||||
String dbDistinctOn() {
|
||||
return dbDistinctOn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the includes required for the where and order by clause.
|
||||
*/
|
||||
|
||||
@@ -59,6 +59,11 @@ final class DefaultFetchGroupQuery<T> implements SpiFetchGroupQuery<T>, SpiQuery
|
||||
return new DFetchGroup<>(detail);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Query<T> distinctOn(String distinctOn) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Query<T> select(String columns) {
|
||||
detail.select(columns);
|
||||
|
||||
@@ -156,6 +156,10 @@ public final class SqlTreeBuilder {
|
||||
}
|
||||
|
||||
private String buildDistinctOn() {
|
||||
String distinctOn = predicates.dbDistinctOn();
|
||||
if (distinctOn != null) {
|
||||
return distinctOn;
|
||||
}
|
||||
if (rawSql || !distinctOnPlatform || !sqlDistinct || Type.COUNT == query.type()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -72,6 +72,7 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
|
||||
* Lazy loading batch size (can override server wide default).
|
||||
*/
|
||||
private int lazyLoadBatchSize;
|
||||
private String distinctOn;
|
||||
private OrderBy<T> orderBy;
|
||||
private String loadMode;
|
||||
private String loadDescription;
|
||||
@@ -515,7 +516,10 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
|
||||
* Limit the number of fetch joins to Many properties, mark as query joins as needed.
|
||||
*/
|
||||
private void markQueryJoins() {
|
||||
detail.markQueryJoins(beanDescriptor, lazyLoadManyPath, isAllowOneManyFetch(), type.defaultSelect());
|
||||
if (distinctOn == null) {
|
||||
// no automatic join to query join conversion when distinctOn is used
|
||||
detail.markQueryJoins(beanDescriptor, lazyLoadManyPath, isAllowOneManyFetch(), type.defaultSelect());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isAllowOneManyFetch() {
|
||||
@@ -639,12 +643,11 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
|
||||
return countDistinctOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the Id should be included in the query.
|
||||
*/
|
||||
@Override
|
||||
public final boolean isWithId() {
|
||||
return !manualId && !distinct && !singleAttribute;
|
||||
// distinctOn orm query will auto include the id property
|
||||
// distinctOn dto query does NOT (via setting manualId to true)
|
||||
return !manualId && !singleAttribute && (!distinct || distinctOn != null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -740,6 +743,7 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
|
||||
copy.baseTable = baseTable;
|
||||
copy.rootTableAlias = rootTableAlias;
|
||||
copy.distinct = distinct;
|
||||
copy.distinctOn = distinctOn;
|
||||
copy.allowLoadErrors = allowLoadErrors;
|
||||
copy.timeout = timeout;
|
||||
copy.mapKey = mapKey;
|
||||
@@ -799,6 +803,11 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String distinctOn() {
|
||||
return distinctOn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String loadDescription() {
|
||||
return loadDescription;
|
||||
@@ -1087,6 +1096,9 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
|
||||
}
|
||||
if (distinct) {
|
||||
sb.append("/dt");
|
||||
if (distinctOn != null) {
|
||||
sb.append("/o:").append(distinctOn);
|
||||
}
|
||||
}
|
||||
if (allowLoadErrors) {
|
||||
sb.append("/ae");
|
||||
@@ -1340,6 +1352,13 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
|
||||
detail.addNested(name, nestedDetail, config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Query<T> distinctOn(String distinctOn) {
|
||||
this.distinctOn = distinctOn;
|
||||
this.distinct = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Query<T> select(String columns) {
|
||||
detail.select(columns);
|
||||
|
||||
@@ -11,13 +11,67 @@ public final class OrmQueryLimitRequest implements SqlLimitRequest {
|
||||
private final String sql;
|
||||
private final String sqlOrderBy;
|
||||
private final boolean distinct;
|
||||
private final String distinctOn;
|
||||
private final String hint;
|
||||
private final String label;
|
||||
|
||||
public OrmQueryLimitRequest(String sql, String sqlOrderBy, SpiQuery<?> ormQuery, DatabasePlatform dbPlatform, boolean distinct) {
|
||||
this(sql, sqlOrderBy, ormQuery, dbPlatform, distinct, null, "", "");
|
||||
}
|
||||
|
||||
public OrmQueryLimitRequest(String sql, String sqlOrderBy, SpiQuery<?> ormQuery, DatabasePlatform dbPlatform,
|
||||
boolean distinct, String distinctOn, String hint, String label) {
|
||||
this.sql = sql;
|
||||
this.sqlOrderBy = sqlOrderBy;
|
||||
this.ormQuery = ormQuery;
|
||||
this.dbPlatform = dbPlatform;
|
||||
this.distinct = distinct;
|
||||
this.distinctOn = distinctOn;
|
||||
this.hint = hint;
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
private StringBuilder newBuffer() {
|
||||
return new StringBuilder(50 + sql.length());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String ansiOffsetRows() {
|
||||
final var buffer = selectDistinct();
|
||||
buffer.append(sql);
|
||||
int firstRow = getFirstRow();
|
||||
if (firstRow > 0) {
|
||||
buffer.append(" offset ").append(firstRow).append(" rows");
|
||||
}
|
||||
int maxRows = getMaxRows();
|
||||
if (maxRows > 0) {
|
||||
buffer.append(" fetch next ").append(maxRows).append(" rows only");
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringBuilder selectDistinct() {
|
||||
final var buffer = newBuffer();
|
||||
buffer.append("select ").append(hint).append(label);
|
||||
if (distinct) {
|
||||
buffer.append("distinct ");
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringBuilder selectDistinctOnSql() {
|
||||
var buffer = newBuffer();
|
||||
buffer.append("select ").append(hint).append(label);
|
||||
if (distinct) {
|
||||
buffer.append("distinct ");
|
||||
if (distinctOn != null) {
|
||||
buffer.append("on (").append(distinctOn).append(") ");
|
||||
}
|
||||
}
|
||||
buffer.append(sql);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,6 +3,7 @@ package io.ebeaninternal.server.querydefn;
|
||||
|
||||
import io.ebean.*;
|
||||
import io.ebeaninternal.api.BindValuesKey;
|
||||
import io.ebeaninternal.api.SpiQuery;
|
||||
import io.ebeaninternal.server.core.OrmQueryRequest;
|
||||
import io.ebeaninternal.server.core.OrmQueryRequestTestHelper;
|
||||
import io.ebeaninternal.server.expression.BaseExpressionTest;
|
||||
@@ -54,6 +55,32 @@ public class DefaultOrmQueryTest extends BaseExpressionTest {
|
||||
assertThat(q1.getId()).isEqualTo(42);
|
||||
}
|
||||
|
||||
@Test
|
||||
void when_distinctOn_then_planChanges() {
|
||||
DefaultOrmQuery<Order> q1 = (DefaultOrmQuery<Order>) DB.find(Order.class).distinctOn("name");
|
||||
DefaultOrmQuery<Order> q2 = (DefaultOrmQuery<Order>) DB.find(Order.class);
|
||||
|
||||
prepare(q1, q2);
|
||||
assertThat(q1.createQueryPlanKey()).isNotEqualTo(q2.createQueryPlanKey());
|
||||
}
|
||||
|
||||
@Test
|
||||
void when_distinctOn_match() {
|
||||
DefaultOrmQuery<Order> q1 = (DefaultOrmQuery<Order>) DB.find(Order.class).distinctOn("name");
|
||||
DefaultOrmQuery<Order> q2 = (DefaultOrmQuery<Order>) DB.find(Order.class).distinctOn("name");
|
||||
|
||||
prepare(q1, q2);
|
||||
assertThat(q1.createQueryPlanKey()).isEqualTo(q2.createQueryPlanKey());
|
||||
assertThat(bindKey(q1)).isEqualTo(bindKey(q2));
|
||||
}
|
||||
|
||||
@Test
|
||||
void when_distinctOn_copy() {
|
||||
DefaultOrmQuery<Order> q1 = (DefaultOrmQuery<Order>) DB.find(Order.class).distinctOn("name");
|
||||
SpiQuery<Order> copy = q1.copy();
|
||||
assertThat(copy.distinctOn()).isEqualTo("name");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void when_addWhere_then_planChanges() {
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<name>ebean ddl generation</name>
|
||||
@@ -28,14 +28,14 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core-type</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-all</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
-11
@@ -5,7 +5,6 @@ import io.ebean.config.dbplatform.DatabasePlatform;
|
||||
import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer;
|
||||
import io.ebeaninternal.dbmigration.ddlgeneration.DdlHandler;
|
||||
import io.ebeaninternal.dbmigration.ddlgeneration.DdlOptions;
|
||||
import io.ebeaninternal.dbmigration.migration.Column;
|
||||
|
||||
public class ClickHouseDdl extends PlatformDdl {
|
||||
|
||||
@@ -18,16 +17,6 @@ public class ClickHouseDdl extends PlatformDdl {
|
||||
this.columnNotNull = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String columnDefn(Column column) {
|
||||
String defn = super.columnDefn(column);
|
||||
if (isTrue(column.isNotnull()) || isTrue(column.isPrimaryKey())) {
|
||||
return defn;
|
||||
} else {
|
||||
return "Nullable(" + defn + ")";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public DdlHandler createDdlHandler(DatabaseBuilder.Settings config) {
|
||||
return new ClickHouseDdlHandler(config, this);
|
||||
|
||||
+4
-11
@@ -230,13 +230,13 @@ public class PlatformDdl {
|
||||
* Write the column definition to the create table statement.
|
||||
*/
|
||||
protected void writeColumnDefinition(DdlBuffer buffer, Column column, DdlIdentity identity) {
|
||||
buffer.append(" ");
|
||||
buffer.append(quote(column.getName()), 29);
|
||||
|
||||
String columnDefn = columnDefn(column);
|
||||
String columnDefn = convert(column.getType());
|
||||
if (identity.useIdentity() && isTrue(column.isPrimaryKey())) {
|
||||
columnDefn = asIdentityColumn(columnDefn, identity);
|
||||
}
|
||||
|
||||
buffer.append(" ");
|
||||
buffer.append(quote(column.getName()), 29);
|
||||
buffer.append(columnDefn);
|
||||
if (!Boolean.TRUE.equals(column.isPrimaryKey())) {
|
||||
String defaultValue = convertDefaultValue(column.getDefaultValue());
|
||||
@@ -251,13 +251,6 @@ public class PlatformDdl {
|
||||
// so that the database can potentially provide a nice SQL error
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the plaform specific column type definition.
|
||||
*/
|
||||
protected String columnDefn(Column column) {
|
||||
return convert(column.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the check constraint.
|
||||
*/
|
||||
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
package io.ebeaninternal.dbmigration;
|
||||
|
||||
import io.ebean.platform.clickhouse.ClickHousePlatform;
|
||||
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
|
||||
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class ClickHousePlatformTest {
|
||||
|
||||
@Test
|
||||
void testTypeConversion() {
|
||||
|
||||
PlatformDdl ddl = PlatformDdlBuilder.create(new ClickHousePlatform());
|
||||
|
||||
assertThat(ddl.convert("clob")).isEqualTo("String");
|
||||
assertThat(ddl.convert("varchar(20)")).isEqualTo("String");
|
||||
assertThat(ddl.convert("json")).isEqualTo("JSON");
|
||||
assertThat(ddl.convert("jsonb")).isEqualTo("JSON");
|
||||
assertThat(ddl.convert("decimal(10)")).isEqualTo("Decimal(10)");
|
||||
assertThat(ddl.convert("decimal(8,4)")).isEqualTo("Decimal(8,4)");
|
||||
assertThat(ddl.convert("decimal")).isEqualTo("Decimal(16,3)");
|
||||
assertThat(ddl.convert("boolean")).isEqualTo("Bool");
|
||||
assertThat(ddl.convert("bit")).isEqualTo("bit");
|
||||
}
|
||||
|
||||
}
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
|
||||
|
||||
import io.ebean.platform.clickhouse.ClickHousePlatform;
|
||||
import io.ebeaninternal.dbmigration.migration.Column;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class ClickHouseDdlTest {
|
||||
|
||||
private final ClickHouseDdl ddl = new ClickHouseDdl(new ClickHousePlatform());
|
||||
|
||||
@Test
|
||||
void convert() {
|
||||
assertThat(ddl.convert("boolean")).isEqualTo("Bool");
|
||||
assertThat(ddl.convert("integer")).isEqualTo("UInt32");
|
||||
assertThat(ddl.convert("bigint")).isEqualTo("UInt64");
|
||||
assertThat(ddl.convert("decimal(20,3)")).isEqualTo("Decimal(20,3)");
|
||||
assertThat(ddl.convert("varchar(20)")).isEqualTo("String");
|
||||
assertThat(ddl.convert("hstore")).isEqualTo("Map(String,String)");
|
||||
assertThat(ddl.convert("json")).isEqualTo("JSON");
|
||||
assertThat(ddl.convert("varchar[]")).isEqualTo("Array(String)");
|
||||
}
|
||||
|
||||
@Test
|
||||
void columnDefnNullable() {
|
||||
Column column = new Column();
|
||||
column.setType("varchar(20)");
|
||||
column.setNotnull(null);
|
||||
assertThat(ddl.columnDefn(column)).isEqualTo("Nullable(String)");
|
||||
}
|
||||
|
||||
@Test
|
||||
void columnDefnNullable2() {
|
||||
Column column = new Column();
|
||||
column.setType("varchar(20)");
|
||||
column.setNotnull(Boolean.FALSE);
|
||||
assertThat(ddl.columnDefn(column)).isEqualTo("Nullable(String)");
|
||||
}
|
||||
|
||||
@Test
|
||||
void columnDefnNotNull() {
|
||||
Column column = new Column();
|
||||
column.setType("varchar(20)");
|
||||
column.setNotnull(Boolean.TRUE);
|
||||
assertThat(ddl.columnDefn(column)).isEqualTo("String");
|
||||
}
|
||||
|
||||
@Test
|
||||
void columnDefnNotNullPrimaryKey() {
|
||||
Column column = new Column();
|
||||
column.setType("varchar(20)");
|
||||
column.setPrimaryKey(Boolean.TRUE);
|
||||
assertThat(ddl.columnDefn(column)).isEqualTo("String");
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core-type</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<name>ebean postgis types</name>
|
||||
@@ -19,14 +19,14 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- provided scope -->
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-test</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<tiles>
|
||||
<tile>io.ebean.tile:enhancement:14.2.0</tile>
|
||||
<tile>io.ebean.tile:enhancement:14.3.0</tile>
|
||||
</tiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@@ -35,6 +35,8 @@ public class TestCacheSerialization {
|
||||
assertEquals(p1, r2.getPoint()); // and did fail https://github.com/ebean-orm/ebean/issues/3026
|
||||
assertEquals(pol, r2.getPolygon());
|
||||
|
||||
DB.delete(tb);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -76,5 +78,7 @@ public class TestCacheSerialization {
|
||||
assertEquals(pol, r2.getPolygon()); // and did fail https://github.com/ebean-orm/ebean/issues/3026
|
||||
assertNull(r1.getPoint());
|
||||
|
||||
DB.delete(tb);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<name>ebean querybean</name>
|
||||
@@ -17,7 +17,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -63,14 +63,14 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-ddl-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-test</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>querybean-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<tiles>
|
||||
<tile>io.ebean.tile:enhancement:14.2.0</tile>
|
||||
<tile>io.ebean.tile:enhancement:14.3.0</tile>
|
||||
</tiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@@ -59,6 +59,13 @@ public interface IQueryBean<T, R> extends QueryBuilder<R, T> {
|
||||
*/
|
||||
FetchGroup<T> buildFetchGroup();
|
||||
|
||||
/**
|
||||
* Set DISTINCT ON properties. This is a Postgres only SQL feature.
|
||||
*
|
||||
* @param properties The properties to include in the DISTINCT ON clause.
|
||||
*/
|
||||
R distinctOn(TQProperty<R, ?>... properties);
|
||||
|
||||
/**
|
||||
* Specify the properties to be loaded on the 'main' root level entity bean.
|
||||
* <p>
|
||||
|
||||
@@ -88,14 +88,14 @@ public abstract class QueryBean<T, R> implements IQueryBean<T, R> {
|
||||
/**
|
||||
* Construct using the type of bean to query on and the default database.
|
||||
*/
|
||||
public QueryBean(Class<T> beanType) {
|
||||
protected QueryBean(Class<T> beanType) {
|
||||
this(beanType, DB.getDefault());
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct using the type of bean to query on and a given database.
|
||||
*/
|
||||
public QueryBean(Class<T> beanType, Database database) {
|
||||
protected QueryBean(Class<T> beanType, Database database) {
|
||||
this(database.find(beanType));
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ public abstract class QueryBean<T, R> implements IQueryBean<T, R> {
|
||||
* Construct using a query.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public QueryBean(Query<T> query) {
|
||||
protected QueryBean(Query<T> query) {
|
||||
this.query = query;
|
||||
this.root = (R) this;
|
||||
}
|
||||
@@ -129,7 +129,7 @@ public abstract class QueryBean<T, R> implements IQueryBean<T, R> {
|
||||
* values for select() and fetch().
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public QueryBean(boolean aliasDummy) {
|
||||
protected QueryBean(boolean aliasDummy) {
|
||||
this.query = null;
|
||||
this.root = (R) this;
|
||||
}
|
||||
@@ -159,6 +159,12 @@ public abstract class QueryBean<T, R> implements IQueryBean<T, R> {
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public R distinctOn(String distinctOn) {
|
||||
query.distinctOn(distinctOn);
|
||||
return root;
|
||||
}
|
||||
|
||||
@Override
|
||||
public R select(String properties) {
|
||||
query.select(properties);
|
||||
@@ -171,6 +177,17 @@ public abstract class QueryBean<T, R> implements IQueryBean<T, R> {
|
||||
return root;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SafeVarargs
|
||||
public final R distinctOn(TQProperty<R, ?>... properties) {
|
||||
final var joiner = new StringJoiner(", ");
|
||||
for (Query.Property<?> property : properties) {
|
||||
joiner.add(property.toString());
|
||||
}
|
||||
distinctOn(joiner.toString());
|
||||
return root;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SafeVarargs
|
||||
public final R select(TQProperty<R, ?>... properties) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import io.ebean.*;
|
||||
import io.ebean.annotation.Transactional;
|
||||
import io.ebean.test.LoggedSql;
|
||||
import io.ebean.types.Inet;
|
||||
import io.ebeaninternal.api.SpiQuery;
|
||||
import org.example.domain.Address;
|
||||
import org.example.domain.Country;
|
||||
import org.example.domain.Customer;
|
||||
@@ -226,6 +227,22 @@ public class QCustomerTest {
|
||||
.findList();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void distinctOn() {
|
||||
var c = QContact.alias();
|
||||
var q = new QContact()
|
||||
.distinctOn(c.customer)
|
||||
.select(c.lastName, c.whenCreated)
|
||||
.orderBy()
|
||||
.customer.id.asc()
|
||||
.whenCreated.desc()
|
||||
.query();
|
||||
|
||||
SpiQuery<?> spiQuery = (SpiQuery<?>) q;
|
||||
assertThat(spiQuery.distinctOn()).isEqualTo("customer");
|
||||
assertThat(spiQuery.isDistinct()).isTrue();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Test
|
||||
public void forUpdate() {
|
||||
@@ -314,7 +331,7 @@ public class QCustomerTest {
|
||||
.query();
|
||||
|
||||
q.findList();
|
||||
assertThat(q.getGeneratedSql()).isEqualTo("select t0.id, t0.name from be_customer t0 limit 10");
|
||||
assertThat(q.getGeneratedSql()).isEqualTo("select /* QCustomerTest.filterManySeparateQuery */ t0.id, t0.name from be_customer t0 limit 10");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+7
-7
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>ebean-redis</artifactId>
|
||||
@@ -22,28 +22,28 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-test</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>querybean-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<tiles>
|
||||
<tile>io.ebean.tile:enhancement:14.2.0</tile>
|
||||
<tile>io.ebean.tile:enhancement:14.3.0</tile>
|
||||
</tiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>ebean-spring-txn</artifactId>
|
||||
@@ -28,7 +28,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-test</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<tiles>
|
||||
<tile>io.ebean.tile:enhancement:14.2.0</tile>
|
||||
<tile>io.ebean.tile:enhancement:14.3.0</tile>
|
||||
</tiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
+10
-10
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<name>ebean test</name>
|
||||
@@ -12,8 +12,8 @@
|
||||
<artifactId>ebean-test</artifactId>
|
||||
|
||||
<properties>
|
||||
<bytebuddy.version>1.14.13</bytebuddy.version>
|
||||
<assertj.version>3.25.3</assertj.version>
|
||||
<bytebuddy.version>1.14.17</bytebuddy.version>
|
||||
<assertj.version>3.26.0</assertj.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@@ -33,20 +33,20 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-h2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-ddl-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -149,14 +149,14 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-jackson-mapper</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-all</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -305,11 +305,11 @@
|
||||
<plugin>
|
||||
<groupId>io.repaint.maven</groupId>
|
||||
<artifactId>tiles-maven-plugin</artifactId>
|
||||
<version>2.34</version>
|
||||
<version>2.40</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<tiles>
|
||||
<tile>io.ebean.tile:enhancement:14.2.0</tile>
|
||||
<tile>io.ebean.tile:enhancement:14.3.0</tile>
|
||||
</tiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@@ -222,8 +222,12 @@ public class DtoQueryFromOrmTest extends BaseTestCase {
|
||||
LoggedSql.start();
|
||||
|
||||
DtoQuery<ContactDto> query = DB.find(Contact.class)
|
||||
.select("email, " + concat("lastName", ", ", "firstName") + " as fullName").where().isNotNull("email")
|
||||
.isNotNull("lastName").order().asc("lastName").asDto(ContactDto.class);
|
||||
.select("email, " + concat("lastName", ", ", "firstName") + " as fullName")
|
||||
.where()
|
||||
.isNotNull("email")
|
||||
.isNotNull("lastName")
|
||||
.order().asc("lastName")
|
||||
.asDto(ContactDto.class);
|
||||
|
||||
List<ContactDto> dtos = query.findList();
|
||||
|
||||
@@ -246,9 +250,15 @@ public class DtoQueryFromOrmTest extends BaseTestCase {
|
||||
|
||||
LoggedSql.start();
|
||||
|
||||
List<ContactDto> contactDtos = DB.find(Contact.class).setLabel("emailFullName")
|
||||
.select("email, " + concat("lastName", ", ", "firstName") + " as fullName").where().isNotNull("email")
|
||||
.isNotNull("lastName").order().asc("lastName").setMaxRows(10).asDto(ContactDto.class).findList();
|
||||
List<ContactDto> contactDtos = DB.find(Contact.class)
|
||||
.setLabel("emailFullName")
|
||||
.select("email, " + concat("lastName", ", ", "firstName") + " as fullName")
|
||||
.where().isNotNull("email")
|
||||
.isNotNull("lastName")
|
||||
.orderBy().asc("lastName")
|
||||
.setMaxRows(10)
|
||||
.asDto(ContactDto.class)
|
||||
.findList();
|
||||
|
||||
assertThat(contactDtos).isNotEmpty();
|
||||
|
||||
@@ -260,11 +270,11 @@ public class DtoQueryFromOrmTest extends BaseTestCase {
|
||||
List<String> sql = LoggedSql.stop();
|
||||
|
||||
if (isSqlServer()) {
|
||||
assertSql(sql.get(0)).contains("select top 10 t0.email, " + concat("t0.last_name", ", ", "t0.first_name")
|
||||
assertSql(sql.get(0)).contains("select /* emailFullName */ top 10 t0.email, " + concat("t0.last_name", ", ", "t0.first_name")
|
||||
+ " fullName from contact t0 where t0.email is not null and t0.last_name is not null order by t0.last_name");
|
||||
|
||||
} else {
|
||||
assertSql(sql.get(0)).contains("select t0.email, " + concat("t0.last_name", ", ", "t0.first_name")
|
||||
assertSql(sql.get(0)).contains("select /* emailFullName */ t0.email, " + concat("t0.last_name", ", ", "t0.first_name")
|
||||
+ " fullName from contact t0 where t0.email is not null and t0.last_name is not null order by t0.last_name");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,8 +123,8 @@ class DbTypeMapTest {
|
||||
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("String");
|
||||
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("DateTime");
|
||||
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("DateTime");
|
||||
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("JSON");
|
||||
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("JSON");
|
||||
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("String");
|
||||
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("String");
|
||||
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("String");
|
||||
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("blob");
|
||||
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("String");
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
package org.tests.query;
|
||||
|
||||
import io.ebean.DB;
|
||||
import io.ebean.Query;
|
||||
import io.ebean.annotation.Platform;
|
||||
import io.ebean.test.LoggedSql;
|
||||
import io.ebean.xtest.BaseTestCase;
|
||||
import io.ebean.xtest.ForPlatform;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.tests.model.basic.Contact;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.OrderDetail;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class TestDistinctOnQuery extends BaseTestCase {
|
||||
|
||||
@ForPlatform({Platform.POSTGRES, Platform.YUGABYTE})
|
||||
@Test
|
||||
void distinctOn() {
|
||||
ResetBasicData.reset();
|
||||
|
||||
LoggedSql.start();
|
||||
|
||||
List<Customer> customers = DB.find(Customer.class)
|
||||
.distinctOn("id")
|
||||
.select("name")
|
||||
.fetch("contacts", "firstName, lastName")
|
||||
.orderBy("id, contacts.lastName")
|
||||
.setMaxRows(10)
|
||||
.findList();
|
||||
|
||||
for (Customer customer : customers) {
|
||||
List<Contact> contacts = customer.getContacts();
|
||||
assertThat(contacts.size()).isEqualTo(1);
|
||||
}
|
||||
|
||||
List<String> sql = LoggedSql.stop();
|
||||
assertThat(sql).hasSize(1);
|
||||
assertThat(sql.get(0)).contains("select distinct on (t0.id) t0.id, t0.name, t1.id, t1.first_name, t1.last_name from o_customer t0 left join contact t1 on t1.customer_id = t0.id order by t0.id, t1.last_name limit 10;");
|
||||
}
|
||||
|
||||
@ForPlatform({Platform.POSTGRES, Platform.YUGABYTE})
|
||||
@Test
|
||||
void distinctOnSubQuery() {
|
||||
ResetBasicData.reset();
|
||||
|
||||
LoggedSql.start();
|
||||
|
||||
Query<OrderDetail> subQuery = DB.find(OrderDetail.class)
|
||||
.distinctOn("product")
|
||||
.select("id")
|
||||
.orderBy("product, updtime desc")
|
||||
.setMaxRows(10);
|
||||
|
||||
List<OrderDetail> lines = DB.find(OrderDetail.class)
|
||||
.select("product, orderQty, shipQty, created")
|
||||
.where().in("id", subQuery)
|
||||
.orderBy().asc("cretime")
|
||||
.findList();
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
@ForPlatform({Platform.POSTGRES, Platform.YUGABYTE})
|
||||
@Test
|
||||
void distinctOnManyToOne() {
|
||||
ResetBasicData.reset();
|
||||
int totalCount = DB.find(Contact.class).findCount();
|
||||
|
||||
LoggedSql.start();
|
||||
List<Contact> contacts = DB.find(Contact.class)
|
||||
.distinctOn("customer")
|
||||
.select("*")
|
||||
.orderBy("customer, updtime desc")
|
||||
.setMaxRows(10)
|
||||
.findList();
|
||||
|
||||
assertThat(contacts.size()).isLessThan(totalCount);
|
||||
|
||||
List<String> sql = LoggedSql.stop();
|
||||
assertThat(sql).hasSize(1);
|
||||
assertThat(sql.get(0)).contains("select distinct on (t0.customer_id) t0.id, t0.first_name, t0.last_name");
|
||||
assertThat(sql.get(0)).contains("from contact t0 order by t0.customer_id, t0.updtime desc limit 10");
|
||||
}
|
||||
|
||||
@ForPlatform({Platform.POSTGRES, Platform.YUGABYTE})
|
||||
@Test
|
||||
void distinctOnToDto() {
|
||||
ResetBasicData.reset();
|
||||
int totalCount = DB.find(Contact.class).findCount();
|
||||
|
||||
LoggedSql.start();
|
||||
List<MyDto> contacts = DB.find(Contact.class)
|
||||
.distinctOn("lastName")
|
||||
.select("firstName, lastName")
|
||||
.orderBy("lastName desc")
|
||||
.setMaxRows(10)
|
||||
.asDto(MyDto.class)
|
||||
.findList();
|
||||
|
||||
assertThat(contacts.size()).isLessThan(totalCount);
|
||||
for (MyDto contact : contacts) {
|
||||
assertThat(contact.firstName()).isNotBlank();
|
||||
assertThat(contact.lastName()).isNotBlank();
|
||||
}
|
||||
|
||||
List<String> sql = LoggedSql.stop();
|
||||
assertThat(sql).hasSize(1);
|
||||
assertThat(sql.get(0)).contains("select distinct on (t0.last_name) t0.first_name, t0.last_name from contact t0 order by t0.last_name desc limit 10");
|
||||
}
|
||||
|
||||
@ForPlatform({Platform.POSTGRES, Platform.YUGABYTE})
|
||||
@Test
|
||||
void distinctOnToDtoWithId() {
|
||||
ResetBasicData.reset();
|
||||
int totalCount = DB.find(Contact.class).findCount();
|
||||
|
||||
LoggedSql.start();
|
||||
List<MyDtoWithId> contacts = DB.find(Contact.class)
|
||||
.distinctOn("lastName")
|
||||
.select("id, firstName, lastName")
|
||||
.orderBy("lastName desc")
|
||||
.setMaxRows(10)
|
||||
.asDto(MyDtoWithId.class)
|
||||
.findList();
|
||||
|
||||
assertThat(contacts.size()).isLessThan(totalCount);
|
||||
for (MyDtoWithId contact : contacts) {
|
||||
assertThat(contact.id()).isGreaterThan(0);
|
||||
assertThat(contact.firstName()).isNotBlank();
|
||||
assertThat(contact.lastName()).isNotBlank();
|
||||
}
|
||||
|
||||
List<String> sql = LoggedSql.stop();
|
||||
assertThat(sql).hasSize(1);
|
||||
assertThat(sql.get(0)).contains("select distinct on (t0.last_name) t0.id, t0.first_name, t0.last_name from contact t0 order by t0.last_name desc limit 10");
|
||||
}
|
||||
|
||||
public static class MyDto {
|
||||
private final String firstName;
|
||||
private final String lastName;
|
||||
|
||||
public MyDto(String firstName, String lastName) {
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public String firstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public String lastName() {
|
||||
return lastName;
|
||||
}
|
||||
}
|
||||
|
||||
public static class MyDtoWithId {
|
||||
private final long id;
|
||||
private final String firstName;
|
||||
private final String lastName;
|
||||
|
||||
public MyDtoWithId(long id, String firstName, String lastName) {
|
||||
this.id = id;
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public long id() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String firstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public String lastName() {
|
||||
return lastName;
|
||||
}
|
||||
}
|
||||
}
|
||||
+42
-42
@@ -2,24 +2,24 @@
|
||||
-- apply changes
|
||||
create table migtest_ckey_assoc (
|
||||
id UInt32,
|
||||
assoc_one Nullable(String)
|
||||
assoc_one String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_ckey_detail (
|
||||
id UInt32,
|
||||
something Nullable(String)
|
||||
something String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_ckey_parent (
|
||||
one_key UInt32,
|
||||
two_key String,
|
||||
name Nullable(String),
|
||||
name String,
|
||||
version UInt32
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_fk_cascade (
|
||||
id UInt64,
|
||||
one_id Nullable(UInt64)
|
||||
one_id UInt64
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_fk_cascade_one (
|
||||
@@ -28,12 +28,12 @@ create table migtest_fk_cascade_one (
|
||||
|
||||
create table migtest_fk_none (
|
||||
id UInt64,
|
||||
one_id Nullable(UInt64)
|
||||
one_id UInt64
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_fk_none_via_join (
|
||||
id UInt64,
|
||||
one_id Nullable(UInt64)
|
||||
one_id UInt64
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_fk_one (
|
||||
@@ -42,73 +42,73 @@ create table migtest_fk_one (
|
||||
|
||||
create table migtest_fk_set_null (
|
||||
id UInt64,
|
||||
one_id Nullable(UInt64)
|
||||
one_id UInt64
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_basic (
|
||||
id UInt32,
|
||||
status Nullable(String),
|
||||
status String,
|
||||
status2 String default 'N',
|
||||
name Nullable(String),
|
||||
description Nullable(String),
|
||||
description_file Nullable(blob),
|
||||
json_list Nullable(JSON),
|
||||
name String,
|
||||
description String,
|
||||
description_file blob,
|
||||
json_list String,
|
||||
a_lob String default 'X',
|
||||
some_date Nullable(DateTime),
|
||||
old_boolean Bool default false,
|
||||
old_boolean2 Nullable(Bool),
|
||||
eref_id Nullable(UInt32),
|
||||
indextest1 Nullable(String),
|
||||
indextest2 Nullable(String),
|
||||
indextest3 Nullable(String),
|
||||
indextest4 Nullable(String),
|
||||
indextest5 Nullable(String),
|
||||
indextest6 Nullable(String),
|
||||
some_date DateTime,
|
||||
old_boolean UInt8 default 0,
|
||||
old_boolean2 UInt8,
|
||||
eref_id UInt32,
|
||||
indextest1 String,
|
||||
indextest2 String,
|
||||
indextest3 String,
|
||||
indextest4 String,
|
||||
indextest5 String,
|
||||
indextest6 String,
|
||||
user_id UInt32
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_enum (
|
||||
id UInt32,
|
||||
test_status Nullable(String)
|
||||
test_status String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_history (
|
||||
id UInt32,
|
||||
test_string Nullable(String)
|
||||
test_string String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_history2 (
|
||||
id UInt32,
|
||||
test_string Nullable(String),
|
||||
obsolete_string1 Nullable(String),
|
||||
obsolete_string2 Nullable(String)
|
||||
test_string String,
|
||||
obsolete_string1 String,
|
||||
obsolete_string2 String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_history3 (
|
||||
id UInt32,
|
||||
test_string Nullable(String)
|
||||
test_string String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_history4 (
|
||||
id UInt32,
|
||||
test_number Nullable(UInt32)
|
||||
test_number UInt32
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_history5 (
|
||||
id UInt32,
|
||||
test_number Nullable(UInt32)
|
||||
test_number UInt32
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_history6 (
|
||||
id UInt32,
|
||||
test_number1 Nullable(UInt32),
|
||||
test_number1 UInt32,
|
||||
test_number2 UInt32
|
||||
) ENGINE = Log();
|
||||
|
||||
create table "migtest_QuOtEd" (
|
||||
id String,
|
||||
status1 Nullable(String),
|
||||
status2 Nullable(String)
|
||||
status1 String,
|
||||
status2 String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_ref (
|
||||
@@ -118,35 +118,35 @@ create table migtest_e_ref (
|
||||
|
||||
create table migtest_e_softdelete (
|
||||
id UInt32,
|
||||
test_string Nullable(String)
|
||||
test_string String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table "table" (
|
||||
"index" String,
|
||||
"from" Nullable(String),
|
||||
"to" Nullable(String),
|
||||
"varchar" Nullable(String),
|
||||
"foreign" Nullable(String),
|
||||
"from" String,
|
||||
"to" String,
|
||||
"varchar" String,
|
||||
"foreign" String,
|
||||
textfield String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_mtm_c (
|
||||
id UInt32,
|
||||
name Nullable(String)
|
||||
name String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_mtm_m (
|
||||
id UInt64,
|
||||
name Nullable(String)
|
||||
name String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_oto_child (
|
||||
id UInt32,
|
||||
name Nullable(String)
|
||||
name String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_oto_master (
|
||||
id UInt64,
|
||||
name Nullable(String)
|
||||
name String
|
||||
) ENGINE = Log();
|
||||
|
||||
|
||||
@@ -21,104 +21,104 @@ create table drop_ref_many (
|
||||
|
||||
create table drop_ref_one (
|
||||
id UInt32,
|
||||
parent_id Nullable(UInt32)
|
||||
parent_id UInt32
|
||||
) ENGINE = Log();
|
||||
|
||||
create table drop_ref_one_to_one (
|
||||
id UInt32,
|
||||
parent_id Nullable(UInt32)
|
||||
parent_id UInt32
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_test_binary (
|
||||
id UInt32,
|
||||
test_byte16 Nullable(String),
|
||||
test_byte256 Nullable(String),
|
||||
test_byte512 Nullable(String),
|
||||
test_byte1k Nullable(String),
|
||||
test_byte2k Nullable(String),
|
||||
test_byte4k Nullable(String),
|
||||
test_byte8k Nullable(String),
|
||||
test_byte16k Nullable(String),
|
||||
test_byte32k Nullable(String),
|
||||
test_byte64k Nullable(String),
|
||||
test_byte128k Nullable(String),
|
||||
test_byte256k Nullable(String),
|
||||
test_byte512k Nullable(String),
|
||||
test_byte1m Nullable(String),
|
||||
test_byte2m Nullable(String),
|
||||
test_byte4m Nullable(String),
|
||||
test_byte8m Nullable(String),
|
||||
test_byte16m Nullable(String),
|
||||
test_byte32m Nullable(String)
|
||||
test_byte16 String,
|
||||
test_byte256 String,
|
||||
test_byte512 String,
|
||||
test_byte1k String,
|
||||
test_byte2k String,
|
||||
test_byte4k String,
|
||||
test_byte8k String,
|
||||
test_byte16k String,
|
||||
test_byte32k String,
|
||||
test_byte64k String,
|
||||
test_byte128k String,
|
||||
test_byte256k String,
|
||||
test_byte512k String,
|
||||
test_byte1m String,
|
||||
test_byte2m String,
|
||||
test_byte4m String,
|
||||
test_byte8m String,
|
||||
test_byte16m String,
|
||||
test_byte32m String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_test_json (
|
||||
id UInt32,
|
||||
json255 Nullable(JSON),
|
||||
json256 Nullable(JSON),
|
||||
json512 Nullable(JSON),
|
||||
json1k Nullable(JSON),
|
||||
json2k Nullable(JSON),
|
||||
json4k Nullable(JSON),
|
||||
json8k Nullable(JSON),
|
||||
json16k Nullable(JSON),
|
||||
json32k Nullable(JSON),
|
||||
json64k Nullable(JSON),
|
||||
json128k Nullable(JSON),
|
||||
json256k Nullable(JSON),
|
||||
json512k Nullable(JSON),
|
||||
json1m Nullable(JSON),
|
||||
json2m Nullable(JSON),
|
||||
json4m Nullable(JSON),
|
||||
json8m Nullable(JSON),
|
||||
json16m Nullable(JSON),
|
||||
json32m Nullable(JSON)
|
||||
json255 String,
|
||||
json256 String,
|
||||
json512 String,
|
||||
json1k String,
|
||||
json2k String,
|
||||
json4k String,
|
||||
json8k String,
|
||||
json16k String,
|
||||
json32k String,
|
||||
json64k String,
|
||||
json128k String,
|
||||
json256k String,
|
||||
json512k String,
|
||||
json1m String,
|
||||
json2m String,
|
||||
json4m String,
|
||||
json8m String,
|
||||
json16m String,
|
||||
json32m String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_test_lob (
|
||||
id UInt32,
|
||||
lob255 Nullable(String),
|
||||
lob256 Nullable(String),
|
||||
lob512 Nullable(String),
|
||||
lob1k Nullable(String),
|
||||
lob2k Nullable(String),
|
||||
lob4k Nullable(String),
|
||||
lob8k Nullable(String),
|
||||
lob16k Nullable(String),
|
||||
lob32k Nullable(String),
|
||||
lob64k Nullable(String),
|
||||
lob128k Nullable(String),
|
||||
lob256k Nullable(String),
|
||||
lob512k Nullable(String),
|
||||
lob1m Nullable(String),
|
||||
lob2m Nullable(String),
|
||||
lob4m Nullable(String),
|
||||
lob8m Nullable(String),
|
||||
lob16m Nullable(String),
|
||||
lob32m Nullable(String)
|
||||
lob255 String,
|
||||
lob256 String,
|
||||
lob512 String,
|
||||
lob1k String,
|
||||
lob2k String,
|
||||
lob4k String,
|
||||
lob8k String,
|
||||
lob16k String,
|
||||
lob32k String,
|
||||
lob64k String,
|
||||
lob128k String,
|
||||
lob256k String,
|
||||
lob512k String,
|
||||
lob1m String,
|
||||
lob2m String,
|
||||
lob4m String,
|
||||
lob8m String,
|
||||
lob16m String,
|
||||
lob32m String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_test_varchar (
|
||||
id UInt32,
|
||||
varchar255 Nullable(String),
|
||||
varchar256 Nullable(String),
|
||||
varchar512 Nullable(String),
|
||||
varchar1k Nullable(String),
|
||||
varchar2k Nullable(String),
|
||||
varchar4k Nullable(String),
|
||||
varchar8k Nullable(String),
|
||||
varchar16k Nullable(String),
|
||||
varchar32k Nullable(String),
|
||||
varchar64k Nullable(String),
|
||||
varchar128k Nullable(String),
|
||||
varchar256k Nullable(String),
|
||||
varchar512k Nullable(String),
|
||||
varchar1m Nullable(String),
|
||||
varchar2m Nullable(String),
|
||||
varchar4m Nullable(String),
|
||||
varchar8m Nullable(String),
|
||||
varchar16m Nullable(String),
|
||||
varchar32m Nullable(String)
|
||||
varchar255 String,
|
||||
varchar256 String,
|
||||
varchar512 String,
|
||||
varchar1k String,
|
||||
varchar2k String,
|
||||
varchar4k String,
|
||||
varchar8k String,
|
||||
varchar16k String,
|
||||
varchar32k String,
|
||||
varchar64k String,
|
||||
varchar128k String,
|
||||
varchar256k String,
|
||||
varchar512k String,
|
||||
varchar1m String,
|
||||
varchar2m String,
|
||||
varchar4m String,
|
||||
varchar8m String,
|
||||
varchar16m String,
|
||||
varchar32m String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_user (
|
||||
@@ -168,8 +168,8 @@ alter table migtest_e_basic alter column a_lob drop default;
|
||||
alter table migtest_e_basic alter column a_lob set null;
|
||||
alter table migtest_e_basic alter column user_id set null;
|
||||
alter table migtest_e_basic add column new_string_field String default 'foo''bar';
|
||||
alter table migtest_e_basic add column new_boolean_field Bool default true;
|
||||
alter table migtest_e_basic add column new_boolean_field2 Bool default true;
|
||||
alter table migtest_e_basic add column new_boolean_field UInt8 default 1;
|
||||
alter table migtest_e_basic add column new_boolean_field2 UInt8 default 1;
|
||||
alter table migtest_e_basic add column progress UInt32 default 0;
|
||||
alter table migtest_e_basic add column new_integer UInt32 default 42;
|
||||
alter table migtest_e_history alter column test_string UInt64;
|
||||
@@ -179,11 +179,11 @@ alter table migtest_e_history2 add column test_string2 String;
|
||||
alter table migtest_e_history2 add column test_string3 String default 'unknown';
|
||||
alter table migtest_e_history2 add column new_column String;
|
||||
alter table migtest_e_history4 alter column test_number UInt64;
|
||||
alter table migtest_e_history5 add column test_boolean Bool default false;
|
||||
alter table migtest_e_history5 add column test_boolean UInt8 default 0;
|
||||
alter table migtest_e_history6 alter column test_number1 set default 42;
|
||||
alter table migtest_e_history6 alter column test_number1 set not null;
|
||||
alter table migtest_e_history6 alter column test_number2 set null;
|
||||
alter table migtest_e_softdelete add column deleted Bool default false;
|
||||
alter table migtest_e_softdelete add column deleted UInt8 default 0;
|
||||
alter table migtest_oto_child add column master_id UInt64;
|
||||
-- apply post alter
|
||||
alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?'));
|
||||
|
||||
@@ -11,8 +11,8 @@ alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_stat
|
||||
-- apply changes
|
||||
create table "migtest_QuOtEd" (
|
||||
id String,
|
||||
status1 Nullable(String),
|
||||
status2 Nullable(String)
|
||||
status1 String,
|
||||
status2 String
|
||||
) ENGINE = Log();
|
||||
|
||||
create table migtest_e_ref (
|
||||
@@ -41,8 +41,8 @@ alter table migtest_e_basic alter column a_lob set not null;
|
||||
alter table migtest_e_basic alter column user_id set default 23;
|
||||
alter table migtest_e_basic alter column user_id set not null;
|
||||
alter table migtest_e_basic add column description_file blob;
|
||||
alter table migtest_e_basic add column old_boolean Bool default false;
|
||||
alter table migtest_e_basic add column old_boolean2 Bool;
|
||||
alter table migtest_e_basic add column old_boolean UInt8 default 0;
|
||||
alter table migtest_e_basic add column old_boolean2 UInt8;
|
||||
alter table migtest_e_basic add column eref_id UInt32;
|
||||
alter table migtest_e_history2 alter column test_string drop default;
|
||||
alter table migtest_e_history2 alter column test_string set null;
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
1470313592, 1.0__initial.sql
|
||||
-1717710527, 1.1.sql
|
||||
193400547, 1.0__initial.sql
|
||||
-1021430823, 1.1.sql
|
||||
688811494, 1.2__dropsFor_1.1.sql
|
||||
864347736, 1.3.sql
|
||||
1015552567, 1.3.sql
|
||||
1436420661, 1.4__dropsFor_1.3.sql
|
||||
|
||||
|
||||
@@ -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.1.0'
|
||||
git tag 14.0.2
|
||||
git commit -am 'Version 14.3.1'
|
||||
git tag 14.3.1
|
||||
git push --tags
|
||||
|
||||
## convert to javax
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<name>kotlin querybean generator</name>
|
||||
@@ -21,7 +21,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-querybean</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-core</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -56,14 +56,14 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-h2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-ddl-generator</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
+14
-14
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,67 +15,67 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-h2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-clickhouse</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-db2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-hana</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-hsqldb</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-mysql</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-mariadb</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-nuodb</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-oracle</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-postgres</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-sqlanywhere</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-sqlite</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-sqlserver</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
package io.ebean.platform.clickhouse;
|
||||
|
||||
import io.ebean.config.dbplatform.InsertSqlSyntaxExtension;
|
||||
|
||||
public final class ClickHouseInsertSqlSyntax implements InsertSqlSyntaxExtension {
|
||||
|
||||
// insert into mytable select col1, col2 from input('col1 String, col2 DateTime64(3), col3 Int32')
|
||||
|
||||
@Override
|
||||
public String startColumns() {
|
||||
return " select ";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String endColumns() {
|
||||
return " from";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useBinding() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String startTypes() {
|
||||
return " input('";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String endTypes() {
|
||||
return "')";
|
||||
}
|
||||
}
|
||||
+7
-6
@@ -13,9 +13,13 @@ public class ClickHousePlatform extends DatabasePlatform {
|
||||
public ClickHousePlatform() {
|
||||
super();
|
||||
this.platform = Platform.CLICKHOUSE;
|
||||
this.insertSqlSyntaxExtension = new ClickHouseInsertSqlSyntax();
|
||||
//this.dbEncrypt =
|
||||
//this.historySupport =
|
||||
//this.exceptionTranslator =
|
||||
this.nativeUuidType = true;
|
||||
this.dbDefaultValue.setNow("now()");
|
||||
this.dbDefaultValue.setFalse("0");
|
||||
this.dbDefaultValue.setTrue("1");
|
||||
|
||||
this.dbIdentity.setIdType(IdType.IDENTITY);
|
||||
this.dbIdentity.setSupportsGetGeneratedKeys(false);
|
||||
@@ -23,7 +27,7 @@ public class ClickHousePlatform extends DatabasePlatform {
|
||||
this.dbIdentity.setSupportsIdentity(true);
|
||||
|
||||
this.booleanDbType = Types.INTEGER;
|
||||
dbTypeMap.put(DbType.BOOLEAN, new DbPlatformType("Bool"));
|
||||
dbTypeMap.put(DbType.BOOLEAN, new DbPlatformType("UInt8"));
|
||||
// using unsigned as default types ...
|
||||
dbTypeMap.put(DbType.TINYINT, new DbPlatformType("UInt8", false));
|
||||
dbTypeMap.put(DbType.SMALLINT, new DbPlatformType("UInt16", false));
|
||||
@@ -37,10 +41,7 @@ public class ClickHousePlatform extends DatabasePlatform {
|
||||
dbTypeMap.put(DbType.VARCHAR, new DbPlatformType("String", false));
|
||||
dbTypeMap.put(DbType.LONGVARCHAR, new DbPlatformType("String", false));
|
||||
dbTypeMap.put(DbType.CLOB, new DbPlatformType("String", false));
|
||||
dbTypeMap.put(DbType.HSTORE, new DbPlatformType("Map(String,String)", false));
|
||||
dbTypeMap.put(DbType.JSON, new DbPlatformType("JSON", false));
|
||||
dbTypeMap.put(DbType.JSONB, new DbPlatformType("JSON", false));
|
||||
dbTypeMap.put(DbType.JSONVARCHAR, new DbPlatformType("JSON", false));
|
||||
dbTypeMap.put(DbType.JSONVARCHAR, new DbPlatformType("String", false));
|
||||
dbTypeMap.put(DbType.UUID, new DbPlatformType("UUID", false));
|
||||
dbTypeMap.put(DbType.INET, new DbPlatformType("String", false));
|
||||
dbTypeMap.put(DbType.CIDR, new DbPlatformType("String", false));
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Provided scope so that the H2HistoryTrigger can live in Ebean core
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-h2</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-platform-mysql</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
+1
-16
@@ -11,23 +11,8 @@ final class OracleAnsiSqlRowsLimiter implements SqlLimiter {
|
||||
|
||||
@Override
|
||||
public SqlLimitResponse limit(SqlLimitRequest request) {
|
||||
String dbSql = request.getDbSql();
|
||||
StringBuilder sb = new StringBuilder(50 + dbSql.length());
|
||||
sb.append("select ");
|
||||
if (request.isDistinct()) {
|
||||
sb.append("distinct ");
|
||||
}
|
||||
sb.append(dbSql);
|
||||
int firstRow = request.getFirstRow();
|
||||
if (firstRow > 0) {
|
||||
sb.append(" offset ").append(firstRow).append(" rows");
|
||||
}
|
||||
int maxRows = request.getMaxRows();
|
||||
if (maxRows > 0) {
|
||||
sb.append(" fetch next ").append(maxRows).append(" rows only");
|
||||
}
|
||||
// Oracle does not support FOR UPDATE clause with limit offset
|
||||
return new SqlLimitResponse(sb.toString());
|
||||
return new SqlLimitResponse(request.ansiOffsetRows());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>platforms</artifactId>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<artifactId>ebean-parent</artifactId>
|
||||
<groupId>io.ebean</groupId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-api</artifactId>
|
||||
<version>14.1.0</version>
|
||||
<version>14.3.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user