Compare commits

...
47 Commits
Author SHA1 Message Date
Rob Bygrave bcf7bd17be Version 13.14.0-jakarta 2023-11-05 22:21:20 +13:00
Rob BygraveandGitHub 102d8d5979 Merge pull request #3263 from ebean-orm/feature/DatabaseBuilder-take-2
DatabaseBuilder take 2
2023-11-05 22:11:26 +13:00
Rob Bygrave 3edc232003 Update test BeanDescriptor_registerTest with DatabaseBuilder use 2023-11-05 22:03:25 +13:00
Rob Bygrave 043dc5c51f Add setters without the set prefix to DatabaseBuilder with deprecation
So add `name(String name)` as preferred to `setName(String name)` etc
2023-11-05 22:01:02 +13:00
Rob Bygrave e2d666df35 Use fluid setters for DatabaseConfig and DatabaseBuilder 2023-11-04 13:05:22 +13:00
Rob Bygrave 314e0a14b8 Move the internal serviceObjectKey() methods back into DatabaseConfig
They were incorrectly extracted to the interface as default methods
2023-11-03 23:00:29 +13:00
Rob Bygrave 1f9cf1e4b7 Split DatabaseBuilder interface separating the setters n getters adding DatabaseBuilder.Settings
So DatabaseBuilder.Settings has all the getters for code looking to read
the configuration that has been set. So DatabaseBuilder now just has the
setter methods.

Use DatabaseBuilder.settings() to access the settings and read the config
that has been set.
2023-11-03 22:58:11 +13:00
Rob Bygrave 12029ed06e Refactor extract interface DatabaseBuilder from DatabaseConfig
First step in supporting the builder pattern for creating Database
2023-11-03 21:17:55 +13:00
Rob BygraveandGitHub 89741b9312 Merge pull request #3262 from ebean-orm/feature/improve-javadoc-deprecated
Improve the javadoc for deprecated methods (to assist IDE quick-fix actions)
2023-11-03 20:05:41 +13:00
Rob Bygrave ae962c2e08 Improve the javadoc for deprecated methods (to assist IDE quick-fix actions) 2023-11-03 20:04:25 +13:00
Rob BygraveandGitHub 4e3501972a Merge pull request #3260 from ebean-orm/feature/bump-migration2
Bump ebean-migration to 13.11.1 (with fastMode option and index file support)
2023-11-03 19:52:00 +13:00
Rob Bygrave a65ba41850 Bump ebean-migration to 13.11.1 (with fastMode option and index file support) 2023-11-03 18:33:02 +13:00
Rob Bygrave 3b11c1cb6b Merge branch 'master' of github.com:ebean-orm/ebean 2023-11-03 18:31:31 +13:00
Rob Bygrave 41185eeb5c Bump ebean-datasource to 8.8 with DataSourceBuilder
First step in migrating the ebean-datasource API to use builder pattern.
DataSourceConfig (concrete type) migrating to DataSourceBuilder (interface).

A followup step will deprecate the use of DataSourceConfig.
2023-11-03 18:31:11 +13:00
Rob BygraveandGitHub e97ff54ab2 Merge pull request #3259 from ebean-orm/feature/loadMode_safer
Change loadMode to be 'safer' (for Grafana etc). e.g. change "(+lazy) " to "__lazy"
2023-11-02 09:00:38 +13:00
robin.bygrave 97fae09c52 Tidy SpiQuery.setProfilePath() internal implementation 2023-11-01 15:48:27 +13:00
robin.bygrave 8b0f58b3c2 Change loadMode to be 'safer' (for Grafana etc). e.g. change "(+lazy)" to "__lazy"
The loadMode ends up as a suffix to some query metrics.

For example "foo.findIt_baz(+lazy)", and the (+lazy) part isn't safe/friendly to tools
like Grafana. So change to instead of (+lazy) use __lazy.
2023-11-01 15:20:18 +13:00
Rob Bygrave 70eb557929 Version 13.23.2-jakarta 2023-10-27 22:13:05 +13:00
Rob Bygrave fdb3a3759b Bump ebean-agent to 13.23.2 2023-10-27 22:10:40 +13:00
Rob BygraveandGitHub 7a5e8d0e17 Merge pull request #3256 from ebean-orm/feature/upgrade-antlr4-4_13_1
Upgrade ANTLR4 from version 4.8-1 to 4.13.1
2023-10-27 21:45:37 +13:00
robin.bygrave a0748f8139 Upgrade ANTLR4 from version 4.8-1 to 4.13.1 2023-10-26 13:52:44 +13:00
Rob BygraveandGitHub 9f65673f54 Merge pull request #3255 from ebean-orm/feature/bump-junit-bytebuddy
Bump io.avaje:junit and bytebuddy version to support JDK 22+
2023-10-25 22:12:49 +13:00
Rob Bygrave 8f6a3c59d1 Bump io.avaje:junit and bytebuddy version to support JDK 22+ 2023-10-25 21:58:19 +13:00
Rob BygraveandGitHub 05210ec411 Merge pull request #3254 from ebean-orm/feature/query-plan-capture-yuga
Use DIST with query plan capture for Yugabyte plus simplify
2023-10-25 08:23:01 +13:00
Rob Bygrave faffda8318 Use DIST with query plan capture for Yugabyte plus simplify
Change QueryPlanLoggerExplain to take the options for PG, Yugabyte and others
2023-10-25 08:22:25 +13:00
Rob BygraveandGitHub af3901ce01 Merge pull request #3253 from ebean-orm/feature/3251
#3251 - QueryBeans: Entities can not have same name as some Ebean API…
2023-10-25 08:11:40 +13:00
Rob Bygrave acd538207f #3251 - QueryBeans: Entities can not have same name as some Ebean API classes 2023-10-24 23:08:30 +13:00
Rob Bygrave 84f0ef9fce Use querybean-generator via provided scope rather than maven compiler plugin
This is because when releasing both jakarta and javax versions these
need to have their versions adjusted
2023-10-24 23:07:14 +13:00
Rob BygraveandGitHub 7ab447b21c Merge pull request #3252 from ebean-orm/feature/querybean-generator-provided
Use querybean-generator via provided scope rather than maven compiler plugin
2023-10-24 22:23:56 +13:00
Rob Bygrave 6f8805a6b3 Use querybean-generator via provided scope rather than maven compiler plugin
This is because when releasing both jakarta and javax versions these
need to have their versions adjusted
2023-10-24 22:17:28 +13:00
Rob Bygrave 0171c1afef Version 13.23.1 2023-10-18 15:47:04 +13:00
Rob Bygrave 31c106f604 Bump ebean-agent to 13.23.1 2023-10-18 15:16:20 +13:00
Rob BygraveandGitHub 20d2838be4 Merge pull request #3250 from ebean-orm/feature/bump-parent
Make Jackson a transitive dependency of ebean-jackson-mapper
2023-10-17 23:25:43 +13:00
Rob Bygrave 4238a951ca Make Jackson a transitive dependency of ebean-jackson-mapper
So jackson-core and jackson-databind are both transitive dependencies
of ebean-jackson-mapper.
2023-10-17 23:25:09 +13:00
Rob BygraveandGitHub b5d4bed615 Merge pull request #3249 from ebean-orm/feature/bump-parent
Support native-image via querybean-generator
2023-10-17 23:18:17 +13:00
Rob Bygrave 3ef715ef64 Support native-image via querybean-generator 2023-10-17 23:09:18 +13:00
Rob BygraveandGitHub aea39528ab Merge pull request #3248 from ebean-orm/feature/bump-parent
Bump dependency for avaje-config to 3.9
2023-10-17 22:39:04 +13:00
Rob Bygrave dd498409e0 Bump dependency for avaje-config to 3.9 2023-10-17 22:38:33 +13:00
Rob BygraveandGitHub bae33101df Merge pull request #3247 from ebean-orm/feature/bump-parent
Bump parent pom
2023-10-17 22:37:53 +13:00
Rob Bygrave e1972ac544 Bump parent pom 2023-10-17 22:37:20 +13:00
Rob Bygrave c7241ba3dc Fix test for java 16+ annotation processor version 2023-10-16 23:30:45 +13:00
Rob Bygrave 73416ed65a For testing java 16+ include JDK 17 and 21 only 2023-10-16 23:19:48 +13:00
Rob Bygrave cd70c178f1 For testing java 16+ include JDK 17 and 21 only 2023-10-16 23:17:25 +13:00
Rob Bygrave aa298235f3 For testing java 16+ include JDK 21 and 22 2023-10-16 23:15:32 +13:00
Rob BygraveandGitHub 8733fed14b Merge pull request #3246 from ebean-orm/feature/annotation-processing-jdk-22
Explicit annotation processors required with JDK 22
2023-10-16 22:06:20 +13:00
Rob Bygrave 169d170247 Explicit annotation processors required with JDK 22
JDK 22 changes such that annotation processors are not found by default on
the classpath. As such they either need to be explicitly registered with
the compiler (e.g. maven-compiler-plugin) or use -proc:full
2023-10-16 21:54:32 +13:00
Rob Bygrave d0ee42e0de Include <compilerArgument>-proc:full</compilerArgument> for JDK 22 EA build 2023-10-16 20:32:41 +13:00
190 changed files with 5363 additions and 2948 deletions
+2
View File
@@ -34,6 +34,8 @@ jobs:
path:
~/.m2
key: build-${{ env.cache-name }}
- name: Maven version
run: mvn --version
- name: Build with Maven
run: mvn package
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-clickhouse</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-db2</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hana</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mariadb</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mysql</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-nuodb</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-oracle</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -22,13 +22,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -47,19 +47,19 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlite</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+8 -8
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,31 +17,31 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-joda-time</artifactId>
<version>13.18.0</version>
<version>13.24.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-jsonnode</artifactId>
<version>13.18.0</version>
<version>13.24.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -60,13 +60,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</parent>
<artifactId>composites</artifactId>
+2 -9
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</parent>
<name>ebean api</name>
@@ -39,7 +39,7 @@
<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-config</artifactId>
<version>3.8</version>
<version>3.9</version>
</dependency>
<dependency>
@@ -107,13 +107,6 @@
</dependency>
<!-- JAKARTA-DEPENDENCY-END -->
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
+18 -1
View File
@@ -42,7 +42,7 @@ import java.util.concurrent.Callable;
* <h5>Constructing a Database</h5>
* <p>
* Databases are constructed by the DatabaseFactory. They can be created
* programmatically via {@link DatabaseFactory#create(DatabaseConfig)} or they
* programmatically via {@link DatabaseFactory#create(DatabaseBuilder)} or they
* can be automatically constructed on demand using configuration information in
* the application.properties file.
*
@@ -86,6 +86,23 @@ import java.util.concurrent.Callable;
@NonNullApi
public interface Database {
/**
* Return a new database builder.
* <pre>{@code
*
* // build the 'default' database using configuration
* // from application.properties / application.yaml
*
* Database db = Database.builder()
* .loadFromProperties()
* .build();
*
* }</pre>
*/
static DatabaseBuilder builder() {
return new DatabaseConfig();
}
/**
* Shutdown the Database instance.
*/
File diff suppressed because it is too large Load Diff
@@ -1,7 +1,6 @@
package io.ebean;
import io.ebean.config.ContainerConfig;
import io.ebean.config.DatabaseConfig;
import io.ebean.service.SpiContainer;
import io.ebean.service.SpiContainerFactory;
@@ -76,9 +75,10 @@ public final class DatabaseFactory {
*
* }</pre>
*/
public static Database create(DatabaseConfig config) {
public static Database create(DatabaseBuilder builder) {
lock.lock();
try {
var config = builder.settings();
if (config.getName() == null) {
throw new PersistenceException("The name is null (it is required)");
}
@@ -102,7 +102,7 @@ public final class DatabaseFactory {
/**
* Create using the DatabaseConfig additionally specifying a classLoader to use as the context class loader.
*/
public static Database createWithContextClassLoader(DatabaseConfig config, ClassLoader classLoader) {
public static Database createWithContextClassLoader(DatabaseBuilder config, ClassLoader classLoader) {
lock.lock();
try {
ClassLoader currentContextLoader = Thread.currentThread().getContextClassLoader();
@@ -132,7 +132,7 @@ public final class DatabaseFactory {
}
}
private static Database createInternal(DatabaseConfig config) {
private static Database createInternal(DatabaseBuilder.Settings config) {
return container(config.getContainerConfig()).createServer(config);
}
@@ -54,7 +54,7 @@ public interface ExpressionList<T> {
Query<T> orderById(boolean orderById);
/**
* Deprecated migrate to {@link #orderBy(String)}
* @deprecated migrate to {@link #orderBy(String)}
*/
@Deprecated(since = "13.19", forRemoval = true)
default ExpressionList<T> order(String orderByClause) {
@@ -72,7 +72,7 @@ public interface ExpressionList<T> {
ExpressionList<T> orderBy(String orderBy);
/**
* Deprecated migrate to orderBy().
* @deprecated migrate to {@link #orderBy()}.
*/
@Deprecated(forRemoval = true)
default OrderBy<T> order() {
@@ -508,7 +508,7 @@ public interface ExpressionList<T> {
ExpressionList<T> filterMany(String manyProperty);
/**
* Deprecated for removal - migrate to filterManyRaw()
* @deprecated for removal - migrate to {@link #filterManyRaw(String, String, Object...)}.
* <p>
* Add filter expressions to the many property.
*
+3 -3
View File
@@ -1396,7 +1396,7 @@ public interface Query<T> extends CancelableQuery {
Query<T> orderBy(String orderByClause);
/**
* Deprecated migrate to orderBy().
* @deprecated migrate to {@link #orderBy()}.
*/
@Deprecated(since = "13.19", forRemoval = true)
default Query<T> order(String orderByClause) {
@@ -1415,7 +1415,7 @@ public interface Query<T> extends CancelableQuery {
OrderBy<T> orderBy();
/**
* Deprecated migrate to orderBy().
* @deprecated migrate to {@link #orderBy()}.
*/
@Deprecated(since = "13.19", forRemoval = true)
default OrderBy<T> order() {
@@ -1428,7 +1428,7 @@ public interface Query<T> extends CancelableQuery {
Query<T> setOrderBy(OrderBy<T> orderBy);
/**
* Deprecated migrate to setOrderBy().
* @deprecated migrate to {@link #setOrderBy(OrderBy)}.
*/
@Deprecated(since = "13.19", forRemoval = true)
default Query<T> setOrder(OrderBy<T> orderBy) {
@@ -1,6 +1,6 @@
package io.ebean.cache;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
/**
* Plugin that provides a ServerCacheNotify implementation.
@@ -12,5 +12,5 @@ public interface ServerCacheNotifyPlugin {
/**
* Create a ServerCacheNotify implementation given the server configuration.
*/
ServerCacheNotify create(DatabaseConfig config);
ServerCacheNotify create(DatabaseBuilder config);
}
@@ -1,7 +1,7 @@
package io.ebean.cache;
import io.ebean.BackgroundExecutor;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
/**
* The plugin interface that creates a ServerCacheFactory.
@@ -11,5 +11,5 @@ public interface ServerCachePlugin {
/**
* Create the ServerCacheFactory given the server config and background executor service.
*/
ServerCacheFactory create(DatabaseConfig config, BackgroundExecutor executor);
ServerCacheFactory create(DatabaseBuilder config, BackgroundExecutor executor);
}
@@ -1,5 +1,7 @@
package io.ebean.config;
import io.ebean.DatabaseBuilder;
/**
* Used to provide some automatic configuration early in the creation of a Database.
*/
@@ -8,11 +10,11 @@ public interface AutoConfigure {
/**
* Perform configuration for the DatabaseConfig prior to properties load.
*/
void preConfigure(DatabaseConfig config);
void preConfigure(DatabaseBuilder config);
/**
* Provide some configuration the DatabaseConfig prior to server creation but after properties have been applied.
*/
void postConfigure(DatabaseConfig config);
void postConfigure(DatabaseBuilder config);
}
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,7 @@
package io.ebean.config;
import io.ebean.DatabaseBuilder;
/**
* Provides a ServiceLoader based mechanism to configure a DatabaseConfig.
* <p>
@@ -35,5 +37,5 @@ public interface DatabaseConfigProvider {
* Typically we explicitly register entity bean classes and thus avoid classpath scanning.
* </p>
*/
void apply(DatabaseConfig config);
void apply(DatabaseBuilder config);
}
@@ -1,6 +1,6 @@
package io.ebean.event;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
/**
* Used to configure the server on startup.
@@ -13,6 +13,6 @@ public interface ServerConfigStartup {
/**
* On starting configure the DatabaseConfig.
*/
void onStart(DatabaseConfig config);
void onStart(DatabaseBuilder config);
}
@@ -3,7 +3,7 @@ package io.ebean.plugin;
import io.ebean.Database;
import io.ebean.bean.BeanLoader;
import io.ebean.bean.EntityBeanIntercept;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.dbplatform.DatabasePlatform;
import java.util.List;
@@ -16,7 +16,7 @@ public interface SpiServer extends Database {
/**
* Return the DatabaseConfig.
*/
DatabaseConfig config();
DatabaseBuilder.Settings config();
/**
* Return the DatabasePlatform for this database.
@@ -1,7 +1,7 @@
package io.ebean.service;
import io.ebean.Database;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
/**
* Creates the Database implementations. This is used internally by the EbeanServerFactory and is not currently
@@ -14,7 +14,7 @@ public interface SpiContainer {
*
* @param configuration The configuration information for this database.
*/
Database createServer(DatabaseConfig configuration);
Database createServer(DatabaseBuilder configuration);
/**
* Create an EbeanServer just using the name.
@@ -1,6 +1,7 @@
package io.ebean.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.ebean.DatabaseBuilder;
import io.ebean.annotation.MutationDetection;
import io.ebean.annotation.PersistBatch;
import io.ebean.config.dbplatform.IdType;
@@ -17,7 +18,7 @@ class DatabaseConfigTest {
@Test
void testLoadFromEbeanProperties() {
DatabaseConfig config = new DatabaseConfig();
var config = new DatabaseConfig().settings();
config.loadFromProperties();
assertEquals(PersistBatch.NONE, config.getPersistBatch());
@@ -32,7 +33,7 @@ class DatabaseConfigTest {
Properties props = new Properties();
props.setProperty("ddl.initSql", "${user.home}" + fileSeparator + "initSql");
DatabaseConfig config = new DatabaseConfig();
var config = new DatabaseConfig().settings();
config.loadFromProperties(props);
String ddlInitSql = config.getDdlInitSql();
@@ -41,7 +42,7 @@ class DatabaseConfigTest {
@Test
void testLoadWithProperties() {
DatabaseConfig config = new DatabaseConfig();
DatabaseBuilder config = new DatabaseConfig();
config.setPersistBatch(PersistBatch.NONE);
config.setPersistBatchOnCascade(PersistBatch.NONE);
config.setAutoReadOnlyDataSource(false);
@@ -83,46 +84,47 @@ class DatabaseConfigTest {
config.loadFromProperties(props);
assertFalse(config.isDefaultServer());
assertTrue(config.isDisableL2Cache());
assertTrue(config.isNotifyL2CacheInForeground());
assertTrue(config.isDbOffline());
assertTrue(config.isAutoReadOnlyDataSource());
assertTrue(config.isAutoLoadModuleInfo());
assertTrue(config.isLoadModuleInfo());
assertTrue(config.skipDataSourceCheck());
var settings = config.settings();
assertFalse(settings.isDefaultServer());
assertTrue(settings.isDisableL2Cache());
assertTrue(settings.isNotifyL2CacheInForeground());
assertTrue(settings.isDbOffline());
assertTrue(settings.isAutoReadOnlyDataSource());
assertTrue(settings.isAutoLoadModuleInfo());
assertTrue(settings.isLoadModuleInfo());
assertTrue(settings.skipDataSourceCheck());
assertTrue(config.isIdGeneratorAutomatic());
assertFalse(config.getPlatformConfig().isCaseSensitiveCollation());
assertTrue(config.getPlatformConfig().isForUpdateNoKey());
assertTrue(settings.isIdGeneratorAutomatic());
assertFalse(settings.getPlatformConfig().isCaseSensitiveCollation());
assertTrue(settings.getPlatformConfig().isForUpdateNoKey());
assertThat(config.getNamingConvention()).isInstanceOf(MatchingNamingConvention.class);
assertThat(settings.getNamingConvention()).isInstanceOf(MatchingNamingConvention.class);
assertEquals(MutationDetection.NONE, config.getJsonMutationDetection());
assertEquals(MutationDetection.NONE, settings.getJsonMutationDetection());
config.setJsonMutationDetection(MutationDetection.SOURCE);
assertEquals(MutationDetection.SOURCE, config.getJsonMutationDetection());
assertEquals(IdType.SEQUENCE, config.getIdType());
assertEquals(PersistBatch.ALL, config.getPersistBatch());
assertEquals(PersistBatch.ALL, config.getPersistBatchOnCascade());
Assertions.assertEquals(PlatformConfig.DbUuid.BINARY, config.getPlatformConfig().getDbUuid());
Assertions.assertEquals(JsonConfig.DateTime.MILLIS, config.getJsonDateTime());
assertEquals(JsonConfig.Date.MILLIS, config.getJsonDate());
assertEquals(MutationDetection.SOURCE, settings.getJsonMutationDetection());
assertEquals(IdType.SEQUENCE, settings.getIdType());
assertEquals(PersistBatch.ALL, settings.getPersistBatch());
assertEquals(PersistBatch.ALL, settings.getPersistBatchOnCascade());
Assertions.assertEquals(PlatformConfig.DbUuid.BINARY, settings.getPlatformConfig().getDbUuid());
Assertions.assertEquals(JsonConfig.DateTime.MILLIS, settings.getJsonDateTime());
assertEquals(JsonConfig.Date.MILLIS, settings.getJsonDate());
assertEquals("r0,users,orgs", config.getEnabledL2Regions());
assertEquals("r0,users,orgs", settings.getEnabledL2Regions());
assertEquals(42, config.getJdbcFetchSizeFindEach());
assertEquals(43, config.getJdbcFetchSizeFindList());
assertEquals(4, config.getBackgroundExecutorSchedulePoolSize());
assertEquals(98, config.getBackgroundExecutorShutdownSecs());
assertEquals(42, settings.getJdbcFetchSizeFindEach());
assertEquals(43, settings.getJdbcFetchSizeFindList());
assertEquals(4, settings.getBackgroundExecutorSchedulePoolSize());
assertEquals(98, settings.getBackgroundExecutorShutdownSecs());
assertTrue(config.isQueryPlanEnable());
assertEquals(10000, config.getQueryPlanThresholdMicros());
assertTrue(config.isQueryPlanCapture());
assertEquals(42, config.getQueryPlanCapturePeriodSecs());
assertEquals(560, config.getQueryPlanCaptureMaxTimeMillis());
assertEquals(7, config.getQueryPlanCaptureMaxCount());
assertTrue(settings.isQueryPlanEnable());
assertEquals(10000, settings.getQueryPlanThresholdMicros());
assertTrue(settings.isQueryPlanCapture());
assertEquals(42, settings.getQueryPlanCapturePeriodSecs());
assertEquals(560, settings.getQueryPlanCaptureMaxTimeMillis());
assertEquals(7, settings.getQueryPlanCaptureMaxCount());
assertThat(config.getMappingLocations()).containsExactly("classpath:/foo","bar");
assertThat(settings.getMappingLocations()).containsExactly("classpath:/foo","bar");
config.setPersistBatch(PersistBatch.NONE);
config.setPersistBatchOnCascade(PersistBatch.NONE);
@@ -137,19 +139,19 @@ class DatabaseConfigTest {
props1.setProperty("ebean.notifyL2CacheInForeground", "false");
config.loadFromProperties(props1);
assertFalse(config.isDisableL2Cache());
assertFalse(config.isNotifyL2CacheInForeground());
assertFalse(settings.isDisableL2Cache());
assertFalse(settings.isNotifyL2CacheInForeground());
assertEquals(PersistBatch.ALL, config.getPersistBatch());
assertEquals(PersistBatch.ALL, config.getPersistBatchOnCascade());
assertEquals(PersistBatch.ALL, settings.getPersistBatch());
assertEquals(PersistBatch.ALL, settings.getPersistBatchOnCascade());
config.setEnabledL2Regions("r0,orgs");
assertEquals("r0,orgs", config.getEnabledL2Regions());
assertEquals("r0,orgs", settings.getEnabledL2Regions());
}
@Test
void test_defaults() {
DatabaseConfig config = new DatabaseConfig();
DatabaseBuilder.Settings config = new DatabaseConfig().settings();
assertTrue(config.isIdGeneratorAutomatic());
assertTrue(config.isDefaultServer());
assertFalse(config.isAutoPersistUpdates());
@@ -184,7 +186,7 @@ class DatabaseConfigTest {
void test_putServiceObject() {
ObjectMapper objectMapper = new ObjectMapper();
DatabaseConfig config = new DatabaseConfig();
var config = new DatabaseConfig().settings();
config.putServiceObject(objectMapper);
ObjectMapper mapper0 = config.getServiceObject(ObjectMapper.class);
+28 -28
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</parent>
<name>ebean bom</name>
@@ -89,49 +89,49 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-joda-time</artifactId>
<version>13.18.0</version>
<version>13.24.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-jsonnode</artifactId>
<version>13.18.0</version>
<version>13.24.0</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -155,37 +155,37 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>kotlin-querybean-generator</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-redis</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-spring-txn</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<!-- platforms -->
@@ -193,79 +193,79 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-clickhouse</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-db2</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-h2</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-hana</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mariadb</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mysql</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-nuodb</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-oracle</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgres</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlite</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlserver</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
</dependencies>
+2 -9
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</parent>
<artifactId>ebean-core-type</artifactId>
@@ -16,7 +16,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -34,13 +34,6 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
@@ -1,6 +1,6 @@
package io.ebean.core.type;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import java.util.List;
@@ -12,5 +12,5 @@ public interface ExtraTypeFactory {
/**
* Provide extra types to Ebean.
*/
List<? extends ScalarType<?>> createTypes(DatabaseConfig config, Object objectMapper);
List<? extends ScalarType<?>> createTypes(DatabaseBuilder.Settings config, Object objectMapper);
}
@@ -1,7 +1,7 @@
package io.ebean.core.type;
import io.avaje.lang.Nullable;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
/**
* Factory to create ScalarTypeSet.
@@ -12,6 +12,6 @@ public interface ScalarTypeSetFactory {
* Create the ScalarTypeSet given the config and optional objectMapper.
*/
@Nullable
ScalarTypeSet<?> createTypeSet(DatabaseConfig config, @Nullable Object objectMapper);
ScalarTypeSet<?> createTypeSet(DatabaseBuilder.Settings config, @Nullable Object objectMapper);
}
+7 -14
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</parent>
<artifactId>ebean-core</artifactId>
@@ -22,7 +22,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -46,7 +46,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</dependency>
<dependency>
@@ -58,7 +58,7 @@
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.8-1</version>
<version>4.13.1</version>
</dependency>
<!--
@@ -159,21 +159,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<scope>test</scope>
</dependency>
@@ -184,13 +184,6 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
@@ -1,6 +1,6 @@
package io.ebeaninternal.api;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.server.type.GeoTypeBinder;
/**
@@ -11,5 +11,5 @@ public interface GeoTypeProvider {
/**
* Create a binder for binding geometry types.
*/
GeoTypeBinder createBinder(DatabaseConfig config);
GeoTypeBinder createBinder(DatabaseBuilder.Settings config);
}
@@ -111,7 +111,7 @@ public final class LoadBeanRequest extends LoadRequest {
}
private String mode() {
return lazy ? "+lazy" : loadBuffer.isCache() ? "+cache" : "+query";
return lazy ? "lazy" : loadBuffer.isCache() ? "cache" : "query";
}
/**
@@ -101,7 +101,7 @@ public final class LoadManyRequest extends LoadRequest {
query.setLazyLoadForParents(many);
many.addWhereParentIdIn(query, parentIdList(server), loadContext.isUseDocStore());
query.setPersistenceContext(loadContext.persistenceContext());
query.setLoadDescription(lazy ? "+lazy" : "+query", description());
query.setLoadDescription(lazy ? "lazy" : "query", description());
if (lazy) {
query.setLazyLoadBatchSize(loadContext.batchSize());
} else {
@@ -1,5 +1,6 @@
package io.ebeaninternal.api;
import io.avaje.lang.Nullable;
import io.ebean.CacheMode;
import io.ebean.CountDistinctOrder;
import io.ebean.ExpressionList;
@@ -339,7 +340,7 @@ public interface SpiQuery<T> extends Query<T>, SpiQueryFetch, TxnProfileEventCod
/**
* Set the on a secondary query given the label, relativePath and profile location of the parent query.
*/
void setProfilePath(String label, String relativePath, ProfileLocation profileLocation);
void setProfilePath(String label, String relativePath, @Nullable ProfileLocation profileLocation);
/**
* Set the query mode.
@@ -1,9 +1,9 @@
package io.ebeaninternal.server.autotune;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.api.SpiEbeanServer;
public interface AutoTuneServiceProvider {
AutoTuneService create(SpiEbeanServer server, DatabaseConfig config);
AutoTuneService create(SpiEbeanServer server, DatabaseBuilder config);
}
@@ -4,7 +4,7 @@ import io.ebean.cache.QueryCacheEntryValidate;
import io.ebean.cache.ServerCacheFactory;
import io.ebean.cache.ServerCacheOptions;
import io.ebean.config.CurrentTenantProvider;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.server.cluster.ClusterManager;
/**
@@ -13,7 +13,7 @@ import io.ebeaninternal.server.cluster.ClusterManager;
public final class CacheManagerOptions {
private final ClusterManager clusterManager;
private final DatabaseConfig databaseConfig;
private final DatabaseBuilder.Settings databaseBuilder;
private final boolean localL2Caching;
private CurrentTenantProvider currentTenantProvider;
private QueryCacheEntryValidate queryCacheEntryValidate;
@@ -24,15 +24,15 @@ public final class CacheManagerOptions {
CacheManagerOptions() {
this.localL2Caching = true;
this.clusterManager = null;
this.databaseConfig = null;
this.databaseBuilder = null;
this.cacheFactory = new DefaultServerCacheFactory();
this.beanDefault = new ServerCacheOptions();
this.queryDefault = new ServerCacheOptions();
}
public CacheManagerOptions(ClusterManager clusterManager, DatabaseConfig config, boolean localL2Caching) {
public CacheManagerOptions(ClusterManager clusterManager, DatabaseBuilder.Settings config, boolean localL2Caching) {
this.clusterManager = clusterManager;
this.databaseConfig = config;
this.databaseBuilder = config;
this.localL2Caching = localL2Caching;
this.currentTenantProvider = config.getCurrentTenantProvider();
}
@@ -55,7 +55,7 @@ public final class CacheManagerOptions {
}
public String getServerName() {
return (databaseConfig == null) ? "db" : databaseConfig.getName();
return (databaseBuilder == null) ? "db" : databaseBuilder.getName();
}
public boolean isLocalL2Caching() {
@@ -3,7 +3,7 @@ package io.ebeaninternal.server.cache;
import io.ebean.BackgroundExecutor;
import io.ebean.cache.ServerCacheFactory;
import io.ebean.cache.ServerCachePlugin;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
/**
* Default implementation of ServerCachePlugin.
@@ -14,7 +14,7 @@ public final class DefaultServerCachePlugin implements ServerCachePlugin {
* Creates the default ServerCacheFactory.
*/
@Override
public ServerCacheFactory create(DatabaseConfig config, BackgroundExecutor executor) {
public ServerCacheFactory create(DatabaseBuilder config, BackgroundExecutor executor) {
return new DefaultServerCacheFactory(executor);
}
}
@@ -2,7 +2,7 @@ package io.ebeaninternal.server.core;
import io.avaje.classpath.scanner.ClassPathScanner;
import io.avaje.classpath.scanner.ClassPathScannerFactory;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import java.util.ArrayList;
import java.util.List;
@@ -16,7 +16,7 @@ public class ClassPathScanners {
/**
* Return the list of ClassPathScanner services using DatabaseConfig service loader.
*/
public static List<ClassPathScanner> find(DatabaseConfig config) {
public static List<ClassPathScanner> find(DatabaseBuilder.Settings config) {
List<ClassPathScanner> scanners = new ArrayList<>();
for (ClassPathScannerFactory factory : ServiceLoader.load(ClassPathScannerFactory.class)) {
scanners.add(factory.createScanner(config.getClassLoadConfig().getClassLoader()));
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.core;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DatabasePlatformProvider;
import io.ebeaninternal.api.CoreLog;
@@ -37,7 +37,7 @@ public class DatabasePlatformFactory {
/**
* Create the appropriate database specific platform.
*/
public DatabasePlatform create(DatabaseConfig config) {
public DatabasePlatform create(DatabaseBuilder.Settings config) {
try {
String offlinePlatform = DbOffline.getPlatform();
if (offlinePlatform != null) {
@@ -48,7 +48,7 @@ public class DatabasePlatformFactory {
// choose based on dbName
return byDatabaseName(config.getDatabasePlatformName());
}
if (config.getDataSourceConfig().isOffline()) {
if (config.getDataSourceConfig().settings().isOffline()) {
throw new PersistenceException("DatabasePlatformName must be specified with offline mode");
}
// guess using meta data from driver
@@ -82,9 +82,9 @@ final class DefaultBeanLoader {
// populate a new collection
BeanCollection<?> emptyCollection = many.createEmpty(parentBean);
many.setValue(parentBean, emptyCollection);
query.setLoadDescription("+refresh", null);
query.setLoadDescription("refresh", null);
} else {
query.setLoadDescription("+lazy", null);
query.setLoadDescription("lazy", null);
}
query.select(parentDesc.idBinder().idSelect());
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.core;
import io.ebean.DatabaseBuilder;
import io.ebean.config.*;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.event.ShutdownManager;
@@ -51,13 +52,14 @@ public final class DefaultContainer implements SpiContainer {
*/
@Override
public SpiEbeanServer createServer(String name) {
DatabaseConfig config = new DatabaseConfig();
DatabaseBuilder config = new DatabaseConfig();
config.setName(name);
config.loadFromProperties();
return createServer(config);
}
private SpiBackgroundExecutor createBackgroundExecutor(DatabaseConfig config) {
private SpiBackgroundExecutor createBackgroundExecutor(DatabaseBuilder builder) {
var config = builder.settings();
String namePrefix = "ebean-" + config.getName();
int schedulePoolSize = config.getBackgroundExecutorSchedulePoolSize();
int shutdownSecs = config.getBackgroundExecutorShutdownSecs();
@@ -69,9 +71,10 @@ public final class DefaultContainer implements SpiContainer {
* Create the implementation from the configuration.
*/
@Override
public SpiEbeanServer createServer(DatabaseConfig config) {
public SpiEbeanServer createServer(DatabaseBuilder builder) {
lock.lock();
try {
var config = builder.settings();
long start = System.currentTimeMillis();
applyConfigServices(config);
setNamingConvention(config);
@@ -115,7 +118,7 @@ public final class DefaultContainer implements SpiContainer {
}
}
private void applyConfigServices(DatabaseConfig config) {
private void applyConfigServices(DatabaseBuilder.Settings config) {
if (config.isDefaultServer()) {
for (DatabaseConfigProvider configProvider : ServiceLoader.load(DatabaseConfigProvider.class)) {
configProvider.apply(config);
@@ -158,7 +161,7 @@ public final class DefaultContainer implements SpiContainer {
* Get the entities, scalarTypes, Listeners etc combining the class registered
* ones with the already created instances.
*/
private BootupClasses bootupClasses(DatabaseConfig config) {
private BootupClasses bootupClasses(DatabaseBuilder.Settings config) {
BootupClasses bootup = bootupClasses1(config);
bootup.addServerConfigStartup(config.getServerConfigStartupListeners());
bootup.runServerConfigStartup(config);
@@ -176,7 +179,7 @@ public final class DefaultContainer implements SpiContainer {
/**
* Get the class based entities, scalarTypes, Listeners etc.
*/
private BootupClasses bootupClasses1(DatabaseConfig config) {
private BootupClasses bootupClasses1(DatabaseBuilder.Settings config) {
Set<Class<?>> classes = config.classes();
if (config.isDisableClasspathSearch() || (classes != null && !classes.isEmpty())) {
// use classes we explicitly added via configuration
@@ -188,7 +191,7 @@ public final class DefaultContainer implements SpiContainer {
/**
* Set the naming convention to underscore if it has not already been set.
*/
private void setNamingConvention(DatabaseConfig config) {
private void setNamingConvention(DatabaseBuilder.Settings config) {
if (config.getNamingConvention() == null) {
config.setNamingConvention(new UnderscoreNamingConvention());
}
@@ -197,7 +200,7 @@ public final class DefaultContainer implements SpiContainer {
/**
* Set the DatabasePlatform if it has not already been set.
*/
private void setDatabasePlatform(DatabaseConfig config) {
private void setDatabasePlatform(DatabaseBuilder.Settings config) {
DatabasePlatform platform = config.getDatabasePlatform();
if (platform == null) {
if (config.getTenantMode().isDynamicDataSource()) {
@@ -213,7 +216,7 @@ public final class DefaultContainer implements SpiContainer {
/**
* Set the DataSource if it has not already been set.
*/
private void setDataSource(DatabaseConfig config) {
private void setDataSource(DatabaseBuilder.Settings config) {
if (isOfflineMode(config)) {
log.log(DEBUG, "... DbOffline using platform [{0}]", DbOffline.getPlatform());
} else {
@@ -221,7 +224,7 @@ public final class DefaultContainer implements SpiContainer {
}
}
private boolean isOfflineMode(DatabaseConfig config) {
private boolean isOfflineMode(DatabaseBuilder.Settings config) {
return config.isDbOffline() || DbOffline.isSet();
}
@@ -235,12 +238,12 @@ public final class DefaultContainer implements SpiContainer {
* checking may not work as expected.
* </p>
*/
private boolean checkDataSource(DatabaseConfig config) {
private boolean checkDataSource(DatabaseBuilder.Settings config) {
if (isOfflineMode(config)) {
return false;
}
if (config.getDataSource() == null) {
if (config.getDataSourceConfig().isOffline()) {
if (config.getDataSourceConfig().settings().isOffline()) {
// this is ok - offline DDL generation etc
return false;
}
@@ -76,7 +76,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
private static final System.Logger log = CoreLog.internal;
private final ReentrantLock lock = new ReentrantLock();
private final DatabaseConfig config;
private final DatabaseBuilder.Settings config;
private final String serverName;
private final DatabasePlatform databasePlatform;
private final TransactionManager transactionManager;
@@ -170,7 +170,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
/**
* Create the CallStackFactory depending if AutoTune is being used.
*/
private CallOriginFactory initCallStackFactory(DatabaseConfig config) {
private CallOriginFactory initCallStackFactory(DatabaseBuilder.Settings config) {
if (!config.getAutoTuneConfig().isActive()) {
// use a common CallStack for performance as we don't care with no AutoTune
return new NoopCallOriginFactory();
@@ -224,7 +224,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
public DatabaseConfig config() {
public DatabaseBuilder.Settings config() {
return config;
}
@@ -1,11 +1,8 @@
package io.ebeaninternal.server.core;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.datasource.DataSourceAlertFactory;
import io.ebean.datasource.DataSourceConfig;
import io.ebean.datasource.DataSourceFactory;
import io.ebean.datasource.DataSourcePoolListener;
import io.ebean.DatabaseBuilder;
import io.ebean.datasource.*;
import jakarta.persistence.PersistenceException;
import javax.sql.DataSource;
@@ -15,16 +12,16 @@ import javax.sql.DataSource;
*/
final class InitDataSource {
private final DatabaseConfig config;
private final DatabaseBuilder.Settings config;
/**
* Create and set the main DataSource and read-only DataSource.
*/
static void init(DatabaseConfig config) {
static void init(DatabaseBuilder.Settings config) {
new InitDataSource(config).initialise();
}
InitDataSource(DatabaseConfig config) {
InitDataSource(DatabaseBuilder.Settings config) {
this.config = config;
}
@@ -48,27 +45,28 @@ final class InitDataSource {
* Initialise the "read only" DataSource from configuration.
*/
private DataSource initReadOnlyDataSource() {
DataSourceConfig roConfig = readOnlyConfig();
var roConfig = readOnlyConfig();
return roConfig == null ? null : createFromConfig(roConfig, true);
}
DataSourceConfig readOnlyConfig() {
DataSourceConfig roConfig = config.getReadOnlyDataSourceConfig();
DataSourceBuilder readOnlyConfig() {
var roConfig = config.getReadOnlyDataSourceConfig();
if (roConfig == null) {
// it has explicitly been set to null, not expected but ok
return null;
}
if (urlSet(roConfig.getUrl())) {
var roSettings = roConfig.settings();
if (urlSet(roSettings.getUrl())) {
return roConfig;
}
// convenient alternate place to set the read-only url
final String readOnlyUrl = config.getDataSourceConfig().getReadOnlyUrl();
final String readOnlyUrl = config.getDataSourceConfig().settings().getReadOnlyUrl();
if (urlSet(readOnlyUrl)) {
roConfig.setUrl(readOnlyUrl);
roConfig.url(readOnlyUrl);
return roConfig;
}
if (config.isAutoReadOnlyDataSource()) {
roConfig.setUrl(null); // blank out in case it is "none"
roConfig.url(null); // blank out in case it is "none"
return roConfig;
} else {
return null;
@@ -79,25 +77,27 @@ final class InitDataSource {
return url != null && !"none".equalsIgnoreCase(url) && !url.trim().isEmpty();
}
private DataSource createFromConfig(DataSourceConfig dsConfig, boolean readOnly) {
private DataSource createFromConfig(DataSourceBuilder dsConfig, boolean readOnly) {
if (dsConfig == null) {
throw new PersistenceException("No DataSourceConfig defined for " + config.getName());
throw new PersistenceException("No DataSourceBuilder defined for " + config.getName());
}
if (dsConfig.isOffline()) {
var dsSettings = dsConfig.settings();
if (dsSettings.isOffline()) {
if (config.getDatabasePlatformName() == null) {
throw new PersistenceException("You MUST specify a DatabasePlatformName on DatabaseConfig when offline");
}
}
attachAlert(dsConfig);
attachListener(dsConfig);
attachAlert(dsSettings);
attachListener(dsSettings);
if (readOnly) {
// setup to use AutoCommit such that we skip explicit commit
dsConfig.setAutoCommit(true);
dsConfig.setReadOnly(true);
dsConfig.setDefaults(config.getDataSourceConfig());
dsConfig.setIsolationLevel(config.getDataSourceConfig().getIsolationLevel());
var mainSettings = config.getDataSourceConfig().settings();
dsConfig.autoCommit(true);
dsConfig.readOnly(true);
dsConfig.setDefaults(mainSettings);
dsConfig.isolationLevel(mainSettings.getIsolationLevel());
} else if (isPostgresAllQuotedIdentifiers()) {
dsConfig.addProperty("quoteReturningIdentifiers", false);
}
@@ -108,32 +108,32 @@ final class InitDataSource {
return config.isAllQuotedIdentifiers() && Platform.POSTGRES == config.getDatabasePlatform().platform().base();
}
private DataSource create(DataSourceConfig dsConfig, boolean readOnly) {
private DataSource create(DataSourceBuilder dsConfig, boolean readOnly) {
String poolName = config.getName() + (readOnly ? "-ro" : "");
return DataSourceFactory.create(poolName, dsConfig);
return dsConfig.name(poolName).build();
}
/**
* Attach DataSourceAlert via service loader if present.
*/
private void attachAlert(DataSourceConfig dsConfig) {
private void attachAlert(DataSourceBuilder.Settings dsConfig) {
DataSourceAlertFactory alertFactory = config.getServiceObject(DataSourceAlertFactory.class);
if (alertFactory == null) {
alertFactory = ServiceUtil.service(DataSourceAlertFactory.class);
}
if (alertFactory != null) {
dsConfig.setAlert(alertFactory.createAlert());
dsConfig.alert(alertFactory.createAlert());
}
}
/**
* Create and attach a DataSourcePoolListener if it has been specified via properties and there is not one already attached.
*/
private void attachListener(DataSourceConfig dsConfig) {
private void attachListener(DataSourceBuilder.Settings dsConfig) {
if (dsConfig.getListener() == null) {
String poolListener = dsConfig.getPoolListener();
if (poolListener != null) {
dsConfig.setListener((DataSourcePoolListener) config.getClassLoadConfig().newInstance(poolListener));
dsConfig.listener((DataSourcePoolListener) config.getClassLoadConfig().newInstance(poolListener));
}
}
}
@@ -1,13 +1,11 @@
package io.ebeaninternal.server.core;
import com.fasterxml.jackson.core.JsonFactory;
import io.ebean.DatabaseBuilder;
import io.ebean.ExpressionFactory;
import io.ebean.annotation.Platform;
import io.ebean.cache.*;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.ExternalTransactionManager;
import io.ebean.config.ProfilingConfig;
import io.ebean.config.SlowQueryListener;
import io.ebean.config.*;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DbHistorySupport;
import io.ebean.event.changelog.ChangeLogListener;
@@ -71,7 +69,7 @@ public final class InternalConfiguration {
private final TableModState tableModState;
private final boolean online;
private final DatabaseConfig config;
private final DatabaseBuilder.Settings config;
private final BootupClasses bootupClasses;
private final DatabasePlatform databasePlatform;
private final DeployInherit deployInherit;
@@ -100,12 +98,12 @@ public final class InternalConfiguration {
private boolean localL2Caching;
InternalConfiguration(boolean online, ClusterManager clusterManager, SpiBackgroundExecutor backgroundExecutor,
DatabaseConfig config, BootupClasses bootupClasses) {
DatabaseBuilder.Settings config, BootupClasses bootupClasses) {
this.online = online;
this.config = config;
this.jacksonCorePresent = config.getClassLoadConfig().isJacksonCorePresent();
this.clockService = new ClockService(config.getClock());
this.clockService = new ClockService(config.settings().getClock());
this.tableModState = new TableModState();
this.logManager = initLogManager();
this.docStoreFactory = initDocStoreFactory(service(DocStoreFactory.class));
@@ -175,7 +173,7 @@ public final class InternalConfiguration {
/**
* Create and return the ExpressionFactory based on configuration and database platform.
*/
private ExpressionFactory initExpressionFactory(DatabaseConfig config) {
private ExpressionFactory initExpressionFactory(DatabaseBuilder.Settings config) {
boolean nativeIlike = config.isExpressionNativeIlike() && databasePlatform.supportsNativeIlike();
return new DefaultExpressionFactory(config.isExpressionEqualsWithNullAsNoop(), nativeIlike);
}
@@ -333,7 +331,7 @@ public final class InternalConfiguration {
return config.getDatabasePlatform();
}
public DatabaseConfig getConfig() {
public DatabaseBuilder.Settings getConfig() {
return config;
}
@@ -590,14 +588,16 @@ public final class InternalConfiguration {
*/
QueryPlanLogger queryPlanLogger(Platform platform) {
switch (platform.base()) {
case POSTGRES:
return new QueryPlanLoggerPostgres();
case SQLSERVER:
return new QueryPlanLoggerSqlServer();
case ORACLE:
return new QueryPlanLoggerOracle();
case POSTGRES:
return new QueryPlanLoggerExplain("explain (analyze, buffers) ");
case YUGABYTE:
return new QueryPlanLoggerExplain("explain (analyze, buffers, dist) ");
default:
return new QueryPlanLoggerExplain();
return new QueryPlanLoggerExplain("explain ");
}
}
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.core.bootup;
import io.avaje.classpath.scanner.ClassPathScanner;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.server.core.ClassPathScanners;
@@ -24,11 +24,11 @@ public class BootupClassPathSearch {
* Search the classPath for the classes we are interested in returning
* them as BootupClasses.
*/
public static BootupClasses search(DatabaseConfig config) {
public static BootupClasses search(DatabaseBuilder.Settings config) {
return new BootupClassPathSearch(config).getBootupClasses();
}
private BootupClassPathSearch(DatabaseConfig config) {
private BootupClassPathSearch(DatabaseBuilder.Settings config) {
// find packages defined in ebean.mf resources
Set<String> mfPackages = ManifestReader.create(config.getClassLoadConfig().getClassLoader())
.read("META-INF/ebean.mf")
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.core.bootup;
import io.ebean.annotation.DocStore;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.IdGenerator;
import io.ebean.config.ScalarTypeConverter;
import io.ebean.core.type.ScalarType;
@@ -91,7 +91,7 @@ public class BootupClasses implements Predicate<Class<?>> {
/**
* Run any ServerConfigStartup listeners.
*/
public void runServerConfigStartup(DatabaseConfig config) {
public void runServerConfigStartup(DatabaseBuilder config) {
for (Class<?> cls : serverConfigStartupCandidates) {
try {
ServerConfigStartup newInstance = (ServerConfigStartup) cls.getDeclaredConstructor().newInstance();
@@ -172,7 +172,7 @@ public class BootupClasses implements Predicate<Class<?>> {
add(startupInstances, serverConfigStartupInstances, serverConfigStartupCandidates);
}
public void addChangeLogInstances(DatabaseConfig config) {
public void addChangeLogInstances(DatabaseBuilder.Settings config) {
readAuditPrepare = config.getReadAuditPrepare();
readAuditLogger = config.getReadAuditLogger();
changeLogPrepare = config.getChangeLogPrepare();
@@ -4,7 +4,7 @@ import io.ebean.*;
import io.ebean.annotation.DocStoreMode;
import io.ebean.bean.*;
import io.ebean.cache.QueryCacheEntry;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.EncryptKey;
import io.ebean.config.dbplatform.IdType;
import io.ebean.config.dbplatform.PlatformIdGenerator;
@@ -237,7 +237,7 @@ public class BeanDescriptor<T> implements BeanType<T>, STreeType, SpiBeanType {
this.owner = owner;
this.multiValueSupported = owner.isMultiValueSupported();
this.entityType = deploy.getEntityType();
this.properties = deploy.getProperties();
this.properties = deploy.propertyNames();
this.name = InternString.intern(deploy.getName());
this.baseTableAlias = "t0";
this.fullName = InternString.intern(deploy.getFullName());
@@ -423,7 +423,7 @@ public class BeanDescriptor<T> implements BeanType<T>, STreeType, SpiBeanType {
/**
* Return the DatabaseConfig.
*/
public DatabaseConfig config() {
public DatabaseBuilder.Settings config() {
return owner.config();
}
@@ -1,6 +1,7 @@
package io.ebeaninternal.server.deploy;
import io.ebean.BackgroundExecutor;
import io.ebean.DatabaseBuilder;
import io.ebean.Model;
import io.ebean.RawSqlBuilder;
import io.ebean.annotation.ConstraintMode;
@@ -78,7 +79,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
private final NamingConvention namingConvention;
private final DeployCreateProperties createProperties;
private final BeanManagerFactory beanManagerFactory;
private final DatabaseConfig config;
private final DatabaseBuilder.Settings config;
private final ChangeLogListener changeLogListener;
private final ChangeLogRegister changeLogRegister;
private final ChangeLogPrepare changeLogPrepare;
@@ -195,19 +196,19 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
/**
* Return the AsOfViewSuffix based on the DbHistorySupport.
*/
private String asOfViewSuffix(DatabasePlatform databasePlatform, DatabaseConfig serverConfig) {
private String asOfViewSuffix(DatabasePlatform databasePlatform, DatabaseBuilder.Settings config) {
DbHistorySupport historySupport = databasePlatform.historySupport();
// with historySupport returns a simple view suffix or the sql2011 as of timestamp suffix
return (historySupport == null) ? serverConfig.getAsOfViewSuffix() : historySupport.getAsOfViewSuffix(serverConfig.getAsOfViewSuffix());
return (historySupport == null) ? config.getAsOfViewSuffix() : historySupport.getAsOfViewSuffix(config.getAsOfViewSuffix());
}
/**
* Return the versions between timestamp suffix based on the DbHistorySupport.
*/
private String versionsBetweenSuffix(DatabasePlatform databasePlatform, DatabaseConfig serverConfig) {
private String versionsBetweenSuffix(DatabasePlatform databasePlatform, DatabaseBuilder.Settings config) {
DbHistorySupport historySupport = databasePlatform.historySupport();
// with historySupport returns a simple view suffix or the sql2011 versions between timestamp suffix
return (historySupport == null) ? serverConfig.getAsOfViewSuffix() : historySupport.getVersionsBetweenSuffix(serverConfig.getAsOfViewSuffix());
return (historySupport == null) ? config.getAsOfViewSuffix() : historySupport.getVersionsBetweenSuffix(config.getAsOfViewSuffix());
}
@Override
@@ -216,7 +217,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
}
@Override
public DatabaseConfig config() {
public DatabaseBuilder.Settings config() {
return config;
}
@@ -443,11 +444,10 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
// build map of tables to view entities dependent on those tables
// for the purpose of invalidating appropriate query caches
String[] dependentTables = desc.dependentTables();
if (dependentTables != null && dependentTables.length > 0) {
if (dependentTables != null) {
for (String depTable : dependentTables) {
depTable = depTable.toLowerCase();
List<BeanDescriptor<?>> list = tableToViewDescMap.computeIfAbsent(depTable, k -> new ArrayList<>(1));
list.add(desc);
tableToViewDescMap.computeIfAbsent(depTable, k -> new ArrayList<>(1)).add(desc);
}
}
}
@@ -578,7 +578,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
}
}
private <T> String errNothingRegistered() {
private String errNothingRegistered() {
return "There are no registered entities. If using query beans, that generates EbeanEntityRegister.java into " +
"generated sources and is service loaded. If using module-info.java, then probably missing 'provides io.ebean.config.EntityClassRegister with EbeanEntityRegister' clause.";
}
@@ -1186,7 +1186,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
setConcurrencyMode(desc);
}
// generate the byte code
createByteCode(desc);
setAccessors(desc);
}
/**
@@ -1255,13 +1255,13 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
return databasePlatform.createSequenceIdGenerator(backgroundExecutor, dataSource, stepSize, seqName);
}
private void createByteCode(DeployBeanDescriptor<?> deploy) {
private void setAccessors(DeployBeanDescriptor<?> deploy) {
// check to see if the bean supports EntityBean interface
// generate a subclass if required
setEntityBeanClass(deploy);
confirmEnhanced(deploy);
// use Code generation or Standard reflection to support
// getter and setter methods
setBeanReflect(deploy);
setPropertyAccessors(deploy);
}
/**
@@ -1288,15 +1288,14 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
* and getting of properties. It is generally faster to use code generation
* rather than reflection to do this.
*/
private void setBeanReflect(DeployBeanDescriptor<?> desc) {
private void setPropertyAccessors(DeployBeanDescriptor<?> desc) {
// Set the BeanReflectGetter and BeanReflectSetter that typically
// use generated code. NB: Due to Bug 166 so now doing this for
// abstract classes as well.
BeanPropertiesReader reflectProps = new BeanPropertiesReader(desc.getBeanType());
desc.setProperties(reflectProps.getProperties());
BeanPropertiesReader reflectProps = new BeanPropertiesReader(desc.propertyNames());
for (DeployBeanProperty prop : desc.propertiesAll()) {
String propName = prop.getName();
Integer pos = reflectProps.getPropertyIndex(propName);
Integer pos = reflectProps.propertyIndex(propName);
if (pos == null) {
if (isPersistentField(prop)) {
throw new IllegalStateException(
@@ -1368,7 +1367,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
/**
* Test the bean type to see if it implements EntityBean interface already.
*/
private void setEntityBeanClass(DeployBeanDescriptor<?> desc) {
private void confirmEnhanced(DeployBeanDescriptor<?> desc) {
Class<?> beanClass = desc.getBeanType();
if (!hasEntityBeanInterface(beanClass)) {
String msg = "Bean " + beanClass + " is not enhanced? Check packages specified in ebean.mf. If you are running in IDEA or " +
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.deploy;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.EncryptKey;
import io.ebean.config.NamingConvention;
import io.ebean.core.type.ScalarType;
@@ -25,7 +25,7 @@ public interface BeanDescriptorMap {
/**
* Return the DatabaseConfig.
*/
DatabaseConfig config();
DatabaseBuilder.Settings config();
/**
* Return the Cache Manager.
@@ -2,7 +2,7 @@ package io.ebeaninternal.server.deploy;
import io.ebean.annotation.PostSoftDelete;
import io.ebean.annotation.PreSoftDelete;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.event.BeanPersistAdapter;
import io.ebean.event.BeanPersistRequest;
import io.ebean.event.BeanPostConstructListener;
@@ -34,7 +34,7 @@ final class BeanLifecycleAdapterFactory {
private final boolean postConstructPresent;
BeanLifecycleAdapterFactory(DatabaseConfig config) {
BeanLifecycleAdapterFactory(DatabaseBuilder.Settings config) {
this.postConstructPresent = config.getClassLoadConfig().isJavaxPostConstructPresent();
}
@@ -1,10 +1,8 @@
package io.ebeaninternal.server.deploy.generatedproperty;
import io.ebean.DatabaseBuilder;
import io.ebean.Transaction;
import io.ebean.config.ClassLoadConfig;
import io.ebean.config.CurrentUserProvider;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.IdGenerator;
import io.ebean.config.*;
import io.ebean.config.dbplatform.PlatformIdGenerator;
import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
@@ -29,7 +27,7 @@ public final class GeneratedPropertyFactory {
private final ClassLoadConfig classLoadConfig;
private final Map<String, PlatformIdGenerator> idGeneratorMap = new HashMap<>();
public GeneratedPropertyFactory(boolean offlineMode, DatabaseConfig config, List<IdGenerator> idGenerators) {
public GeneratedPropertyFactory(boolean offlineMode, DatabaseBuilder.Settings config, List<IdGenerator> idGenerators) {
this.classLoadConfig = config.getClassLoadConfig();
this.insertFactory = new InsertTimestampFactory(classLoadConfig);
this.updateFactory = new UpdateTimestampFactory(classLoadConfig);
@@ -4,7 +4,7 @@ import io.ebean.annotation.Cache;
import io.ebean.annotation.DocStore;
import io.ebean.annotation.DocStoreMode;
import io.ebean.annotation.Identity;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.TableName;
import io.ebean.config.dbplatform.IdType;
import io.ebean.config.dbplatform.PlatformIdGenerator;
@@ -24,6 +24,8 @@ import io.ebeaninternal.server.rawsql.SpiRawSql;
import jakarta.persistence.Entity;
import jakarta.persistence.MappedSuperclass;
import java.lang.reflect.Field;
import java.util.*;
/**
@@ -45,9 +47,7 @@ public class DeployBeanDescriptor<T> {
private static final PropOrder PROP_ORDER = new PropOrder();
private static final String I_SCALAOBJECT = "scala.ScalaObject";
private final DatabaseConfig config;
private final DatabaseBuilder.Settings config;
private final BeanDescriptorManager manager;
/**
* Map of BeanProperty Linked so as to preserve order.
@@ -133,16 +133,36 @@ public class DeployBeanDescriptor<T> {
/**
* Construct the BeanDescriptor.
*/
public DeployBeanDescriptor(BeanDescriptorManager manager, Class<T> beanType, DatabaseConfig config) {
public DeployBeanDescriptor(BeanDescriptorManager manager, Class<T> beanType, DatabaseBuilder.Settings config) {
this.manager = manager;
this.config = config;
this.beanType = beanType;
}
private String[] readPropertyNames() {
try {
Field field = beanType.getField("_ebean_props");
return (String[]) field.get(null);
} catch (Exception e) {
throw new IllegalStateException("Error getting _ebean_props field on type " + beanType, e);
}
}
public void setPropertyNames(String[] properties) {
this.properties = properties;
}
public String[] propertyNames() {
if (properties == null) {
properties = readPropertyNames();
}
return properties;
}
/**
* Set the IdClass to use.
*/
public void setIdClass(Class idClass) {
public void setIdClass(Class<?> idClass) {
this.idClass = idClass;
}
@@ -260,7 +280,6 @@ public class DeployBeanDescriptor<T> {
* Read the top level doc store deployment information.
*/
public void readDocStore(DocStore docStore) {
this.docStore = docStore;
docStoreMapped = true;
docStoreQueueId = docStore.queueId();
@@ -276,23 +295,10 @@ public class DeployBeanDescriptor<T> {
}
}
public boolean isScalaObject() {
Class<?>[] interfaces = beanType.getInterfaces();
for (Class<?> anInterface : interfaces) {
String iname = anInterface.getName();
if (I_SCALAOBJECT.equals(iname)) {
return true;
}
}
return false;
}
public DeployBeanTable createDeployBeanTable() {
DeployBeanTable beanTable = new DeployBeanTable(getBeanType());
beanTable.setBaseTable(baseTable);
beanTable.setIdProperty(idProperty());
return beanTable;
}
@@ -360,14 +366,6 @@ public class DeployBeanDescriptor<T> {
this.identityMode.setIdType(type);
}
public String[] getProperties() {
return properties;
}
public void setProperties(String[] props) {
this.properties = props;
}
/**
* Return the class type this BeanDescriptor describes.
*/
@@ -213,9 +213,9 @@ final class AnnotationAssocManys extends AnnotationAssoc {
int sortOrder = 0;
if (!prop.getManyType().isMap()) {
elementDescriptor.setProperties(new String[]{"value"});
elementDescriptor.setPropertyNames(new String[]{"value"});
} else {
elementDescriptor.setProperties(new String[]{"key", "value"});
elementDescriptor.setPropertyNames(new String[]{"key", "value"});
String dbKeyColumn = "mkey";
MapKeyColumn mapKeyColumn = get(prop, MapKeyColumn.class);
if (mapKeyColumn != null) {
@@ -1,13 +1,8 @@
package io.ebeaninternal.server.deploy.parse;
import io.ebean.DatabaseBuilder;
import io.ebean.annotation.*;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.EncryptDeploy;
import io.ebean.config.EncryptDeployManager;
import io.ebean.config.EncryptKeyManager;
import io.ebean.config.Encryptor;
import io.ebean.config.NamingConvention;
import io.ebean.config.TableName;
import io.ebean.config.*;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DbPlatformType;
import io.ebean.core.type.ScalarType;
@@ -49,7 +44,7 @@ public final class DeployUtil {
private final Encryptor bytesEncryptor;
private final boolean useValidationNotNull;
public DeployUtil(TypeManager typeMgr, DatabaseConfig config) {
public DeployUtil(TypeManager typeMgr, DatabaseBuilder.Settings config) {
this.typeManager = typeMgr;
this.namingConvention = config.getNamingConvention();
this.dbPlatform = config.getDatabasePlatform();
@@ -4,7 +4,7 @@ import io.ebean.annotation.Aggregation;
import io.ebean.annotation.Formula;
import io.ebean.annotation.Where;
import io.ebean.config.ClassLoadConfig;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedPropertyFactory;
import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
@@ -31,7 +31,7 @@ final class ReadAnnotationConfig {
private final ReadValidationAnnotations jakartaValidation;
private final Set<Class<?>> metaAnnotations = new HashSet<>();
ReadAnnotationConfig(GeneratedPropertyFactory generatedPropFactory, String asOfViewSuffix, String versionsBetweenSuffix, DatabaseConfig config) {
ReadAnnotationConfig(GeneratedPropertyFactory generatedPropFactory, String asOfViewSuffix, String versionsBetweenSuffix, DatabaseBuilder.Settings config) {
this.generatedPropFactory = generatedPropFactory;
this.asOfViewSuffix = asOfViewSuffix;
this.versionsBetweenSuffix = versionsBetweenSuffix;
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.deploy.parse;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.server.deploy.BeanDescriptorManager;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedPropertyFactory;
@@ -12,7 +12,7 @@ public final class ReadAnnotations {
private final ReadAnnotationConfig readConfig;
public ReadAnnotations(GeneratedPropertyFactory generatedPropFactory, String asOfViewSuffix, String versionsBetweenSuffix, DatabaseConfig config) {
public ReadAnnotations(GeneratedPropertyFactory generatedPropFactory, String asOfViewSuffix, String versionsBetweenSuffix, DatabaseBuilder.Settings config) {
this.readConfig = new ReadAnnotationConfig(generatedPropFactory, asOfViewSuffix, versionsBetweenSuffix, config);
}
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
// Generated from /home/rob/github/ebean-dir/ebean/src/test/resources/EQL.g4 by ANTLR 4.8
// Generated from /Users/robinbygrave/Documents/github/ebean/ebean/ebean-test/src/test/resources/EQL.g4 by ANTLR 4.13.1
package io.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.ParserRuleContext;
@@ -10,6 +10,7 @@ import org.antlr.v4.runtime.tree.TerminalNode;
* which can be extended to create a listener which only needs to handle a subset
* of the available methods.
*/
@SuppressWarnings("CheckReturnValue")
public class EQLBaseListener implements EQLListener {
/**
* {@inheritDoc}
@@ -1,4 +1,4 @@
// Generated from /home/rob/github/ebean-dir/ebean/src/test/resources/EQL.g4 by ANTLR 4.8
// Generated from /Users/robinbygrave/Documents/github/ebean/ebean/ebean-test/src/test/resources/EQL.g4 by ANTLR 4.13.1
package io.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@@ -10,6 +10,7 @@ import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
@SuppressWarnings("CheckReturnValue")
public class EQLBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements EQLVisitor<T> {
/**
* {@inheritDoc}
File diff suppressed because one or more lines are too long
@@ -1,36 +1,33 @@
// Generated from /home/rob/github/ebean-dir/ebean/src/test/resources/EQL.g4 by ANTLR 4.8
// Generated from /Users/robinbygrave/Documents/github/ebean/ebean/ebean-test/src/test/resources/EQL.g4 by ANTLR 4.13.1
package io.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.RuntimeMetaData;
import org.antlr.v4.runtime.Vocabulary;
import org.antlr.v4.runtime.VocabularyImpl;
import org.antlr.v4.runtime.atn.ATN;
import org.antlr.v4.runtime.atn.ATNDeserializer;
import org.antlr.v4.runtime.atn.LexerATNSimulator;
import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"})
public class EQLLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); }
static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
T__66=67, INPUT_VARIABLE=68, PATH_VARIABLE=69, QUOTED_PATH_VARIABLE=70,
PROP_FORMULA=71, BOOLEAN_LITERAL=72, NUMBER_LITERAL=73, DOUBLE=74, INT=75,
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
T__66=67, INPUT_VARIABLE=68, PATH_VARIABLE=69, QUOTED_PATH_VARIABLE=70,
PROP_FORMULA=71, BOOLEAN_LITERAL=72, NUMBER_LITERAL=73, DOUBLE=74, INT=75,
ZERO=76, STRING_LITERAL=77, WS=78;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
@@ -42,16 +39,16 @@ public class EQLLexer extends Lexer {
private static String[] makeRuleNames() {
return new String[] {
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
"T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
"T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48",
"T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56",
"T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64",
"T__65", "T__66", "INPUT_VARIABLE", "PATH_VARIABLE", "QUOTED_PATH_VARIABLE",
"PROP_FORMULA", "BOOLEAN_LITERAL", "NUMBER_LITERAL", "DOUBLE", "INT",
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
"T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
"T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48",
"T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56",
"T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64",
"T__65", "T__66", "INPUT_VARIABLE", "PATH_VARIABLE", "QUOTED_PATH_VARIABLE",
"PROP_FORMULA", "BOOLEAN_LITERAL", "NUMBER_LITERAL", "DOUBLE", "INT",
"ZERO", "STRING_LITERAL", "WS"
};
}
@@ -59,29 +56,29 @@ public class EQLLexer extends Lexer {
private static String[] makeLiteralNames() {
return new String[] {
null, "'('", "')'", "'select'", "'distinct'", "'where'", "'order'", "'by'",
"','", "'nulls'", "'first'", "'last'", "'asc'", "'desc'", "'limit'",
"'offset'", "'fetch'", "'+'", "'query'", "'lazy'", "'or'", "'and'", "'not'",
"'inOrEmpty'", "'in'", "'between'", "'to'", "'inrange'", "'inRange'",
"'is'", "'null'", "'isNull'", "'isNotNull'", "'notNull'", "'empty'",
"'isEmpty'", "'isNotEmpty'", "'notEmpty'", "'like'", "'ilike'", "'contains'",
"'icontains'", "'startsWith'", "'istartsWith'", "'endsWith'", "'iendsWith'",
"'='", "'eq'", "'>'", "'gt'", "'>='", "'ge'", "'gte'", "'<'", "'lt'",
"'<='", "'le'", "'lte'", "'<>'", "'!='", "'ne'", "'ieq'", "'ine'", "'eqOrNull'",
"'gtOrNull'", "'ltOrNull'", "'geOrNull'", "'leOrNull'", null, null, null,
null, "'('", "')'", "'select'", "'distinct'", "'where'", "'order'", "'by'",
"','", "'nulls'", "'first'", "'last'", "'asc'", "'desc'", "'limit'",
"'offset'", "'fetch'", "'+'", "'query'", "'lazy'", "'or'", "'and'", "'not'",
"'inOrEmpty'", "'in'", "'between'", "'to'", "'inrange'", "'inRange'",
"'is'", "'null'", "'isNull'", "'isNotNull'", "'notNull'", "'empty'",
"'isEmpty'", "'isNotEmpty'", "'notEmpty'", "'like'", "'ilike'", "'contains'",
"'icontains'", "'startsWith'", "'istartsWith'", "'endsWith'", "'iendsWith'",
"'='", "'eq'", "'>'", "'gt'", "'>='", "'ge'", "'gte'", "'<'", "'lt'",
"'<='", "'le'", "'lte'", "'<>'", "'!='", "'ne'", "'ieq'", "'ine'", "'eqOrNull'",
"'gtOrNull'", "'ltOrNull'", "'geOrNull'", "'leOrNull'", null, null, null,
null, null, null, null, null, "'0'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, "INPUT_VARIABLE", "PATH_VARIABLE",
"QUOTED_PATH_VARIABLE", "PROP_FORMULA", "BOOLEAN_LITERAL", "NUMBER_LITERAL",
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, "INPUT_VARIABLE", "PATH_VARIABLE",
"QUOTED_PATH_VARIABLE", "PROP_FORMULA", "BOOLEAN_LITERAL", "NUMBER_LITERAL",
"DOUBLE", "INT", "ZERO", "STRING_LITERAL", "WS"
};
}
@@ -144,225 +141,403 @@ public class EQLLexer extends Lexer {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2P\u029f\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3"+
"\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6"+
"\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3"+
"\n\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3"+
"\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3"+
"\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3"+
"\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3"+
"\26\3\26\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3"+
"\30\3\30\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3"+
"\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3"+
"\35\3\35\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3"+
" \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3"+
"\"\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3"+
"%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3("+
"\3(\3)\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3+\3+\3+"+
"\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3-\3-\3-"+
"\3-\3-\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/\3\60\3\60\3\60"+
"\3\61\3\61\3\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65"+
"\3\65\3\66\3\66\3\67\3\67\3\67\38\38\38\39\39\39\3:\3:\3:\3:\3;\3;\3;"+
"\3<\3<\3<\3=\3=\3=\3>\3>\3>\3>\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3@\3@"+
"\3A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C"+
"\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3D\3D\3E\3E\3E\7E\u0221\nE\fE\16E\u0224"+
"\13E\3E\3E\7E\u0228\nE\fE\16E\u022b\13E\5E\u022d\nE\3F\3F\7F\u0231\nF"+
"\fF\16F\u0234\13F\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3"+
"H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3"+
"H\3H\3H\3H\3H\3H\5H\u0264\nH\3I\3I\3I\3I\3I\3I\3I\3I\3I\5I\u026f\nI\3"+
"J\5J\u0272\nJ\3J\3J\5J\u0276\nJ\3J\3J\5J\u027a\nJ\3K\6K\u027d\nK\rK\16"+
"K\u027e\3K\3K\7K\u0283\nK\fK\16K\u0286\13K\3L\3L\7L\u028a\nL\fL\16L\u028d"+
"\13L\3M\3M\3N\3N\3N\3N\7N\u0295\nN\fN\16N\u0298\13N\3N\3N\3O\3O\3O\3O"+
"\2\2P\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35"+
"\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36"+
";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67"+
"m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008d"+
"H\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\3\2\t\5\2C\\"+
"aac|\6\2\62;C\\aac|\7\2\60\60\62;C\\aac|\3\2\62;\3\2\63;\3\2))\5\2\13"+
"\f\17\17\"\"\2\u02b0\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2"+
"\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3"+
"\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2"+
"\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2"+
"\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2"+
"\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2"+
"\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q"+
"\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2"+
"\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2"+
"\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w"+
"\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2"+
"\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b"+
"\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2"+
"\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d"+
"\3\2\2\2\3\u009f\3\2\2\2\5\u00a1\3\2\2\2\7\u00a3\3\2\2\2\t\u00aa\3\2\2"+
"\2\13\u00b3\3\2\2\2\r\u00b9\3\2\2\2\17\u00bf\3\2\2\2\21\u00c2\3\2\2\2"+
"\23\u00c4\3\2\2\2\25\u00ca\3\2\2\2\27\u00d0\3\2\2\2\31\u00d5\3\2\2\2\33"+
"\u00d9\3\2\2\2\35\u00de\3\2\2\2\37\u00e4\3\2\2\2!\u00eb\3\2\2\2#\u00f1"+
"\3\2\2\2%\u00f3\3\2\2\2\'\u00f9\3\2\2\2)\u00fe\3\2\2\2+\u0101\3\2\2\2"+
"-\u0105\3\2\2\2/\u0109\3\2\2\2\61\u0113\3\2\2\2\63\u0116\3\2\2\2\65\u011e"+
"\3\2\2\2\67\u0121\3\2\2\29\u0129\3\2\2\2;\u0131\3\2\2\2=\u0134\3\2\2\2"+
"?\u0139\3\2\2\2A\u0140\3\2\2\2C\u014a\3\2\2\2E\u0152\3\2\2\2G\u0158\3"+
"\2\2\2I\u0160\3\2\2\2K\u016b\3\2\2\2M\u0174\3\2\2\2O\u0179\3\2\2\2Q\u017f"+
"\3\2\2\2S\u0188\3\2\2\2U\u0192\3\2\2\2W\u019d\3\2\2\2Y\u01a9\3\2\2\2["+
"\u01b2\3\2\2\2]\u01bc\3\2\2\2_\u01be\3\2\2\2a\u01c1\3\2\2\2c\u01c3\3\2"+
"\2\2e\u01c6\3\2\2\2g\u01c9\3\2\2\2i\u01cc\3\2\2\2k\u01d0\3\2\2\2m\u01d2"+
"\3\2\2\2o\u01d5\3\2\2\2q\u01d8\3\2\2\2s\u01db\3\2\2\2u\u01df\3\2\2\2w"+
"\u01e2\3\2\2\2y\u01e5\3\2\2\2{\u01e8\3\2\2\2}\u01ec\3\2\2\2\177\u01f0"+
"\3\2\2\2\u0081\u01f9\3\2\2\2\u0083\u0202\3\2\2\2\u0085\u020b\3\2\2\2\u0087"+
"\u0214\3\2\2\2\u0089\u022c\3\2\2\2\u008b\u022e\3\2\2\2\u008d\u0235\3\2"+
"\2\2\u008f\u0263\3\2\2\2\u0091\u026e\3\2\2\2\u0093\u0279\3\2\2\2\u0095"+
"\u027c\3\2\2\2\u0097\u0287\3\2\2\2\u0099\u028e\3\2\2\2\u009b\u0290\3\2"+
"\2\2\u009d\u029b\3\2\2\2\u009f\u00a0\7*\2\2\u00a0\4\3\2\2\2\u00a1\u00a2"+
"\7+\2\2\u00a2\6\3\2\2\2\u00a3\u00a4\7u\2\2\u00a4\u00a5\7g\2\2\u00a5\u00a6"+
"\7n\2\2\u00a6\u00a7\7g\2\2\u00a7\u00a8\7e\2\2\u00a8\u00a9\7v\2\2\u00a9"+
"\b\3\2\2\2\u00aa\u00ab\7f\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7u\2\2\u00ad"+
"\u00ae\7v\2\2\u00ae\u00af\7k\2\2\u00af\u00b0\7p\2\2\u00b0\u00b1\7e\2\2"+
"\u00b1\u00b2\7v\2\2\u00b2\n\3\2\2\2\u00b3\u00b4\7y\2\2\u00b4\u00b5\7j"+
"\2\2\u00b5\u00b6\7g\2\2\u00b6\u00b7\7t\2\2\u00b7\u00b8\7g\2\2\u00b8\f"+
"\3\2\2\2\u00b9\u00ba\7q\2\2\u00ba\u00bb\7t\2\2\u00bb\u00bc\7f\2\2\u00bc"+
"\u00bd\7g\2\2\u00bd\u00be\7t\2\2\u00be\16\3\2\2\2\u00bf\u00c0\7d\2\2\u00c0"+
"\u00c1\7{\2\2\u00c1\20\3\2\2\2\u00c2\u00c3\7.\2\2\u00c3\22\3\2\2\2\u00c4"+
"\u00c5\7p\2\2\u00c5\u00c6\7w\2\2\u00c6\u00c7\7n\2\2\u00c7\u00c8\7n\2\2"+
"\u00c8\u00c9\7u\2\2\u00c9\24\3\2\2\2\u00ca\u00cb\7h\2\2\u00cb\u00cc\7"+
"k\2\2\u00cc\u00cd\7t\2\2\u00cd\u00ce\7u\2\2\u00ce\u00cf\7v\2\2\u00cf\26"+
"\3\2\2\2\u00d0\u00d1\7n\2\2\u00d1\u00d2\7c\2\2\u00d2\u00d3\7u\2\2\u00d3"+
"\u00d4\7v\2\2\u00d4\30\3\2\2\2\u00d5\u00d6\7c\2\2\u00d6\u00d7\7u\2\2\u00d7"+
"\u00d8\7e\2\2\u00d8\32\3\2\2\2\u00d9\u00da\7f\2\2\u00da\u00db\7g\2\2\u00db"+
"\u00dc\7u\2\2\u00dc\u00dd\7e\2\2\u00dd\34\3\2\2\2\u00de\u00df\7n\2\2\u00df"+
"\u00e0\7k\2\2\u00e0\u00e1\7o\2\2\u00e1\u00e2\7k\2\2\u00e2\u00e3\7v\2\2"+
"\u00e3\36\3\2\2\2\u00e4\u00e5\7q\2\2\u00e5\u00e6\7h\2\2\u00e6\u00e7\7"+
"h\2\2\u00e7\u00e8\7u\2\2\u00e8\u00e9\7g\2\2\u00e9\u00ea\7v\2\2\u00ea "+
"\3\2\2\2\u00eb\u00ec\7h\2\2\u00ec\u00ed\7g\2\2\u00ed\u00ee\7v\2\2\u00ee"+
"\u00ef\7e\2\2\u00ef\u00f0\7j\2\2\u00f0\"\3\2\2\2\u00f1\u00f2\7-\2\2\u00f2"+
"$\3\2\2\2\u00f3\u00f4\7s\2\2\u00f4\u00f5\7w\2\2\u00f5\u00f6\7g\2\2\u00f6"+
"\u00f7\7t\2\2\u00f7\u00f8\7{\2\2\u00f8&\3\2\2\2\u00f9\u00fa\7n\2\2\u00fa"+
"\u00fb\7c\2\2\u00fb\u00fc\7|\2\2\u00fc\u00fd\7{\2\2\u00fd(\3\2\2\2\u00fe"+
"\u00ff\7q\2\2\u00ff\u0100\7t\2\2\u0100*\3\2\2\2\u0101\u0102\7c\2\2\u0102"+
"\u0103\7p\2\2\u0103\u0104\7f\2\2\u0104,\3\2\2\2\u0105\u0106\7p\2\2\u0106"+
"\u0107\7q\2\2\u0107\u0108\7v\2\2\u0108.\3\2\2\2\u0109\u010a\7k\2\2\u010a"+
"\u010b\7p\2\2\u010b\u010c\7Q\2\2\u010c\u010d\7t\2\2\u010d\u010e\7G\2\2"+
"\u010e\u010f\7o\2\2\u010f\u0110\7r\2\2\u0110\u0111\7v\2\2\u0111\u0112"+
"\7{\2\2\u0112\60\3\2\2\2\u0113\u0114\7k\2\2\u0114\u0115\7p\2\2\u0115\62"+
"\3\2\2\2\u0116\u0117\7d\2\2\u0117\u0118\7g\2\2\u0118\u0119\7v\2\2\u0119"+
"\u011a\7y\2\2\u011a\u011b\7g\2\2\u011b\u011c\7g\2\2\u011c\u011d\7p\2\2"+
"\u011d\64\3\2\2\2\u011e\u011f\7v\2\2\u011f\u0120\7q\2\2\u0120\66\3\2\2"+
"\2\u0121\u0122\7k\2\2\u0122\u0123\7p\2\2\u0123\u0124\7t\2\2\u0124\u0125"+
"\7c\2\2\u0125\u0126\7p\2\2\u0126\u0127\7i\2\2\u0127\u0128\7g\2\2\u0128"+
"8\3\2\2\2\u0129\u012a\7k\2\2\u012a\u012b\7p\2\2\u012b\u012c\7T\2\2\u012c"+
"\u012d\7c\2\2\u012d\u012e\7p\2\2\u012e\u012f\7i\2\2\u012f\u0130\7g\2\2"+
"\u0130:\3\2\2\2\u0131\u0132\7k\2\2\u0132\u0133\7u\2\2\u0133<\3\2\2\2\u0134"+
"\u0135\7p\2\2\u0135\u0136\7w\2\2\u0136\u0137\7n\2\2\u0137\u0138\7n\2\2"+
"\u0138>\3\2\2\2\u0139\u013a\7k\2\2\u013a\u013b\7u\2\2\u013b\u013c\7P\2"+
"\2\u013c\u013d\7w\2\2\u013d\u013e\7n\2\2\u013e\u013f\7n\2\2\u013f@\3\2"+
"\2\2\u0140\u0141\7k\2\2\u0141\u0142\7u\2\2\u0142\u0143\7P\2\2\u0143\u0144"+
"\7q\2\2\u0144\u0145\7v\2\2\u0145\u0146\7P\2\2\u0146\u0147\7w\2\2\u0147"+
"\u0148\7n\2\2\u0148\u0149\7n\2\2\u0149B\3\2\2\2\u014a\u014b\7p\2\2\u014b"+
"\u014c\7q\2\2\u014c\u014d\7v\2\2\u014d\u014e\7P\2\2\u014e\u014f\7w\2\2"+
"\u014f\u0150\7n\2\2\u0150\u0151\7n\2\2\u0151D\3\2\2\2\u0152\u0153\7g\2"+
"\2\u0153\u0154\7o\2\2\u0154\u0155\7r\2\2\u0155\u0156\7v\2\2\u0156\u0157"+
"\7{\2\2\u0157F\3\2\2\2\u0158\u0159\7k\2\2\u0159\u015a\7u\2\2\u015a\u015b"+
"\7G\2\2\u015b\u015c\7o\2\2\u015c\u015d\7r\2\2\u015d\u015e\7v\2\2\u015e"+
"\u015f\7{\2\2\u015fH\3\2\2\2\u0160\u0161\7k\2\2\u0161\u0162\7u\2\2\u0162"+
"\u0163\7P\2\2\u0163\u0164\7q\2\2\u0164\u0165\7v\2\2\u0165\u0166\7G\2\2"+
"\u0166\u0167\7o\2\2\u0167\u0168\7r\2\2\u0168\u0169\7v\2\2\u0169\u016a"+
"\7{\2\2\u016aJ\3\2\2\2\u016b\u016c\7p\2\2\u016c\u016d\7q\2\2\u016d\u016e"+
"\7v\2\2\u016e\u016f\7G\2\2\u016f\u0170\7o\2\2\u0170\u0171\7r\2\2\u0171"+
"\u0172\7v\2\2\u0172\u0173\7{\2\2\u0173L\3\2\2\2\u0174\u0175\7n\2\2\u0175"+
"\u0176\7k\2\2\u0176\u0177\7m\2\2\u0177\u0178\7g\2\2\u0178N\3\2\2\2\u0179"+
"\u017a\7k\2\2\u017a\u017b\7n\2\2\u017b\u017c\7k\2\2\u017c\u017d\7m\2\2"+
"\u017d\u017e\7g\2\2\u017eP\3\2\2\2\u017f\u0180\7e\2\2\u0180\u0181\7q\2"+
"\2\u0181\u0182\7p\2\2\u0182\u0183\7v\2\2\u0183\u0184\7c\2\2\u0184\u0185"+
"\7k\2\2\u0185\u0186\7p\2\2\u0186\u0187\7u\2\2\u0187R\3\2\2\2\u0188\u0189"+
"\7k\2\2\u0189\u018a\7e\2\2\u018a\u018b\7q\2\2\u018b\u018c\7p\2\2\u018c"+
"\u018d\7v\2\2\u018d\u018e\7c\2\2\u018e\u018f\7k\2\2\u018f\u0190\7p\2\2"+
"\u0190\u0191\7u\2\2\u0191T\3\2\2\2\u0192\u0193\7u\2\2\u0193\u0194\7v\2"+
"\2\u0194\u0195\7c\2\2\u0195\u0196\7t\2\2\u0196\u0197\7v\2\2\u0197\u0198"+
"\7u\2\2\u0198\u0199\7Y\2\2\u0199\u019a\7k\2\2\u019a\u019b\7v\2\2\u019b"+
"\u019c\7j\2\2\u019cV\3\2\2\2\u019d\u019e\7k\2\2\u019e\u019f\7u\2\2\u019f"+
"\u01a0\7v\2\2\u01a0\u01a1\7c\2\2\u01a1\u01a2\7t\2\2\u01a2\u01a3\7v\2\2"+
"\u01a3\u01a4\7u\2\2\u01a4\u01a5\7Y\2\2\u01a5\u01a6\7k\2\2\u01a6\u01a7"+
"\7v\2\2\u01a7\u01a8\7j\2\2\u01a8X\3\2\2\2\u01a9\u01aa\7g\2\2\u01aa\u01ab"+
"\7p\2\2\u01ab\u01ac\7f\2\2\u01ac\u01ad\7u\2\2\u01ad\u01ae\7Y\2\2\u01ae"+
"\u01af\7k\2\2\u01af\u01b0\7v\2\2\u01b0\u01b1\7j\2\2\u01b1Z\3\2\2\2\u01b2"+
"\u01b3\7k\2\2\u01b3\u01b4\7g\2\2\u01b4\u01b5\7p\2\2\u01b5\u01b6\7f\2\2"+
"\u01b6\u01b7\7u\2\2\u01b7\u01b8\7Y\2\2\u01b8\u01b9\7k\2\2\u01b9\u01ba"+
"\7v\2\2\u01ba\u01bb\7j\2\2\u01bb\\\3\2\2\2\u01bc\u01bd\7?\2\2\u01bd^\3"+
"\2\2\2\u01be\u01bf\7g\2\2\u01bf\u01c0\7s\2\2\u01c0`\3\2\2\2\u01c1\u01c2"+
"\7@\2\2\u01c2b\3\2\2\2\u01c3\u01c4\7i\2\2\u01c4\u01c5\7v\2\2\u01c5d\3"+
"\2\2\2\u01c6\u01c7\7@\2\2\u01c7\u01c8\7?\2\2\u01c8f\3\2\2\2\u01c9\u01ca"+
"\7i\2\2\u01ca\u01cb\7g\2\2\u01cbh\3\2\2\2\u01cc\u01cd\7i\2\2\u01cd\u01ce"+
"\7v\2\2\u01ce\u01cf\7g\2\2\u01cfj\3\2\2\2\u01d0\u01d1\7>\2\2\u01d1l\3"+
"\2\2\2\u01d2\u01d3\7n\2\2\u01d3\u01d4\7v\2\2\u01d4n\3\2\2\2\u01d5\u01d6"+
"\7>\2\2\u01d6\u01d7\7?\2\2\u01d7p\3\2\2\2\u01d8\u01d9\7n\2\2\u01d9\u01da"+
"\7g\2\2\u01dar\3\2\2\2\u01db\u01dc\7n\2\2\u01dc\u01dd\7v\2\2\u01dd\u01de"+
"\7g\2\2\u01det\3\2\2\2\u01df\u01e0\7>\2\2\u01e0\u01e1\7@\2\2\u01e1v\3"+
"\2\2\2\u01e2\u01e3\7#\2\2\u01e3\u01e4\7?\2\2\u01e4x\3\2\2\2\u01e5\u01e6"+
"\7p\2\2\u01e6\u01e7\7g\2\2\u01e7z\3\2\2\2\u01e8\u01e9\7k\2\2\u01e9\u01ea"+
"\7g\2\2\u01ea\u01eb\7s\2\2\u01eb|\3\2\2\2\u01ec\u01ed\7k\2\2\u01ed\u01ee"+
"\7p\2\2\u01ee\u01ef\7g\2\2\u01ef~\3\2\2\2\u01f0\u01f1\7g\2\2\u01f1\u01f2"+
"\7s\2\2\u01f2\u01f3\7Q\2\2\u01f3\u01f4\7t\2\2\u01f4\u01f5\7P\2\2\u01f5"+
"\u01f6\7w\2\2\u01f6\u01f7\7n\2\2\u01f7\u01f8\7n\2\2\u01f8\u0080\3\2\2"+
"\2\u01f9\u01fa\7i\2\2\u01fa\u01fb\7v\2\2\u01fb\u01fc\7Q\2\2\u01fc\u01fd"+
"\7t\2\2\u01fd\u01fe\7P\2\2\u01fe\u01ff\7w\2\2\u01ff\u0200\7n\2\2\u0200"+
"\u0201\7n\2\2\u0201\u0082\3\2\2\2\u0202\u0203\7n\2\2\u0203\u0204\7v\2"+
"\2\u0204\u0205\7Q\2\2\u0205\u0206\7t\2\2\u0206\u0207\7P\2\2\u0207\u0208"+
"\7w\2\2\u0208\u0209\7n\2\2\u0209\u020a\7n\2\2\u020a\u0084\3\2\2\2\u020b"+
"\u020c\7i\2\2\u020c\u020d\7g\2\2\u020d\u020e\7Q\2\2\u020e\u020f\7t\2\2"+
"\u020f\u0210\7P\2\2\u0210\u0211\7w\2\2\u0211\u0212\7n\2\2\u0212\u0213"+
"\7n\2\2\u0213\u0086\3\2\2\2\u0214\u0215\7n\2\2\u0215\u0216\7g\2\2\u0216"+
"\u0217\7Q\2\2\u0217\u0218\7t\2\2\u0218\u0219\7P\2\2\u0219\u021a\7w\2\2"+
"\u021a\u021b\7n\2\2\u021b\u021c\7n\2\2\u021c\u0088\3\2\2\2\u021d\u021e"+
"\7<\2\2\u021e\u0222\t\2\2\2\u021f\u0221\t\3\2\2\u0220\u021f\3\2\2\2\u0221"+
"\u0224\3\2\2\2\u0222\u0220\3\2\2\2\u0222\u0223\3\2\2\2\u0223\u022d\3\2"+
"\2\2\u0224\u0222\3\2\2\2\u0225\u0229\7A\2\2\u0226\u0228\4\62;\2\u0227"+
"\u0226\3\2\2\2\u0228\u022b\3\2\2\2\u0229\u0227\3\2\2\2\u0229\u022a\3\2"+
"\2\2\u022a\u022d\3\2\2\2\u022b\u0229\3\2\2\2\u022c\u021d\3\2\2\2\u022c"+
"\u0225\3\2\2\2\u022d\u008a\3\2\2\2\u022e\u0232\t\2\2\2\u022f\u0231\t\4"+
"\2\2\u0230\u022f\3\2\2\2\u0231\u0234\3\2\2\2\u0232\u0230\3\2\2\2\u0232"+
"\u0233\3\2\2\2\u0233\u008c\3\2\2\2\u0234\u0232\3\2\2\2\u0235\u0236\7b"+
"\2\2\u0236\u0237\5\u008bF\2\u0237\u0238\7b\2\2\u0238\u008e\3\2\2\2\u0239"+
"\u023a\7u\2\2\u023a\u023b\7w\2\2\u023b\u023c\7o\2\2\u023c\u023d\7*\2\2"+
"\u023d\u023e\3\2\2\2\u023e\u023f\5\u008bF\2\u023f\u0240\7+\2\2\u0240\u0264"+
"\3\2\2\2\u0241\u0242\7o\2\2\u0242\u0243\7c\2\2\u0243\u0244\7z\2\2\u0244"+
"\u0245\7*\2\2\u0245\u0246\3\2\2\2\u0246\u0247\5\u008bF\2\u0247\u0248\7"+
"+\2\2\u0248\u0264\3\2\2\2\u0249\u024a\7o\2\2\u024a\u024b\7k\2\2\u024b"+
"\u024c\7p\2\2\u024c\u024d\7*\2\2\u024d\u024e\3\2\2\2\u024e\u024f\5\u008b"+
"F\2\u024f\u0250\7+\2\2\u0250\u0264\3\2\2\2\u0251\u0252\7c\2\2\u0252\u0253"+
"\7x\2\2\u0253\u0254\7i\2\2\u0254\u0255\7*\2\2\u0255\u0256\3\2\2\2\u0256"+
"\u0257\5\u008bF\2\u0257\u0258\7+\2\2\u0258\u0264\3\2\2\2\u0259\u025a\7"+
"e\2\2\u025a\u025b\7q\2\2\u025b\u025c\7w\2\2\u025c\u025d\7p\2\2\u025d\u025e"+
"\7v\2\2\u025e\u025f\7*\2\2\u025f\u0260\3\2\2\2\u0260\u0261\5\u008bF\2"+
"\u0261\u0262\7+\2\2\u0262\u0264\3\2\2\2\u0263\u0239\3\2\2\2\u0263\u0241"+
"\3\2\2\2\u0263\u0249\3\2\2\2\u0263\u0251\3\2\2\2\u0263\u0259\3\2\2\2\u0264"+
"\u0090\3\2\2\2\u0265\u0266\7v\2\2\u0266\u0267\7t\2\2\u0267\u0268\7w\2"+
"\2\u0268\u026f\7g\2\2\u0269\u026a\7h\2\2\u026a\u026b\7c\2\2\u026b\u026c"+
"\7n\2\2\u026c\u026d\7u\2\2\u026d\u026f\7g\2\2\u026e\u0265\3\2\2\2\u026e"+
"\u0269\3\2\2\2\u026f\u0092\3\2\2\2\u0270\u0272\7/\2\2\u0271\u0270\3\2"+
"\2\2\u0271\u0272\3\2\2\2\u0272\u0273\3\2\2\2\u0273\u027a\5\u0095K\2\u0274"+
"\u0276\7/\2\2\u0275\u0274\3\2\2\2\u0275\u0276\3\2\2\2\u0276\u0277\3\2"+
"\2\2\u0277\u027a\5\u0097L\2\u0278\u027a\5\u0099M\2\u0279\u0271\3\2\2\2"+
"\u0279\u0275\3\2\2\2\u0279\u0278\3\2\2\2\u027a\u0094\3\2\2\2\u027b\u027d"+
"\t\5\2\2\u027c\u027b\3\2\2\2\u027d\u027e\3\2\2\2\u027e\u027c\3\2\2\2\u027e"+
"\u027f\3\2\2\2\u027f\u0280\3\2\2\2\u0280\u0284\7\60\2\2\u0281\u0283\t"+
"\5\2\2\u0282\u0281\3\2\2\2\u0283\u0286\3\2\2\2\u0284\u0282\3\2\2\2\u0284"+
"\u0285\3\2\2\2\u0285\u0096\3\2\2\2\u0286\u0284\3\2\2\2\u0287\u028b\t\6"+
"\2\2\u0288\u028a\t\5\2\2\u0289\u0288\3\2\2\2\u028a\u028d\3\2\2\2\u028b"+
"\u0289\3\2\2\2\u028b\u028c\3\2\2\2\u028c\u0098\3\2\2\2\u028d\u028b\3\2"+
"\2\2\u028e\u028f\7\62\2\2\u028f\u009a\3\2\2\2\u0290\u0296\7)\2\2\u0291"+
"\u0295\n\7\2\2\u0292\u0293\7)\2\2\u0293\u0295\7)\2\2\u0294\u0291\3\2\2"+
"\2\u0294\u0292\3\2\2\2\u0295\u0298\3\2\2\2\u0296\u0294\3\2\2\2\u0296\u0297"+
"\3\2\2\2\u0297\u0299\3\2\2\2\u0298\u0296\3\2\2\2\u0299\u029a\7)\2\2\u029a"+
"\u009c\3\2\2\2\u029b\u029c\t\b\2\2\u029c\u029d\3\2\2\2\u029d\u029e\bO"+
"\2\2\u029e\u009e\3\2\2\2\21\2\u0222\u0229\u022c\u0232\u0263\u026e\u0271"+
"\u0275\u0279\u027e\u0284\u028b\u0294\u0296\3\b\2\2";
"\u0004\u0000N\u029d\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
"\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
"\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
"\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+
"\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+
"\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+
"\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+
"\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
"\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+
"\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+
"!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+
"&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
"0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+
"5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+
":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+
"?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007"+
"D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007"+
"I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0001\u0000"+
"\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+
"\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
"\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+
"\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+
"\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+
"\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001"+
"\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+
"\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001"+
"\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e"+
"\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+
"\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+
"\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
"\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
"\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+
"\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015"+
"\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+
"\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017"+
"\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+
"\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019"+
"\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+
"\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+
"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c"+
"\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+
"\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+
"\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+
"\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001"+
" \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001"+
"!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
"\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+
"#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+
"$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001"+
"&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+
"\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+
"(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+
")\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+
"*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001"+
"+\u0001+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+
",\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+
"/\u0001/\u00010\u00010\u00010\u00011\u00011\u00011\u00012\u00012\u0001"+
"2\u00013\u00013\u00013\u00013\u00014\u00014\u00015\u00015\u00015\u0001"+
"6\u00016\u00016\u00017\u00017\u00017\u00018\u00018\u00018\u00018\u0001"+
"9\u00019\u00019\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001<\u0001"+
"<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001"+
">\u0001>\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001"+
"?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001"+
"@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001"+
"A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+
"B\u0001B\u0001C\u0001C\u0001C\u0005C\u021f\bC\nC\fC\u0222\tC\u0001C\u0001"+
"C\u0005C\u0226\bC\nC\fC\u0229\tC\u0003C\u022b\bC\u0001D\u0001D\u0005D"+
"\u022f\bD\nD\fD\u0232\tD\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001"+
"F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001"+
"F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001"+
"F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001"+
"F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0003"+
"F\u0262\bF\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+
"G\u0003G\u026d\bG\u0001H\u0003H\u0270\bH\u0001H\u0001H\u0003H\u0274\b"+
"H\u0001H\u0001H\u0003H\u0278\bH\u0001I\u0004I\u027b\bI\u000bI\fI\u027c"+
"\u0001I\u0001I\u0005I\u0281\bI\nI\fI\u0284\tI\u0001J\u0001J\u0005J\u0288"+
"\bJ\nJ\fJ\u028b\tJ\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0005L\u0293"+
"\bL\nL\fL\u0296\tL\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0000\u0000"+
"N\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+
"\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+
"\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+
"/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+
"K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w<y={>}?\u007f@\u0081A\u0083"+
"B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+
"L\u0099M\u009bN\u0001\u0000\u0007\u0003\u0000AZ__az\u0004\u000009AZ__"+
"az\u0005\u0000..09AZ__az\u0001\u000009\u0001\u000019\u0001\u0000\'\'\u0003"+
"\u0000\t\n\r\r \u02ae\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003"+
"\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007"+
"\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001"+
"\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000"+
"\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000"+
"\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000"+
"\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000"+
"\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000"+
"\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000"+
"\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000"+
")\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001"+
"\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000"+
"\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u0000"+
"7\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001"+
"\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000"+
"\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000"+
"E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001"+
"\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000"+
"\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000"+
"S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001"+
"\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000"+
"\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000"+
"a\u0001\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001"+
"\u0000\u0000\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000"+
"\u0000\u0000k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000"+
"o\u0001\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001"+
"\u0000\u0000\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000"+
"\u0000\u0000y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000"+
"}\u0001\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081"+
"\u0001\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085"+
"\u0001\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089"+
"\u0001\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d"+
"\u0001\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091"+
"\u0001\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095"+
"\u0001\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099"+
"\u0001\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0001\u009d"+
"\u0001\u0000\u0000\u0000\u0003\u009f\u0001\u0000\u0000\u0000\u0005\u00a1"+
"\u0001\u0000\u0000\u0000\u0007\u00a8\u0001\u0000\u0000\u0000\t\u00b1\u0001"+
"\u0000\u0000\u0000\u000b\u00b7\u0001\u0000\u0000\u0000\r\u00bd\u0001\u0000"+
"\u0000\u0000\u000f\u00c0\u0001\u0000\u0000\u0000\u0011\u00c2\u0001\u0000"+
"\u0000\u0000\u0013\u00c8\u0001\u0000\u0000\u0000\u0015\u00ce\u0001\u0000"+
"\u0000\u0000\u0017\u00d3\u0001\u0000\u0000\u0000\u0019\u00d7\u0001\u0000"+
"\u0000\u0000\u001b\u00dc\u0001\u0000\u0000\u0000\u001d\u00e2\u0001\u0000"+
"\u0000\u0000\u001f\u00e9\u0001\u0000\u0000\u0000!\u00ef\u0001\u0000\u0000"+
"\u0000#\u00f1\u0001\u0000\u0000\u0000%\u00f7\u0001\u0000\u0000\u0000\'"+
"\u00fc\u0001\u0000\u0000\u0000)\u00ff\u0001\u0000\u0000\u0000+\u0103\u0001"+
"\u0000\u0000\u0000-\u0107\u0001\u0000\u0000\u0000/\u0111\u0001\u0000\u0000"+
"\u00001\u0114\u0001\u0000\u0000\u00003\u011c\u0001\u0000\u0000\u00005"+
"\u011f\u0001\u0000\u0000\u00007\u0127\u0001\u0000\u0000\u00009\u012f\u0001"+
"\u0000\u0000\u0000;\u0132\u0001\u0000\u0000\u0000=\u0137\u0001\u0000\u0000"+
"\u0000?\u013e\u0001\u0000\u0000\u0000A\u0148\u0001\u0000\u0000\u0000C"+
"\u0150\u0001\u0000\u0000\u0000E\u0156\u0001\u0000\u0000\u0000G\u015e\u0001"+
"\u0000\u0000\u0000I\u0169\u0001\u0000\u0000\u0000K\u0172\u0001\u0000\u0000"+
"\u0000M\u0177\u0001\u0000\u0000\u0000O\u017d\u0001\u0000\u0000\u0000Q"+
"\u0186\u0001\u0000\u0000\u0000S\u0190\u0001\u0000\u0000\u0000U\u019b\u0001"+
"\u0000\u0000\u0000W\u01a7\u0001\u0000\u0000\u0000Y\u01b0\u0001\u0000\u0000"+
"\u0000[\u01ba\u0001\u0000\u0000\u0000]\u01bc\u0001\u0000\u0000\u0000_"+
"\u01bf\u0001\u0000\u0000\u0000a\u01c1\u0001\u0000\u0000\u0000c\u01c4\u0001"+
"\u0000\u0000\u0000e\u01c7\u0001\u0000\u0000\u0000g\u01ca\u0001\u0000\u0000"+
"\u0000i\u01ce\u0001\u0000\u0000\u0000k\u01d0\u0001\u0000\u0000\u0000m"+
"\u01d3\u0001\u0000\u0000\u0000o\u01d6\u0001\u0000\u0000\u0000q\u01d9\u0001"+
"\u0000\u0000\u0000s\u01dd\u0001\u0000\u0000\u0000u\u01e0\u0001\u0000\u0000"+
"\u0000w\u01e3\u0001\u0000\u0000\u0000y\u01e6\u0001\u0000\u0000\u0000{"+
"\u01ea\u0001\u0000\u0000\u0000}\u01ee\u0001\u0000\u0000\u0000\u007f\u01f7"+
"\u0001\u0000\u0000\u0000\u0081\u0200\u0001\u0000\u0000\u0000\u0083\u0209"+
"\u0001\u0000\u0000\u0000\u0085\u0212\u0001\u0000\u0000\u0000\u0087\u022a"+
"\u0001\u0000\u0000\u0000\u0089\u022c\u0001\u0000\u0000\u0000\u008b\u0233"+
"\u0001\u0000\u0000\u0000\u008d\u0261\u0001\u0000\u0000\u0000\u008f\u026c"+
"\u0001\u0000\u0000\u0000\u0091\u0277\u0001\u0000\u0000\u0000\u0093\u027a"+
"\u0001\u0000\u0000\u0000\u0095\u0285\u0001\u0000\u0000\u0000\u0097\u028c"+
"\u0001\u0000\u0000\u0000\u0099\u028e\u0001\u0000\u0000\u0000\u009b\u0299"+
"\u0001\u0000\u0000\u0000\u009d\u009e\u0005(\u0000\u0000\u009e\u0002\u0001"+
"\u0000\u0000\u0000\u009f\u00a0\u0005)\u0000\u0000\u00a0\u0004\u0001\u0000"+
"\u0000\u0000\u00a1\u00a2\u0005s\u0000\u0000\u00a2\u00a3\u0005e\u0000\u0000"+
"\u00a3\u00a4\u0005l\u0000\u0000\u00a4\u00a5\u0005e\u0000\u0000\u00a5\u00a6"+
"\u0005c\u0000\u0000\u00a6\u00a7\u0005t\u0000\u0000\u00a7\u0006\u0001\u0000"+
"\u0000\u0000\u00a8\u00a9\u0005d\u0000\u0000\u00a9\u00aa\u0005i\u0000\u0000"+
"\u00aa\u00ab\u0005s\u0000\u0000\u00ab\u00ac\u0005t\u0000\u0000\u00ac\u00ad"+
"\u0005i\u0000\u0000\u00ad\u00ae\u0005n\u0000\u0000\u00ae\u00af\u0005c"+
"\u0000\u0000\u00af\u00b0\u0005t\u0000\u0000\u00b0\b\u0001\u0000\u0000"+
"\u0000\u00b1\u00b2\u0005w\u0000\u0000\u00b2\u00b3\u0005h\u0000\u0000\u00b3"+
"\u00b4\u0005e\u0000\u0000\u00b4\u00b5\u0005r\u0000\u0000\u00b5\u00b6\u0005"+
"e\u0000\u0000\u00b6\n\u0001\u0000\u0000\u0000\u00b7\u00b8\u0005o\u0000"+
"\u0000\u00b8\u00b9\u0005r\u0000\u0000\u00b9\u00ba\u0005d\u0000\u0000\u00ba"+
"\u00bb\u0005e\u0000\u0000\u00bb\u00bc\u0005r\u0000\u0000\u00bc\f\u0001"+
"\u0000\u0000\u0000\u00bd\u00be\u0005b\u0000\u0000\u00be\u00bf\u0005y\u0000"+
"\u0000\u00bf\u000e\u0001\u0000\u0000\u0000\u00c0\u00c1\u0005,\u0000\u0000"+
"\u00c1\u0010\u0001\u0000\u0000\u0000\u00c2\u00c3\u0005n\u0000\u0000\u00c3"+
"\u00c4\u0005u\u0000\u0000\u00c4\u00c5\u0005l\u0000\u0000\u00c5\u00c6\u0005"+
"l\u0000\u0000\u00c6\u00c7\u0005s\u0000\u0000\u00c7\u0012\u0001\u0000\u0000"+
"\u0000\u00c8\u00c9\u0005f\u0000\u0000\u00c9\u00ca\u0005i\u0000\u0000\u00ca"+
"\u00cb\u0005r\u0000\u0000\u00cb\u00cc\u0005s\u0000\u0000\u00cc\u00cd\u0005"+
"t\u0000\u0000\u00cd\u0014\u0001\u0000\u0000\u0000\u00ce\u00cf\u0005l\u0000"+
"\u0000\u00cf\u00d0\u0005a\u0000\u0000\u00d0\u00d1\u0005s\u0000\u0000\u00d1"+
"\u00d2\u0005t\u0000\u0000\u00d2\u0016\u0001\u0000\u0000\u0000\u00d3\u00d4"+
"\u0005a\u0000\u0000\u00d4\u00d5\u0005s\u0000\u0000\u00d5\u00d6\u0005c"+
"\u0000\u0000\u00d6\u0018\u0001\u0000\u0000\u0000\u00d7\u00d8\u0005d\u0000"+
"\u0000\u00d8\u00d9\u0005e\u0000\u0000\u00d9\u00da\u0005s\u0000\u0000\u00da"+
"\u00db\u0005c\u0000\u0000\u00db\u001a\u0001\u0000\u0000\u0000\u00dc\u00dd"+
"\u0005l\u0000\u0000\u00dd\u00de\u0005i\u0000\u0000\u00de\u00df\u0005m"+
"\u0000\u0000\u00df\u00e0\u0005i\u0000\u0000\u00e0\u00e1\u0005t\u0000\u0000"+
"\u00e1\u001c\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005o\u0000\u0000\u00e3"+
"\u00e4\u0005f\u0000\u0000\u00e4\u00e5\u0005f\u0000\u0000\u00e5\u00e6\u0005"+
"s\u0000\u0000\u00e6\u00e7\u0005e\u0000\u0000\u00e7\u00e8\u0005t\u0000"+
"\u0000\u00e8\u001e\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005f\u0000\u0000"+
"\u00ea\u00eb\u0005e\u0000\u0000\u00eb\u00ec\u0005t\u0000\u0000\u00ec\u00ed"+
"\u0005c\u0000\u0000\u00ed\u00ee\u0005h\u0000\u0000\u00ee \u0001\u0000"+
"\u0000\u0000\u00ef\u00f0\u0005+\u0000\u0000\u00f0\"\u0001\u0000\u0000"+
"\u0000\u00f1\u00f2\u0005q\u0000\u0000\u00f2\u00f3\u0005u\u0000\u0000\u00f3"+
"\u00f4\u0005e\u0000\u0000\u00f4\u00f5\u0005r\u0000\u0000\u00f5\u00f6\u0005"+
"y\u0000\u0000\u00f6$\u0001\u0000\u0000\u0000\u00f7\u00f8\u0005l\u0000"+
"\u0000\u00f8\u00f9\u0005a\u0000\u0000\u00f9\u00fa\u0005z\u0000\u0000\u00fa"+
"\u00fb\u0005y\u0000\u0000\u00fb&\u0001\u0000\u0000\u0000\u00fc\u00fd\u0005"+
"o\u0000\u0000\u00fd\u00fe\u0005r\u0000\u0000\u00fe(\u0001\u0000\u0000"+
"\u0000\u00ff\u0100\u0005a\u0000\u0000\u0100\u0101\u0005n\u0000\u0000\u0101"+
"\u0102\u0005d\u0000\u0000\u0102*\u0001\u0000\u0000\u0000\u0103\u0104\u0005"+
"n\u0000\u0000\u0104\u0105\u0005o\u0000\u0000\u0105\u0106\u0005t\u0000"+
"\u0000\u0106,\u0001\u0000\u0000\u0000\u0107\u0108\u0005i\u0000\u0000\u0108"+
"\u0109\u0005n\u0000\u0000\u0109\u010a\u0005O\u0000\u0000\u010a\u010b\u0005"+
"r\u0000\u0000\u010b\u010c\u0005E\u0000\u0000\u010c\u010d\u0005m\u0000"+
"\u0000\u010d\u010e\u0005p\u0000\u0000\u010e\u010f\u0005t\u0000\u0000\u010f"+
"\u0110\u0005y\u0000\u0000\u0110.\u0001\u0000\u0000\u0000\u0111\u0112\u0005"+
"i\u0000\u0000\u0112\u0113\u0005n\u0000\u0000\u01130\u0001\u0000\u0000"+
"\u0000\u0114\u0115\u0005b\u0000\u0000\u0115\u0116\u0005e\u0000\u0000\u0116"+
"\u0117\u0005t\u0000\u0000\u0117\u0118\u0005w\u0000\u0000\u0118\u0119\u0005"+
"e\u0000\u0000\u0119\u011a\u0005e\u0000\u0000\u011a\u011b\u0005n\u0000"+
"\u0000\u011b2\u0001\u0000\u0000\u0000\u011c\u011d\u0005t\u0000\u0000\u011d"+
"\u011e\u0005o\u0000\u0000\u011e4\u0001\u0000\u0000\u0000\u011f\u0120\u0005"+
"i\u0000\u0000\u0120\u0121\u0005n\u0000\u0000\u0121\u0122\u0005r\u0000"+
"\u0000\u0122\u0123\u0005a\u0000\u0000\u0123\u0124\u0005n\u0000\u0000\u0124"+
"\u0125\u0005g\u0000\u0000\u0125\u0126\u0005e\u0000\u0000\u01266\u0001"+
"\u0000\u0000\u0000\u0127\u0128\u0005i\u0000\u0000\u0128\u0129\u0005n\u0000"+
"\u0000\u0129\u012a\u0005R\u0000\u0000\u012a\u012b\u0005a\u0000\u0000\u012b"+
"\u012c\u0005n\u0000\u0000\u012c\u012d\u0005g\u0000\u0000\u012d\u012e\u0005"+
"e\u0000\u0000\u012e8\u0001\u0000\u0000\u0000\u012f\u0130\u0005i\u0000"+
"\u0000\u0130\u0131\u0005s\u0000\u0000\u0131:\u0001\u0000\u0000\u0000\u0132"+
"\u0133\u0005n\u0000\u0000\u0133\u0134\u0005u\u0000\u0000\u0134\u0135\u0005"+
"l\u0000\u0000\u0135\u0136\u0005l\u0000\u0000\u0136<\u0001\u0000\u0000"+
"\u0000\u0137\u0138\u0005i\u0000\u0000\u0138\u0139\u0005s\u0000\u0000\u0139"+
"\u013a\u0005N\u0000\u0000\u013a\u013b\u0005u\u0000\u0000\u013b\u013c\u0005"+
"l\u0000\u0000\u013c\u013d\u0005l\u0000\u0000\u013d>\u0001\u0000\u0000"+
"\u0000\u013e\u013f\u0005i\u0000\u0000\u013f\u0140\u0005s\u0000\u0000\u0140"+
"\u0141\u0005N\u0000\u0000\u0141\u0142\u0005o\u0000\u0000\u0142\u0143\u0005"+
"t\u0000\u0000\u0143\u0144\u0005N\u0000\u0000\u0144\u0145\u0005u\u0000"+
"\u0000\u0145\u0146\u0005l\u0000\u0000\u0146\u0147\u0005l\u0000\u0000\u0147"+
"@\u0001\u0000\u0000\u0000\u0148\u0149\u0005n\u0000\u0000\u0149\u014a\u0005"+
"o\u0000\u0000\u014a\u014b\u0005t\u0000\u0000\u014b\u014c\u0005N\u0000"+
"\u0000\u014c\u014d\u0005u\u0000\u0000\u014d\u014e\u0005l\u0000\u0000\u014e"+
"\u014f\u0005l\u0000\u0000\u014fB\u0001\u0000\u0000\u0000\u0150\u0151\u0005"+
"e\u0000\u0000\u0151\u0152\u0005m\u0000\u0000\u0152\u0153\u0005p\u0000"+
"\u0000\u0153\u0154\u0005t\u0000\u0000\u0154\u0155\u0005y\u0000\u0000\u0155"+
"D\u0001\u0000\u0000\u0000\u0156\u0157\u0005i\u0000\u0000\u0157\u0158\u0005"+
"s\u0000\u0000\u0158\u0159\u0005E\u0000\u0000\u0159\u015a\u0005m\u0000"+
"\u0000\u015a\u015b\u0005p\u0000\u0000\u015b\u015c\u0005t\u0000\u0000\u015c"+
"\u015d\u0005y\u0000\u0000\u015dF\u0001\u0000\u0000\u0000\u015e\u015f\u0005"+
"i\u0000\u0000\u015f\u0160\u0005s\u0000\u0000\u0160\u0161\u0005N\u0000"+
"\u0000\u0161\u0162\u0005o\u0000\u0000\u0162\u0163\u0005t\u0000\u0000\u0163"+
"\u0164\u0005E\u0000\u0000\u0164\u0165\u0005m\u0000\u0000\u0165\u0166\u0005"+
"p\u0000\u0000\u0166\u0167\u0005t\u0000\u0000\u0167\u0168\u0005y\u0000"+
"\u0000\u0168H\u0001\u0000\u0000\u0000\u0169\u016a\u0005n\u0000\u0000\u016a"+
"\u016b\u0005o\u0000\u0000\u016b\u016c\u0005t\u0000\u0000\u016c\u016d\u0005"+
"E\u0000\u0000\u016d\u016e\u0005m\u0000\u0000\u016e\u016f\u0005p\u0000"+
"\u0000\u016f\u0170\u0005t\u0000\u0000\u0170\u0171\u0005y\u0000\u0000\u0171"+
"J\u0001\u0000\u0000\u0000\u0172\u0173\u0005l\u0000\u0000\u0173\u0174\u0005"+
"i\u0000\u0000\u0174\u0175\u0005k\u0000\u0000\u0175\u0176\u0005e\u0000"+
"\u0000\u0176L\u0001\u0000\u0000\u0000\u0177\u0178\u0005i\u0000\u0000\u0178"+
"\u0179\u0005l\u0000\u0000\u0179\u017a\u0005i\u0000\u0000\u017a\u017b\u0005"+
"k\u0000\u0000\u017b\u017c\u0005e\u0000\u0000\u017cN\u0001\u0000\u0000"+
"\u0000\u017d\u017e\u0005c\u0000\u0000\u017e\u017f\u0005o\u0000\u0000\u017f"+
"\u0180\u0005n\u0000\u0000\u0180\u0181\u0005t\u0000\u0000\u0181\u0182\u0005"+
"a\u0000\u0000\u0182\u0183\u0005i\u0000\u0000\u0183\u0184\u0005n\u0000"+
"\u0000\u0184\u0185\u0005s\u0000\u0000\u0185P\u0001\u0000\u0000\u0000\u0186"+
"\u0187\u0005i\u0000\u0000\u0187\u0188\u0005c\u0000\u0000\u0188\u0189\u0005"+
"o\u0000\u0000\u0189\u018a\u0005n\u0000\u0000\u018a\u018b\u0005t\u0000"+
"\u0000\u018b\u018c\u0005a\u0000\u0000\u018c\u018d\u0005i\u0000\u0000\u018d"+
"\u018e\u0005n\u0000\u0000\u018e\u018f\u0005s\u0000\u0000\u018fR\u0001"+
"\u0000\u0000\u0000\u0190\u0191\u0005s\u0000\u0000\u0191\u0192\u0005t\u0000"+
"\u0000\u0192\u0193\u0005a\u0000\u0000\u0193\u0194\u0005r\u0000\u0000\u0194"+
"\u0195\u0005t\u0000\u0000\u0195\u0196\u0005s\u0000\u0000\u0196\u0197\u0005"+
"W\u0000\u0000\u0197\u0198\u0005i\u0000\u0000\u0198\u0199\u0005t\u0000"+
"\u0000\u0199\u019a\u0005h\u0000\u0000\u019aT\u0001\u0000\u0000\u0000\u019b"+
"\u019c\u0005i\u0000\u0000\u019c\u019d\u0005s\u0000\u0000\u019d\u019e\u0005"+
"t\u0000\u0000\u019e\u019f\u0005a\u0000\u0000\u019f\u01a0\u0005r\u0000"+
"\u0000\u01a0\u01a1\u0005t\u0000\u0000\u01a1\u01a2\u0005s\u0000\u0000\u01a2"+
"\u01a3\u0005W\u0000\u0000\u01a3\u01a4\u0005i\u0000\u0000\u01a4\u01a5\u0005"+
"t\u0000\u0000\u01a5\u01a6\u0005h\u0000\u0000\u01a6V\u0001\u0000\u0000"+
"\u0000\u01a7\u01a8\u0005e\u0000\u0000\u01a8\u01a9\u0005n\u0000\u0000\u01a9"+
"\u01aa\u0005d\u0000\u0000\u01aa\u01ab\u0005s\u0000\u0000\u01ab\u01ac\u0005"+
"W\u0000\u0000\u01ac\u01ad\u0005i\u0000\u0000\u01ad\u01ae\u0005t\u0000"+
"\u0000\u01ae\u01af\u0005h\u0000\u0000\u01afX\u0001\u0000\u0000\u0000\u01b0"+
"\u01b1\u0005i\u0000\u0000\u01b1\u01b2\u0005e\u0000\u0000\u01b2\u01b3\u0005"+
"n\u0000\u0000\u01b3\u01b4\u0005d\u0000\u0000\u01b4\u01b5\u0005s\u0000"+
"\u0000\u01b5\u01b6\u0005W\u0000\u0000\u01b6\u01b7\u0005i\u0000\u0000\u01b7"+
"\u01b8\u0005t\u0000\u0000\u01b8\u01b9\u0005h\u0000\u0000\u01b9Z\u0001"+
"\u0000\u0000\u0000\u01ba\u01bb\u0005=\u0000\u0000\u01bb\\\u0001\u0000"+
"\u0000\u0000\u01bc\u01bd\u0005e\u0000\u0000\u01bd\u01be\u0005q\u0000\u0000"+
"\u01be^\u0001\u0000\u0000\u0000\u01bf\u01c0\u0005>\u0000\u0000\u01c0`"+
"\u0001\u0000\u0000\u0000\u01c1\u01c2\u0005g\u0000\u0000\u01c2\u01c3\u0005"+
"t\u0000\u0000\u01c3b\u0001\u0000\u0000\u0000\u01c4\u01c5\u0005>\u0000"+
"\u0000\u01c5\u01c6\u0005=\u0000\u0000\u01c6d\u0001\u0000\u0000\u0000\u01c7"+
"\u01c8\u0005g\u0000\u0000\u01c8\u01c9\u0005e\u0000\u0000\u01c9f\u0001"+
"\u0000\u0000\u0000\u01ca\u01cb\u0005g\u0000\u0000\u01cb\u01cc\u0005t\u0000"+
"\u0000\u01cc\u01cd\u0005e\u0000\u0000\u01cdh\u0001\u0000\u0000\u0000\u01ce"+
"\u01cf\u0005<\u0000\u0000\u01cfj\u0001\u0000\u0000\u0000\u01d0\u01d1\u0005"+
"l\u0000\u0000\u01d1\u01d2\u0005t\u0000\u0000\u01d2l\u0001\u0000\u0000"+
"\u0000\u01d3\u01d4\u0005<\u0000\u0000\u01d4\u01d5\u0005=\u0000\u0000\u01d5"+
"n\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005l\u0000\u0000\u01d7\u01d8\u0005"+
"e\u0000\u0000\u01d8p\u0001\u0000\u0000\u0000\u01d9\u01da\u0005l\u0000"+
"\u0000\u01da\u01db\u0005t\u0000\u0000\u01db\u01dc\u0005e\u0000\u0000\u01dc"+
"r\u0001\u0000\u0000\u0000\u01dd\u01de\u0005<\u0000\u0000\u01de\u01df\u0005"+
">\u0000\u0000\u01dft\u0001\u0000\u0000\u0000\u01e0\u01e1\u0005!\u0000"+
"\u0000\u01e1\u01e2\u0005=\u0000\u0000\u01e2v\u0001\u0000\u0000\u0000\u01e3"+
"\u01e4\u0005n\u0000\u0000\u01e4\u01e5\u0005e\u0000\u0000\u01e5x\u0001"+
"\u0000\u0000\u0000\u01e6\u01e7\u0005i\u0000\u0000\u01e7\u01e8\u0005e\u0000"+
"\u0000\u01e8\u01e9\u0005q\u0000\u0000\u01e9z\u0001\u0000\u0000\u0000\u01ea"+
"\u01eb\u0005i\u0000\u0000\u01eb\u01ec\u0005n\u0000\u0000\u01ec\u01ed\u0005"+
"e\u0000\u0000\u01ed|\u0001\u0000\u0000\u0000\u01ee\u01ef\u0005e\u0000"+
"\u0000\u01ef\u01f0\u0005q\u0000\u0000\u01f0\u01f1\u0005O\u0000\u0000\u01f1"+
"\u01f2\u0005r\u0000\u0000\u01f2\u01f3\u0005N\u0000\u0000\u01f3\u01f4\u0005"+
"u\u0000\u0000\u01f4\u01f5\u0005l\u0000\u0000\u01f5\u01f6\u0005l\u0000"+
"\u0000\u01f6~\u0001\u0000\u0000\u0000\u01f7\u01f8\u0005g\u0000\u0000\u01f8"+
"\u01f9\u0005t\u0000\u0000\u01f9\u01fa\u0005O\u0000\u0000\u01fa\u01fb\u0005"+
"r\u0000\u0000\u01fb\u01fc\u0005N\u0000\u0000\u01fc\u01fd\u0005u\u0000"+
"\u0000\u01fd\u01fe\u0005l\u0000\u0000\u01fe\u01ff\u0005l\u0000\u0000\u01ff"+
"\u0080\u0001\u0000\u0000\u0000\u0200\u0201\u0005l\u0000\u0000\u0201\u0202"+
"\u0005t\u0000\u0000\u0202\u0203\u0005O\u0000\u0000\u0203\u0204\u0005r"+
"\u0000\u0000\u0204\u0205\u0005N\u0000\u0000\u0205\u0206\u0005u\u0000\u0000"+
"\u0206\u0207\u0005l\u0000\u0000\u0207\u0208\u0005l\u0000\u0000\u0208\u0082"+
"\u0001\u0000\u0000\u0000\u0209\u020a\u0005g\u0000\u0000\u020a\u020b\u0005"+
"e\u0000\u0000\u020b\u020c\u0005O\u0000\u0000\u020c\u020d\u0005r\u0000"+
"\u0000\u020d\u020e\u0005N\u0000\u0000\u020e\u020f\u0005u\u0000\u0000\u020f"+
"\u0210\u0005l\u0000\u0000\u0210\u0211\u0005l\u0000\u0000\u0211\u0084\u0001"+
"\u0000\u0000\u0000\u0212\u0213\u0005l\u0000\u0000\u0213\u0214\u0005e\u0000"+
"\u0000\u0214\u0215\u0005O\u0000\u0000\u0215\u0216\u0005r\u0000\u0000\u0216"+
"\u0217\u0005N\u0000\u0000\u0217\u0218\u0005u\u0000\u0000\u0218\u0219\u0005"+
"l\u0000\u0000\u0219\u021a\u0005l\u0000\u0000\u021a\u0086\u0001\u0000\u0000"+
"\u0000\u021b\u021c\u0005:\u0000\u0000\u021c\u0220\u0007\u0000\u0000\u0000"+
"\u021d\u021f\u0007\u0001\u0000\u0000\u021e\u021d\u0001\u0000\u0000\u0000"+
"\u021f\u0222\u0001\u0000\u0000\u0000\u0220\u021e\u0001\u0000\u0000\u0000"+
"\u0220\u0221\u0001\u0000\u0000\u0000\u0221\u022b\u0001\u0000\u0000\u0000"+
"\u0222\u0220\u0001\u0000\u0000\u0000\u0223\u0227\u0005?\u0000\u0000\u0224"+
"\u0226\u000209\u0000\u0225\u0224\u0001\u0000\u0000\u0000\u0226\u0229\u0001"+
"\u0000\u0000\u0000\u0227\u0225\u0001\u0000\u0000\u0000\u0227\u0228\u0001"+
"\u0000\u0000\u0000\u0228\u022b\u0001\u0000\u0000\u0000\u0229\u0227\u0001"+
"\u0000\u0000\u0000\u022a\u021b\u0001\u0000\u0000\u0000\u022a\u0223\u0001"+
"\u0000\u0000\u0000\u022b\u0088\u0001\u0000\u0000\u0000\u022c\u0230\u0007"+
"\u0000\u0000\u0000\u022d\u022f\u0007\u0002\u0000\u0000\u022e\u022d\u0001"+
"\u0000\u0000\u0000\u022f\u0232\u0001\u0000\u0000\u0000\u0230\u022e\u0001"+
"\u0000\u0000\u0000\u0230\u0231\u0001\u0000\u0000\u0000\u0231\u008a\u0001"+
"\u0000\u0000\u0000\u0232\u0230\u0001\u0000\u0000\u0000\u0233\u0234\u0005"+
"`\u0000\u0000\u0234\u0235\u0003\u0089D\u0000\u0235\u0236\u0005`\u0000"+
"\u0000\u0236\u008c\u0001\u0000\u0000\u0000\u0237\u0238\u0005s\u0000\u0000"+
"\u0238\u0239\u0005u\u0000\u0000\u0239\u023a\u0005m\u0000\u0000\u023a\u023b"+
"\u0005(\u0000\u0000\u023b\u023c\u0001\u0000\u0000\u0000\u023c\u023d\u0003"+
"\u0089D\u0000\u023d\u023e\u0005)\u0000\u0000\u023e\u0262\u0001\u0000\u0000"+
"\u0000\u023f\u0240\u0005m\u0000\u0000\u0240\u0241\u0005a\u0000\u0000\u0241"+
"\u0242\u0005x\u0000\u0000\u0242\u0243\u0005(\u0000\u0000\u0243\u0244\u0001"+
"\u0000\u0000\u0000\u0244\u0245\u0003\u0089D\u0000\u0245\u0246\u0005)\u0000"+
"\u0000\u0246\u0262\u0001\u0000\u0000\u0000\u0247\u0248\u0005m\u0000\u0000"+
"\u0248\u0249\u0005i\u0000\u0000\u0249\u024a\u0005n\u0000\u0000\u024a\u024b"+
"\u0005(\u0000\u0000\u024b\u024c\u0001\u0000\u0000\u0000\u024c\u024d\u0003"+
"\u0089D\u0000\u024d\u024e\u0005)\u0000\u0000\u024e\u0262\u0001\u0000\u0000"+
"\u0000\u024f\u0250\u0005a\u0000\u0000\u0250\u0251\u0005v\u0000\u0000\u0251"+
"\u0252\u0005g\u0000\u0000\u0252\u0253\u0005(\u0000\u0000\u0253\u0254\u0001"+
"\u0000\u0000\u0000\u0254\u0255\u0003\u0089D\u0000\u0255\u0256\u0005)\u0000"+
"\u0000\u0256\u0262\u0001\u0000\u0000\u0000\u0257\u0258\u0005c\u0000\u0000"+
"\u0258\u0259\u0005o\u0000\u0000\u0259\u025a\u0005u\u0000\u0000\u025a\u025b"+
"\u0005n\u0000\u0000\u025b\u025c\u0005t\u0000\u0000\u025c\u025d\u0005("+
"\u0000\u0000\u025d\u025e\u0001\u0000\u0000\u0000\u025e\u025f\u0003\u0089"+
"D\u0000\u025f\u0260\u0005)\u0000\u0000\u0260\u0262\u0001\u0000\u0000\u0000"+
"\u0261\u0237\u0001\u0000\u0000\u0000\u0261\u023f\u0001\u0000\u0000\u0000"+
"\u0261\u0247\u0001\u0000\u0000\u0000\u0261\u024f\u0001\u0000\u0000\u0000"+
"\u0261\u0257\u0001\u0000\u0000\u0000\u0262\u008e\u0001\u0000\u0000\u0000"+
"\u0263\u0264\u0005t\u0000\u0000\u0264\u0265\u0005r\u0000\u0000\u0265\u0266"+
"\u0005u\u0000\u0000\u0266\u026d\u0005e\u0000\u0000\u0267\u0268\u0005f"+
"\u0000\u0000\u0268\u0269\u0005a\u0000\u0000\u0269\u026a\u0005l\u0000\u0000"+
"\u026a\u026b\u0005s\u0000\u0000\u026b\u026d\u0005e\u0000\u0000\u026c\u0263"+
"\u0001\u0000\u0000\u0000\u026c\u0267\u0001\u0000\u0000\u0000\u026d\u0090"+
"\u0001\u0000\u0000\u0000\u026e\u0270\u0005-\u0000\u0000\u026f\u026e\u0001"+
"\u0000\u0000\u0000\u026f\u0270\u0001\u0000\u0000\u0000\u0270\u0271\u0001"+
"\u0000\u0000\u0000\u0271\u0278\u0003\u0093I\u0000\u0272\u0274\u0005-\u0000"+
"\u0000\u0273\u0272\u0001\u0000\u0000\u0000\u0273\u0274\u0001\u0000\u0000"+
"\u0000\u0274\u0275\u0001\u0000\u0000\u0000\u0275\u0278\u0003\u0095J\u0000"+
"\u0276\u0278\u0003\u0097K\u0000\u0277\u026f\u0001\u0000\u0000\u0000\u0277"+
"\u0273\u0001\u0000\u0000\u0000\u0277\u0276\u0001\u0000\u0000\u0000\u0278"+
"\u0092\u0001\u0000\u0000\u0000\u0279\u027b\u0007\u0003\u0000\u0000\u027a"+
"\u0279\u0001\u0000\u0000\u0000\u027b\u027c\u0001\u0000\u0000\u0000\u027c"+
"\u027a\u0001\u0000\u0000\u0000\u027c\u027d\u0001\u0000\u0000\u0000\u027d"+
"\u027e\u0001\u0000\u0000\u0000\u027e\u0282\u0005.\u0000\u0000\u027f\u0281"+
"\u0007\u0003\u0000\u0000\u0280\u027f\u0001\u0000\u0000\u0000\u0281\u0284"+
"\u0001\u0000\u0000\u0000\u0282\u0280\u0001\u0000\u0000\u0000\u0282\u0283"+
"\u0001\u0000\u0000\u0000\u0283\u0094\u0001\u0000\u0000\u0000\u0284\u0282"+
"\u0001\u0000\u0000\u0000\u0285\u0289\u0007\u0004\u0000\u0000\u0286\u0288"+
"\u0007\u0003\u0000\u0000\u0287\u0286\u0001\u0000\u0000\u0000\u0288\u028b"+
"\u0001\u0000\u0000\u0000\u0289\u0287\u0001\u0000\u0000\u0000\u0289\u028a"+
"\u0001\u0000\u0000\u0000\u028a\u0096\u0001\u0000\u0000\u0000\u028b\u0289"+
"\u0001\u0000\u0000\u0000\u028c\u028d\u00050\u0000\u0000\u028d\u0098\u0001"+
"\u0000\u0000\u0000\u028e\u0294\u0005\'\u0000\u0000\u028f\u0293\b\u0005"+
"\u0000\u0000\u0290\u0291\u0005\'\u0000\u0000\u0291\u0293\u0005\'\u0000"+
"\u0000\u0292\u028f\u0001\u0000\u0000\u0000\u0292\u0290\u0001\u0000\u0000"+
"\u0000\u0293\u0296\u0001\u0000\u0000\u0000\u0294\u0292\u0001\u0000\u0000"+
"\u0000\u0294\u0295\u0001\u0000\u0000\u0000\u0295\u0297\u0001\u0000\u0000"+
"\u0000\u0296\u0294\u0001\u0000\u0000\u0000\u0297\u0298\u0005\'\u0000\u0000"+
"\u0298\u009a\u0001\u0000\u0000\u0000\u0299\u029a\u0007\u0006\u0000\u0000"+
"\u029a\u029b\u0001\u0000\u0000\u0000\u029b\u029c\u0006M\u0000\u0000\u029c"+
"\u009c\u0001\u0000\u0000\u0000\u000f\u0000\u0220\u0227\u022a\u0230\u0261"+
"\u026c\u026f\u0273\u0277\u027c\u0282\u0289\u0292\u0294\u0001\u0006\u0000"+
"\u0000";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
@@ -371,4 +546,4 @@ public class EQLLexer extends Lexer {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
}
@@ -1,4 +1,4 @@
// Generated from /home/rob/github/ebean-dir/ebean/src/test/resources/EQL.g4 by ANTLR 4.8
// Generated from /Users/robinbygrave/Documents/github/ebean/ebean/ebean-test/src/test/resources/EQL.g4 by ANTLR 4.13.1
package io.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -1,74 +1,62 @@
// Generated from /home/rob/github/ebean-dir/ebean/src/test/resources/EQL.g4 by ANTLR 4.8
// Generated from /Users/robinbygrave/Documents/github/ebean/ebean/ebean-test/src/test/resources/EQL.g4 by ANTLR 4.13.1
package io.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.NoViableAltException;
import org.antlr.v4.runtime.Parser;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.RuntimeMetaData;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.Vocabulary;
import org.antlr.v4.runtime.VocabularyImpl;
import org.antlr.v4.runtime.atn.ATN;
import org.antlr.v4.runtime.atn.ATNDeserializer;
import org.antlr.v4.runtime.atn.ParserATNSimulator;
import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.tree.ParseTreeListener;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
public class EQLParser extends Parser {
static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); }
static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
T__66=67, INPUT_VARIABLE=68, PATH_VARIABLE=69, QUOTED_PATH_VARIABLE=70,
PROP_FORMULA=71, BOOLEAN_LITERAL=72, NUMBER_LITERAL=73, DOUBLE=74, INT=75,
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
T__66=67, INPUT_VARIABLE=68, PATH_VARIABLE=69, QUOTED_PATH_VARIABLE=70,
PROP_FORMULA=71, BOOLEAN_LITERAL=72, NUMBER_LITERAL=73, DOUBLE=74, INT=75,
ZERO=76, STRING_LITERAL=77, WS=78;
public static final int
RULE_select_statement = 0, RULE_select_properties = 1, RULE_select_clause = 2,
RULE_distinct = 3, RULE_fetch_clause = 4, RULE_where_clause = 5, RULE_orderby_clause = 6,
RULE_orderby_property = 7, RULE_nulls_firstlast = 8, RULE_asc_desc = 9,
RULE_limit_clause = 10, RULE_offset_clause = 11, RULE_fetch_path = 12,
RULE_fetch_property_set = 13, RULE_fetch_property_group = 14, RULE_fetch_path_path = 15,
RULE_fetch_property = 16, RULE_fetch_query_hint = 17, RULE_fetch_lazy_hint = 18,
RULE_fetch_option = 19, RULE_fetch_query_option = 20, RULE_fetch_lazy_option = 21,
RULE_fetch_batch_size = 22, RULE_conditional_expression = 23, RULE_conditional_term = 24,
RULE_conditional_factor = 25, RULE_conditional_primary = 26, RULE_any_expression = 27,
RULE_inOrEmpty_expression = 28, RULE_in_expression = 29, RULE_in_value = 30,
RULE_between_expression = 31, RULE_inrange_expression = 32, RULE_inrange_op = 33,
RULE_propertyBetween_expression = 34, RULE_isNull_expression = 35, RULE_isNotNull_expression = 36,
RULE_isEmpty_expression = 37, RULE_isNotEmpty_expression = 38, RULE_like_expression = 39,
RULE_like_op = 40, RULE_comparison_expression = 41, RULE_comparison_operator = 42,
RULE_select_statement = 0, RULE_select_properties = 1, RULE_select_clause = 2,
RULE_distinct = 3, RULE_fetch_clause = 4, RULE_where_clause = 5, RULE_orderby_clause = 6,
RULE_orderby_property = 7, RULE_nulls_firstlast = 8, RULE_asc_desc = 9,
RULE_limit_clause = 10, RULE_offset_clause = 11, RULE_fetch_path = 12,
RULE_fetch_property_set = 13, RULE_fetch_property_group = 14, RULE_fetch_path_path = 15,
RULE_fetch_property = 16, RULE_fetch_query_hint = 17, RULE_fetch_lazy_hint = 18,
RULE_fetch_option = 19, RULE_fetch_query_option = 20, RULE_fetch_lazy_option = 21,
RULE_fetch_batch_size = 22, RULE_conditional_expression = 23, RULE_conditional_term = 24,
RULE_conditional_factor = 25, RULE_conditional_primary = 26, RULE_any_expression = 27,
RULE_inOrEmpty_expression = 28, RULE_in_expression = 29, RULE_in_value = 30,
RULE_between_expression = 31, RULE_inrange_expression = 32, RULE_inrange_op = 33,
RULE_propertyBetween_expression = 34, RULE_isNull_expression = 35, RULE_isNotNull_expression = 36,
RULE_isEmpty_expression = 37, RULE_isNotEmpty_expression = 38, RULE_like_expression = 39,
RULE_like_op = 40, RULE_comparison_expression = 41, RULE_comparison_operator = 42,
RULE_value_expression = 43, RULE_literal = 44;
private static String[] makeRuleNames() {
return new String[] {
"select_statement", "select_properties", "select_clause", "distinct",
"fetch_clause", "where_clause", "orderby_clause", "orderby_property",
"nulls_firstlast", "asc_desc", "limit_clause", "offset_clause", "fetch_path",
"fetch_property_set", "fetch_property_group", "fetch_path_path", "fetch_property",
"fetch_query_hint", "fetch_lazy_hint", "fetch_option", "fetch_query_option",
"fetch_lazy_option", "fetch_batch_size", "conditional_expression", "conditional_term",
"conditional_factor", "conditional_primary", "any_expression", "inOrEmpty_expression",
"in_expression", "in_value", "between_expression", "inrange_expression",
"inrange_op", "propertyBetween_expression", "isNull_expression", "isNotNull_expression",
"isEmpty_expression", "isNotEmpty_expression", "like_expression", "like_op",
"select_statement", "select_properties", "select_clause", "distinct",
"fetch_clause", "where_clause", "orderby_clause", "orderby_property",
"nulls_firstlast", "asc_desc", "limit_clause", "offset_clause", "fetch_path",
"fetch_property_set", "fetch_property_group", "fetch_path_path", "fetch_property",
"fetch_query_hint", "fetch_lazy_hint", "fetch_option", "fetch_query_option",
"fetch_lazy_option", "fetch_batch_size", "conditional_expression", "conditional_term",
"conditional_factor", "conditional_primary", "any_expression", "inOrEmpty_expression",
"in_expression", "in_value", "between_expression", "inrange_expression",
"inrange_op", "propertyBetween_expression", "isNull_expression", "isNotNull_expression",
"isEmpty_expression", "isNotEmpty_expression", "like_expression", "like_op",
"comparison_expression", "comparison_operator", "value_expression", "literal"
};
}
@@ -76,29 +64,29 @@ public class EQLParser extends Parser {
private static String[] makeLiteralNames() {
return new String[] {
null, "'('", "')'", "'select'", "'distinct'", "'where'", "'order'", "'by'",
"','", "'nulls'", "'first'", "'last'", "'asc'", "'desc'", "'limit'",
"'offset'", "'fetch'", "'+'", "'query'", "'lazy'", "'or'", "'and'", "'not'",
"'inOrEmpty'", "'in'", "'between'", "'to'", "'inrange'", "'inRange'",
"'is'", "'null'", "'isNull'", "'isNotNull'", "'notNull'", "'empty'",
"'isEmpty'", "'isNotEmpty'", "'notEmpty'", "'like'", "'ilike'", "'contains'",
"'icontains'", "'startsWith'", "'istartsWith'", "'endsWith'", "'iendsWith'",
"'='", "'eq'", "'>'", "'gt'", "'>='", "'ge'", "'gte'", "'<'", "'lt'",
"'<='", "'le'", "'lte'", "'<>'", "'!='", "'ne'", "'ieq'", "'ine'", "'eqOrNull'",
"'gtOrNull'", "'ltOrNull'", "'geOrNull'", "'leOrNull'", null, null, null,
null, "'('", "')'", "'select'", "'distinct'", "'where'", "'order'", "'by'",
"','", "'nulls'", "'first'", "'last'", "'asc'", "'desc'", "'limit'",
"'offset'", "'fetch'", "'+'", "'query'", "'lazy'", "'or'", "'and'", "'not'",
"'inOrEmpty'", "'in'", "'between'", "'to'", "'inrange'", "'inRange'",
"'is'", "'null'", "'isNull'", "'isNotNull'", "'notNull'", "'empty'",
"'isEmpty'", "'isNotEmpty'", "'notEmpty'", "'like'", "'ilike'", "'contains'",
"'icontains'", "'startsWith'", "'istartsWith'", "'endsWith'", "'iendsWith'",
"'='", "'eq'", "'>'", "'gt'", "'>='", "'ge'", "'gte'", "'<'", "'lt'",
"'<='", "'le'", "'lte'", "'<>'", "'!='", "'ne'", "'ieq'", "'ine'", "'eqOrNull'",
"'gtOrNull'", "'ltOrNull'", "'geOrNull'", "'leOrNull'", null, null, null,
null, null, null, null, null, "'0'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, "INPUT_VARIABLE", "PATH_VARIABLE",
"QUOTED_PATH_VARIABLE", "PROP_FORMULA", "BOOLEAN_LITERAL", "NUMBER_LITERAL",
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, "INPUT_VARIABLE", "PATH_VARIABLE",
"QUOTED_PATH_VARIABLE", "PROP_FORMULA", "BOOLEAN_LITERAL", "NUMBER_LITERAL",
"DOUBLE", "INT", "ZERO", "STRING_LITERAL", "WS"
};
}
@@ -153,6 +141,7 @@ public class EQLParser extends Parser {
_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@SuppressWarnings("CheckReturnValue")
public static class Select_statementContext extends ParserRuleContext {
public TerminalNode EOF() { return getToken(EQLParser.EOF, 0); }
public Select_clauseContext select_clause() {
@@ -268,6 +257,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Select_propertiesContext extends ParserRuleContext {
public Fetch_property_groupContext fetch_property_group() {
return getRuleContext(Fetch_property_groupContext.class,0);
@@ -333,6 +323,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Select_clauseContext extends ParserRuleContext {
public Select_propertiesContext select_properties() {
return getRuleContext(Select_propertiesContext.class,0);
@@ -393,6 +384,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class DistinctContext extends ParserRuleContext {
public DistinctContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -434,6 +426,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_clauseContext extends ParserRuleContext {
public Fetch_pathContext fetch_path() {
return getRuleContext(Fetch_pathContext.class,0);
@@ -478,6 +471,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Where_clauseContext extends ParserRuleContext {
public Conditional_expressionContext conditional_expression() {
return getRuleContext(Conditional_expressionContext.class,0);
@@ -524,6 +518,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Orderby_clauseContext extends ParserRuleContext {
public List<Orderby_propertyContext> orderby_property() {
return getRuleContexts(Orderby_propertyContext.class);
@@ -592,6 +587,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Orderby_propertyContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public Asc_descContext asc_desc() {
@@ -661,6 +657,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Nulls_firstlastContext extends ParserRuleContext {
public Nulls_firstlastContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -719,6 +716,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Asc_descContext extends ParserRuleContext {
public Asc_descContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -769,6 +767,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Limit_clauseContext extends ParserRuleContext {
public TerminalNode NUMBER_LITERAL() { return getToken(EQLParser.NUMBER_LITERAL, 0); }
public Offset_clauseContext offset_clause() {
@@ -827,6 +826,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Offset_clauseContext extends ParserRuleContext {
public TerminalNode NUMBER_LITERAL() { return getToken(EQLParser.NUMBER_LITERAL, 0); }
public Offset_clauseContext(ParserRuleContext parent, int invokingState) {
@@ -871,6 +871,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_pathContext extends ParserRuleContext {
public Fetch_path_pathContext fetch_path_path() {
return getRuleContext(Fetch_path_pathContext.class,0);
@@ -944,6 +945,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_property_setContext extends ParserRuleContext {
public Fetch_property_groupContext fetch_property_group() {
return getRuleContext(Fetch_property_groupContext.class,0);
@@ -992,6 +994,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_property_groupContext extends ParserRuleContext {
public List<Fetch_propertyContext> fetch_property() {
return getRuleContexts(Fetch_propertyContext.class);
@@ -1056,6 +1059,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_path_pathContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public TerminalNode QUOTED_PATH_VARIABLE() { return getToken(EQLParser.QUOTED_PATH_VARIABLE, 0); }
@@ -1108,6 +1112,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_propertyContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public Fetch_query_hintContext fetch_query_hint() {
@@ -1184,6 +1189,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_query_hintContext extends ParserRuleContext {
public Fetch_query_optionContext fetch_query_option() {
return getRuleContext(Fetch_query_optionContext.class,0);
@@ -1230,6 +1236,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_lazy_hintContext extends ParserRuleContext {
public Fetch_lazy_optionContext fetch_lazy_option() {
return getRuleContext(Fetch_lazy_optionContext.class,0);
@@ -1276,6 +1283,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_optionContext extends ParserRuleContext {
public Fetch_query_optionContext fetch_query_option() {
return getRuleContext(Fetch_query_optionContext.class,0);
@@ -1338,6 +1346,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_query_optionContext extends ParserRuleContext {
public Fetch_batch_sizeContext fetch_batch_size() {
return getRuleContext(Fetch_batch_sizeContext.class,0);
@@ -1393,6 +1402,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_lazy_optionContext extends ParserRuleContext {
public Fetch_batch_sizeContext fetch_batch_size() {
return getRuleContext(Fetch_batch_sizeContext.class,0);
@@ -1448,6 +1458,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Fetch_batch_sizeContext extends ParserRuleContext {
public TerminalNode NUMBER_LITERAL() { return getToken(EQLParser.NUMBER_LITERAL, 0); }
public Fetch_batch_sizeContext(ParserRuleContext parent, int invokingState) {
@@ -1494,6 +1505,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Conditional_expressionContext extends ParserRuleContext {
public List<Conditional_termContext> conditional_term() {
return getRuleContexts(Conditional_termContext.class);
@@ -1558,6 +1570,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Conditional_termContext extends ParserRuleContext {
public List<Conditional_factorContext> conditional_factor() {
return getRuleContexts(Conditional_factorContext.class);
@@ -1622,6 +1635,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Conditional_factorContext extends ParserRuleContext {
public Conditional_primaryContext conditional_primary() {
return getRuleContext(Conditional_primaryContext.class,0);
@@ -1677,6 +1691,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Conditional_primaryContext extends ParserRuleContext {
public Any_expressionContext any_expression() {
return getRuleContext(Any_expressionContext.class,0);
@@ -1741,6 +1756,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Any_expressionContext extends ParserRuleContext {
public Comparison_expressionContext comparison_expression() {
return getRuleContext(Comparison_expressionContext.class,0);
@@ -1905,6 +1921,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class InOrEmpty_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public In_valueContext in_value() {
@@ -1954,6 +1971,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class In_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public In_valueContext in_value() {
@@ -2003,6 +2021,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class In_valueContext extends ParserRuleContext {
public TerminalNode INPUT_VARIABLE() { return getToken(EQLParser.INPUT_VARIABLE, 0); }
public List<Value_expressionContext> value_expression() {
@@ -2087,6 +2106,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Between_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public List<Value_expressionContext> value_expression() {
@@ -2143,6 +2163,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Inrange_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public Inrange_opContext inrange_op() {
@@ -2202,6 +2223,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Inrange_opContext extends ParserRuleContext {
public Inrange_opContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -2252,6 +2274,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class PropertyBetween_expressionContext extends ParserRuleContext {
public Value_expressionContext value_expression() {
return getRuleContext(Value_expressionContext.class,0);
@@ -2308,6 +2331,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class IsNull_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public IsNull_expressionContext(ParserRuleContext parent, int invokingState) {
@@ -2369,6 +2393,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class IsNotNull_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public IsNotNull_expressionContext(ParserRuleContext parent, int invokingState) {
@@ -2441,6 +2466,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class IsEmpty_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public IsEmpty_expressionContext(ParserRuleContext parent, int invokingState) {
@@ -2502,6 +2528,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class IsNotEmpty_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public IsNotEmpty_expressionContext(ParserRuleContext parent, int invokingState) {
@@ -2574,6 +2601,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Like_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public Like_opContext like_op() {
@@ -2626,6 +2654,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Like_opContext extends ParserRuleContext {
public Like_opContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -2655,7 +2684,7 @@ public class EQLParser extends Parser {
{
setState(338);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__44))) != 0)) ) {
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 70093866270720L) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2676,6 +2705,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Comparison_expressionContext extends ParserRuleContext {
public TerminalNode PATH_VARIABLE() { return getToken(EQLParser.PATH_VARIABLE, 0); }
public Comparison_operatorContext comparison_operator() {
@@ -2750,6 +2780,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Comparison_operatorContext extends ParserRuleContext {
public Comparison_operatorContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -2779,7 +2810,7 @@ public class EQLParser extends Parser {
{
setState(350);
_la = _input.LA(1);
if ( !(((((_la - 46)) & ~0x3f) == 0 && ((1L << (_la - 46)) & ((1L << (T__45 - 46)) | (1L << (T__46 - 46)) | (1L << (T__47 - 46)) | (1L << (T__48 - 46)) | (1L << (T__49 - 46)) | (1L << (T__50 - 46)) | (1L << (T__51 - 46)) | (1L << (T__52 - 46)) | (1L << (T__53 - 46)) | (1L << (T__54 - 46)) | (1L << (T__55 - 46)) | (1L << (T__56 - 46)) | (1L << (T__57 - 46)) | (1L << (T__58 - 46)) | (1L << (T__59 - 46)) | (1L << (T__60 - 46)) | (1L << (T__61 - 46)) | (1L << (T__62 - 46)) | (1L << (T__63 - 46)) | (1L << (T__64 - 46)) | (1L << (T__65 - 46)) | (1L << (T__66 - 46)))) != 0)) ) {
if ( !(((((_la - 46)) & ~0x3f) == 0 && ((1L << (_la - 46)) & 4194303L) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2800,6 +2831,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class Value_expressionContext extends ParserRuleContext {
public LiteralContext literal() {
return getRuleContext(LiteralContext.class,0);
@@ -2862,6 +2894,7 @@ public class EQLParser extends Parser {
return _localctx;
}
@SuppressWarnings("CheckReturnValue")
public static class LiteralContext extends ParserRuleContext {
public TerminalNode STRING_LITERAL() { return getToken(EQLParser.STRING_LITERAL, 0); }
public TerminalNode BOOLEAN_LITERAL() { return getToken(EQLParser.BOOLEAN_LITERAL, 0); }
@@ -2894,7 +2927,7 @@ public class EQLParser extends Parser {
{
setState(356);
_la = _input.LA(1);
if ( !(((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (BOOLEAN_LITERAL - 72)) | (1L << (NUMBER_LITERAL - 72)) | (1L << (STRING_LITERAL - 72)))) != 0)) ) {
if ( !(((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & 35L) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2916,125 +2949,224 @@ public class EQLParser extends Parser {
}
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3P\u0169\4\2\t\2\4"+
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\3\2\5\2^\n\2\3\2\7\2a\n\2\f\2\16\2d\13\2\3\2\5\2g\n\2"+
"\3\2\5\2j\n\2\3\2\5\2m\n\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\5\3v\n\3\3\4\3"+
"\4\5\4z\n\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\7"+
"\b\u008a\n\b\f\b\16\b\u008d\13\b\3\t\3\t\5\t\u0091\n\t\3\t\5\t\u0094\n"+
"\t\3\n\3\n\3\n\3\n\5\n\u009a\n\n\3\13\3\13\3\f\3\f\3\f\5\f\u00a1\n\f\3"+
"\r\3\r\3\r\3\16\3\16\5\16\u00a8\n\16\3\16\3\16\5\16\u00ac\n\16\3\17\3"+
"\17\3\17\3\17\3\20\3\20\3\20\7\20\u00b5\n\20\f\20\16\20\u00b8\13\20\3"+
"\21\3\21\3\22\3\22\3\22\3\22\5\22\u00c0\n\22\3\23\3\23\3\23\3\24\3\24"+
"\3\24\3\25\3\25\5\25\u00ca\n\25\3\26\3\26\5\26\u00ce\n\26\3\27\3\27\5"+
"\27\u00d2\n\27\3\30\3\30\3\30\3\30\3\31\3\31\3\31\7\31\u00db\n\31\f\31"+
"\16\31\u00de\13\31\3\32\3\32\3\32\7\32\u00e3\n\32\f\32\16\32\u00e6\13"+
"\32\3\33\5\33\u00e9\n\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\5\34\u00f2"+
"\n\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+
"\3\35\3\35\5\35\u0103\n\35\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3 "+
"\3 \3 \3 \3 \7 \u0112\n \f \16 \u0115\13 \3 \3 \5 \u0119\n \3!\3!\3!\3"+
"!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3"+
"%\5%\u0134\n%\3&\3&\3&\3&\3&\3&\3&\3&\5&\u013e\n&\3\'\3\'\3\'\3\'\3\'"+
"\5\'\u0145\n\'\3(\3(\3(\3(\3(\3(\3(\3(\5(\u014f\n(\3)\3)\3)\3)\3*\3*\3"+
"+\3+\3+\3+\3+\3+\3+\3+\5+\u015f\n+\3,\3,\3-\3-\5-\u0165\n-\3.\3.\3.\2"+
"\2/\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@B"+
"DFHJLNPRTVXZ\2\b\3\2\16\17\3\2GH\3\2\35\36\3\2(/\3\2\60E\4\2JKOO\2\u0169"+
"\2]\3\2\2\2\4u\3\2\2\2\6w\3\2\2\2\b}\3\2\2\2\n\177\3\2\2\2\f\u0081\3\2"+
"\2\2\16\u0084\3\2\2\2\20\u008e\3\2\2\2\22\u0099\3\2\2\2\24\u009b\3\2\2"+
"\2\26\u009d\3\2\2\2\30\u00a2\3\2\2\2\32\u00a5\3\2\2\2\34\u00ad\3\2\2\2"+
"\36\u00b1\3\2\2\2 \u00b9\3\2\2\2\"\u00bf\3\2\2\2$\u00c1\3\2\2\2&\u00c4"+
"\3\2\2\2(\u00c9\3\2\2\2*\u00cb\3\2\2\2,\u00cf\3\2\2\2.\u00d3\3\2\2\2\60"+
"\u00d7\3\2\2\2\62\u00df\3\2\2\2\64\u00e8\3\2\2\2\66\u00f1\3\2\2\28\u0102"+
"\3\2\2\2:\u0104\3\2\2\2<\u0108\3\2\2\2>\u0118\3\2\2\2@\u011a\3\2\2\2B"+
"\u0120\3\2\2\2D\u0126\3\2\2\2F\u0128\3\2\2\2H\u0133\3\2\2\2J\u013d\3\2"+
"\2\2L\u0144\3\2\2\2N\u014e\3\2\2\2P\u0150\3\2\2\2R\u0154\3\2\2\2T\u015e"+
"\3\2\2\2V\u0160\3\2\2\2X\u0164\3\2\2\2Z\u0166\3\2\2\2\\^\5\6\4\2]\\\3"+
"\2\2\2]^\3\2\2\2^b\3\2\2\2_a\5\n\6\2`_\3\2\2\2ad\3\2\2\2b`\3\2\2\2bc\3"+
"\2\2\2cf\3\2\2\2db\3\2\2\2eg\5\f\7\2fe\3\2\2\2fg\3\2\2\2gi\3\2\2\2hj\5"+
"\16\b\2ih\3\2\2\2ij\3\2\2\2jl\3\2\2\2km\5\26\f\2lk\3\2\2\2lm\3\2\2\2m"+
"n\3\2\2\2no\7\2\2\3o\3\3\2\2\2pq\7\3\2\2qr\5\36\20\2rs\7\4\2\2sv\3\2\2"+
"\2tv\5\36\20\2up\3\2\2\2ut\3\2\2\2v\5\3\2\2\2wy\7\5\2\2xz\5\b\5\2yx\3"+
"\2\2\2yz\3\2\2\2z{\3\2\2\2{|\5\4\3\2|\7\3\2\2\2}~\7\6\2\2~\t\3\2\2\2\177"+
"\u0080\5\32\16\2\u0080\13\3\2\2\2\u0081\u0082\7\7\2\2\u0082\u0083\5\60"+
"\31\2\u0083\r\3\2\2\2\u0084\u0085\7\b\2\2\u0085\u0086\7\t\2\2\u0086\u008b"+
"\5\20\t\2\u0087\u0088\7\n\2\2\u0088\u008a\5\20\t\2\u0089\u0087\3\2\2\2"+
"\u008a\u008d\3\2\2\2\u008b\u0089\3\2\2\2\u008b\u008c\3\2\2\2\u008c\17"+
"\3\2\2\2\u008d\u008b\3\2\2\2\u008e\u0090\7G\2\2\u008f\u0091\5\24\13\2"+
"\u0090\u008f\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0093\3\2\2\2\u0092\u0094"+
"\5\22\n\2\u0093\u0092\3\2\2\2\u0093\u0094\3\2\2\2\u0094\21\3\2\2\2\u0095"+
"\u0096\7\13\2\2\u0096\u009a\7\f\2\2\u0097\u0098\7\13\2\2\u0098\u009a\7"+
"\r\2\2\u0099\u0095\3\2\2\2\u0099\u0097\3\2\2\2\u009a\23\3\2\2\2\u009b"+
"\u009c\t\2\2\2\u009c\25\3\2\2\2\u009d\u009e\7\20\2\2\u009e\u00a0\7K\2"+
"\2\u009f\u00a1\5\30\r\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1"+
"\27\3\2\2\2\u00a2\u00a3\7\21\2\2\u00a3\u00a4\7K\2\2\u00a4\31\3\2\2\2\u00a5"+
"\u00a7\7\22\2\2\u00a6\u00a8\5(\25\2\u00a7\u00a6\3\2\2\2\u00a7\u00a8\3"+
"\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00ab\5 \21\2\u00aa\u00ac\5\34\17\2\u00ab"+
"\u00aa\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\33\3\2\2\2\u00ad\u00ae\7\3\2"+
"\2\u00ae\u00af\5\36\20\2\u00af\u00b0\7\4\2\2\u00b0\35\3\2\2\2\u00b1\u00b6"+
"\5\"\22\2\u00b2\u00b3\7\n\2\2\u00b3\u00b5\5\"\22\2\u00b4\u00b2\3\2\2\2"+
"\u00b5\u00b8\3\2\2\2\u00b6\u00b4\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\37"+
"\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b9\u00ba\t\3\2\2\u00ba!\3\2\2\2\u00bb"+
"\u00c0\7G\2\2\u00bc\u00c0\5$\23\2\u00bd\u00c0\5&\24\2\u00be\u00c0\7I\2"+
"\2\u00bf\u00bb\3\2\2\2\u00bf\u00bc\3\2\2\2\u00bf\u00bd\3\2\2\2\u00bf\u00be"+
"\3\2\2\2\u00c0#\3\2\2\2\u00c1\u00c2\7\23\2\2\u00c2\u00c3\5*\26\2\u00c3"+
"%\3\2\2\2\u00c4\u00c5\7\23\2\2\u00c5\u00c6\5,\27\2\u00c6\'\3\2\2\2\u00c7"+
"\u00ca\5*\26\2\u00c8\u00ca\5,\27\2\u00c9\u00c7\3\2\2\2\u00c9\u00c8\3\2"+
"\2\2\u00ca)\3\2\2\2\u00cb\u00cd\7\24\2\2\u00cc\u00ce\5.\30\2\u00cd\u00cc"+
"\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce+\3\2\2\2\u00cf\u00d1\7\25\2\2\u00d0"+
"\u00d2\5.\30\2\u00d1\u00d0\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2-\3\2\2\2"+
"\u00d3\u00d4\7\3\2\2\u00d4\u00d5\7K\2\2\u00d5\u00d6\7\4\2\2\u00d6/\3\2"+
"\2\2\u00d7\u00dc\5\62\32\2\u00d8\u00d9\7\26\2\2\u00d9\u00db\5\62\32\2"+
"\u00da\u00d8\3\2\2\2\u00db\u00de\3\2\2\2\u00dc\u00da\3\2\2\2\u00dc\u00dd"+
"\3\2\2\2\u00dd\61\3\2\2\2\u00de\u00dc\3\2\2\2\u00df\u00e4\5\64\33\2\u00e0"+
"\u00e1\7\27\2\2\u00e1\u00e3\5\64\33\2\u00e2\u00e0\3\2\2\2\u00e3\u00e6"+
"\3\2\2\2\u00e4\u00e2\3\2\2\2\u00e4\u00e5\3\2\2\2\u00e5\63\3\2\2\2\u00e6"+
"\u00e4\3\2\2\2\u00e7\u00e9\7\30\2\2\u00e8\u00e7\3\2\2\2\u00e8\u00e9\3"+
"\2\2\2\u00e9\u00ea\3\2\2\2\u00ea\u00eb\5\66\34\2\u00eb\65\3\2\2\2\u00ec"+
"\u00f2\58\35\2\u00ed\u00ee\7\3\2\2\u00ee\u00ef\5\60\31\2\u00ef\u00f0\7"+
"\4\2\2\u00f0\u00f2\3\2\2\2\u00f1\u00ec\3\2\2\2\u00f1\u00ed\3\2\2\2\u00f2"+
"\67\3\2\2\2\u00f3\u0103\5T+\2\u00f4\u0103\5P)\2\u00f5\u0103\5B\"\2\u00f6"+
"\u0103\5@!\2\u00f7\u0103\5F$\2\u00f8\u0103\5:\36\2\u00f9\u0103\5<\37\2"+
"\u00fa\u0103\5H%\2\u00fb\u0103\5J&\2\u00fc\u0103\5L\'\2\u00fd\u0103\5"+
"N(\2\u00fe\u00ff\7\3\2\2\u00ff\u0100\58\35\2\u0100\u0101\7\4\2\2\u0101"+
"\u0103\3\2\2\2\u0102\u00f3\3\2\2\2\u0102\u00f4\3\2\2\2\u0102\u00f5\3\2"+
"\2\2\u0102\u00f6\3\2\2\2\u0102\u00f7\3\2\2\2\u0102\u00f8\3\2\2\2\u0102"+
"\u00f9\3\2\2\2\u0102\u00fa\3\2\2\2\u0102\u00fb\3\2\2\2\u0102\u00fc\3\2"+
"\2\2\u0102\u00fd\3\2\2\2\u0102\u00fe\3\2\2\2\u01039\3\2\2\2\u0104\u0105"+
"\7G\2\2\u0105\u0106\7\31\2\2\u0106\u0107\5> \2\u0107;\3\2\2\2\u0108\u0109"+
"\7G\2\2\u0109\u010a\7\32\2\2\u010a\u010b\5> \2\u010b=\3\2\2\2\u010c\u0119"+
"\7F\2\2\u010d\u010e\7\3\2\2\u010e\u0113\5X-\2\u010f\u0110\7\n\2\2\u0110"+
"\u0112\5X-\2\u0111\u010f\3\2\2\2\u0112\u0115\3\2\2\2\u0113\u0111\3\2\2"+
"\2\u0113\u0114\3\2\2\2\u0114\u0116\3\2\2\2\u0115\u0113\3\2\2\2\u0116\u0117"+
"\7\4\2\2\u0117\u0119\3\2\2\2\u0118\u010c\3\2\2\2\u0118\u010d\3\2\2\2\u0119"+
"?\3\2\2\2\u011a\u011b\7G\2\2\u011b\u011c\7\33\2\2\u011c\u011d\5X-\2\u011d"+
"\u011e\7\27\2\2\u011e\u011f\5X-\2\u011fA\3\2\2\2\u0120\u0121\7G\2\2\u0121"+
"\u0122\5D#\2\u0122\u0123\5X-\2\u0123\u0124\7\34\2\2\u0124\u0125\5X-\2"+
"\u0125C\3\2\2\2\u0126\u0127\t\4\2\2\u0127E\3\2\2\2\u0128\u0129\5X-\2\u0129"+
"\u012a\7\33\2\2\u012a\u012b\7G\2\2\u012b\u012c\7\27\2\2\u012c\u012d\7"+
"G\2\2\u012dG\3\2\2\2\u012e\u012f\7G\2\2\u012f\u0130\7\37\2\2\u0130\u0134"+
"\7 \2\2\u0131\u0132\7G\2\2\u0132\u0134\7!\2\2\u0133\u012e\3\2\2\2\u0133"+
"\u0131\3\2\2\2\u0134I\3\2\2\2\u0135\u0136\7G\2\2\u0136\u0137\7\37\2\2"+
"\u0137\u0138\7\30\2\2\u0138\u013e\7 \2\2\u0139\u013a\7G\2\2\u013a\u013e"+
"\7\"\2\2\u013b\u013c\7G\2\2\u013c\u013e\7#\2\2\u013d\u0135\3\2\2\2\u013d"+
"\u0139\3\2\2\2\u013d\u013b\3\2\2\2\u013eK\3\2\2\2\u013f\u0140\7G\2\2\u0140"+
"\u0141\7\37\2\2\u0141\u0145\7$\2\2\u0142\u0143\7G\2\2\u0143\u0145\7%\2"+
"\2\u0144\u013f\3\2\2\2\u0144\u0142\3\2\2\2\u0145M\3\2\2\2\u0146\u0147"+
"\7G\2\2\u0147\u0148\7\37\2\2\u0148\u0149\7\30\2\2\u0149\u014f\7$\2\2\u014a"+
"\u014b\7G\2\2\u014b\u014f\7&\2\2\u014c\u014d\7G\2\2\u014d\u014f\7\'\2"+
"\2\u014e\u0146\3\2\2\2\u014e\u014a\3\2\2\2\u014e\u014c\3\2\2\2\u014fO"+
"\3\2\2\2\u0150\u0151\7G\2\2\u0151\u0152\5R*\2\u0152\u0153\5X-\2\u0153"+
"Q\3\2\2\2\u0154\u0155\t\5\2\2\u0155S\3\2\2\2\u0156\u0157\7G\2\2\u0157"+
"\u0158\5V,\2\u0158\u0159\5X-\2\u0159\u015f\3\2\2\2\u015a\u015b\5X-\2\u015b"+
"\u015c\5V,\2\u015c\u015d\7G\2\2\u015d\u015f\3\2\2\2\u015e\u0156\3\2\2"+
"\2\u015e\u015a\3\2\2\2\u015fU\3\2\2\2\u0160\u0161\t\6\2\2\u0161W\3\2\2"+
"\2\u0162\u0165\5Z.\2\u0163\u0165\7F\2\2\u0164\u0162\3\2\2\2\u0164\u0163"+
"\3\2\2\2\u0165Y\3\2\2\2\u0166\u0167\t\7\2\2\u0167[\3\2\2\2\"]bfiluy\u008b"+
"\u0090\u0093\u0099\u00a0\u00a7\u00ab\u00b6\u00bf\u00c9\u00cd\u00d1\u00dc"+
"\u00e4\u00e8\u00f1\u0102\u0113\u0118\u0133\u013d\u0144\u014e\u015e\u0164";
"\u0004\u0001N\u0167\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
"\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+
"\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+
"\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+
"\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+
"\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+
"\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+
"\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+
"#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+
"(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0001"+
"\u0000\u0003\u0000\\\b\u0000\u0001\u0000\u0005\u0000_\b\u0000\n\u0000"+
"\f\u0000b\t\u0000\u0001\u0000\u0003\u0000e\b\u0000\u0001\u0000\u0003\u0000"+
"h\b\u0000\u0001\u0000\u0003\u0000k\b\u0000\u0001\u0000\u0001\u0000\u0001"+
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001t\b"+
"\u0001\u0001\u0002\u0001\u0002\u0003\u0002x\b\u0002\u0001\u0002\u0001"+
"\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001"+
"\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+
"\u0006\u0005\u0006\u0088\b\u0006\n\u0006\f\u0006\u008b\t\u0006\u0001\u0007"+
"\u0001\u0007\u0003\u0007\u008f\b\u0007\u0001\u0007\u0003\u0007\u0092\b"+
"\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u0098\b\b\u0001\t\u0001"+
"\t\u0001\n\u0001\n\u0001\n\u0003\n\u009f\b\n\u0001\u000b\u0001\u000b\u0001"+
"\u000b\u0001\f\u0001\f\u0003\f\u00a6\b\f\u0001\f\u0001\f\u0003\f\u00aa"+
"\b\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e"+
"\u0005\u000e\u00b3\b\u000e\n\u000e\f\u000e\u00b6\t\u000e\u0001\u000f\u0001"+
"\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0003\u0010\u00be"+
"\b\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001"+
"\u0012\u0001\u0013\u0001\u0013\u0003\u0013\u00c8\b\u0013\u0001\u0014\u0001"+
"\u0014\u0003\u0014\u00cc\b\u0014\u0001\u0015\u0001\u0015\u0003\u0015\u00d0"+
"\b\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001"+
"\u0017\u0001\u0017\u0005\u0017\u00d9\b\u0017\n\u0017\f\u0017\u00dc\t\u0017"+
"\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u00e1\b\u0018\n\u0018"+
"\f\u0018\u00e4\t\u0018\u0001\u0019\u0003\u0019\u00e7\b\u0019\u0001\u0019"+
"\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+
"\u0003\u001a\u00f0\b\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+
"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+
"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b"+
"\u0101\b\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d"+
"\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e"+
"\u0001\u001e\u0001\u001e\u0005\u001e\u0110\b\u001e\n\u001e\f\u001e\u0113"+
"\t\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u0117\b\u001e\u0001\u001f"+
"\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001"+
" \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+
"\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0003#\u0132\b#"+
"\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0003$\u013c"+
"\b$\u0001%\u0001%\u0001%\u0001%\u0001%\u0003%\u0143\b%\u0001&\u0001&\u0001"+
"&\u0001&\u0001&\u0001&\u0001&\u0001&\u0003&\u014d\b&\u0001\'\u0001\'\u0001"+
"\'\u0001\'\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+
")\u0001)\u0003)\u015d\b)\u0001*\u0001*\u0001+\u0001+\u0003+\u0163\b+\u0001"+
",\u0001,\u0001,\u0000\u0000-\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010"+
"\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPR"+
"TVX\u0000\u0006\u0001\u0000\f\r\u0001\u0000EF\u0001\u0000\u001b\u001c"+
"\u0001\u0000&-\u0001\u0000.C\u0002\u0000HIMM\u0167\u0000[\u0001\u0000"+
"\u0000\u0000\u0002s\u0001\u0000\u0000\u0000\u0004u\u0001\u0000\u0000\u0000"+
"\u0006{\u0001\u0000\u0000\u0000\b}\u0001\u0000\u0000\u0000\n\u007f\u0001"+
"\u0000\u0000\u0000\f\u0082\u0001\u0000\u0000\u0000\u000e\u008c\u0001\u0000"+
"\u0000\u0000\u0010\u0097\u0001\u0000\u0000\u0000\u0012\u0099\u0001\u0000"+
"\u0000\u0000\u0014\u009b\u0001\u0000\u0000\u0000\u0016\u00a0\u0001\u0000"+
"\u0000\u0000\u0018\u00a3\u0001\u0000\u0000\u0000\u001a\u00ab\u0001\u0000"+
"\u0000\u0000\u001c\u00af\u0001\u0000\u0000\u0000\u001e\u00b7\u0001\u0000"+
"\u0000\u0000 \u00bd\u0001\u0000\u0000\u0000\"\u00bf\u0001\u0000\u0000"+
"\u0000$\u00c2\u0001\u0000\u0000\u0000&\u00c7\u0001\u0000\u0000\u0000("+
"\u00c9\u0001\u0000\u0000\u0000*\u00cd\u0001\u0000\u0000\u0000,\u00d1\u0001"+
"\u0000\u0000\u0000.\u00d5\u0001\u0000\u0000\u00000\u00dd\u0001\u0000\u0000"+
"\u00002\u00e6\u0001\u0000\u0000\u00004\u00ef\u0001\u0000\u0000\u00006"+
"\u0100\u0001\u0000\u0000\u00008\u0102\u0001\u0000\u0000\u0000:\u0106\u0001"+
"\u0000\u0000\u0000<\u0116\u0001\u0000\u0000\u0000>\u0118\u0001\u0000\u0000"+
"\u0000@\u011e\u0001\u0000\u0000\u0000B\u0124\u0001\u0000\u0000\u0000D"+
"\u0126\u0001\u0000\u0000\u0000F\u0131\u0001\u0000\u0000\u0000H\u013b\u0001"+
"\u0000\u0000\u0000J\u0142\u0001\u0000\u0000\u0000L\u014c\u0001\u0000\u0000"+
"\u0000N\u014e\u0001\u0000\u0000\u0000P\u0152\u0001\u0000\u0000\u0000R"+
"\u015c\u0001\u0000\u0000\u0000T\u015e\u0001\u0000\u0000\u0000V\u0162\u0001"+
"\u0000\u0000\u0000X\u0164\u0001\u0000\u0000\u0000Z\\\u0003\u0004\u0002"+
"\u0000[Z\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000\u0000\\`\u0001\u0000"+
"\u0000\u0000]_\u0003\b\u0004\u0000^]\u0001\u0000\u0000\u0000_b\u0001\u0000"+
"\u0000\u0000`^\u0001\u0000\u0000\u0000`a\u0001\u0000\u0000\u0000ad\u0001"+
"\u0000\u0000\u0000b`\u0001\u0000\u0000\u0000ce\u0003\n\u0005\u0000dc\u0001"+
"\u0000\u0000\u0000de\u0001\u0000\u0000\u0000eg\u0001\u0000\u0000\u0000"+
"fh\u0003\f\u0006\u0000gf\u0001\u0000\u0000\u0000gh\u0001\u0000\u0000\u0000"+
"hj\u0001\u0000\u0000\u0000ik\u0003\u0014\n\u0000ji\u0001\u0000\u0000\u0000"+
"jk\u0001\u0000\u0000\u0000kl\u0001\u0000\u0000\u0000lm\u0005\u0000\u0000"+
"\u0001m\u0001\u0001\u0000\u0000\u0000no\u0005\u0001\u0000\u0000op\u0003"+
"\u001c\u000e\u0000pq\u0005\u0002\u0000\u0000qt\u0001\u0000\u0000\u0000"+
"rt\u0003\u001c\u000e\u0000sn\u0001\u0000\u0000\u0000sr\u0001\u0000\u0000"+
"\u0000t\u0003\u0001\u0000\u0000\u0000uw\u0005\u0003\u0000\u0000vx\u0003"+
"\u0006\u0003\u0000wv\u0001\u0000\u0000\u0000wx\u0001\u0000\u0000\u0000"+
"xy\u0001\u0000\u0000\u0000yz\u0003\u0002\u0001\u0000z\u0005\u0001\u0000"+
"\u0000\u0000{|\u0005\u0004\u0000\u0000|\u0007\u0001\u0000\u0000\u0000"+
"}~\u0003\u0018\f\u0000~\t\u0001\u0000\u0000\u0000\u007f\u0080\u0005\u0005"+
"\u0000\u0000\u0080\u0081\u0003.\u0017\u0000\u0081\u000b\u0001\u0000\u0000"+
"\u0000\u0082\u0083\u0005\u0006\u0000\u0000\u0083\u0084\u0005\u0007\u0000"+
"\u0000\u0084\u0089\u0003\u000e\u0007\u0000\u0085\u0086\u0005\b\u0000\u0000"+
"\u0086\u0088\u0003\u000e\u0007\u0000\u0087\u0085\u0001\u0000\u0000\u0000"+
"\u0088\u008b\u0001\u0000\u0000\u0000\u0089\u0087\u0001\u0000\u0000\u0000"+
"\u0089\u008a\u0001\u0000\u0000\u0000\u008a\r\u0001\u0000\u0000\u0000\u008b"+
"\u0089\u0001\u0000\u0000\u0000\u008c\u008e\u0005E\u0000\u0000\u008d\u008f"+
"\u0003\u0012\t\u0000\u008e\u008d\u0001\u0000\u0000\u0000\u008e\u008f\u0001"+
"\u0000\u0000\u0000\u008f\u0091\u0001\u0000\u0000\u0000\u0090\u0092\u0003"+
"\u0010\b\u0000\u0091\u0090\u0001\u0000\u0000\u0000\u0091\u0092\u0001\u0000"+
"\u0000\u0000\u0092\u000f\u0001\u0000\u0000\u0000\u0093\u0094\u0005\t\u0000"+
"\u0000\u0094\u0098\u0005\n\u0000\u0000\u0095\u0096\u0005\t\u0000\u0000"+
"\u0096\u0098\u0005\u000b\u0000\u0000\u0097\u0093\u0001\u0000\u0000\u0000"+
"\u0097\u0095\u0001\u0000\u0000\u0000\u0098\u0011\u0001\u0000\u0000\u0000"+
"\u0099\u009a\u0007\u0000\u0000\u0000\u009a\u0013\u0001\u0000\u0000\u0000"+
"\u009b\u009c\u0005\u000e\u0000\u0000\u009c\u009e\u0005I\u0000\u0000\u009d"+
"\u009f\u0003\u0016\u000b\u0000\u009e\u009d\u0001\u0000\u0000\u0000\u009e"+
"\u009f\u0001\u0000\u0000\u0000\u009f\u0015\u0001\u0000\u0000\u0000\u00a0"+
"\u00a1\u0005\u000f\u0000\u0000\u00a1\u00a2\u0005I\u0000\u0000\u00a2\u0017"+
"\u0001\u0000\u0000\u0000\u00a3\u00a5\u0005\u0010\u0000\u0000\u00a4\u00a6"+
"\u0003&\u0013\u0000\u00a5\u00a4\u0001\u0000\u0000\u0000\u00a5\u00a6\u0001"+
"\u0000\u0000\u0000\u00a6\u00a7\u0001\u0000\u0000\u0000\u00a7\u00a9\u0003"+
"\u001e\u000f\u0000\u00a8\u00aa\u0003\u001a\r\u0000\u00a9\u00a8\u0001\u0000"+
"\u0000\u0000\u00a9\u00aa\u0001\u0000\u0000\u0000\u00aa\u0019\u0001\u0000"+
"\u0000\u0000\u00ab\u00ac\u0005\u0001\u0000\u0000\u00ac\u00ad\u0003\u001c"+
"\u000e\u0000\u00ad\u00ae\u0005\u0002\u0000\u0000\u00ae\u001b\u0001\u0000"+
"\u0000\u0000\u00af\u00b4\u0003 \u0010\u0000\u00b0\u00b1\u0005\b\u0000"+
"\u0000\u00b1\u00b3\u0003 \u0010\u0000\u00b2\u00b0\u0001\u0000\u0000\u0000"+
"\u00b3\u00b6\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000"+
"\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u001d\u0001\u0000\u0000\u0000"+
"\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7\u00b8\u0007\u0001\u0000\u0000"+
"\u00b8\u001f\u0001\u0000\u0000\u0000\u00b9\u00be\u0005E\u0000\u0000\u00ba"+
"\u00be\u0003\"\u0011\u0000\u00bb\u00be\u0003$\u0012\u0000\u00bc\u00be"+
"\u0005G\u0000\u0000\u00bd\u00b9\u0001\u0000\u0000\u0000\u00bd\u00ba\u0001"+
"\u0000\u0000\u0000\u00bd\u00bb\u0001\u0000\u0000\u0000\u00bd\u00bc\u0001"+
"\u0000\u0000\u0000\u00be!\u0001\u0000\u0000\u0000\u00bf\u00c0\u0005\u0011"+
"\u0000\u0000\u00c0\u00c1\u0003(\u0014\u0000\u00c1#\u0001\u0000\u0000\u0000"+
"\u00c2\u00c3\u0005\u0011\u0000\u0000\u00c3\u00c4\u0003*\u0015\u0000\u00c4"+
"%\u0001\u0000\u0000\u0000\u00c5\u00c8\u0003(\u0014\u0000\u00c6\u00c8\u0003"+
"*\u0015\u0000\u00c7\u00c5\u0001\u0000\u0000\u0000\u00c7\u00c6\u0001\u0000"+
"\u0000\u0000\u00c8\'\u0001\u0000\u0000\u0000\u00c9\u00cb\u0005\u0012\u0000"+
"\u0000\u00ca\u00cc\u0003,\u0016\u0000\u00cb\u00ca\u0001\u0000\u0000\u0000"+
"\u00cb\u00cc\u0001\u0000\u0000\u0000\u00cc)\u0001\u0000\u0000\u0000\u00cd"+
"\u00cf\u0005\u0013\u0000\u0000\u00ce\u00d0\u0003,\u0016\u0000\u00cf\u00ce"+
"\u0001\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0+\u0001"+
"\u0000\u0000\u0000\u00d1\u00d2\u0005\u0001\u0000\u0000\u00d2\u00d3\u0005"+
"I\u0000\u0000\u00d3\u00d4\u0005\u0002\u0000\u0000\u00d4-\u0001\u0000\u0000"+
"\u0000\u00d5\u00da\u00030\u0018\u0000\u00d6\u00d7\u0005\u0014\u0000\u0000"+
"\u00d7\u00d9\u00030\u0018\u0000\u00d8\u00d6\u0001\u0000\u0000\u0000\u00d9"+
"\u00dc\u0001\u0000\u0000\u0000\u00da\u00d8\u0001\u0000\u0000\u0000\u00da"+
"\u00db\u0001\u0000\u0000\u0000\u00db/\u0001\u0000\u0000\u0000\u00dc\u00da"+
"\u0001\u0000\u0000\u0000\u00dd\u00e2\u00032\u0019\u0000\u00de\u00df\u0005"+
"\u0015\u0000\u0000\u00df\u00e1\u00032\u0019\u0000\u00e0\u00de\u0001\u0000"+
"\u0000\u0000\u00e1\u00e4\u0001\u0000\u0000\u0000\u00e2\u00e0\u0001\u0000"+
"\u0000\u0000\u00e2\u00e3\u0001\u0000\u0000\u0000\u00e31\u0001\u0000\u0000"+
"\u0000\u00e4\u00e2\u0001\u0000\u0000\u0000\u00e5\u00e7\u0005\u0016\u0000"+
"\u0000\u00e6\u00e5\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001\u0000\u0000"+
"\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u00e9\u00034\u001a\u0000"+
"\u00e93\u0001\u0000\u0000\u0000\u00ea\u00f0\u00036\u001b\u0000\u00eb\u00ec"+
"\u0005\u0001\u0000\u0000\u00ec\u00ed\u0003.\u0017\u0000\u00ed\u00ee\u0005"+
"\u0002\u0000\u0000\u00ee\u00f0\u0001\u0000\u0000\u0000\u00ef\u00ea\u0001"+
"\u0000\u0000\u0000\u00ef\u00eb\u0001\u0000\u0000\u0000\u00f05\u0001\u0000"+
"\u0000\u0000\u00f1\u0101\u0003R)\u0000\u00f2\u0101\u0003N\'\u0000\u00f3"+
"\u0101\u0003@ \u0000\u00f4\u0101\u0003>\u001f\u0000\u00f5\u0101\u0003"+
"D\"\u0000\u00f6\u0101\u00038\u001c\u0000\u00f7\u0101\u0003:\u001d\u0000"+
"\u00f8\u0101\u0003F#\u0000\u00f9\u0101\u0003H$\u0000\u00fa\u0101\u0003"+
"J%\u0000\u00fb\u0101\u0003L&\u0000\u00fc\u00fd\u0005\u0001\u0000\u0000"+
"\u00fd\u00fe\u00036\u001b\u0000\u00fe\u00ff\u0005\u0002\u0000\u0000\u00ff"+
"\u0101\u0001\u0000\u0000\u0000\u0100\u00f1\u0001\u0000\u0000\u0000\u0100"+
"\u00f2\u0001\u0000\u0000\u0000\u0100\u00f3\u0001\u0000\u0000\u0000\u0100"+
"\u00f4\u0001\u0000\u0000\u0000\u0100\u00f5\u0001\u0000\u0000\u0000\u0100"+
"\u00f6\u0001\u0000\u0000\u0000\u0100\u00f7\u0001\u0000\u0000\u0000\u0100"+
"\u00f8\u0001\u0000\u0000\u0000\u0100\u00f9\u0001\u0000\u0000\u0000\u0100"+
"\u00fa\u0001\u0000\u0000\u0000\u0100\u00fb\u0001\u0000\u0000\u0000\u0100"+
"\u00fc\u0001\u0000\u0000\u0000\u01017\u0001\u0000\u0000\u0000\u0102\u0103"+
"\u0005E\u0000\u0000\u0103\u0104\u0005\u0017\u0000\u0000\u0104\u0105\u0003"+
"<\u001e\u0000\u01059\u0001\u0000\u0000\u0000\u0106\u0107\u0005E\u0000"+
"\u0000\u0107\u0108\u0005\u0018\u0000\u0000\u0108\u0109\u0003<\u001e\u0000"+
"\u0109;\u0001\u0000\u0000\u0000\u010a\u0117\u0005D\u0000\u0000\u010b\u010c"+
"\u0005\u0001\u0000\u0000\u010c\u0111\u0003V+\u0000\u010d\u010e\u0005\b"+
"\u0000\u0000\u010e\u0110\u0003V+\u0000\u010f\u010d\u0001\u0000\u0000\u0000"+
"\u0110\u0113\u0001\u0000\u0000\u0000\u0111\u010f\u0001\u0000\u0000\u0000"+
"\u0111\u0112\u0001\u0000\u0000\u0000\u0112\u0114\u0001\u0000\u0000\u0000"+
"\u0113\u0111\u0001\u0000\u0000\u0000\u0114\u0115\u0005\u0002\u0000\u0000"+
"\u0115\u0117\u0001\u0000\u0000\u0000\u0116\u010a\u0001\u0000\u0000\u0000"+
"\u0116\u010b\u0001\u0000\u0000\u0000\u0117=\u0001\u0000\u0000\u0000\u0118"+
"\u0119\u0005E\u0000\u0000\u0119\u011a\u0005\u0019\u0000\u0000\u011a\u011b"+
"\u0003V+\u0000\u011b\u011c\u0005\u0015\u0000\u0000\u011c\u011d\u0003V"+
"+\u0000\u011d?\u0001\u0000\u0000\u0000\u011e\u011f\u0005E\u0000\u0000"+
"\u011f\u0120\u0003B!\u0000\u0120\u0121\u0003V+\u0000\u0121\u0122\u0005"+
"\u001a\u0000\u0000\u0122\u0123\u0003V+\u0000\u0123A\u0001\u0000\u0000"+
"\u0000\u0124\u0125\u0007\u0002\u0000\u0000\u0125C\u0001\u0000\u0000\u0000"+
"\u0126\u0127\u0003V+\u0000\u0127\u0128\u0005\u0019\u0000\u0000\u0128\u0129"+
"\u0005E\u0000\u0000\u0129\u012a\u0005\u0015\u0000\u0000\u012a\u012b\u0005"+
"E\u0000\u0000\u012bE\u0001\u0000\u0000\u0000\u012c\u012d\u0005E\u0000"+
"\u0000\u012d\u012e\u0005\u001d\u0000\u0000\u012e\u0132\u0005\u001e\u0000"+
"\u0000\u012f\u0130\u0005E\u0000\u0000\u0130\u0132\u0005\u001f\u0000\u0000"+
"\u0131\u012c\u0001\u0000\u0000\u0000\u0131\u012f\u0001\u0000\u0000\u0000"+
"\u0132G\u0001\u0000\u0000\u0000\u0133\u0134\u0005E\u0000\u0000\u0134\u0135"+
"\u0005\u001d\u0000\u0000\u0135\u0136\u0005\u0016\u0000\u0000\u0136\u013c"+
"\u0005\u001e\u0000\u0000\u0137\u0138\u0005E\u0000\u0000\u0138\u013c\u0005"+
" \u0000\u0000\u0139\u013a\u0005E\u0000\u0000\u013a\u013c\u0005!\u0000"+
"\u0000\u013b\u0133\u0001\u0000\u0000\u0000\u013b\u0137\u0001\u0000\u0000"+
"\u0000\u013b\u0139\u0001\u0000\u0000\u0000\u013cI\u0001\u0000\u0000\u0000"+
"\u013d\u013e\u0005E\u0000\u0000\u013e\u013f\u0005\u001d\u0000\u0000\u013f"+
"\u0143\u0005\"\u0000\u0000\u0140\u0141\u0005E\u0000\u0000\u0141\u0143"+
"\u0005#\u0000\u0000\u0142\u013d\u0001\u0000\u0000\u0000\u0142\u0140\u0001"+
"\u0000\u0000\u0000\u0143K\u0001\u0000\u0000\u0000\u0144\u0145\u0005E\u0000"+
"\u0000\u0145\u0146\u0005\u001d\u0000\u0000\u0146\u0147\u0005\u0016\u0000"+
"\u0000\u0147\u014d\u0005\"\u0000\u0000\u0148\u0149\u0005E\u0000\u0000"+
"\u0149\u014d\u0005$\u0000\u0000\u014a\u014b\u0005E\u0000\u0000\u014b\u014d"+
"\u0005%\u0000\u0000\u014c\u0144\u0001\u0000\u0000\u0000\u014c\u0148\u0001"+
"\u0000\u0000\u0000\u014c\u014a\u0001\u0000\u0000\u0000\u014dM\u0001\u0000"+
"\u0000\u0000\u014e\u014f\u0005E\u0000\u0000\u014f\u0150\u0003P(\u0000"+
"\u0150\u0151\u0003V+\u0000\u0151O\u0001\u0000\u0000\u0000\u0152\u0153"+
"\u0007\u0003\u0000\u0000\u0153Q\u0001\u0000\u0000\u0000\u0154\u0155\u0005"+
"E\u0000\u0000\u0155\u0156\u0003T*\u0000\u0156\u0157\u0003V+\u0000\u0157"+
"\u015d\u0001\u0000\u0000\u0000\u0158\u0159\u0003V+\u0000\u0159\u015a\u0003"+
"T*\u0000\u015a\u015b\u0005E\u0000\u0000\u015b\u015d\u0001\u0000\u0000"+
"\u0000\u015c\u0154\u0001\u0000\u0000\u0000\u015c\u0158\u0001\u0000\u0000"+
"\u0000\u015dS\u0001\u0000\u0000\u0000\u015e\u015f\u0007\u0004\u0000\u0000"+
"\u015fU\u0001\u0000\u0000\u0000\u0160\u0163\u0003X,\u0000\u0161\u0163"+
"\u0005D\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0161\u0001"+
"\u0000\u0000\u0000\u0163W\u0001\u0000\u0000\u0000\u0164\u0165\u0007\u0005"+
"\u0000\u0000\u0165Y\u0001\u0000\u0000\u0000 [`dgjsw\u0089\u008e\u0091"+
"\u0097\u009e\u00a5\u00a9\u00b4\u00bd\u00c7\u00cb\u00cf\u00da\u00e2\u00e6"+
"\u00ef\u0100\u0111\u0116\u0131\u013b\u0142\u014c\u015c\u0162";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
@@ -3043,4 +3175,4 @@ public class EQLParser extends Parser {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
}
@@ -1,4 +1,4 @@
// Generated from /home/rob/github/ebean-dir/ebean/src/test/resources/EQL.g4 by ANTLR 4.8
// Generated from /Users/robinbygrave/Documents/github/ebean/ebean/ebean-test/src/test/resources/EQL.g4 by ANTLR 4.13.1
package io.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
@@ -52,10 +52,15 @@ abstract class DLoadBaseContext {
void setLabel(SpiQuery<?> query) {
String label = parent.planLabel();
if (label != null) {
query.setProfilePath(label, fullPath + "(" + query.loadMode() + ")", parent.profileLocation());
query.setProfilePath(label, pathMode(query), parent.profileLocation());
}
}
private String pathMode(SpiQuery<?> query) {
final var loadMode = query.loadMode();
return fullPath == null ? '_' + loadMode : fullPath + "__" + loadMode;
}
PersistenceContext persistenceContext() {
return parent.persistenceContext();
}
@@ -1,7 +1,5 @@
package io.ebeaninternal.server.properties;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -11,34 +9,14 @@ import java.util.Map;
public final class BeanPropertiesReader {
private final Map<String, Integer> propertyIndexMap = new HashMap<>();
private final String[] props;
public BeanPropertiesReader(Class<?> clazz) {
this.props = getProperties(clazz);
public BeanPropertiesReader(String[] props) {
for (int i = 0; i < props.length; i++) {
propertyIndexMap.put(props[i], i);
}
}
public String[] getProperties() {
return props;
}
@Override
public String toString() {
return Arrays.toString(props);
}
public Integer getPropertyIndex(String property) {
public Integer propertyIndex(String property) {
return propertyIndexMap.get(property);
}
private String[] getProperties(Class<?> clazz) {
try {
Field field = clazz.getField("_ebean_props");
return (String[]) field.get(null);
} catch (Exception e) {
throw new IllegalStateException("Error getting _ebean_props field on type " + clazz, e);
}
}
}
@@ -7,7 +7,7 @@ import io.ebean.annotation.Platform;
import io.ebean.bean.BeanCollection;
import io.ebean.bean.EntityBean;
import io.ebean.bean.ObjectGraphNode;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.util.JdbcClose;
import io.ebean.util.StringHelper;
@@ -38,7 +38,7 @@ public final class CQueryEngine {
private final CQueryHistorySupport historySupport;
private final DatabasePlatform dbPlatform;
public CQueryEngine(DatabaseConfig config, DatabasePlatform dbPlatform, Binder binder, Map<String, String> asOfTableMapping, Map<String, String> draftTableMap) {
public CQueryEngine(DatabaseBuilder.Settings config, DatabasePlatform dbPlatform, Binder binder, Map<String, String> asOfTableMapping, Map<String, String> draftTableMap) {
this.dbPlatform = dbPlatform;
this.defaultFetchSizeFindEach = config.getJdbcFetchSizeFindEach();
this.defaultFetchSizeFindList = config.getJdbcFetchSizeFindList();
@@ -17,9 +17,16 @@ import static java.lang.System.Logger.Level.WARNING;
*/
public final class QueryPlanLoggerExplain extends QueryPlanLogger {
private final String prefix;
public QueryPlanLoggerExplain(String prefix) {
this.prefix = prefix;
}
@SuppressWarnings("all")
@Override
public SpiDbQueryPlan collectPlan(Connection conn, SpiQueryPlan plan, BindCapture bind) {
try (PreparedStatement explainStmt = conn.prepareStatement("EXPLAIN " + plan.sql())) {
try (PreparedStatement explainStmt = conn.prepareStatement(prefix + plan.sql())) {
bind.prepare(explainStmt, conn);
try (ResultSet rset = explainStmt.executeQuery()) {
return readQueryPlan(plan, bind, rset);
@@ -1,33 +0,0 @@
package io.ebeaninternal.server.query;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.api.SpiDbQueryPlan;
import io.ebeaninternal.api.SpiQueryPlan;
import io.ebeaninternal.server.bind.capture.BindCapture;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import static java.lang.System.Logger.Level.WARNING;
/**
* A QueryPlanLogger for Postgres that prefixes "EXPLAIN ANALYZE" to the query.
*/
public final class QueryPlanLoggerPostgres extends QueryPlanLogger {
@Override
public SpiDbQueryPlan collectPlan(Connection conn, SpiQueryPlan plan, BindCapture bind) {
String explain = "explain (analyze, buffers) " + plan.sql();
try (PreparedStatement explainStmt = conn.prepareStatement(explain)) {
bind.prepare(explainStmt, conn);
try (ResultSet rset = explainStmt.executeQuery()) {
return readQueryPlanBasic(plan, bind, rset);
}
} catch (SQLException e) {
CoreLog.log.log(WARNING, "Could not log query plan: " + explain, e);
return null;
}
}
}
@@ -1,6 +1,7 @@
package io.ebeaninternal.server.querydefn;
import io.avaje.lang.NonNullApi;
import io.avaje.lang.Nullable;
import io.ebean.*;
import io.ebean.bean.CallOrigin;
import io.ebean.bean.ObjectGraphNode;
@@ -245,9 +246,9 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
}
@Override
public final void setProfilePath(String label, String relativePath, ProfileLocation profileLocation) {
public final void setProfilePath(String label, String relativePath, @Nullable ProfileLocation profileLocation) {
this.profileLocation = profileLocation;
this.label = ((profileLocation == null) ? label : profileLocation.label()) + "_" + relativePath;
this.label = (profileLocation == null ? label : profileLocation.label()) + '_' + relativePath;
}
@Override
@@ -2,7 +2,7 @@ package io.ebeaninternal.server.transaction;
import io.ebean.BackgroundExecutor;
import io.ebean.cache.ServerCacheNotify;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.plugin.SpiServer;
import io.ebeaninternal.api.SpiLogManager;
import io.ebeaninternal.api.SpiProfileHandler;
@@ -18,7 +18,7 @@ public final class TransactionManagerOptions {
final SpiServer server;
final boolean notifyL2CacheInForeground;
final DatabaseConfig config;
final DatabaseBuilder.Settings config;
final ClusterManager clusterManager;
final BackgroundExecutor backgroundExecutor;
@@ -33,8 +33,8 @@ public final class TransactionManagerOptions {
final ClockService clockService;
public TransactionManagerOptions(SpiServer server, boolean notifyL2CacheInForeground, DatabaseConfig config, TransactionScopeManager scopeManager, ClusterManager clusterManager,
BackgroundExecutor backgroundExecutor, DocStoreUpdateProcessor docStoreUpdateProcessor,
public TransactionManagerOptions(SpiServer server, boolean notifyL2CacheInForeground, DatabaseBuilder.Settings config, TransactionScopeManager scopeManager,
ClusterManager clusterManager, BackgroundExecutor backgroundExecutor, DocStoreUpdateProcessor docStoreUpdateProcessor,
BeanDescriptorManager descMgr, DataSourceSupplier dataSourceSupplier, SpiProfileHandler profileHandler,
SpiLogManager logManager, TableModState tableModState, ServerCacheNotify cacheNotify, ClockService clockService) {
this.server = server;
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.type;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.JsonConfig;
import io.ebean.core.type.ScalarType;
import io.ebean.core.type.BasicTypeConverter;
@@ -16,9 +16,9 @@ import java.util.Date;
*/
final class DefaultTypeFactory {
private final DatabaseConfig config;
private final DatabaseBuilder.Settings config;
public DefaultTypeFactory(DatabaseConfig config) {
public DefaultTypeFactory(DatabaseBuilder.Settings config) {
this.config = config;
}
@@ -1,11 +1,9 @@
package io.ebeaninternal.server.type;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.ebean.DatabaseBuilder;
import io.ebean.annotation.*;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.JsonConfig;
import io.ebean.config.PlatformConfig;
import io.ebean.config.ScalarTypeConverter;
import io.ebean.config.*;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DbPlatformType;
import io.ebean.core.type.*;
@@ -78,7 +76,7 @@ public final class DefaultTypeManager implements TypeManager {
/**
* Create the DefaultTypeManager.
*/
public DefaultTypeManager(DatabaseConfig config, BootupClasses bootupClasses) {
public DefaultTypeManager(DatabaseBuilder.Settings config, BootupClasses bootupClasses) {
this.jsonDateTime = config.getJsonDateTime();
this.jsonDate = config.getJsonDate();
this.typeMap = new ConcurrentHashMap<>();
@@ -110,7 +108,7 @@ public final class DefaultTypeManager implements TypeManager {
}
}
private void loadGeoTypeBinder(DatabaseConfig config) {
private void loadGeoTypeBinder(DatabaseBuilder.Settings config) {
GeoTypeProvider provider = config.getServiceObject(GeoTypeProvider.class);
if (provider == null) {
provider = ServiceUtil.service(GeoTypeProvider.class);
@@ -141,7 +139,7 @@ public final class DefaultTypeManager implements TypeManager {
/**
* Load custom scalar types registered via ExtraTypeFactory and ServiceLoader.
*/
private void loadTypesFromProviders(DatabaseConfig config, Object objectMapper) {
private void loadTypesFromProviders(DatabaseBuilder.Settings config, Object objectMapper) {
for (ExtraTypeFactory plugin : ServiceLoader.load(ExtraTypeFactory.class)) {
for (ScalarType<?> type : plugin.createTypes(config, objectMapper)) {
add(type);
@@ -618,7 +616,7 @@ public final class DefaultTypeManager implements TypeManager {
}
private Object initObjectMapper(DatabaseConfig config) {
private Object initObjectMapper(DatabaseBuilder.Settings config) {
Object objectMapper = config.getObjectMapper();
if (objectMapper == null) {
objectMapper = InitObjectMapper.init();
@@ -676,7 +674,7 @@ public final class DefaultTypeManager implements TypeManager {
}
private void initialiseJavaTimeTypes(DatabaseConfig config) {
private void initialiseJavaTimeTypes(DatabaseBuilder.Settings config) {
ZoneId zoneId = zoneId(config);
typeMap.put(java.nio.file.Path.class, new ScalarTypePath());
@@ -704,7 +702,7 @@ public final class DefaultTypeManager implements TypeManager {
addType(Duration.class, (durationNanos) ? new ScalarTypeDurationWithNanos() : new ScalarTypeDuration());
}
private ZoneId zoneId(DatabaseConfig config) {
private ZoneId zoneId(DatabaseBuilder.Settings config) {
final String dataTimeZone = config.getDataTimeZone();
return (dataTimeZone == null) ? ZoneOffset.systemDefault() : TimeZone.getTimeZone(dataTimeZone).toZoneId();
}
@@ -718,7 +716,7 @@ public final class DefaultTypeManager implements TypeManager {
* Register all the standard types supported. This is the standard JDBC types
* plus some other common types such as java.util.Date and java.util.Calendar.
*/
private void initialiseStandard(DatabaseConfig config) {
private void initialiseStandard(DatabaseBuilder.Settings config) {
DatabasePlatform databasePlatform = config.getDatabasePlatform();
int platformClobType = databasePlatform.clobDbType();
int platformBlobType = databasePlatform.blobDbType();
@@ -1,7 +1,9 @@
package io.ebeaninternal.server.core;
import io.ebean.DatabaseBuilder;
import io.ebean.config.DatabaseConfig;
import io.ebean.datasource.DataSourceAlert;
import io.ebean.datasource.DataSourceBuilder;
import io.ebean.datasource.DataSourceConfig;
import io.ebean.datasource.DataSourcePool;
import io.ebean.platform.h2.H2Platform;
@@ -17,12 +19,12 @@ import static org.junit.jupiter.api.Assertions.*;
public class InitDataSourceTest {
private DatabaseConfig newConfig(String readOnlyUrl) {
DatabaseConfig config = new DatabaseConfig();
private DatabaseBuilder.Settings newConfig(String readOnlyUrl) {
DatabaseBuilder config = new DatabaseConfig();
DataSourceConfig roConfig = new DataSourceConfig();
roConfig.setUrl(readOnlyUrl);
config.setReadOnlyDataSourceConfig(roConfig);
return config;
return config.settings();
}
@Test
@@ -63,72 +65,73 @@ public class InitDataSourceTest {
@Test
public void readOnlyConfig_when_autoReadOnlyDataSource_expect_setToNull() {
DatabaseConfig config = newConfig("none");
var config = newConfig("none");
config.setAutoReadOnlyDataSource(true);
final DataSourceConfig readOnlyConfig = new InitDataSource(config).readOnlyConfig();
assertNull(readOnlyConfig.getUrl());
final DataSourceBuilder readOnlyConfig = new InitDataSource(config).readOnlyConfig();
assertThat(readOnlyConfig).isNotNull();
assertNull(readOnlyConfig.settings().getUrl());
}
@Test
public void readOnlyConfig_when_urlSet() {
DatabaseConfig config = newConfig("foo");
var config = newConfig("foo");
final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
final DataSourceBuilder roConfig = new InitDataSource(config).readOnlyConfig();
assertNotNull(roConfig);
assertEquals("foo", roConfig.getUrl());
assertEquals("foo", roConfig.settings().getUrl());
}
@Test
public void readOnlyConfig_when_readOnlyUrlSetOnMain() {
DatabaseConfig config = newConfig(null);
var config = newConfig(null);
// alternate location to set read-only url for developer convenience
config.getDataSourceConfig().setReadOnlyUrl("bar");
config.getDataSourceConfig().readOnlyUrl("bar");
final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
final DataSourceBuilder roConfig = new InitDataSource(config).readOnlyConfig();
assertNotNull(roConfig);
assertEquals("bar", roConfig.getUrl());
assertEquals("bar", roConfig.settings().getUrl());
}
@Test
public void readOnlyConfig_when_readOnlyUrlSetOnMain_withNone() {
DatabaseConfig config = newConfig("None");
var config = newConfig("None");
// alternate location to set read-only url for developer convenience
config.getDataSourceConfig().setReadOnlyUrl("bar");
config.getDataSourceConfig().readOnlyUrl("bar");
final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
final DataSourceBuilder roConfig = new InitDataSource(config).readOnlyConfig();
assertNotNull(roConfig);
assertEquals("bar", roConfig.getUrl());
assertEquals("bar", roConfig.settings().getUrl());
}
@Test
public void readOnlyConfig_when_bothReadOnlyUrlsSet() {
DatabaseConfig config = newConfig("one");
config.getDataSourceConfig().setReadOnlyUrl("two");
var config = newConfig("one");
config.getDataSourceConfig().readOnlyUrl("two");
final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
final DataSourceBuilder roConfig = new InitDataSource(config).readOnlyConfig();
assertNotNull(roConfig);
assertEquals("one", roConfig.getUrl());
assertEquals("one", roConfig.settings().getUrl());
}
@Test
public void readOnlyConfig_when_readOnlyUrlSetOnMain_withNoneNone() {
DatabaseConfig config = newConfig("none");
var config = newConfig("none");
// alternate location to set read-only url for developer convenience
config.getDataSourceConfig().setReadOnlyUrl("none");
config.getDataSourceConfig().readOnlyUrl("none");
final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
final DataSourceBuilder roConfig = new InitDataSource(config).readOnlyConfig();
assertNull(roConfig);
}
@Test
public void readOnlyConfig_when_urlSet_2() {
DatabaseConfig config = new DatabaseConfig();
config.getReadOnlyDataSourceConfig().setUrl("foo");
config.settings().getReadOnlyDataSourceConfig().url("foo");
final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig();
final DataSourceBuilder roConfig = new InitDataSource(config).readOnlyConfig();
assertNotNull(roConfig);
assertEquals("foo", roConfig.getUrl());
assertEquals("foo", roConfig.settings().getUrl());
}
@Test
@@ -170,10 +173,10 @@ public class InitDataSourceTest {
@Test
public void online() {
DatabaseConfig config = new DatabaseConfig();
config.getDataSourceConfig().setUsername("sa");
config.getDataSourceConfig().setPassword("");
config.getDataSourceConfig().setUrl("jdbc:h2:mem:dsTestOnline");
config.getDataSourceConfig().setDriver("org.h2.Driver");
config.getDataSourceConfig().username("sa");
config.getDataSourceConfig().password("");
config.getDataSourceConfig().url("jdbc:h2:mem:dsTestOnline");
config.getDataSourceConfig().driver("org.h2.Driver");
InitDataSource.init(config);
DataSourcePool pool = (DataSourcePool) config.getDataSource();
assertThat(pool.isDataSourceUp()).isTrue();
@@ -202,14 +205,15 @@ public class InitDataSourceTest {
@Test
public void offline() throws SQLException {
DatabaseConfig config = new DatabaseConfig();
config.getDataSourceConfig().setUsername("sa");
config.getDataSourceConfig().setPassword("");
config.getDataSourceConfig().setUrl("jdbc:h2:mem:dsTestOffline");
config.getDataSourceConfig().setDriver("org.h2.Driver");
config.getDataSourceConfig().setOffline(true);
config.getDataSourceConfig().setFailOnStart(false);
DataSourceBuilder dsConfig = config.getDataSourceConfig();
dsConfig.username("sa");
dsConfig.password("");
dsConfig.url("jdbc:h2:mem:dsTestOffline");
dsConfig.driver("org.h2.Driver");
dsConfig.offline(true);
dsConfig.failOnStart(false);
MyAlert alert = new MyAlert();
config.getDataSourceConfig().setAlert(alert);
dsConfig.alert(alert);
config.setDatabasePlatformName("h2");
InitDataSource.init(config);
DataSourcePool pool = (DataSourcePool) config.getDataSource();
@@ -1,7 +1,6 @@
package io.ebeaninternal.server.deploy;
import io.ebean.DatabaseFactory;
import io.ebean.config.DatabaseConfig;
import io.ebean.Database;
import io.ebean.event.AbstractBeanPersistListener;
import io.ebean.event.BeanPersistAdapter;
import io.ebean.event.BeanPersistListener;
@@ -17,16 +16,16 @@ public class BeanDescriptor_registerTest {
@Test
public void testRegisterDeregister() {
DatabaseConfig config = new DatabaseConfig();
Database db = Database.builder()
.name("h2other")
.loadFromProperties()
.ddlExtra(false)
.register(false)
.defaultDatabase(false)
.addClass(EBasic.class)
.build();
config.setName("h2other");
config.loadFromProperties();
config.setDdlExtra(false);
config.setRegister(false);
config.setDefaultServer(false);
config.addClass(EBasic.class);
SpiEbeanServer ebeanServer = (SpiEbeanServer)DatabaseFactory.create(config);
SpiEbeanServer ebeanServer = (SpiEbeanServer)db;
try {
BeanDescriptor<EBasic> desc = ebeanServer.descriptor(EBasic.class);
persistListenerRegistrationTests(desc);
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.deploy.parse;
import io.ebean.DatabaseBuilder;
import io.ebean.config.DatabaseConfig;
import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.server.core.bootup.BootupClasses;
@@ -7,6 +8,7 @@ import io.ebeaninternal.server.deploy.generatedproperty.GeneratedPropertyFactory
import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import io.ebeaninternal.server.type.DefaultTypeManager;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
import java.util.Collections;
@@ -44,17 +46,17 @@ public class AnnotationClassTest {
}
@SuppressWarnings({"unchecked", "rawtypes"})
private AnnotationClass createAnnotationClass(DatabaseConfig config) {
private AnnotationClass createAnnotationClass(DatabaseBuilder.Settings config) {
DeployUtil deployUtil = new DeployUtil(new DefaultTypeManager(config, new BootupClasses()), config);
DeployBeanInfo deployBeanInfo = new DeployBeanInfo(deployUtil, new DeployBeanDescriptor<>(null, null, null));
DeployBeanInfo deployBeanInfo = new DeployBeanInfo(deployUtil, new DeployBeanDescriptor<>(null, Customer.class, null));
ReadAnnotationConfig readAnnotationConfig = new ReadAnnotationConfig(new GeneratedPropertyFactory(true, new DatabaseConfig(), Collections.emptyList()), "","", new DatabaseConfig());
return new AnnotationClass(deployBeanInfo, readAnnotationConfig);
}
private DatabaseConfig sqlServerPlatform(boolean allQuotedIdentifiers) {
private DatabaseBuilder.Settings sqlServerPlatform(boolean allQuotedIdentifiers) {
SqlServer17Platform sqlServer17Platform = new SqlServer17Platform();
DatabaseConfig config = new DatabaseConfig();
var config = new DatabaseConfig().settings();
config.setDatabasePlatform(sqlServer17Platform);
config.setAllQuotedIdentifiers(allQuotedIdentifiers);
@@ -55,7 +55,7 @@ class BasicProfileLocationTest {
DProfileLocation loc = new DTimedProfileLocation("foo", MetricFactory.get().createTimedMetric("junk"));
assertThat(loc.obtain()).isTrue();
assertThat(loc.fullLocation()).endsWith("org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)");
assertThat(loc.fullLocation()).endsWith("org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)");
assertThat(loc.location()).isEqualTo("org.junit.platform.commons.util.ReflectionUtils.invokeMethod");
assertThat(loc.label()).isEqualTo("ReflectionUtils.invokeMethod");
}
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.type;
import io.ebean.config.DatabaseConfig;
import io.ebean.core.type.ScalarType;
import org.junit.jupiter.api.Test;
@@ -10,7 +11,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
public class DefaultTypeFactoryTest {
DefaultTypeFactory defaultTypeFactory = new DefaultTypeFactory(null);
DefaultTypeFactory defaultTypeFactory = new DefaultTypeFactory(new DatabaseConfig());
@Test
public void testCreateBoolean() throws Exception {
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.type;
import io.ebean.DatabaseBuilder;
import io.ebean.config.DatabaseConfig;
import io.ebean.platform.postgres.PostgresPlatform;
import io.ebean.core.type.ScalarType;
@@ -20,7 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
public class DefaultTypeManagerTest {
private DefaultTypeManager create() {
DatabaseConfig serverConfig = new DatabaseConfig();
var serverConfig = new DatabaseConfig();
serverConfig.setDatabasePlatform(new PostgresPlatform());
BootupClasses bootupClasses = new BootupClasses();
return new DefaultTypeManager(serverConfig, bootupClasses);
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.type;
import io.ebean.DatabaseBuilder;
import io.ebean.config.DatabaseConfig;
import io.ebean.platform.h2.H2Platform;
import io.ebean.core.type.DataReader;
@@ -121,7 +122,7 @@ class TestTypeManager extends BaseTest {
}
private DefaultTypeManager createTypeManager() {
DatabaseConfig config = new DatabaseConfig();
var config = new DatabaseConfig();
config.setDatabasePlatform(new H2Platform());
BootupClasses bootupClasses = new BootupClasses();
@@ -131,7 +132,7 @@ class TestTypeManager extends BaseTest {
}
private DefaultTypeManager createTypeManagerDefaultEnumTypeString() {
DatabaseConfig config = new DatabaseConfig();
var config = new DatabaseConfig();
config.setDatabasePlatform(new H2Platform());
config.setDefaultEnumType(EnumType.STRING);
+4 -11
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
</parent>
<name>ebean ddl generation</name>
@@ -28,14 +28,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<scope>provided</scope>
</dependency>
@@ -62,17 +62,10 @@
<!-- JAKARTA-DEPENDENCY-END -->
<!-- test dependencies -->
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>13.23.0-jakarta</version>
<version>13.24.0-jakarta</version>
<scope>test</scope>
</dependency>
@@ -2,7 +2,7 @@ package io.ebean.dbmigration;
import io.ebean.Database;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.dbplatform.DatabasePlatform;
import java.io.File;
@@ -109,7 +109,7 @@ public interface DbMigration {
/**
* Set the DatabaseConfig to use. Usually this is not called explicitly.
*/
void setServerConfig(DatabaseConfig config);
void setServerConfig(DatabaseBuilder config);
/**
* Set the specific platform to generate DDL for.
@@ -2,7 +2,7 @@ package io.ebeaninternal.dbmigration;
import io.avaje.applog.AppLog;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.ddlrunner.DdlRunner;
import io.ebean.ddlrunner.ScriptTransform;
@@ -51,7 +51,7 @@ public class DdlGenerator implements SpiDdlGenerator {
public DdlGenerator(SpiEbeanServer server) {
this.server = server;
final DatabaseConfig config = server.config();
final var config = server.config();
this.jaxbPresent = Detect.isJAXBPresent(config);
this.generateDdl = config.isDdlGenerate();
this.extraDdl = config.isDdlExtra();
@@ -318,7 +318,7 @@ public class DdlGenerator implements SpiDdlGenerator {
/**
* Create the ScriptTransform for placeholder key/value replacement.
*/
private ScriptTransform createScriptTransform(DatabaseConfig config) {
private ScriptTransform createScriptTransform(DatabaseBuilder.Settings config) {
return ScriptTransform.build(config.getDdlPlaceholders(), config.getDdlPlaceholderMap());
}
@@ -3,11 +3,9 @@ package io.ebeaninternal.dbmigration;
import io.avaje.applog.AppLog;
import io.ebean.DB;
import io.ebean.Database;
import io.ebean.DatabaseBuilder;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.DbConstraintNaming;
import io.ebean.config.PlatformConfig;
import io.ebean.config.PropertiesWrapper;
import io.ebean.config.*;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DatabasePlatformProvider;
import io.ebean.dbmigration.DbMigration;
@@ -75,7 +73,7 @@ public class DefaultDbMigration implements DbMigration {
protected DatabasePlatform databasePlatform;
private boolean vanillaPlatform;
protected List<Pair> platforms = new ArrayList<>();
protected DatabaseConfig databaseConfig;
protected DatabaseBuilder.Settings databaseBuilder;
protected DbConstraintNaming constraintNaming;
protected Boolean strictMode;
protected Boolean includeGeneratedFileComment;
@@ -116,12 +114,13 @@ public class DefaultDbMigration implements DbMigration {
}
@Override
public void setServerConfig(DatabaseConfig config) {
if (this.databaseConfig == null) {
this.databaseConfig = config;
public void setServerConfig(DatabaseBuilder builder) {
var config = builder.settings();
if (this.databaseBuilder == null) {
this.databaseBuilder = config;
}
if (constraintNaming == null) {
this.constraintNaming = databaseConfig.getConstraintNaming();
this.constraintNaming = databaseBuilder.getConstraintNaming();
}
Properties properties = config.getProperties();
if (properties != null) {
@@ -360,7 +359,7 @@ public class DefaultDbMigration implements DbMigration {
*/
private void configurePlatforms() {
for (Pair pair : platforms) {
PlatformConfig config = databaseConfig.newPlatformConfig("dbmigration.platform", pair.prefix);
PlatformConfig config = databaseBuilder.newPlatformConfig("dbmigration.platform", pair.prefix);
pair.platform.configure(config);
}
}
@@ -645,7 +644,7 @@ public class DefaultDbMigration implements DbMigration {
}
private PlatformDdlWriter createDdlWriter(DatabasePlatform platform) {
return new PlatformDdlWriter(platform, databaseConfig, lockTimeoutSeconds);
return new PlatformDdlWriter(platform, databaseBuilder, lockTimeoutSeconds);
}
/**
@@ -674,12 +673,12 @@ public class DefaultDbMigration implements DbMigration {
// not explicitly set so use the platform of the server
databasePlatform = server.databasePlatform();
}
if (databaseConfig != null) {
if (databaseBuilder != null) {
if (strictMode != null) {
databaseConfig.setDdlStrictMode(strictMode);
databaseBuilder.setDdlStrictMode(strictMode);
}
if (header != null) {
databaseConfig.setDdlHeader(header);
databaseBuilder.setDdlHeader(header);
}
}
}
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
/**
* Detect existence of JAXB
@@ -10,7 +10,7 @@ public class Detect {
/**
* Return true if JAXB is present.
*/
public static boolean isJAXBPresent(DatabaseConfig config) {
public static boolean isJAXBPresent(DatabaseBuilder.Settings config) {
return config.getClassLoadConfig().isPresent("jakarta.xml.bind.JAXBException");
}
}
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration.ddlgeneration;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.BaseTableDdl;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
import io.ebeaninternal.dbmigration.migration.*;
@@ -14,11 +14,11 @@ public class BaseDdlHandler implements DdlHandler {
protected final TableDdl tableDdl;
public BaseDdlHandler(DatabaseConfig config, PlatformDdl platformDdl) {
public BaseDdlHandler(DatabaseBuilder.Settings config, PlatformDdl platformDdl) {
this(config, platformDdl, new BaseTableDdl(config, platformDdl));
}
protected BaseDdlHandler(DatabaseConfig config, PlatformDdl platformDdl, TableDdl tableDdl) {
protected BaseDdlHandler(DatabaseBuilder config, PlatformDdl platformDdl, TableDdl tableDdl) {
this.tableDdl = tableDdl;
}
@@ -1,7 +1,7 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.DbConstraintNaming;
import io.ebean.config.NamingConvention;
import io.ebean.util.StringHelper;
@@ -155,7 +155,7 @@ public class BaseTableDdl implements TableDdl {
/**
* Construct with a naming convention and platform specific DDL.
*/
public BaseTableDdl(DatabaseConfig config, PlatformDdl platformDdl) {
public BaseTableDdl(DatabaseBuilder.Settings config, PlatformDdl platformDdl) {
this.namingConvention = config.getNamingConvention();
this.naming = config.getConstraintNaming();
this.historyTableSuffix = config.getHistoryTableSuffix();
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlHandler;
@@ -18,7 +18,7 @@ public class ClickHouseDdl extends PlatformDdl {
}
@Override
public DdlHandler createDdlHandler(DatabaseConfig config) {
public DdlHandler createDdlHandler(DatabaseBuilder.Settings config) {
return new ClickHouseDdlHandler(config, this);
}
@@ -1,11 +1,11 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.BaseDdlHandler;
public class ClickHouseDdlHandler extends BaseDdlHandler {
public ClickHouseDdlHandler(DatabaseConfig config, PlatformDdl platformDdl) {
public ClickHouseDdlHandler(DatabaseBuilder.Settings config, PlatformDdl platformDdl) {
super(config, platformDdl, new ClickHouseTableDdl(config, platformDdl));
}
}
@@ -1,12 +1,12 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer;
import io.ebeaninternal.dbmigration.migration.CreateTable;
public class ClickHouseTableDdl extends BaseTableDdl {
public ClickHouseTableDdl(DatabaseConfig config, PlatformDdl platformDdl) {
public ClickHouseTableDdl(DatabaseBuilder.Settings config, PlatformDdl platformDdl) {
super(config, platformDdl);
}
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlAlterTable;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite;
@@ -10,7 +10,7 @@ import io.ebeaninternal.dbmigration.model.MTable;
/**
* DB2 History support.
*
*
* @author Roland Praml, FOCONIS AG
*/
public class Db2HistoryDdl extends DbTableBasedHistoryDdl implements PlatformHistoryDdl {
@@ -20,7 +20,7 @@ public class Db2HistoryDdl extends DbTableBasedHistoryDdl implements PlatformHis
private String transactionId;
@Override
public void configure(DatabaseConfig config, PlatformDdl platformDdl) {
public void configure(DatabaseBuilder.Settings config, PlatformDdl platformDdl) {
super.configure(config, platformDdl);
this.systemPeriodStart = config.getAsOfSysPeriod() + "_start";
this.systemPeriodEnd = config.getAsOfSysPeriod() + "_end";
@@ -1,11 +1,11 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebean.config.DbConstraintNaming;
/**
* Base implementation for all histories, where we must maintain history table (trigger based, db2 and hana)
*
*
* @author Roland Praml, FOCONIS AG
*
*/
@@ -16,7 +16,7 @@ public abstract class DbTableBasedHistoryDdl implements PlatformHistoryDdl.Table
protected PlatformDdl platformDdl;
@Override
public void configure(DatabaseConfig config, PlatformDdl platformDdl) {
public void configure(DatabaseBuilder.Settings config, PlatformDdl platformDdl) {
this.platformDdl = platformDdl;
this.historySuffix = config.getHistoryTableSuffix();
this.constraintNaming = config.getConstraintNaming();
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.DatabaseBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlAlterTable;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite;
@@ -28,7 +28,7 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im
}
@Override
public void configure(DatabaseConfig config, PlatformDdl platformDdl) {
public void configure(DatabaseBuilder.Settings config, PlatformDdl platformDdl) {
super.configure(config, platformDdl);
this.sysPeriod = config.getAsOfSysPeriod();
this.viewSuffix = config.getAsOfViewSuffix();

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