Compare commits

..
36 Commits
Author SHA1 Message Date
Rob Bygrave ad18b6573c Version 14.8.2 2025-02-09 22:07:28 +13:00
Rob BygraveandGitHub 11632c3a6e Merge pull request #3554 from ebean-orm/feature/3536-kotlin-querybean-generator
#3536 kotlin-querybean-generator update for filterMany() changes
2025-02-09 21:37:38 +13:00
Rob Bygrave b066f9c072 #3536 kotlin-querybean-generator update for filterMany() changes
Brings the kotlin-querybean-generator up to date with the [java] querybean-generator in terms of how it has specific "associated beans" for ToOne and ToMany type relationships
2025-02-09 21:24:51 +13:00
Rob Bygrave 1e38ed9efc Test only, add Embedded bean as an inner class for querybean-generation 2025-02-09 21:19:39 +13:00
Roland PramlandGitHub 2d48dd2fef Pass create/configOptions to DB2 test container (#3550)
This allows to pass collation/pagesize settings via the
`ebean.test.createOptions=` property to the container
2025-02-08 19:47:20 +13:00
Rob BygraveandGitHub 60aa899a34 #3552 Column alias required for SQL Server + findCount + distinct (#3553)
* #3552 Column alias required for SQL Server + findCount + distinct

- Modifies CQueryBuilder with the main fix which is to use the database platform selectCountWithColumnAlias for all distinct queries [and later disable it for single column case]

- Modifies SqlTreeBuilder because we need to NOT use the column alias for the count distinct SINGLE COLUMN case. So change here to:
  - build the root SqlTreeNode first as part of constructor
  - use rootNode.isSingleProperty() to NOT use column alias for the single column case
  - Hence need to initialise DefaultDbSqlContext AFTER the root SqlTreeNode

  - Modifies DefaultDbSqlContext with no effective change, just columnIndex++ ONLY when we are actually using column alias

 - Modifies H2Platform to also use selectCountWithColumnAlias true

* #3552 selectCountWithColumnAlias true for MariaDB and MySql

Plus fix TestRowCount for Oracle platform
2025-02-08 19:33:03 +13:00
Rob BygraveandGitHub c38c75fdec Merge pull request #3549 from ebean-orm/feature/3546
#3546 Reduce compiler warning on query bean generated code
2025-01-28 23:34:23 +13:00
Rob Bygrave cf275f4edd #3546 Reduce compiler warning on query bean generated code
This method is effectively internal and called by generated code that also is Deprecated(forRemoval = true)
2025-01-28 23:31:23 +13:00
Rob Bygrave 121f4afed8 #3545 Support @SQL entity with a OneToOne with EmbeddedId
- @Sql entity
- Has a OneToOne or ManyToOne to a bean that uses @EmbeddedId
2025-01-28 23:26:09 +13:00
Rob Bygrave c8621c3a29 Put back the querybean-generator version 2025-01-16 21:42:02 +13:00
Rob BygraveandGitHub f83da15d5e Merge pull request #3542 from ebean-orm/feature/3542-quarkus
[querybean-generator] FilerException trying to write EntityClassRegister with Quarkus dev mode / hot reload #3541
2025-01-16 16:46:46 +13:00
Rob Bygrave 52729d9802 Missing import and adjust warning message 2025-01-16 16:40:43 +13:00
Rob Bygrave 69c25309da [querybean-generator] FilerException trying to write EntityClassRegister with Quarkus dev mode / hot reload #3541
Drop to log at WARN level when we catch FilerException such that Quarkus dev mode / hot reload works
2025-01-16 16:31:52 +13:00
Rob Bygrave 723a12fd66 #3538 Restoring batchMode etc with nested transaction scopes
This change is a simplification such that these batch attributes are always stored and restored for nested ScopeTrans.

There are no expensive side effects of doing it this way.

This fixes issues where the batch attributes are changed after the ScopeTrans is created (like the test for this PR).
2025-01-16 08:15:22 +13:00
Noemi Praml 5cf74f1ee9 Add: failing Unittest 2025-01-08 14:43:49 +01:00
Rob Bygrave 2c18b4fe97 Version 14.8.1 2024-12-20 15:34:07 +13:00
Rob Bygrave 9c9fb70999 Bump ebean agent to align 2024-12-20 15:24:08 +13:00
Rob BygraveandGitHub 18e6374a60 Merge pull request #3532 from ebean-orm/feature/sql-play-ebean
#3408 play-ebean inline sql comment in test generated scripts
2024-12-20 14:59:54 +13:00
Rob Bygrave 3fea5ce93d #3408 play-ebean inline sql comment in test generated scripts 2024-12-20 14:58:10 +13:00
Rob BygraveandGitHub 43675468ae Merge pull request #3523 from FOCONIS/streaming-tests
set defaultFetchBuffer in findEach/findList in SQL and DTO Queries
2024-12-19 11:04:01 +13:00
Rob BygraveandGitHub 1c038f4629 Merge pull request #3408 from mkurz/meta_datastored-procedures-DDL
Add metadata to stored procedures for 3rd party libs
2024-12-19 10:47:14 +13:00
Rob BygraveandGitHub 49b6f3dec9 Merge pull request #3530 from SentryMan/fix/dto-lookup
FIX: IllegalAccessError on modular DTO queries
2024-12-19 09:07:45 +13:00
Josiah Noel 346e30217a Merge remote-tracking branch 'upstream/master' into fix/dto-lookup 2024-12-18 14:56:15 -05:00
Rob Bygrave 5dc165debf Fix test TestLazyJoin2 2024-12-19 08:42:37 +13:00
Josiah Noel d5cb7c3ff1 fix illegal access error on modular dtos
When using a dto query on a JPMS application, I get an IllegalAccessError even though I export and open my package.
2024-12-18 00:20:08 -05:00
Roland Praml 4d08dce033 set defaultFetchBuffer in findEach/findList in relational/orm Queries 2024-11-27 17:05:15 +01:00
Roland Praml beef4407e3 Add failing testcase 2024-11-27 17:02:15 +01:00
Matthias Kurz e99f922de6 Add metadata to stored procedures for 3rd party libs
This way a third party can parse the meta data and knows how
to handle the bodies of a stored procedure
2024-11-26 23:36:30 +01:00
Rob BygraveandGitHub 103e8323f2 Merge pull request #3519 from FOCONIS/no-codechange-test-cleanup
No productive code change: cleanup basic test data
2024-11-07 21:32:35 +13:00
Noemi Praml 59ed0bb015 fix delete contacts 2024-11-05 14:04:32 +01:00
Noemi PramlandNoemi Praml c0eb896e1f No productive code change: cleanup basic test data (#114)
* Erste Tests bereinigt

* fix

* noch mehr Tests bereinigt

* modify output

* reformat
2024-11-05 13:16:47 +01:00
Rob Bygrave 7035b4c74c tests only: Update versions in test / test-kotlin maven plugin and apt 2024-10-31 18:19:36 +13:00
Rob BygraveandGitHub 85a575e353 Merge pull request #3513 from ebean-orm/feature/bump-parent-javadoc
Bump java11-oss parent and tidy javadoc
2024-10-31 17:14:52 +13:00
robin.bygrave eb05be286c Bump java11-oss parent and tidy javadoc 2024-10-31 14:55:43 +13:00
Rob BygraveandGitHub 9f5a77fdaa Merge pull request #3509 from FOCONIS/javadoc-fixes
RFC: Fix some javadoc issues
2024-10-31 14:47:46 +13:00
Roland Praml 42ee75f212 RFC: Fix some javadoc issues 2024-10-25 08:46:34 +02:00
126 changed files with 1139 additions and 633 deletions
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-clickhouse</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-db2</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hana</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mariadb</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mysql</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -22,13 +22,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -47,19 +47,19 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-net-postgis-types</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-nuodb</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-oracle</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -22,13 +22,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -47,19 +47,19 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlite</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -41,7 +41,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -60,13 +60,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<artifactId>composites</artifactId>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>ebean api</name>
@@ -1968,8 +1968,8 @@ public interface DatabaseBuilder {
DatabaseBuilder setLocalOnlyL2Cache(boolean localOnlyL2Cache);
/**
* Controls if Ebean should ignore <code>&x64;javax.validation.contstraints.NotNull</code> or
* <code>&x64;jakarta.validation.contstraints.NotNull</code>
* Controls if Ebean should ignore <code>&#64;javax.validation.contstraints.NotNull</code> or
* <code>&#64;jakarta.validation.contstraints.NotNull</code>
* with respect to generating a <code>NOT NULL</code> column.
* <p>
* Normally when Ebean sees javax NotNull annotation it means that column is defined as NOT NULL.
+26 -26
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>ebean bom</name>
@@ -89,25 +89,25 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -125,13 +125,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -155,37 +155,37 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>kotlin-querybean-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-redis</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-spring-txn</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<!-- platforms -->
@@ -193,79 +193,79 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-clickhouse</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-db2</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-h2</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-hana</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mariadb</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mysql</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-nuodb</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-oracle</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlite</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlserver</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
</dependencies>
+2 -2
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<artifactId>ebean-core-type</artifactId>
@@ -16,7 +16,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
+6 -26
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<artifactId>ebean-core</artifactId>
@@ -22,7 +22,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -46,7 +46,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -159,21 +159,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
@@ -235,26 +235,6 @@
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<doctitle>Ebean 12</doctitle>
<overview>src/main/java/io/ebean/overview.html</overview>
<excludePackageNames>io.ebeaninternal.*:io.ebeanservice:io.ebean.common:io.ebean.bean:io.ebean.service:io.ebean.metric:io.ebean.util:io.ebean.config.properties:io.ebean.config.dbplatform</excludePackageNames>
<linksource>true</linksource>
<overview>src/main/java/com/avaje/ebean/overview.html</overview>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
@@ -34,8 +34,8 @@ public final class ScopeTrans {
* Explicit set of Exceptions that DO cause a rollback to occur.
*/
private final ArrayList<Class<? extends Throwable>> rollbackFor;
private Boolean restoreBatch;
private Boolean restoreBatchOnCascade;
private boolean restoreBatch;
private boolean restoreBatchOnCascade;
private int restoreBatchSize;
private Boolean restoreBatchGeneratedKeys;
private boolean restoreBatchFlushOnQuery;
@@ -61,7 +61,7 @@ public final class ScopeTrans {
this.noRollbackFor = txScope.getNoRollbackFor();
this.rollbackFor = txScope.getRollbackFor();
if (transaction != null) {
if (!created && txScope.isBatchSet() || txScope.isBatchOnCascadeSet() || txScope.isBatchSizeSet()) {
if (!created) {
restoreBatch = transaction.isBatchMode();
restoreBatchOnCascade = transaction.isBatchOnCascade();
restoreBatchSize = transaction.getBatchSize();
@@ -143,15 +143,9 @@ public final class ScopeTrans {
} else {
nestedCommit = true;
transaction.setFlushOnQuery(restoreBatchFlushOnQuery);
if (restoreBatch != null) {
transaction.setBatchMode(restoreBatch);
}
if (restoreBatchOnCascade != null) {
transaction.setBatchOnCascade(restoreBatchOnCascade);
}
if (restoreBatchSize > 0) {
transaction.setBatchSize(restoreBatchSize);
}
transaction.setBatchMode(restoreBatch);
transaction.setBatchOnCascade(restoreBatchOnCascade);
transaction.setBatchSize(restoreBatchSize);
if (restoreBatchGeneratedKeys != null) {
transaction.setGetGeneratedKeys(restoreBatchGeneratedKeys);
}
@@ -53,4 +53,9 @@ public interface SpiSqlBinding extends SpiCancelableQuery {
*/
int getBufferFetchSizeHint();
/**
* Set the JDBC fetchSize buffer hint if not explicitly set.
*/
void setDefaultFetchBuffer(int fetchSize);
}
@@ -92,6 +92,12 @@ public abstract class AbstractSqlQueryRequest implements CancelableQuery {
protected abstract void requestComplete();
/**
* Set the JDBC buffer fetchSize hint if not set explicitly.
*/
public void setDefaultFetchBuffer(int fetchSize) {
query.setDefaultFetchBuffer(fetchSize);
}
/**
* Close the underlying resources.
*/
@@ -300,11 +300,12 @@ public final class InternalConfiguration {
}
DtoQueryEngine createDtoQueryEngine() {
return new DtoQueryEngine(binder);
return new DtoQueryEngine(binder, config.getJdbcFetchSizeFindEach(), config.getJdbcFetchSizeFindList());
}
RelationalQueryEngine createRelationalQueryEngine() {
return new DefaultRelationalQueryEngine(binder, config.getDatabaseBooleanTrue(), config.getPlatformConfig().getDbUuid().useBinaryOptimized());
return new DefaultRelationalQueryEngine(binder, config.getDatabaseBooleanTrue(), config.getPlatformConfig().getDbUuid().useBinaryOptimized(),
config.getJdbcFetchSizeFindEach(), config.getJdbcFetchSizeFindList());
}
OrmQueryEngine createOrmQueryEngine() {
@@ -427,7 +427,9 @@ public abstract class BeanPropertyAssoc<T> extends BeanProperty implements STree
BeanProperty[] others = target.propertiesBaseScalar();
if (descriptor.isRawSqlBased()) {
String dbColumn = owner.dbColumn();
return new ImportedIdSimple(owner, dbColumn, null, idProp, 0);
if (dbColumn != null) {
return new ImportedIdSimple(owner, dbColumn, null, idProp, 0);
}
}
if (idProp == null) {
return null;
@@ -14,7 +14,7 @@ final class DtoMetaConstructor {
private final Class<?>[] types;
private final MethodHandle handle;
private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
private static final MethodHandles.Lookup LOOKUP = MethodHandles.publicLookup();
private final ScalarType<?>[] scalarTypes;
DtoMetaConstructor(TypeManager typeManager, Constructor<?> constructor, Class<?> someClass) throws NoSuchMethodException, IllegalAccessException {
@@ -13,7 +13,7 @@ import java.sql.SQLException;
final class DtoMetaProperty implements DtoReadSet {
private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
private static final MethodHandles.Lookup LOOKUP = MethodHandles.publicLookup();
private final Class<?> dtoType;
private final String name;
@@ -238,12 +238,14 @@ final class CQueryBuilder {
query.setMaxRows(0);
boolean countDistinct = query.isDistinct();
boolean useColumnAlias = selectCountWithColumnAlias;
boolean withAgg = false;
if (!countDistinct) {
withAgg = includesAggregation(request, query);
if (!withAgg) {
// minimise select clause for standard count
query.setSelectId();
useColumnAlias = false;
}
}
@@ -256,7 +258,7 @@ final class CQueryBuilder {
}
predicates.prepare(true);
SqlTree sqlTree = createSqlTree(request, predicates, selectCountWithColumnAlias && withAgg);
SqlTree sqlTree = createSqlTree(request, predicates, useColumnAlias);
if (SpiQuery.TemporalMode.CURRENT == query.temporalMode()) {
sqlTree.addSoftDeletePredicate(query);
}
@@ -295,9 +295,8 @@ final class DefaultDbSqlContext implements DbSqlContext {
if (useColumnAlias) {
sb.append(' ');
sb.append(columnAliasPrefix);
sb.append(columnIndex);
sb.append(columnIndex++);
}
columnIndex++;
}
@Override
@@ -29,12 +29,17 @@ public final class DefaultRelationalQueryEngine implements RelationalQueryEngine
private final String dbTrueValue;
private final boolean binaryOptimizedUUID;
private final TimedMetricMap timedMetricMap;
private final int defaultFetchSizeFindEach;
private final int defaultFetchSizeFindList;
public DefaultRelationalQueryEngine(Binder binder, String dbTrueValue, boolean binaryOptimizedUUID) {
public DefaultRelationalQueryEngine(Binder binder, String dbTrueValue, boolean binaryOptimizedUUID,
int defaultFetchSizeFindEach, int defaultFetchSizeFindList) {
this.binder = binder;
this.dbTrueValue = dbTrueValue == null ? "true" : dbTrueValue;
this.binaryOptimizedUUID = binaryOptimizedUUID;
this.timedMetricMap = MetricFactory.get().createTimedMetricMap("sql.query.");
this.defaultFetchSizeFindEach = defaultFetchSizeFindEach;
this.defaultFetchSizeFindList = defaultFetchSizeFindList;
}
@Override
@@ -59,6 +64,9 @@ public final class DefaultRelationalQueryEngine implements RelationalQueryEngine
@Override
public void findEach(RelationalQueryRequest request, RowConsumer consumer) {
try {
if (defaultFetchSizeFindEach > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindEach);
}
request.executeSql(binder, SpiQuery.Type.ITERATE);
request.mapEach(consumer);
request.logSummary();
@@ -74,6 +82,9 @@ public final class DefaultRelationalQueryEngine implements RelationalQueryEngine
@Override
public <T> void findEach(RelationalQueryRequest request, RowReader<T> reader, Predicate<T> consumer) {
try {
if (defaultFetchSizeFindEach > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindEach);
}
request.executeSql(binder, SpiQuery.Type.ITERATE);
while (request.next()) {
if (!consumer.test(reader.read())) {
@@ -109,6 +120,9 @@ public final class DefaultRelationalQueryEngine implements RelationalQueryEngine
@Override
public <T> List<T> findList(RelationalQueryRequest request, RowReader<T> reader) {
try {
if (defaultFetchSizeFindList > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindList);
}
request.executeSql(binder, SpiQuery.Type.LIST);
List<T> rows = new ArrayList<>();
while (request.next()) {
@@ -129,6 +143,9 @@ public final class DefaultRelationalQueryEngine implements RelationalQueryEngine
public <T> T findSingleAttribute(RelationalQueryRequest request, Class<T> cls) {
ScalarType<T> scalarType = (ScalarType<T>) binder.getScalarType(cls);
try {
if (defaultFetchSizeFindList > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindList);
}
request.executeSql(binder, SpiQuery.Type.ATTRIBUTE);
final DataReader dataReader = binder.createDataReader(request.resultSet());
T value = null;
@@ -151,6 +168,9 @@ public final class DefaultRelationalQueryEngine implements RelationalQueryEngine
public <T> List<T> findSingleAttributeList(RelationalQueryRequest request, Class<T> cls) {
ScalarType<T> scalarType = (ScalarType<T>) binder.getScalarType(cls);
try {
if (defaultFetchSizeFindList > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindList);
}
request.executeSql(binder, SpiQuery.Type.ATTRIBUTE);
final DataReader dataReader = binder.createDataReader(request.resultSet());
List<T> rows = new ArrayList<>();
@@ -173,6 +193,9 @@ public final class DefaultRelationalQueryEngine implements RelationalQueryEngine
public <T> void findSingleAttributeEach(RelationalQueryRequest request, Class<T> cls, Consumer<T> consumer) {
ScalarType<T> scalarType = (ScalarType<T>) binder.getScalarType(cls);
try {
if (defaultFetchSizeFindEach > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindEach);
}
request.executeSql(binder, SpiQuery.Type.ATTRIBUTE);
final DataReader dataReader = binder.createDataReader(request.resultSet());
while (dataReader.next()) {
@@ -4,8 +4,8 @@ import io.ebean.QueryIterator;
import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.core.DtoQueryRequest;
import io.ebeaninternal.server.persist.Binder;
import jakarta.persistence.PersistenceException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@@ -15,13 +15,20 @@ import java.util.function.Predicate;
public final class DtoQueryEngine {
private final Binder binder;
private final int defaultFetchSizeFindEach;
private final int defaultFetchSizeFindList;
public DtoQueryEngine(Binder binder) {
public DtoQueryEngine(Binder binder, int defaultFetchSizeFindEach, int defaultFetchSizeFindList) {
this.binder = binder;
this.defaultFetchSizeFindEach = defaultFetchSizeFindEach;
this.defaultFetchSizeFindList = defaultFetchSizeFindList;
}
public <T> List<T> findList(DtoQueryRequest<T> request) {
try {
if (defaultFetchSizeFindList > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindList);
}
request.executeSql(binder, SpiQuery.Type.LIST);
List<T> rows = new ArrayList<>();
while (request.next()) {
@@ -38,6 +45,9 @@ public final class DtoQueryEngine {
public <T> QueryIterator<T> findIterate(DtoQueryRequest<T> request) {
try {
if (defaultFetchSizeFindEach > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindEach);
}
request.executeSql(binder, SpiQuery.Type.ITERATE);
return new DtoQueryIterator<>(request);
} catch (SQLException e) {
@@ -46,7 +56,10 @@ public final class DtoQueryEngine {
}
public <T> void findEach(DtoQueryRequest<T> request, Consumer<T> consumer) {
try {
try {
if (defaultFetchSizeFindEach > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindEach);
}
request.executeSql(binder, SpiQuery.Type.ITERATE);
while (request.next()) {
consumer.accept(request.readNextBean());
@@ -61,6 +74,9 @@ public final class DtoQueryEngine {
public <T> void findEach(DtoQueryRequest<T> request, int batchSize, Consumer<List<T>> consumer) {
try {
List<T> buffer = new ArrayList<>();
if (defaultFetchSizeFindEach > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindEach);
}
request.executeSql(binder, SpiQuery.Type.ITERATE);
while (request.next()) {
buffer.add(request.readNextBean());
@@ -82,6 +98,9 @@ public final class DtoQueryEngine {
public <T> void findEachWhile(DtoQueryRequest<T> request, Predicate<T> consumer) {
try {
if (defaultFetchSizeFindEach > 0) {
request.setDefaultFetchBuffer(defaultFetchSizeFindEach);
}
request.executeSql(binder, SpiQuery.Type.ITERATE);
while (request.next()) {
if (!consumer.test(request.readNextBean())) {
@@ -47,7 +47,7 @@ public final class SqlTreeBuilder {
private final boolean disableLazyLoad;
private final boolean readOnly;
private final SpiQuery.TemporalMode temporalMode;
private SqlTreeNode rootNode;
private final SqlTreeNode rootNode;
private boolean sqlDistinct;
private final boolean platformDistinctNoLobs;
private final SqlTreeCommon common;
@@ -73,6 +73,7 @@ public final class SqlTreeBuilder {
this.alias = null;
this.ctx = null;
this.common = new SqlTreeCommon(temporalMode, disableLazyLoad, readOnly, null);
this.rootNode = buildRootNode(desc);
}
/**
@@ -100,12 +101,13 @@ public final class SqlTreeBuilder {
this.alias = new SqlTreeAlias(request.baseTableAlias(), temporalMode);
this.distinctOnPlatform = builder.isPlatformDistinctOn();
this.platformDistinctNoLobs = builder.isPlatformDistinctNoLobs();
this.common = new SqlTreeCommon(temporalMode, disableLazyLoad, readOnly, includeJoin);
this.rootNode = buildRootNode(desc);
String fromForUpdate = builder.fromForUpdate(query);
CQueryHistorySupport historySupport = builder.historySupport(query);
CQueryDraftSupport draftSupport = builder.draftSupport(query);
String colAlias = subQuery ? null : columnAliasPrefix;
String colAlias = subQuery || rootNode.isSingleProperty() ? null : columnAliasPrefix;
this.ctx = new DefaultDbSqlContext(alias, colAlias, historySupport, draftSupport, fromForUpdate);
this.common = new SqlTreeCommon(temporalMode, disableLazyLoad, readOnly, includeJoin);
}
/**
@@ -113,7 +115,6 @@ public final class SqlTreeBuilder {
*/
public SqlTree build() {
// build the appropriate chain of SelectAdapter's
buildRoot(desc);
// build the actual String
String distinctOn = null;
String selectSql = null;
@@ -214,8 +215,8 @@ public final class SqlTreeBuilder {
return ctx.content();
}
private void buildRoot(STreeType desc) {
rootNode = buildSelectChain(null, null, desc, null);
private SqlTreeNode buildRootNode(STreeType desc) {
SqlTreeNode root = buildSelectChain(null, null, desc, null);
if (!rawSql) {
alias.addJoin(queryDetail.getFetchPaths(), desc);
alias.addJoin(predicates.predicateIncludes(), desc);
@@ -224,6 +225,7 @@ public final class SqlTreeBuilder {
alias.buildAlias();
predicates.parseTableAlias(alias);
}
return root;
}
/**
@@ -335,6 +335,13 @@ public final class DefaultDtoQuery<T> extends AbstractQuery implements SpiDtoQue
return bindParams;
}
@Override
public void setDefaultFetchBuffer(int fetchSize) {
if (bufferFetchSizeHint == 0) {
bufferFetchSizeHint = fetchSize;
}
}
@Override
public DtoQuery<T> setBufferFetchSizeHint(int bufferFetchSizeHint) {
this.bufferFetchSizeHint = bufferFetchSizeHint;
@@ -206,6 +206,13 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return bindParams;
}
@Override
public final void setDefaultFetchBuffer(int fetchSize) {
if (bufferFetchSizeHint == 0) {
bufferFetchSizeHint = fetchSize;
}
}
@Override
public DefaultRelationalQuery setBufferFetchSizeHint(int bufferFetchSizeHint) {
this.bufferFetchSizeHint = bufferFetchSizeHint;
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>ebean ddl generation</name>
@@ -28,14 +28,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
@@ -65,7 +65,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
@@ -71,6 +71,8 @@ public class PostgresHistoryDdl extends DbTriggerBasedHistoryDdl {
apply
.append("create or replace function ").append(procedureName).append("() returns trigger as $$").newLine();
apply.append("-- play-ebean-start").newLine();
apply.append("declare").newLine()
.append(" lowerTs timestamptz;").newLine()
.append(" upperTs timestamptz;").newLine();
@@ -93,6 +95,7 @@ public class PostgresHistoryDdl extends DbTriggerBasedHistoryDdl {
apply
.append(" end if;").newLine()
.append("end;").newLine()
.append("-- play-ebean-end").newLine()
.append("$$ LANGUAGE plpgsql;").newLine();
apply.end();
@@ -10,6 +10,7 @@
-- Type used to hold common partitioning parameters such as period start and end etc
------------------------------------------------------------------------------------
do $$
-- play-ebean-start
begin
if not exists (select 1 from pg_type where typname = 'partition_meta') THEN
create type partition_meta as
@@ -22,7 +23,9 @@ begin
part_name text
);
end if;
end$$;
end;
-- play-ebean-end
$$;
------------------------------------------------------------------------------------
-- Function: _partition_create
@@ -34,6 +37,7 @@ create or replace function _partition_create(meta partition_meta)
language plpgsql
set timezone to 'UTC'
as $$
-- play-ebean-start
begin
if (meta.schema_name = '') then
execute format('create table if not exists %I partition of %I for values from (''%s'') TO (''%s'')', meta.part_name, meta.base_name, meta.period_start, meta.period_end);
@@ -42,6 +46,7 @@ begin
end if;
return meta.part_name;
end;
-- play-ebean-end
$$;
@@ -60,6 +65,7 @@ create or replace function _partition_meta(
language plpgsql
set timezone to 'UTC'
as $$
-- play-ebean-start
declare
partName text;
meta partition_meta;
@@ -92,6 +98,7 @@ begin
return meta;
end;
-- play-ebean-end
$$;
------------------------------------------------------------------------------------
@@ -108,6 +115,7 @@ create or replace function _partition_over(
returns TABLE(of_date date)
language plpgsql
as $$
-- play-ebean-start
declare
endDate date;
begin
@@ -132,6 +140,7 @@ begin
return query select s::date from generate_series(fromDate, endDate, '1 month') s;
end if;
end;
-- play-ebean-end
$$;
@@ -158,11 +167,13 @@ create or replace function partition(
language plpgsql
set timezone to 'UTC'
as $$
-- play-ebean-start
begin
perform _partition_create(_partition_meta(mode, poDate, baseName, schemaName))
from _partition_over(mode, fromDate, partitionCount) poDate;
return 'done';
end;
-- play-ebean-end
$$;
</ddl-script>
@@ -24,7 +24,9 @@ GO
-- deletes all indices referring to TABLE.COLUMN
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_indices @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
declare @indexName nvarchar(255)
BEGIN
@@ -44,6 +46,7 @@ BEGIN
CLOSE index_cursor;
DEALLOCATE index_cursor;
END
-- play-ebean-end
GO
--
@@ -51,7 +54,9 @@ GO
-- deletes the default constraint, which has a random name
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_default_constraint @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @tmp nvarchar(1000)
BEGIN
select @tmp = t1.name from sys.default_constraints t1
@@ -60,6 +65,7 @@ BEGIN
if @tmp is not null EXEC('alter table [' + @tableName +'] drop constraint ' + @tmp);
END
-- play-ebean-end
GO
--
@@ -67,7 +73,9 @@ GO
-- deletes constraints and foreign keys refering to TABLE.COLUMN
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_constraints @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
declare @constraintName nvarchar(255)
BEGIN
@@ -93,6 +101,7 @@ BEGIN
CLOSE name_cursor;
DEALLOCATE name_cursor;
END
-- play-ebean-end
GO
--
@@ -100,7 +109,9 @@ GO
-- deletes the column annd ensures that all indices and constraints are dropped first
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_column @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
BEGIN
EXEC usp_ebean_drop_indices @tableName, @columnName;
@@ -110,6 +121,7 @@ BEGIN
set @sql = 'alter table [' + @tableName + '] drop column [' + @columnName + ']';
EXECUTE(@sql);
END
-- play-ebean-end
GO
</ddl-script>
<ddl-script name="create procs" platforms="mysql mariadb" init="true">-- Inital script to create stored procedures etc for mysql platform
@@ -121,6 +133,7 @@ delimiter $$
-- deletes all constraints and foreign keys referring to TABLE.COLUMN
--
CREATE PROCEDURE usp_ebean_drop_foreign_keys(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE c_fk_name CHAR(255);
@@ -143,6 +156,7 @@ END LOOP;
CLOSE curs;
END
-- play-ebean-end
$$
DROP PROCEDURE IF EXISTS usp_ebean_drop_column;
@@ -153,12 +167,14 @@ delimiter $$
-- deletes the column and ensures that all indices and constraints are dropped first
--
CREATE PROCEDURE usp_ebean_drop_column(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
CALL usp_ebean_drop_foreign_keys(p_table_name, p_column_name);
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` DROP COLUMN `', p_column_name, '`');
PREPARE stmt FROM @sql;
EXECUTE stmt;
END
-- play-ebean-end
$$
</ddl-script>
@@ -170,6 +186,7 @@ delimiter $$
--
CREATE OR REPLACE PROCEDURE usp_ebean_drop_foreign_keys(IN table_name NVARCHAR(256), IN column_name NVARCHAR(256))
AS
-- play-ebean-start
BEGIN
DECLARE foreign_key_names TABLE(CONSTRAINT_NAME NVARCHAR(256), TABLE_NAME NVARCHAR(256));
DECLARE i INT;
@@ -181,6 +198,7 @@ EXEC 'ALTER TABLE "' || ESCAPE_DOUBLE_QUOTES(:foreign_key_names.TABLE_NAME[i]) |
END FOR;
END;
-- play-ebean-end
$$
delimiter $$
@@ -190,10 +208,12 @@ delimiter $$
--
CREATE OR REPLACE PROCEDURE usp_ebean_drop_column(IN table_name NVARCHAR(256), IN column_name NVARCHAR(256))
AS
-- play-ebean-start
BEGIN
CALL usp_ebean_drop_foreign_keys(table_name, column_name);
EXEC 'ALTER TABLE "' || UPPER(ESCAPE_DOUBLE_QUOTES(table_name)) || '" DROP ("' || UPPER(ESCAPE_DOUBLE_QUOTES(column_name)) || '")';
END;
-- play-ebean-end
$$
</ddl-script>
</extra-ddl>
+2 -2
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -14,7 +14,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>ebean net postgis types</name>
@@ -19,14 +19,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<!-- provided scope -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
@@ -54,7 +54,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>ebean postgis types</name>
@@ -19,14 +19,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<!-- provided scope -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
@@ -62,7 +62,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>ebean querybean</name>
@@ -17,7 +17,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
@@ -59,14 +59,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
@@ -80,7 +80,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
@@ -196,7 +196,7 @@ public abstract class TQAssocBean<T, R, QB> extends TQAssoc<T, R> {
return _root;
}
@Deprecated(forRemoval = true)
/** Deprecated(forRemoval = true) */
protected final R _filterMany(String expressions, Object... params) {
expr().filterMany(_name, expressions, params);
return _root;
@@ -0,0 +1,55 @@
package org.example.domain;
import jakarta.persistence.Embeddable;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class MyInnerEmb {
@Embeddable
public static class EmbAddr {
final long streetNum;
final String line1;
public EmbAddr(long streetNum, String line1) {
this.streetNum = streetNum;
this.line1 = line1;
}
}
@Id
long id;
String one;
@Embedded
EmbAddr address;
public long id() {
return id;
}
public MyInnerEmb id(long id) {
this.id = id;
return this;
}
public String one() {
return one;
}
public MyInnerEmb one(String beanOne) {
this.one = beanOne;
return this;
}
public EmbAddr address() {
return address;
}
public MyInnerEmb setAddress(EmbAddr address) {
this.address = address;
return this;
}
}
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<artifactId>ebean-redis</artifactId>
@@ -29,35 +29,35 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
+3 -3
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<artifactId>ebean-spring-txn</artifactId>
@@ -28,7 +28,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
@@ -77,7 +77,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>ebean test</name>
@@ -33,20 +33,20 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
</dependency>
<dependency>
@@ -149,14 +149,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
@@ -19,7 +19,7 @@ class Config {
/**
* Common optional docker parameters that we just transfer to docker properties.
*/
private static final String[] DOCKER_TEST_PARAMS = {"fastStartMode", "inMemory", "initSqlFile", "seedSqlFile", "adminUser", "adminPassword", "extraDb", "extraDb.dbName", "extraDb.username", "extraDb.password", "extraDb.extensions", "extraDb.initSqlFile", "extraDb.seedSqlFile"};
private static final String[] DOCKER_TEST_PARAMS = {"fastStartMode", "inMemory", "initSqlFile", "seedSqlFile", "adminUser", "adminPassword", "extraDb", "extraDb.dbName", "extraDb.username", "extraDb.password", "extraDb.extensions", "extraDb.initSqlFile", "extraDb.seedSqlFile", "createOptions", "configOptions"};
private static final String[] DOCKER_PLATFORM_PARAMS = {"containerName", "image", "internalPort", "startMode", "shutdownMode", "maxReadyAttempts", "tmpfs", "collation", "characterSet"};
private static final String DDL_MODE_OPTIONS = "dropCreate, create, none, migration, createOnly or migrationDropCreate";
@@ -42,19 +42,22 @@ public class TestBatchInsertFlush extends BaseTestCase {
for (int i = 0; i < 3; i++) {
Customer customer = ResetBasicData.createCustomer("BatchFlushPreInsert " + i, null, null, 3);
customer.addContact(new Contact("Fred" + i, "Blue"));
customer.addContact(new Contact("BatchFlush" + i, "Blue"));
customers.add(customer);
}
for (int i = 3; i < 6; i++) {
Customer customer = ResetBasicData.createCustomer("BatchFlushPostInsert " + i, null, null, 3);
customer.addContact(new Contact("Fred" + i, "Blue"));
customer.addContact(new Contact("BatchFlush" + i, "Blue"));
customers.add(customer);
}
DB.saveAll(customers);
txn.commit();
} finally {
DB.find(Customer.class).where().startsWith("name", "BatchFlush").delete();
DB.find(Contact.class).where().startsWith("firstName", "BatchFlush").startsWith("lastName", "Blue").delete();
}
}
@@ -57,7 +57,7 @@ public class TestLazyJoin2 extends BaseTestCase {
assertNotNull(billingAddress);
List<Order> list = DB.find(Order.class).fetchLazy("customer", "name")
.fetch("customer.contacts", "contactName, phone, email").fetch("customer.shippingAddress")
.fetch("customer.contacts", "firstName, lastName, phone, email").fetch("customer.shippingAddress")
.where().eq("status", Order.Status.NEW).order().asc("id").findList();
Order order2 = list.get(0);
@@ -52,24 +52,30 @@ public class TestBeanCacheContactLazyLoad extends BaseTestCase {
DB.save(contact);
// Only get two properties, so we have to lazy-load later
final Contact contactDb = DB.find(Contact.class).where().eq("email", "tim@button.com").select("email,lastName").findOne();
assertThat(contactDb).isNotNull();
LoggedSql.start();
contactDb.setLastName("Buttonnnn");
List<String> sql = LoggedSql.collect();
assertThat(sql).isEmpty(); // setter did not trigger lazy load
try {
// trigger lazy load
assertThat(contactDb.getPhone()).isEqualTo("1234567890");
sql = LoggedSql.collect();
assertThat(sql).isNotEmpty(); // Lazy-load took place
// Only get two properties, so we have to lazy-load later
final Contact contactDb = DB.find(Contact.class).where().eq("email", "tim@button.com").select("email,lastName").findOne();
assertThat(contactDb).isNotNull();
LoggedSql.start();
contactDb.setLastName("Buttonnnn");
List<String> sql = LoggedSql.collect();
assertThat(sql).isEmpty(); // setter did not trigger lazy load
final Contact contactDb2 = DB.find(Contact.class).where().eq("email", "tim@button.com").select("email,lastName").findOne();
sql = LoggedSql.stop();
assertThat(sql).isEmpty(); // We expect that the bean was loaded from cache
assertThat(contactDb2).isNotNull();
assertThat(contactDb2.getLastName()).isEqualTo("Button");
// trigger lazy load
assertThat(contactDb.getPhone()).isEqualTo("1234567890");
sql = LoggedSql.collect();
assertThat(sql).isNotEmpty(); // Lazy-load took place
final Contact contactDb2 = DB.find(Contact.class).where().eq("email", "tim@button.com").select("email,lastName").findOne();
sql = LoggedSql.stop();
assertThat(sql).isEmpty(); // We expect that the bean was loaded from cache
assertThat(contactDb2).isNotNull();
assertThat(contactDb2.getLastName()).isEqualTo("Button");
} finally {
DB.delete(customer);
DB.find(Contact.class).where().eq("email", "tim@button.com").delete();
}
}
}
@@ -0,0 +1,32 @@
package org.tests.model.basic;
import io.ebean.annotation.Sql;
import jakarta.persistence.Entity;
import jakarta.persistence.OneToOne;
import org.tests.model.composite.CkeUser;
@Entity
@Sql
public class OtherAggregate {
@OneToOne
CkeUser user;
int totalContacts;
public CkeUser getUser() {
return user;
}
public void setUser(CkeUser user) {
this.user = user;
}
public int getTotalContacts() {
return totalContacts;
}
public void setTotalContacts(int totalContacts) {
this.totalContacts = totalContacts;
}
}
@@ -26,7 +26,7 @@ public class ResetBasicData {
// OK, test data not modified
outputCustomerIds();
} else {
outputState();
outputState(true);
}
return;
}
@@ -45,11 +45,11 @@ public class ResetBasicData {
me.insertProducts();
me.insertTestCustAndOrders();
});
outputState();
outputState(false);
runOnce = true;
}
private static void outputState() {
private static void outputState(boolean warning) {
StringBuilder sb = new StringBuilder();
sb.append("CustomerIds:");
server.find(Customer.class).findEach(c -> sb.append(' ').append(c.getId()));
@@ -59,8 +59,13 @@ public class ResetBasicData {
server.find(Country.class).findEach(c -> sb.append(' ').append(c.getCode()));
sb.append(", Products:");
server.find(Product.class).findEach(c -> sb.append(' ').append(c.getId()));
System.err.println("WARNING: basic test data was modified. Current content:");
System.err.println(sb);
if (warning) {
System.err.println("WARNING: basic test data was modified. Current content:");
System.err.println(sb);
} else {
System.out.println("ResetBasicData. basic test data was initialized Current content:");
System.out.println(sb);
}
}
private static void outputCustomerIds() {
@@ -0,0 +1,52 @@
package org.tests.model.rawsql;
import io.ebean.DB;
import io.ebean.RawSql;
import io.ebean.RawSqlBuilder;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.OtherAggregate;
import org.tests.model.composite.CkeUser;
import org.tests.model.composite.CkeUserKey;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class TestRawSqlAssocOneComplexId extends BaseTestCase {
@Test
void test() {
CkeUser user0 = new CkeUser();
user0.setUserPK(new CkeUserKey(89, "OneToOne"));
user0.setName("Other");
DB.save(user0);
String sql =
"select username, cod_cpny, name, 42 as totalContacts \n" +
"from cke_user where username = ? and cod_cpny = ?";
RawSql rawSql = RawSqlBuilder.parse(sql)
.columnMapping("username", "user.userPK.username")
.columnMapping("cod_cpny", "user.userPK.codCompany")
.columnMapping("name", "user.name")
.create();
List<OtherAggregate> l0 =
DB.find(OtherAggregate.class)
.setRawSql(rawSql)
.setParameters("OneToOne", 89)
.findList();
assertThat(l0).hasSize(1);
OtherAggregate other = l0.get(0);
assertThat(other.getTotalContacts()).isEqualTo(42);
assertThat(other.getUser()).isNotNull();
assertThat(other.getUser().getUserPK().getUsername()).isEqualTo("OneToOne");
assertThat(other.getUser().getUserPK().getCodCompany()).isEqualTo(89);
assertThat(other.getUser().getName()).isEqualTo("Other");
DB.delete(user0);
}
}
@@ -14,10 +14,10 @@ import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class TestRowCount extends BaseTestCase {
class TestRowCount extends BaseTestCase {
@Test
public void test() {
void test() {
ResetBasicData.reset();
LoggedSql.start();
@@ -46,7 +46,7 @@ public class TestRowCount extends BaseTestCase {
}
@Test
public void find_count_distinct_singleProperty() {
void find_count_distinct_singleProperty() {
ResetBasicData.reset();
Query<Customer> query = DB.find(Customer.class)
@@ -57,13 +57,13 @@ public class TestRowCount extends BaseTestCase {
int count = query.findCount();
assertThat(sqlOf(query)).contains("select count(distinct t0.anniversary) from o_customer t0 where t0.status = ?");
// never see column alias used with count distinct on single column
assertThat(query.getGeneratedSql()).contains("select count(distinct t0.anniversary) from o_customer t0 where t0.status = ?");
assertThat(count).isGreaterThan(0);
}
@Test
public void find_count_distinct_multipleProperties() {
void find_count_distinct_multipleProperties() {
ResetBasicData.reset();
Query<Customer> query = DB.find(Customer.class)
@@ -72,7 +72,32 @@ public class TestRowCount extends BaseTestCase {
int count = query.findCount();
assertThat(sqlOf(query)).contains("select count(*) from ( select distinct t0.anniversary, t0.status from o_customer t0)");
if (isSqlServer() || isH2() || isMariaDB() || isMySql()) {
assertThat(query.getGeneratedSql()).contains("select count(*) from ( select distinct t0.anniversary c0, t0.status c1 from o_customer t0)");
} else {
assertThat(query.getGeneratedSql()).contains("select count(*) from ( select distinct t0.anniversary, t0.status from o_customer t0)");
}
assertThat(count).isGreaterThan(0);
}
@Test
void find_count_distinct_multiplePropertiesSameColumn() {
ResetBasicData.reset();
Query<Customer> query = DB.find(Customer.class)
.setDistinct(true)
.select("id, anniversary, status")
.fetch("billingAddress", "id, city")
.fetch("shippingAddress", "id, city");
int count = query.findCount();
if (isSqlServer() || isH2() || isMariaDB() || isMySql()) {
// must use column alias
assertThat(query.getGeneratedSql()).contains("select count(*) from ( select distinct t0.anniversary c0, t0.status c1, t1.id c2, t1.city c3, t2.id c4, t2.city c5 from o_customer t0 left join o_address t1 on t1.id = t0.billing_address_id left join o_address t2 on t2.id = t0.shipping_address_id)");
} else {
assertThat(query.getGeneratedSql()).contains("select count(*) from ( select distinct t0.anniversary, t0.status, t1.id, t1.city, t2.id, t2.city from o_customer t0 left join o_address t1 on t1.id = t0.billing_address_id left join o_address t2 on t2.id = t0.shipping_address_id)");
}
assertThat(count).isGreaterThan(0);
}
@@ -0,0 +1,158 @@
package org.tests.query.other;
import io.ebean.DB;
import io.ebean.Transaction;
import io.ebean.annotation.Platform;
import io.ebean.xtest.BaseTestCase;
import io.ebean.xtest.ForPlatform;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.EBasic;
import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicBoolean;
import static org.assertj.core.api.Assertions.assertThat;
/**
* This test ensures that MariaDb uses the correct streaming result in findEach queries.
* See Issue #56.
*/
public class TestFindIterateMariaDb extends BaseTestCase {
@BeforeEach
public void setup() {
// we need at least > fetchSize beans
if (DB.find(EBasic.class).findCount() < 1000) {
for (int i = 0; i < 1000; i++) {
EBasic dumbModel = new EBasic();
dumbModel.setName("Goodbye now");
DB.save(dumbModel);
}
}
}
public static class DtoBasic {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Test
@ForPlatform(Platform.MARIADB)
public void testStreamingOnSqlQueryFindEach() {
try (Transaction txn = DB.beginTransaction()) {
AtomicBoolean mariadbStreaming = new AtomicBoolean();
DB.sqlQuery("select name from e_basic").findEach(bean -> {
if (!mariadbStreaming.get() && isMariaDbStreaming()) {
mariadbStreaming.set(true);
}
});
assertThat(mariadbStreaming.get()).isTrue();
}
}
@Test
@ForPlatform(Platform.MARIADB)
public void testStreamingOnOrmFindEach() {
try (Transaction txn = DB.beginTransaction()) {
AtomicBoolean mariadbStreaming = new AtomicBoolean();
DB.find(EBasic.class).findEach(bean -> {
if (!mariadbStreaming.get() && isMariaDbStreaming()) {
mariadbStreaming.set(true);
}
});
assertThat(mariadbStreaming.get()).isTrue();
}
}
@Test
@ForPlatform(Platform.MARIADB)
public void testStreamingOnOrmAsDtoFindEach() {
try (Transaction txn = DB.beginTransaction()) {
AtomicBoolean mariadbStreaming = new AtomicBoolean();
DB.find(EBasic.class).select("name").asDto(DtoBasic.class).findEach(bean -> {
if (!mariadbStreaming.get() && isMariaDbStreaming()) {
mariadbStreaming.set(true);
}
});
assertThat(mariadbStreaming.get()).isTrue();
}
}
@Test
@ForPlatform(Platform.MARIADB)
public void testStreamingOnDtoFindEach() {
try (Transaction txn = DB.beginTransaction()) {
AtomicBoolean mariadbStreaming = new AtomicBoolean();
DB.findDto(DtoBasic.class, "select name from e_basic").findEach(bean -> {
if (!mariadbStreaming.get() && isMariaDbStreaming()) {
mariadbStreaming.set(true);
}
});
assertThat(mariadbStreaming.get()).isTrue();
}
}
@Test
@ForPlatform(Platform.MARIADB)
public void testStreamingOnDtoFindEachWhile() {
try (Transaction txn = DB.beginTransaction()) {
AtomicBoolean mariadbStreaming = new AtomicBoolean();
DB.findDto(DtoBasic.class, "select name from e_basic").findEachWhile(bean -> {
if (!mariadbStreaming.get() && isMariaDbStreaming()) {
mariadbStreaming.set(true);
}
return false;
});
assertThat(mariadbStreaming.get()).isTrue();
}
}
@Test
@ForPlatform(Platform.MARIADB)
public void testStreamingOnDtoFindEachBatch() {
try (Transaction txn = DB.beginTransaction()) {
AtomicBoolean mariadbStreaming = new AtomicBoolean();
DB.findDto(DtoBasic.class, "select name from e_basic").findEach(2000, bean -> {
if (!mariadbStreaming.get() && isMariaDbStreaming()) {
mariadbStreaming.set(true);
}
});
assertThat(mariadbStreaming.get()).isTrue();
}
}
/**
* Take a look into the current connection. We are streaming, if there is a result set.
*/
private boolean isMariaDbStreaming() {
try {
org.mariadb.jdbc.Connection conn = Transaction.current().connection().unwrap(org.mariadb.jdbc.Connection.class);
org.mariadb.jdbc.client.impl.StandardClient client = (org.mariadb.jdbc.client.impl.StandardClient) conn.getClient();
Field field = client.getClass().getDeclaredField("streamMsg");
field.setAccessible(true);
return field.get(client) != null;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
@@ -141,7 +141,11 @@ public class TestExecuteComplete extends BaseTestCase {
cust.setName("Roland");
DB.save(cust);
assertThat(getInScopeTransaction()).isNull();
try {
assertThat(getInScopeTransaction()).isNull();
} finally {
DB.delete(cust);
}
}
@ForPlatform(Platform.H2)
@@ -1,5 +1,6 @@
package org.tests.transaction;
import io.ebean.TxScope;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DB;
import io.ebean.Transaction;
@@ -235,4 +236,19 @@ public class TestNestedTransaction extends BaseTestCase {
}
assertModified();
}
@Test
public void test_txn_with_BatchMode() {
try (Transaction txn1 = DB.beginTransaction(TxScope.requiresNew())) {
try (Transaction txn2 = DB.beginTransaction()) {
txn2.setBatchMode(true);
txn2.commit();
}
// resume txn1
assertThat(txn1.isBatchMode()).isFalse();
}
}
}
@@ -6,6 +6,7 @@ delimiter $$
--
CREATE OR REPLACE PROCEDURE usp_ebean_drop_foreign_keys(IN table_name NVARCHAR(256), IN column_name NVARCHAR(256))
AS
-- play-ebean-start
BEGIN
DECLARE foreign_key_names TABLE(CONSTRAINT_NAME NVARCHAR(256), TABLE_NAME NVARCHAR(256));
DECLARE i INT;
@@ -17,6 +18,7 @@ EXEC 'ALTER TABLE "' || ESCAPE_DOUBLE_QUOTES(:foreign_key_names.TABLE_NAME[i]) |
END FOR;
END;
-- play-ebean-end
$$
delimiter $$
@@ -26,8 +28,10 @@ delimiter $$
--
CREATE OR REPLACE PROCEDURE usp_ebean_drop_column(IN table_name NVARCHAR(256), IN column_name NVARCHAR(256))
AS
-- play-ebean-start
BEGIN
CALL usp_ebean_drop_foreign_keys(table_name, column_name);
EXEC 'ALTER TABLE "' || UPPER(ESCAPE_DOUBLE_QUOTES(table_name)) || '" DROP ("' || UPPER(ESCAPE_DOUBLE_QUOTES(column_name)) || '")';
END;
-- play-ebean-end
$$
@@ -1,4 +1,4 @@
-745347271, I__create_procs.sql
1349158244, I__create_procs.sql
-2017770851, 1.0__initial.sql
-475843596, 1.1.sql
1535221752, 1.2__dropsFor_1.1.sql
@@ -7,6 +7,7 @@ delimiter $$
-- deletes all constraints and foreign keys referring to TABLE.COLUMN
--
CREATE PROCEDURE usp_ebean_drop_foreign_keys(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE c_fk_name CHAR(255);
@@ -29,6 +30,7 @@ END LOOP;
CLOSE curs;
END
-- play-ebean-end
$$
DROP PROCEDURE IF EXISTS usp_ebean_drop_column;
@@ -39,10 +41,12 @@ delimiter $$
-- deletes the column and ensures that all indices and constraints are dropped first
--
CREATE PROCEDURE usp_ebean_drop_column(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
CALL usp_ebean_drop_foreign_keys(p_table_name, p_column_name);
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` DROP COLUMN `', p_column_name, '`');
PREPARE stmt FROM @sql;
EXECUTE stmt;
END
-- play-ebean-end
$$
@@ -1,4 +1,4 @@
-1933396282, I__create_procs.sql
-1617676189, I__create_procs.sql
-2111548334, 1.0__initial.sql
1085383251, 1.1.sql
1187950993, 1.2__dropsFor_1.1.sql
@@ -7,6 +7,7 @@ delimiter $$
-- deletes all constraints and foreign keys referring to TABLE.COLUMN
--
CREATE PROCEDURE usp_ebean_drop_foreign_keys(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE c_fk_name CHAR(255);
@@ -29,6 +30,7 @@ END LOOP;
CLOSE curs;
END
-- play-ebean-end
$$
DROP PROCEDURE IF EXISTS usp_ebean_drop_column;
@@ -39,10 +41,12 @@ delimiter $$
-- deletes the column and ensures that all indices and constraints are dropped first
--
CREATE PROCEDURE usp_ebean_drop_column(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
CALL usp_ebean_drop_foreign_keys(p_table_name, p_column_name);
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` DROP COLUMN `', p_column_name, '`');
PREPARE stmt FROM @sql;
EXECUTE stmt;
END
-- play-ebean-end
$$
@@ -1,4 +1,4 @@
-1933396282, I__create_procs.sql
-1617676189, I__create_procs.sql
1980830787, 1.0__initial.sql
-151422898, 1.1.sql
-1097227916, 1.2__dropsFor_1.1.sql
@@ -7,6 +7,7 @@ delimiter $$
-- deletes all constraints and foreign keys referring to TABLE.COLUMN
--
CREATE PROCEDURE usp_ebean_drop_foreign_keys(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE c_fk_name CHAR(255);
@@ -29,6 +30,7 @@ END LOOP;
CLOSE curs;
END
-- play-ebean-end
$$
DROP PROCEDURE IF EXISTS usp_ebean_drop_column;
@@ -39,10 +41,12 @@ delimiter $$
-- deletes the column and ensures that all indices and constraints are dropped first
--
CREATE PROCEDURE usp_ebean_drop_column(IN p_table_name VARCHAR(255), IN p_column_name VARCHAR(255))
-- play-ebean-start
BEGIN
CALL usp_ebean_drop_foreign_keys(p_table_name, p_column_name);
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` DROP COLUMN `', p_column_name, '`');
PREPARE stmt FROM @sql;
EXECUTE stmt;
END
-- play-ebean-end
$$
@@ -1,4 +1,4 @@
-1933396282, I__create_procs.sql
-1617676189, I__create_procs.sql
369577572, 1.0__initial.sql
-151422898, 1.1.sql
-1097227916, 1.2__dropsFor_1.1.sql
@@ -198,6 +198,7 @@ alter table migtest_e_history6 add column if not exists sys_period tstzrange not
create table migtest_e_history2_history(like migtest_e_history2);
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -213,6 +214,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -223,6 +225,7 @@ create trigger migtest_e_history2_history_upd
create table migtest_e_history3_history(like migtest_e_history3);
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -238,6 +241,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -248,6 +252,7 @@ create trigger migtest_e_history3_history_upd
create table migtest_e_history4_history(like migtest_e_history4);
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -263,6 +268,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -273,6 +279,7 @@ create trigger migtest_e_history4_history_upd
create table migtest_e_history5_history(like migtest_e_history5);
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -288,6 +295,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -298,6 +306,7 @@ create trigger migtest_e_history5_history_upd
create table migtest_e_history6_history(like migtest_e_history6);
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -313,6 +322,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -323,6 +333,7 @@ create trigger migtest_e_history6_history_upd
create table table_history(like "table");
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -338,6 +349,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -255,6 +255,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique
create table migtest_e_history_history(like migtest_e_history);
create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_history;
create or replace function migtest_e_history_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -270,6 +271,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history_history_upd
@@ -281,6 +283,7 @@ comment on column migtest_e_history.test_string is 'Column altered to long now';
comment on table migtest_e_history is 'We have history now';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -296,6 +299,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -304,6 +308,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -319,6 +324,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -327,6 +333,7 @@ create trigger migtest_e_history3_history_upd
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -342,6 +349,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -350,6 +358,7 @@ create trigger migtest_e_history4_history_upd
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -365,6 +374,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -373,6 +383,7 @@ create trigger migtest_e_history5_history_upd
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -388,6 +399,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -397,6 +409,7 @@ create trigger migtest_e_history6_history_upd
comment on column "table"."index" is 'this is an other comment';
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -412,6 +425,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -16,6 +16,7 @@ alter table migtest_e_history2_history drop column obsolete_string2;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -31,6 +32,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -108,6 +108,7 @@ comment on column migtest_e_history.test_string is '';
comment on table migtest_e_history is '';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -123,6 +124,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -131,6 +133,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -146,6 +149,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -154,6 +158,7 @@ create trigger migtest_e_history3_history_upd
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -169,6 +174,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -177,6 +183,7 @@ create trigger migtest_e_history4_history_upd
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -192,6 +199,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -46,6 +46,7 @@ alter table table_history drop column textfield2;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -61,6 +62,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -69,6 +71,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -84,6 +87,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -92,6 +96,7 @@ create trigger migtest_e_history5_history_upd
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -107,6 +112,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -1,8 +1,8 @@
1942370812, 1.0__initial.sql
-1945546744, 1.1.sql
-261111052, 1.2__dropsFor_1.1.sql
-129523686, 1.3.sql
1188958800, 1.4__dropsFor_1.3.sql
-894233730, 1.0__initial.sql
-1140732341, 1.1.sql
-328303888, 1.2__dropsFor_1.1.sql
-1783324840, 1.3.sql
-1371008923, 1.4__dropsFor_1.3.sql
783227075, R__multi_comments.sql
561281075, R__order_views.sql
283077354, R__pg_indexes.sql
@@ -198,6 +198,7 @@ alter table migtest_e_history6 add column if not exists sys_period tstzrange not
create table migtest_e_history2_history(like migtest_e_history2);
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -213,6 +214,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -223,6 +225,7 @@ create trigger migtest_e_history2_history_upd
create table migtest_e_history3_history(like migtest_e_history3);
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -238,6 +241,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -248,6 +252,7 @@ create trigger migtest_e_history3_history_upd
create table migtest_e_history4_history(like migtest_e_history4);
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -263,6 +268,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -273,6 +279,7 @@ create trigger migtest_e_history4_history_upd
create table migtest_e_history5_history(like migtest_e_history5);
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -288,6 +295,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -298,6 +306,7 @@ create trigger migtest_e_history5_history_upd
create table migtest_e_history6_history(like migtest_e_history6);
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -313,6 +322,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -323,6 +333,7 @@ create trigger migtest_e_history6_history_upd
create table table_history(like "table");
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -338,6 +349,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -255,6 +255,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique
create table migtest_e_history_history(like migtest_e_history);
create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_history;
create or replace function migtest_e_history_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -270,6 +271,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history_history_upd
@@ -281,6 +283,7 @@ comment on column migtest_e_history.test_string is 'Column altered to long now';
comment on table migtest_e_history is 'We have history now';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -296,6 +299,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -304,6 +308,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -319,6 +324,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -327,6 +333,7 @@ create trigger migtest_e_history3_history_upd
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -342,6 +349,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -350,6 +358,7 @@ create trigger migtest_e_history4_history_upd
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -365,6 +374,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -373,6 +383,7 @@ create trigger migtest_e_history5_history_upd
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -388,6 +399,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -397,6 +409,7 @@ create trigger migtest_e_history6_history_upd
comment on column "table"."index" is 'this is an other comment';
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -412,6 +425,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -16,6 +16,7 @@ alter table migtest_e_history2_history drop column obsolete_string2;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -31,6 +32,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -108,6 +108,7 @@ comment on column migtest_e_history.test_string is '';
comment on table migtest_e_history is '';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -123,6 +124,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -131,6 +133,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -146,6 +149,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -154,6 +158,7 @@ create trigger migtest_e_history3_history_upd
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -169,6 +174,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -177,6 +183,7 @@ create trigger migtest_e_history4_history_upd
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -192,6 +199,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -46,6 +46,7 @@ alter table table_history drop column textfield2;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -61,6 +62,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -69,6 +71,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -84,6 +87,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -92,6 +96,7 @@ create trigger migtest_e_history5_history_upd
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -107,6 +112,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -1,8 +1,8 @@
-1015076364, 1.0__initial.sql
-1624208025, 1.1.sql
-261111052, 1.2__dropsFor_1.1.sql
-1697064513, 1.3.sql
1188958800, 1.4__dropsFor_1.3.sql
424496268, 1.0__initial.sql
1412926900, 1.1.sql
-328303888, 1.2__dropsFor_1.1.sql
533916041, 1.3.sql
-1371008923, 1.4__dropsFor_1.3.sql
783227075, R__multi_comments.sql
561281075, R__order_views.sql
283077354, R__pg_indexes.sql
@@ -21,7 +21,9 @@ GO
-- deletes all indices referring to TABLE.COLUMN
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_indices @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
declare @indexName nvarchar(255)
BEGIN
@@ -41,6 +43,7 @@ BEGIN
CLOSE index_cursor;
DEALLOCATE index_cursor;
END
-- play-ebean-end
GO
--
@@ -48,7 +51,9 @@ GO
-- deletes the default constraint, which has a random name
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_default_constraint @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @tmp nvarchar(1000)
BEGIN
select @tmp = t1.name from sys.default_constraints t1
@@ -57,6 +62,7 @@ BEGIN
if @tmp is not null EXEC('alter table [' + @tableName +'] drop constraint ' + @tmp);
END
-- play-ebean-end
GO
--
@@ -64,7 +70,9 @@ GO
-- deletes constraints and foreign keys refering to TABLE.COLUMN
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_constraints @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
declare @constraintName nvarchar(255)
BEGIN
@@ -90,6 +98,7 @@ BEGIN
CLOSE name_cursor;
DEALLOCATE name_cursor;
END
-- play-ebean-end
GO
--
@@ -97,7 +106,9 @@ GO
-- deletes the column annd ensures that all indices and constraints are dropped first
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_column @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
BEGIN
EXEC usp_ebean_drop_indices @tableName, @columnName;
@@ -107,4 +118,5 @@ BEGIN
set @sql = 'alter table [' + @tableName + '] drop column [' + @columnName + ']';
EXECUTE(@sql);
END
-- play-ebean-end
GO
@@ -1,4 +1,4 @@
891357544, I__create_procs.sql
1076122722, I__create_procs.sql
-1455820494, 1.0__initial.sql
-2020672101, 1.1.sql
-1431095657, 1.2__dropsFor_1.1.sql
@@ -21,7 +21,9 @@ GO
-- deletes all indices referring to TABLE.COLUMN
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_indices @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
declare @indexName nvarchar(255)
BEGIN
@@ -41,6 +43,7 @@ BEGIN
CLOSE index_cursor;
DEALLOCATE index_cursor;
END
-- play-ebean-end
GO
--
@@ -48,7 +51,9 @@ GO
-- deletes the default constraint, which has a random name
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_default_constraint @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @tmp nvarchar(1000)
BEGIN
select @tmp = t1.name from sys.default_constraints t1
@@ -57,6 +62,7 @@ BEGIN
if @tmp is not null EXEC('alter table [' + @tableName +'] drop constraint ' + @tmp);
END
-- play-ebean-end
GO
--
@@ -64,7 +70,9 @@ GO
-- deletes constraints and foreign keys refering to TABLE.COLUMN
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_constraints @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
declare @constraintName nvarchar(255)
BEGIN
@@ -90,6 +98,7 @@ BEGIN
CLOSE name_cursor;
DEALLOCATE name_cursor;
END
-- play-ebean-end
GO
--
@@ -97,7 +106,9 @@ GO
-- deletes the column annd ensures that all indices and constraints are dropped first
--
CREATE OR ALTER PROCEDURE usp_ebean_drop_column @tableName nvarchar(255), @columnName nvarchar(255)
AS SET NOCOUNT ON
AS
-- play-ebean-start
SET NOCOUNT ON
declare @sql nvarchar(1000)
BEGIN
EXEC usp_ebean_drop_indices @tableName, @columnName;
@@ -107,4 +118,5 @@ BEGIN
set @sql = 'alter table [' + @tableName + '] drop column [' + @columnName + ']';
EXECUTE(@sql);
END
-- play-ebean-end
GO
@@ -1,4 +1,4 @@
891357544, I__create_procs.sql
1076122722, I__create_procs.sql
1574627056, 1.0__initial.sql
1141454658, 1.1.sql
-1431095657, 1.2__dropsFor_1.1.sql
@@ -204,6 +204,7 @@ create table migtest_e_history2_history(
);
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -219,6 +220,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -233,6 +235,7 @@ create table migtest_e_history3_history(
);
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -248,6 +251,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -262,6 +266,7 @@ create table migtest_e_history4_history(
);
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -277,6 +282,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -291,6 +297,7 @@ create table migtest_e_history5_history(
);
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -306,6 +313,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -321,6 +329,7 @@ create table migtest_e_history6_history(
);
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -336,6 +345,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -354,6 +364,7 @@ create table table_history(
);
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -369,6 +380,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -254,6 +254,7 @@ create table migtest_e_history_history(
);
create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_history;
create or replace function migtest_e_history_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -269,6 +270,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history_history_upd
@@ -280,6 +282,7 @@ comment on column migtest_e_history.test_string is 'Column altered to long now';
comment on table migtest_e_history is 'We have history now';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -295,6 +298,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -303,6 +307,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -318,6 +323,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -326,6 +332,7 @@ create trigger migtest_e_history3_history_upd
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -341,6 +348,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -349,6 +357,7 @@ create trigger migtest_e_history4_history_upd
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -364,6 +373,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -372,6 +382,7 @@ create trigger migtest_e_history5_history_upd
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -387,6 +398,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -396,6 +408,7 @@ create trigger migtest_e_history6_history_upd
comment on column "table"."index" is 'this is an other comment';
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -411,6 +424,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -16,6 +16,7 @@ alter table migtest_e_history2_history drop column obsolete_string2;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -31,6 +32,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -108,6 +108,7 @@ comment on column migtest_e_history.test_string is '';
comment on table migtest_e_history is '';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -123,6 +124,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -131,6 +133,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
create or replace function migtest_e_history3_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -146,6 +149,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history3_history_upd
@@ -154,6 +158,7 @@ create trigger migtest_e_history3_history_upd
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
create or replace function migtest_e_history4_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -169,6 +174,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history4_history_upd
@@ -177,6 +183,7 @@ create trigger migtest_e_history4_history_upd
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
create or replace function migtest_e_history6_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -192,6 +199,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history6_history_upd
@@ -46,6 +46,7 @@ alter table table_history drop column textfield2;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
create or replace function migtest_e_history2_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -61,6 +62,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history2_history_upd
@@ -69,6 +71,7 @@ create trigger migtest_e_history2_history_upd
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
create or replace function migtest_e_history5_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -84,6 +87,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger migtest_e_history5_history_upd
@@ -92,6 +96,7 @@ create trigger migtest_e_history5_history_upd
create view table_with_history as select * from "table" union all select * from table_history;
create or replace function table_history_version() returns trigger as $$
-- play-ebean-start
declare
lowerTs timestamptz;
upperTs timestamptz;
@@ -107,6 +112,7 @@ begin
return old;
end if;
end;
-- play-ebean-end
$$ LANGUAGE plpgsql;
create trigger table_history_upd
@@ -1,7 +1,7 @@
-1646972843, 1.0__initial.sql
-698093883, 1.1.sql
-261111052, 1.2__dropsFor_1.1.sql
1532176380, 1.3.sql
1188958800, 1.4__dropsFor_1.3.sql
1940582862, 1.0__initial.sql
300985805, 1.1.sql
-328303888, 1.2__dropsFor_1.1.sql
-2011077112, 1.3.sql
-1371008923, 1.4__dropsFor_1.3.sql
561281075, R__order_views.sql
+2 -2
View File
@@ -15,8 +15,8 @@ mvn -T 4 clean package
mvn -T 4 deploy -pl '!composites,!platforms' -Pcentral -DskipTests -DskipStagingRepositoryClose=true -DstagingProgressTimeoutMinutes=9
## git commit, git tag, git push --tags
git commit -am 'Version 14.8.0'
git tag 14.8.0
git commit -am 'Version 14.8.2'
git tag 14.8.2
git push --tags
## convert to javax
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>14.8.0</version>
<version>14.8.2</version>
</parent>
<name>kotlin querybean generator</name>
@@ -21,7 +21,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
@@ -35,7 +35,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
@@ -56,14 +56,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>14.8.0</version>
<version>14.8.2</version>
<scope>test</scope>
</dependency>
@@ -11,6 +11,8 @@ interface Constants {
String ENTITY = "jakarta.persistence.Entity";
String EMBEDDABLE = "jakarta.persistence.Embeddable";
String CONVERTER = "jakarta.persistence.Converter";
String ONE_TO_MANY = "jakarta.persistence.OneToMany";
String MANY_TO_MANY = "jakarta.persistence.ManyToMany";
String EBEAN_COMPONENT = "io.ebean.annotation.EbeanComponent";
String DBARRAY = "io.ebean.annotation.DbArray";
@@ -18,10 +20,6 @@ interface Constants {
String DBJSONB = "io.ebean.annotation.DbJsonB";
String DBNAME = "io.ebean.annotation.DbName";
String TQASSOC = "io.ebean.typequery.TQAssoc";
String TQASSOCBEAN = "io.ebean.typequery.TQAssocBean";
String TQPROPERTY = "io.ebean.typequery.TQProperty";
String MODULEINFO = "io.ebean.config.ModuleInfo";
String METAINF_MANIFEST = "META-INF/ebean-generated-info.mf";
String METAINF_SERVICES_MODULELOADER = "META-INF/services/io.ebean.config.EntityClassRegister";
@@ -1,9 +1,8 @@
package io.ebean.querybean.generator;
class KotlinLangAdapter implements LangAdapter {
final class KotlinLangAdapter {
@Override
public void alias(Append writer, String shortName, String fullName) {
void alias(Append writer, String shortName, String fullName) {
writer.append(" companion object {").eol();
writer.append(" /**").eol();
writer.append(" * shared 'Alias' instance used to provide").eol();
@@ -20,87 +19,38 @@ class KotlinLangAdapter implements LangAdapter {
writer.append(" }").eol().eol();
}
@Override
public void assocBeanConstructor(Append writer, String shortName) {
writer.append(" constructor(name: String, root: R) : super(name, root)").eol();
writer.eol();
writer.append(" constructor(name: String, root: R, prefix: String) : super(name, root, prefix)").eol();
}
@Override
public void fetch(Append writer, String origShortName) {
writeAssocBeanFetch(writer, origShortName, "", "Eagerly fetch this association loading the specified properties.");
writeAssocBeanFetch(writer, origShortName, "Query", "Eagerly fetch this association using a 'query join' loading the specified properties.");
writeAssocBeanFetch(writer, origShortName, "Cache", "Eagerly fetch this association using L2 cache.");
writeAssocBeanFetch(writer, origShortName, "Lazy", "Use lazy loading for this association loading the specified properties.");
}
private void writeAssocBeanFetch(Append writer, String origShortName, String fetchType, String comment) {
// fun fetch(vararg properties: TQProperty<QContact,?>): R {
// return fetchProperties(*properties)
// }
writer.append(" /**").eol();
writer.append(" * ").append(comment).eol();
writer.append(" */").eol();
writer.append(" fun fetch%s(vararg properties: TQProperty<Q%s,Any>) : R {", fetchType, origShortName).eol();
writer.append(" return fetch%sProperties(*properties)", fetchType).eol();
writer.append(" }").eol();
writer.eol();
}
@Override
public void rootBeanConstructor(Append writer, String shortName, String dbName, String fullName) {
void rootBeanConstructor(Append writer, String shortName, String dbName, String fullName) {
String name = (dbName == null) ? "default" : dbName;
writer.append(" /**").eol();
writer.append(" * Construct using the %s Database.", name).eol();
writer.append(" */").eol();
writer.append(" /** Construct using the %s Database. */", name).eol();
if (dbName == null) {
writer.append(" constructor() : super(%s::class.java)", fullName).eol().eol();
} else {
writer.append(" constructor() : super(%s::class.java, io.ebean.DB.byName(\"%s\"))", fullName, dbName).eol().eol();
}
writer.append(" /**").eol();
writer.append(" * @deprecated migrate to query.usingTransaction()", name).eol();
writer.append(" */").eol();
writer.append(" @Deprecated(message=\"migrate to query.usingTransaction()\")").eol();
writer.append(" /** @deprecated migrate to query.usingTransaction() */", name).eol();
writer.append(" @Deprecated(message=\"migrate to query.usingTransaction()\")").eol();
if (dbName == null) {
writer.append(" constructor(transaction: io.ebean.Transaction) : super(%s::class.java, transaction)", fullName).eol().eol();
} else {
writer.append(" constructor(transaction: io.ebean.Transaction) : super(%s::class.java, io.ebean.DB.byName(\"%s\"), transaction)", fullName, dbName).eol().eol();
}
writer.eol();
writer.append(" /**").eol();
writer.append(" * Construct with a given Database.").eol();
writer.append(" */").eol();
writer.append(" /** Construct with a given Database. */").eol();
writer.append(" constructor(database: io.ebean.Database) : super(%s::class.java, database)", fullName).eol().eol();
writer.append(" /**").eol();
writer.append(" * Construct for Alias.").eol();
writer.append(" */").eol();
writer.append(" /** Construct for Alias. */").eol();
writer.append(" private constructor(dummy: Boolean) : super(dummy)").eol().eol();
writer.append(" /**").eol();
writer.append(" * Private constructor for FetchGroup building.").eol();
writer.append(" */").eol();
writer.append(" private constructor(fetchGroupQuery: io.ebean.Query<%s>) : super(fetchGroupQuery)", fullName).eol();
writer.append(" /** Private constructor for FetchGroup building. */").eol();
writer.append(" private constructor(fetchGroupQuery: io.ebean.Query<%s>) : super(fetchGroupQuery)", fullName).eol().eol();
writer.append(" /** Private constructor for filterMany */").eol();
writer.append(" private constructor(filter: io.ebean.ExpressionList<%s>) : super(filter)", fullName).eol().eol();
writer.eol();
writer.append(" /** Return a copy of the query. */").eol();
writer.append(" override fun copy() : Q%s {", shortName).eol();
writer.append(" return Q%s(query().copy())", shortName).eol();
writer.append(" }").eol();
writer.eol();
writer.append(" }").eol().eol();
}
@Override
public void fieldDefn(Append writer, String propertyName, String typeDefn) {
writer.append(" lateinit var %s: ", propertyName);
if (typeDefn.endsWith(",Integer>")) {
typeDefn = typeDefn.replace(",Integer>", ",Int>");
}
writer.append(typeDefn);
}
}
@@ -1,16 +0,0 @@
package io.ebean.querybean.generator;
public interface LangAdapter {
void alias(Append writer, String shortName, String beanFullName);
void rootBeanConstructor(Append writer, String shortName, String dbName, String beanFullName);
void assocBeanConstructor(Append writer, String shortName);
void fetch(Append writer, String origShortName);
void fieldDefn(Append writer, String propertyName, String typeDefn);
}
@@ -239,6 +239,10 @@ class ProcessingContext implements Constants {
return hasAnnotations(element, EMBEDDABLE);
}
private static boolean dbToMany(Element field) {
return hasAnnotations(field, ONE_TO_MANY, MANY_TO_MANY);
}
/**
* Find the DbName annotation and return name if found.
*/
@@ -261,6 +265,7 @@ class ProcessingContext implements Constants {
}
PropertyType getPropertyType(VariableElement field) {
boolean toMany = dbToMany(field);
if (dbJsonField(field)) {
return propertyTypeMap.getDbJsonType();
}
@@ -301,36 +306,30 @@ class ProcessingContext implements Constants {
if (targetEntity != null) {
final TypeElement element = elementUtils.getTypeElement(targetEntity);
if (isEntityOrEmbedded(element)) {
return createPropertyTypeAssoc(typeDef(element.asType()));
boolean embeddable = isEmbeddable(element);
return createPropertyTypeAssoc(embeddable, toMany, typeDef(element.asType()));
}
}
if (isEntityOrEmbedded(fieldType)) {
// public QAssocContact<QCustomer> contacts;
return createPropertyTypeAssoc(typeDef(typeMirror));
boolean embeddable = isEmbeddable(fieldType);
return createPropertyTypeAssoc(embeddable, toMany, typeDef(typeMirror));
}
final PropertyType result;
if (typeMirror.getKind() == TypeKind.DECLARED) {
DeclaredType declaredType = (DeclaredType) typeMirror;
List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
if (typeArguments.size() == 1) {
TypeMirror argType = typeArguments.get(0);
Element argElement = asElement(argType);
if (isEntityOrEmbedded(argElement)) {
return createPropertyTypeAssoc(typeDef(argElement.asType()));
}
} else if (typeArguments.size() == 2) {
TypeMirror argType = typeArguments.get(1);
Element argElement = asElement(argType);
if (isEntityOrEmbedded(argElement)) {
return createPropertyTypeAssoc(typeDef(argElement.asType()));
}
}
result = createManyTypeAssoc(field, (DeclaredType) typeMirror);
} else {
result = null;
}
if (typeInstanceOf(typeMirror, "java.lang.Comparable")) {
return new PropertyTypeScalarComparable(trimAnnotations(typeMirror.toString()));
if (result != null) {
return result;
} else {
return new PropertyTypeScalar(trimAnnotations(typeMirror.toString()));
if (typeInstanceOf(typeMirror, "java.lang.Comparable")) {
return new PropertyTypeScalarComparable(trimAnnotations(typeMirror.toString()));
} else {
return new PropertyTypeScalar(trimAnnotations(typeMirror.toString()));
}
}
}
@@ -357,6 +356,25 @@ class ProcessingContext implements Constants {
.anyMatch(t -> typeInstanceOf(t, desiredInterface));
}
private PropertyType createManyTypeAssoc(VariableElement field, DeclaredType declaredType) {
boolean toMany = dbToMany(field);
List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
if (typeArguments.size() == 1) {
Element argElement = typeUtils.asElement(typeArguments.get(0));
if (isEntityOrEmbedded(argElement)) {
boolean embeddable = isEmbeddable(argElement);
return createPropertyTypeAssoc(embeddable, toMany, typeDef(argElement.asType()));
}
} else if (typeArguments.size() == 2) {
Element argElement = typeUtils.asElement(typeArguments.get(1));
if (isEntityOrEmbedded(argElement)) {
boolean embeddable = isEmbeddable(argElement);
return createPropertyTypeAssoc(embeddable, toMany, typeDef(argElement.asType()));
}
}
return null;
}
private String readTargetEntity(Element declaredType) {
for (AnnotationMirror annotation : declaredType.getAnnotationMirrors()) {
final Object targetEntity = readTargetEntityFromAnnotation(annotation);
@@ -386,11 +404,20 @@ class ProcessingContext implements Constants {
/**
* Create the QAssoc PropertyType.
*/
private PropertyType createPropertyTypeAssoc(String fullName) {
String[] split = Split.split(fullName);
String propertyName = "QAssoc" + split[1];
String packageName = packageAppend(split[0]);
return new PropertyTypeAssoc(propertyName, packageName);
private PropertyType createPropertyTypeAssoc(boolean embeddable, boolean toMany, String fullName) {
TypeElement typeElement = elementUtils.getTypeElement(fullName);
String type;
if (typeElement.getNestingKind().isNested()) {
type = typeElement.getEnclosingElement().toString() + "$" + typeElement.getSimpleName();
} else {
type = typeElement.getQualifiedName().toString();
}
String suffix = toMany ? "Many" : embeddable ? "": "One";
String[] split = Split.split(type);
String propertyName = "Q" + split[1] + ".Assoc" + suffix;
String importName = split[0] + ".query.Q" + split[1];
return new PropertyTypeAssoc(propertyName, importName);
}
/**
@@ -415,9 +442,10 @@ class ProcessingContext implements Constants {
messager.printMessage(Diagnostic.Kind.ERROR, String.format(msg, args), e);
}
/**
* Log a info message.
*/
void logWarn(String msg, Object... args) {
messager.printMessage(Diagnostic.Kind.WARNING, String.format(msg, args));
}
void logNote(String msg, Object... args) {
messager.printMessage(Diagnostic.Kind.NOTE, String.format(msg, args));
}
@@ -559,7 +587,6 @@ class ProcessingContext implements Constants {
} catch (FilerException e) {
logNote(null, "FilerException reading services file: " + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
logError(null, "Error reading services file: " + e.getMessage());
}
return null;
@@ -1,6 +1,7 @@
package io.ebean.querybean.generator;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.FilerException;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.SourceVersion;
@@ -19,14 +20,12 @@ public class Processor extends AbstractProcessor implements Constants {
private static final String KAPT_KOTLIN_GENERATED_OPTION = "kapt.kotlin.generated";
private ProcessingContext processingContext;
private SimpleModuleInfoWriter moduleWriter;
public Processor() {
}
@Override
public Set<String> getSupportedOptions() {
Set<String> options = new LinkedHashSet<>();
options.add(KAPT_KOTLIN_GENERATED_OPTION);
options.add(GENERATE_KOTLIN_CODE_OPTION);
@@ -61,7 +60,6 @@ public class Processor extends AbstractProcessor implements Constants {
int count = processEntities(roundEnv);
processOthers(roundEnv);
final int loaded = processingContext.complete();
initModuleInfoBean();
if (roundEnv.processingOver()) {
writeModuleInfoBean();
}
@@ -98,26 +96,12 @@ public class Processor extends AbstractProcessor implements Constants {
}
}
private void initModuleInfoBean() {
try {
if (moduleWriter == null) {
moduleWriter = new SimpleModuleInfoWriter(processingContext);
}
} catch (Throwable e) {
e.printStackTrace();
processingContext.logError(null, "Failed to initialise EntityClassRegister error:" + e + " stack:" + Arrays.toString(e.getStackTrace()));
}
}
private void writeModuleInfoBean() {
try {
if (moduleWriter == null) {
processingContext.logError(null, "EntityClassRegister was not initialised and not written");
} else {
moduleWriter.write();
}
new SimpleModuleInfoWriter(processingContext).write();
} catch (FilerException e) {
processingContext.logWarn(null, "FilerException trying to write EntityClassRegister: " + e);
} catch (Throwable e) {
e.printStackTrace();
processingContext.logError(null, "Failed to write EntityClassRegister error:" + e + " stack:" + Arrays.toString(e.getStackTrace()));
}
}
@@ -125,8 +109,7 @@ public class Processor extends AbstractProcessor implements Constants {
private void generateQueryBeans(Element element) {
try {
SimpleQueryBeanWriter beanWriter = new SimpleQueryBeanWriter((TypeElement) element, processingContext);
beanWriter.writeRootBean();
beanWriter.writeAssocBean();
beanWriter.writeBean();
} catch (Throwable e) {
processingContext.logError(element, "Error generating query beans: " + e);
}
@@ -7,25 +7,16 @@ import java.util.Set;
*/
class PropertyTypeAssoc extends PropertyType {
/**
* The package name for this associated query bean.
*/
private final String assocPackage;
private final String importName;
/**
* Construct given the associated bean type name and package.
*
* @param qAssocTypeName the associated bean type name.
* @param assocPackage the associated bean package.
*/
PropertyTypeAssoc(String qAssocTypeName, String assocPackage) {
PropertyTypeAssoc(String qAssocTypeName, String importName) {
super(qAssocTypeName);
this.assocPackage = assocPackage;
this.importName = importName;
}
@Override
void addImports(Set<String> allImports) {
allImports.add(assocPackage + "." + propertyType);
allImports.add(importName);
}
}
@@ -50,7 +50,6 @@ class SimpleModuleInfoWriter {
}
} catch (IOException e) {
e.printStackTrace();
processingContext.logError(null, "Failed to write services file " + e.getMessage());
}
}
@@ -70,7 +69,6 @@ class SimpleModuleInfoWriter {
}
} catch (IOException e) {
e.printStackTrace();
processingContext.logError(null, "Failed to write services file " + e.getMessage());
}
}
@@ -12,7 +12,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@@ -74,19 +73,17 @@ class SimpleQueryBeanWriter {
private final boolean embeddable;
private final String dbName;
private final String beanFullName;
private final LangAdapter langAdapter;
private boolean writingAssocBean;
private final KotlinLangAdapter langAdapter = new KotlinLangAdapter();
private boolean writingEmbeddedBean;
private final String generatedSourcesDir;
private String destPackage;
private String origDestPackage;
private String shortName;
private final String shortInnerName;
private final String origShortName;
private Append writer;
SimpleQueryBeanWriter(TypeElement element, ProcessingContext processingContext) {
this.langAdapter = new KotlinLangAdapter();
this.generatedSourcesDir = processingContext.generatedSourcesDir();
this.element = element;
this.processingContext = processingContext;
@@ -95,7 +92,7 @@ class SimpleQueryBeanWriter {
this.destPackage = Util.packageOf(nested, beanFullName) + ".query";
String sn = Util.shortName(nested, beanFullName);
this.shortInnerName = Util.shortName(false, sn);
this.shortName = sn.replace(".", "");
this.shortName = sn.replace(".", "_"); // $ not supported with Kotlin, see kotlinInnerType()
this.origShortName = shortName;
this.isEntity = processingContext.isEntity(element);
this.embeddable = processingContext.isEmbeddable(element);
@@ -118,8 +115,8 @@ class SimpleQueryBeanWriter {
return processingContext.findDbName(element);
}
private LangAdapter lang() {
return langAdapter;
private static String kotlinInnerType(String fullType) {
return fullType.replace('$', '_');
}
private void gatherPropertyDetails() {
@@ -148,25 +145,24 @@ class SimpleQueryBeanWriter {
}
/**
* Write the type query bean (root bean).
* Write the type query bean.
*/
void writeRootBean() throws IOException {
void writeBean() throws IOException {
gatherPropertyDetails();
translateKotlinImportTypes();
if (isEmbeddable()) {
processingContext.addEntity(beanFullName, dbName);
writeEmbeddedBean();
} else if (isEntity()) {
processingContext.addEntity(beanFullName, dbName);
writer = new Append(createFileWriter());
translateKotlinImportTypes();
writePackage();
writeImports();
writeClass();
writeAlias();
writeFields();
writeFields(false);
writeConstructors();
//writeStaticAliasClass();
writeClassEnd();
writer.close();
@@ -196,139 +192,53 @@ class SimpleQueryBeanWriter {
/**
* Write the type query assoc bean.
*/
void writeAssocBean() throws IOException {
writingAssocBean = true;
origDestPackage = destPackage;
destPackage = destPackage + ".assoc";
shortName = "Assoc" + shortName;
void writeEmbeddedBean() throws IOException {
writingEmbeddedBean = true;
prepareAssocBeanImports();
writer = new Append(createFileWriter());
writePackage();
writeImports();
writeClass();
writeFields();
writeConstructors();
writeEmbeddedAssoc();
writeClassEnd();
writer.close();
}
/**
* Prepare the imports for writing assoc bean.
*/
private void prepareAssocBeanImports() {
if (embeddable) {
importTypes.add(Constants.TQASSOC);
} else {
importTypes.add(Constants.TQASSOCBEAN);
}
if (isEntity()) {
importTypes.add(Constants.TQPROPERTY);
importTypes.add(origDestPackage + ".Q" + origShortName);
//if (implementsInterface != null) {
// importTypes.add(Constants.AVAJE_LANG_NULLABLE);
// importTypes.add(Constants.JAVA_COLLECTION);
// importTypes.add(implementsInterfaceFullName);
//}
}
// remove imports for the same package
Iterator<String> importsIterator = importTypes.iterator();
String checkImportStart = destPackage + ".QAssoc";
while (importsIterator.hasNext()) {
String importType = importsIterator.next();
if (importType.startsWith(checkImportStart)) {
importsIterator.remove();
}
}
}
/**
* Write constructors.
*/
private void writeConstructors() {
if (writingAssocBean) {
writeAssocBeanFetch();
writeAssocBeanConstructor();
} else {
writeRootBeanConstructor();
}
langAdapter.rootBeanConstructor(writer, shortName, dbName, beanFullName);
writeAssocClasses();
}
/**
* Write the constructors for 'root' type query bean.
*/
private void writeRootBeanConstructor() {
lang().rootBeanConstructor(writer, shortName, dbName, beanFullName);
}
private void writeAssocBeanFetch() {
if (isEntity()) {
//if (implementsInterface != null) {
// writeAssocBeanExpression(false, "eq", "Is equal to by ID property.");
// writeAssocBeanExpression(true, "eqIfPresent", "Is equal to by ID property if the value is not null, if null no expression is added.");
// writeAssocBeanExpression(false, "in", "IN the given values.", implementsInterfaceShortName + "...", "in");
// writeAssocBeanExpression(false, "inBy", "IN the given interface values.", "Collection<" + implementsInterfaceShortName + ">", "in");
// writeAssocBeanExpression(true, "inOrEmptyBy", "IN the given interface values if the collection is not empty. No expression is added if the collection is empty..", "Collection<" + implementsInterfaceShortName + ">", "inOrEmpty");
//}
}
}
private void writeAssocBeanExpression(boolean nullable,String expression, String comment) {
writeAssocBeanExpression(nullable, expression, comment, implementsInterfaceShortName, expression);
}
private void writeAssocBeanExpression(boolean nullable, String expression, String comment, String param, String actualExpression) {
final String nullableAnnotation = nullable ? "@Nullable " : "";
String values = expression.startsWith("in") ? "values" : "value";
writer.append(" /**").eol();
writer.append(" * ").append(comment).eol();
writer.append(" */").eol();
writer.append(" fun %s(%s%s %s): R {", expression, nullableAnnotation, param, values).eol();
writer.append(" expr().%s(_name, %s);", actualExpression, values).eol();
writer.append(" return _root;").eol();
writer.append(" }").eol();
writer.eol();
}
/**
* Write constructor for 'assoc' type query bean.
*/
private void writeAssocBeanConstructor() {
lang().assocBeanConstructor(writer, shortName);
}
/**
* Write all the fields.
*/
private void writeFields() {
private void writeFields(boolean assocBeans) {
String padding = assocBeans ? " " : "";
for (PropertyMeta property : properties) {
String typeDefn = property.getTypeDefn(shortName, writingAssocBean);
lang().fieldDefn(writer, property.getName(), typeDefn);
writer.eol();
String typeDefn = kotlinTypeDefn(property.getTypeDefn(shortName, assocBeans));
writer.append("%s lateinit var %s: %s", padding, property.getName(), kotlinInnerType(typeDefn)).eol();
}
writer.eol();
}
private static String kotlinTypeDefn(String type) {
if (type.endsWith(",Integer>")) {
return type.replace(",Integer>", ",Int>");
} else {
return type;
}
}
/**
* Write the class definition.
*/
private void writeClass() {
if (writingAssocBean) {
if (writingEmbeddedBean) {
writer.append("/**").eol();
writer.append(" * Association query bean for %s.", shortName).eol();
writer.append(" * ").eol();
writer.append(" * THIS IS A GENERATED OBJECT, DO NOT MODIFY THIS CLASS.").eol();
writer.append(" */").eol();
writer.append(Constants.AT_GENERATED).eol();
writer.append(Constants.AT_TYPEQUERYBEAN).eol();
if (embeddable) {
writer.append("class Q%s<R> : TQAssoc<%s,R> {", shortName, beanFullName).eol();
} else {
writer.append("class Q%s<R> : TQAssocBean<%s,R,Q%s> {", shortName, beanFullName, origShortName).eol();
}
writer.append("class Q%s {", shortName).eol();
} else {
writer.append("/**").eol();
writer.append(" * Query bean for %s.", shortName).eol();
@@ -344,9 +254,7 @@ class SimpleQueryBeanWriter {
}
private void writeAlias() {
if (!writingAssocBean) {
lang().alias(writer, shortName, beanFullName);
}
langAdapter.alias(writer, shortName, beanFullName);
}
private void writeClassEnd() {
@@ -358,7 +266,7 @@ class SimpleQueryBeanWriter {
*/
private void writeImports() {
for (String importType : importTypes) {
writer.append("import %s;", importType).eol();
writer.append("import %s;", kotlinInnerType(importType)).eol();
}
writer.eol();
}
@@ -379,4 +287,60 @@ class SimpleQueryBeanWriter {
return new FileWriter(absFile);
}
private void writeEmbeddedAssoc() {
writer.append(" @io.ebean.typequery.Generated(\"io.ebean.querybean.generator\") @io.ebean.typequery.TypeQueryBean(\"v1\")").eol();
writer.append(" class Assoc<R> : io.ebean.typequery.TQAssoc<%s,R> {", beanFullName).eol().eol();
writeFields(true);
writer.append(" protected constructor(name: String, root: R) : super(name, root)").eol();
writer.append(" protected constructor(name: String, root: R, prefix: String) : super(name, root, prefix)").eol();
writer.append(" }").eol().eol();
}
private void writeAssocClasses() {
writer.append(" @io.ebean.typequery.Generated(\"io.ebean.querybean.generator\") @io.ebean.typequery.TypeQueryBean(\"v1\")").eol();
writer.append(" abstract class Assoc<R> : io.ebean.typequery.TQAssocBean<%s, R, Q%s> {", beanFullName, shortName).eol();
writeFields(true);
writer.append(" protected constructor(name: String, root: R) : super(name, root)").eol();
writer.append(" protected constructor(name: String, root: R, prefix: String) : super(name, root, prefix)").eol();
writer.append(" }").eol().eol();
writer.append(" @io.ebean.typequery.Generated(\"io.ebean.querybean.generator\") @io.ebean.typequery.TypeQueryBean(\"v1\")").eol();
writer.append(" class AssocOne<R> : Assoc<R> {").eol();
writer.append(" constructor(name: String, root: R) : super(name, root)").eol();
writer.append(" constructor(name: String, root: R, prefix: String) : super(name, root, prefix)").eol();
writer.append(" }").eol().eol();
writer.append(" @io.ebean.typequery.Generated(\"io.ebean.querybean.generator\") @io.ebean.typequery.TypeQueryBean(\"v1\")").eol();
writer.append(" class AssocMany<R> : Assoc<R>, io.ebean.typequery.TQAssocMany<%s, R, Q%s> {", beanFullName, shortName).eol();
writer.append(" constructor(name: String, root: R) : super(name, root)").eol();
writer.append(" constructor(name: String, root: R, prefix: String) : super(name, root, prefix)").eol();
writer.eol();
writer.append(" override fun filterMany(apply: java.util.function.Consumer<Q%s>): R {", shortName).eol();
writer.append(" val list: io.ebean.ExpressionList<%s> = _newExpressionList<%s>()", beanFullName, beanFullName).eol();
writer.append(" apply.accept(Q%s(list))", shortName).eol();
writer.append(" return _filterMany(list)").eol();
writer.append(" }").eol().eol();
writer.append(" override fun filterMany(filter: io.ebean.ExpressionList<%s>): R {", beanFullName).eol();
writer.append(" return _filterMany(filter)").eol();
writer.append(" }").eol().eol();
writer.append(" override fun filterManyRaw(rawExpressions: String, vararg params: Any): R {").eol();
writer.append(" return _filterManyRaw(rawExpressions, *params)").eol();
writer.append(" }").eol().eol();
// Ebean 14.x only
writer.append(" @Deprecated(\"for removal, migrate to filterManyRaw()\")").eol();
writer.append(" override fun filterMany(rawExpressions: String, vararg params: Any): R {").eol();
writer.append(" return _filterMany(rawExpressions, *params)").eol();
writer.append(" }").eol().eol();
writer.append(" override fun isEmpty(): R {").eol();
writer.append(" return _isEmpty() ").eol();
writer.append(" }").eol().eol();
writer.append(" override fun isNotEmpty(): R {").eol();
writer.append(" return _isNotEmpty() ").eol();
writer.append(" }").eol().eol();
writer.append(" }").eol();
}
}

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