Compare commits

...
62 Commits
Author SHA1 Message Date
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
Rob BygraveandGitHub 91ecc074a7 Merge pull request #3243 from ebean-orm/feature/postgis-dependency
Fix ebean-bom dependencies for ebean-test
2023-10-11 20:04:12 +13:00
Rob Bygrave c2b381af1e Fix ebean-bom dependencies for ebean-test
Fix by removing the scopes test and provided in the ebean-bom
2023-10-11 20:03:12 +13:00
Rob BygraveandGitHub eeb0a15617 Merge pull request #3242 from ebean-orm/feature/postgis-dependency
Add missing dependency for ebean-postgis-types to ebean-postgis
2023-10-11 19:59:48 +13:00
Rob Bygrave 6abed0dd73 Add missing dependency for ebean-postgis-types to ebean-postgis 2023-10-11 19:58:12 +13:00
Rob BygraveandGitHub 1318cd706f Merge pull request #3241 from ebean-orm/feature/StdOperators-dep
Remove the Deprecated(experimental) from StdOperators
2023-10-10 23:43:29 +13:00
Rob Bygrave 1e8c609dec Remove the Deprecated(experimental) from StdOperators 2023-10-10 23:42:47 +13:00
Rob Bygrave 4506596379 Tidy remove old stylesheet.css from source 2023-10-10 23:41:42 +13:00
Rob Bygrave 0b2c016af2 Version 13.23.0 2023-10-10 22:46:30 +13:00
Rob Bygrave 29d946ec59 Bump ebean-agent 2023-10-10 22:33:35 +13:00
Rob Bygrave da76b422c8 Fix test with sql logging including executeBatch() for sqlserver 2023-10-10 22:26:25 +13:00
Rob Bygrave a1a3b33fc6 Fix test with sql logging including executeBatch() for sqlserver 2023-10-10 21:47:14 +13:00
Rob BygraveandGitHub 7ecd7877d5 Merge pull request #3240 from ebean-orm/feature/OneToOne-softDelete-join
OneToOne with SoftDelete join missing deleted predicate
2023-10-10 21:38:50 +13:00
Rob Bygrave e5f64f4211 Fix test with sql logging including executeBatch() 2023-10-10 21:38:17 +13:00
Rob Bygrave 90a6b71b7e #3240 followup no functional change, tidy use of ctx.joinAdded() 2023-10-10 21:33:23 +13:00
Rob Bygrave 131d531922 #3240 followup no functional change, tidy use of ctx.joinAdded() 2023-10-10 21:32:28 +13:00
Rob Bygrave 5684919a9f Fix for OneToOne with SoftDelete join missing deleted predicate 2023-10-10 21:27:26 +13:00
Rob Bygrave 80fc0723c8 Failing test for OneToOne with SoftDelete join missing deleted predicate 2023-10-10 21:24:35 +13:00
Rob BygraveandGitHub 3ae4c8981e Merge pull request #3238 from ebean-orm/feature/sql-log-executeBatch
Change SQL log to include executeBatch() via BatchedPstmt
2023-10-10 09:15:06 +13:00
Rob Bygrave b80c67286b Change SQL log to include executeBatch() via BatchedPstmt
Adjustments to tests to support this
2023-10-10 01:02:11 +13:00
Rob Bygrave 0bead4135e Change SQL log to include executeBatch() via BatchedPstmt
Adjustments to tests to support this
2023-10-10 00:59:25 +13:00
Rob Bygrave ac6473e039 Change SQL log to include executeBatch() via BatchedPstmt 2023-10-10 00:59:06 +13:00
Rob BygraveandGitHub 32188bdd54 Merge pull request #3237 from ebean-orm/feature/3233
#3234 - Query Bean Generator Generates Non-Compilable Code When Entit…
2023-10-09 22:04:05 +13:00
Rob Bygrave b3a577e3f9 #3234 - Query Bean Generator Generates Non-Compilable Code When Entity Uses @Embeddable Inner Class For Primary Key Type 2023-10-09 22:03:02 +13:00
Rob BygraveandGitHub 7d1774e2ed Merge pull request #3236 from ebean-orm/feature/3233
In version 13.22 if the entity definition is in a different package, …
2023-10-09 22:01:38 +13:00
Rob Bygrave 395edb62bf In version 13.22 if the entity definition is in a different package, the generated query bean cannot resolve the symbol erro 2023-10-09 21:10:56 +13:00
Rob BygraveandGitHub 716b7e7b93 Merge pull request #3232 from ebean-orm/feature/postgis-rename-types-add-composite
Add ebean-postgres-types to ebean-bom
2023-10-06 23:16:27 +13:00
Rob Bygrave 9aadc347d7 Add ebean-postgres-types to ebean-bom 2023-10-06 23:15:43 +13:00
Rob BygraveandGitHub d2d1423c88 Merge pull request #3231 from ebean-orm/feature/postgis-rename-types-add-composite
Rename ebean-postgis -> ebean-postgis-types + add new composite ebean…
2023-10-06 23:07:03 +13:00
Rob Bygrave 73cfea6053 For postgres dependency exclude checker framework dependency 2023-10-06 23:06:41 +13:00
Rob Bygrave 1614166d75 Rename ebean-postgis -> ebean-postgis-types + add new composite ebean-postgis
With this, people can depend on ebean-postgis (the composite) and get all the
dependencies they need (which is ebean-platform-postgres + ebean-postgis-types
+ others).

This should just make it easier for people in that currently we need both
ebean-postgis + ebean-postgres which isn't obvious enough.
2023-10-06 22:59:00 +13:00
Rob BygraveandGitHub 3d9b122a9f Merge pull request #3230 from ebean-orm/feature/deprecate-servletContextListener
Deprecate ServletContextListener (for shutdown in servlet container)
2023-10-06 22:40:07 +13:00
Rob Bygrave 1cc1d29c2f Deprecate ServletContextListener (for shutdown in servlet container)
Deprecated for removal - no intention to replace. Create your own
ServletContextListener if needed for your application.
2023-10-06 22:38:26 +13:00
179 changed files with 1820 additions and 1395 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.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-clickhouse</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-db2</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hana</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mariadb</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mysql</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-nuodb</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-oracle</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+85
View File
@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
<name>ebean-postgis</name>
<description>ebean-postgis composite</description>
<artifactId>ebean-postgis</artifactId>
<properties>
<postgis.jdbc.version>2.5.1</postgis.jdbc.version>
<postgres.jdbc.version>42.6.0</postgres.jdbc.version>
</properties>
<dependencies>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-datasource</artifactId>
<version>${ebean-datasource.version}</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-migration</artifactId>
<version>${ebean-migration.version}</version>
</dependency>
<!-- Technically optional but most expected to use query beans -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgres.jdbc.version}</version>
<exclusions>
<!-- exclude unnecessary checker framework -->
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.postgis</groupId>
<artifactId>postgis-jdbc</artifactId>
<version>${postgis.jdbc.version}</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,7 @@
package io.ebean.postgis.assembly;
/**
* Nothing interesting here - required placeholder for javadoc.
*/
public class Assembly {
}
@@ -0,0 +1,10 @@
module io.ebean.postgis {
requires transitive io.ebean.api;
requires transitive io.ebean.core;
requires transitive io.ebean.datasource;
requires transitive io.ebean.querybean;
requires transitive io.ebean.platform.postgres;
// requires transitive io.ebean.postgis.types;
}
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlite</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -42,13 +42,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<relativePath>../..</relativePath>
</parent>
@@ -17,13 +17,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -41,7 +41,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -60,13 +60,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+2 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<artifactId>composites</artifactId>
@@ -23,6 +23,7 @@
<module>ebean-nuodb</module>
<module>ebean-oracle</module>
<module>ebean-postgres</module>
<module>ebean-postgis</module>
<!-- <module>sqlanywhere</module>-->
<module>ebean-sqlite</module>
<module>ebean-sqlserver</module>
+2 -9
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-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>
@@ -9,7 +9,6 @@ import java.util.Collection;
* <p>
* This is currently deemed to be experimental and subject to change.
*/
@Deprecated(since = "experimental")
public final class StdOperators {
// ---- Functions ---- //
@@ -3,6 +3,9 @@ package io.ebean.event;
import jakarta.servlet.ServletContextEvent;
/**
* Deprecated for removal - no intention to replace. Create your own copy of this
* ServletContextListener if needed for your application.
* <p>
* Listens for webserver server starting and stopping events.
* <p>
* This should be used when the deployment is into a servlet container where the webapp
@@ -15,6 +18,7 @@ import jakarta.servlet.ServletContextEvent;
* hook that Ebean registers.
* </p>
*/
@Deprecated(forRemoval = true)
public class ServletContextListener implements jakarta.servlet.ServletContextListener {
/**
@@ -1,91 +0,0 @@
/* Javadoc style sheet */
/* Define colors, fonts and other style attributes here to override the defaults */
/* Page background color */
body {
background-color: #FFFFFF;
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
}
pre.code {
padding: 1em;
margin-left: 2em;
border: 1px solid #ccc;
background-color: #eee;
}
/* Headings */
h1 {
font-size: 14pt
}
#overviewexamples h3 {
font-size: 10pt
}
/* Table colors */
.TableHeadingColor {
background: #CCCCFF
}
/* Dark mauve */
.TableSubHeadingColor {
background: #EEEEFF
}
/* Light mauve */
.TableRowColor {
background: #FFFFFF
}
/* White */
/* Font used in left-hand frame lists */
.FrameTitleFont {
font-size: 12pt;
font-family: Helvetica, Arial, sans-serif
}
.FrameHeadingFont {
font-size: 10pt;
font-family: Helvetica, Arial, sans-serif
}
.FrameItemFont {
font-size: 10pt;
font-family: Helvetica, Arial, sans-serif
}
/* Navigation bar fonts and colors */
.NavBarCell1 {
background-color: #EEEEFF;
}
/* Light mauve */
.NavBarCell1Rev {
background-color: #00008B;
}
/* Dark Blue */
.NavBarFont1 {
font-family: Arial, Helvetica, sans-serif;
color: #000000;
}
.NavBarFont1Rev {
font-family: Arial, Helvetica, sans-serif;
color: #FFFFFF;
}
.NavBarCell2 {
font-family: Arial, Helvetica, sans-serif;
background-color: #FFFFFF;
}
.NavBarCell3 {
font-family: Arial, Helvetica, sans-serif;
background-color: #FFFFFF;
}
+36 -33
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<name>ebean bom</name>
@@ -89,25 +89,25 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -125,13 +125,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -155,46 +155,37 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.22.0</version>
<scope>provided</scope>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>kotlin-querybean-generator</artifactId>
<version>13.22.0</version>
<scope>provided</scope>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.22.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-redis</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-spring-txn</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<!-- platforms -->
@@ -202,67 +193,79 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-clickhouse</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-db2</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-h2</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-hana</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mariadb</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mysql</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-nuodb</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-oracle</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgres</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis</artifactId>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis-types</artifactId>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlite</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlserver</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
</dependencies>
+3 -10
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<artifactId>ebean-core-type</artifactId>
@@ -16,7 +16,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -30,17 +30,10 @@
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.4.3</version>
<version>42.6.0</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
+8 -15
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<artifactId>ebean-core</artifactId>
@@ -22,7 +22,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -46,7 +46,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.22.0</version>
<version>13.23.2-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>
<!--
@@ -151,7 +151,7 @@
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.1</version>
<version>42.6.0</version>
<optional>true</optional>
</dependency>
@@ -159,21 +159,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>13.22.0</version>
<version>13.23.2-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>
@@ -590,14 +590,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 ");
}
}
@@ -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());
@@ -443,11 +443,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 +577,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 +1185,7 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
setConcurrencyMode(desc);
}
// generate the byte code
createByteCode(desc);
setAccessors(desc);
}
/**
@@ -1255,13 +1254,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 +1287,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 +1366,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 " +
@@ -148,4 +148,10 @@ public interface DbSqlContext {
* Add extra joins *IF* required to support inheritance discriminator in projection.
*/
void flushExtraJoins();
/**
* Return true if the last join was added and false means the join was suppressed
* as it was already added to the query.
*/
boolean joinAdded();
}
@@ -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,8 +47,6 @@ 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 BeanDescriptorManager manager;
/**
@@ -139,10 +139,30 @@ public class DeployBeanDescriptor<T> {
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) {
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;
@@ -84,6 +84,9 @@ public final class BatchedPstmt implements SpiProfileTransactionEvent {
*/
private void flushStatementBatch() throws SQLException {
final int[] rows = pstmt.executeBatch();
if (transaction.isLogSql()) {
transaction.logSql(" -- executeBatch() size:{0} sql:{1}", rows.length, sql);
}
if (rows.length != list.size()) {
throw new IllegalStateException("Invalid state on executeBatch, rows:" + rows.length + " != " + list.size());
}
@@ -153,6 +156,9 @@ public final class BatchedPstmt implements SpiProfileTransactionEvent {
private void executeAndCheckRowCounts() throws SQLException {
try {
results = pstmt.executeBatch();
if (transaction.isLogSql()) {
transaction.logSql(" -- executeBatch() size:{0} sql:{1}", results.length, sql);
}
if (results.length != list.size()) {
throw new SQLException("Invalid state on executeBatch, rows:" + results.length + " != " + list.size());
}
@@ -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);
}
}
}
@@ -38,6 +38,7 @@ final class DefaultDbSqlContext implements DbSqlContext {
private final CQueryDraftSupport draftSupport;
private final CQueryHistorySupport historySupport;
private final boolean historyQuery;
private boolean joinSuppressed;
DefaultDbSqlContext(SqlTreeAlias alias, String columnAliasPrefix, CQueryHistorySupport historySupport,
CQueryDraftSupport draftSupport, String fromForUpdate) {
@@ -50,6 +51,11 @@ final class DefaultDbSqlContext implements DbSqlContext {
this.fromForUpdate = fromForUpdate;
}
@Override
public boolean joinAdded() {
return !joinSuppressed;
}
@Override
public boolean isIncludeSoftDelete() {
return alias.isIncludeSoftDelete();
@@ -118,9 +124,10 @@ final class DefaultDbSqlContext implements DbSqlContext {
}
String joinKey = table + "-" + a1 + "-" + a2;
if (tableJoins.contains(joinKey)) {
joinSuppressed = true;
return;
}
joinSuppressed = false;
tableJoins.add(joinKey);
sb.append(' ').append(type);
boolean addAsOfOnClause = false;
@@ -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;
}
}
}
@@ -10,6 +10,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import static io.ebeaninternal.api.SpiQuery.TemporalMode.SOFT_DELETED;
/**
* The purpose is to add an extra join to the query.
* <p>
@@ -145,7 +147,7 @@ final class SqlTreeNodeExtraJoin implements SqlTreeNode {
assocBeanProperty.appendFrom(ctx, joinType, null);
}
joinType = assocBeanProperty.addJoin(joinType, prefix, ctx);
if (!oneToOneExported && assocBeanProperty.isTargetSoftDelete() && temporalMode != SpiQuery.TemporalMode.SOFT_DELETED) {
if (temporalMode != SOFT_DELETED && ctx.joinAdded() && assocBeanProperty.isTargetSoftDelete()) {
ctx.append(" and ").append(assocBeanProperty.softDeletePredicate(ctx.tableAlias(prefix)));
}
}
@@ -88,14 +88,14 @@ final class SqlTreeNodeManyWhereJoin implements SqlTreeNode {
if (nodeBeanProp instanceof STreePropertyAssocOne) {
nodeBeanProp.addJoin(joinType, parentAlias, alias, ctx);
if (softDelete) {
if (softDelete && ctx.joinAdded()) {
ctx.append(" and ").append(target.softDeletePredicate(alias));
}
} else {
STreePropertyAssocMany manyProp = (STreePropertyAssocMany) nodeBeanProp;
if (!manyProp.hasJoinTable()) {
manyProp.addJoin(joinType, parentAlias, alias, ctx);
if (softDelete) {
if (softDelete && ctx.joinAdded()) {
ctx.append(" and ").append(target.softDeletePredicate(alias));
}
} else {
@@ -7,6 +7,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;
@@ -47,7 +48,7 @@ public class AnnotationClassTest {
private AnnotationClass createAnnotationClass(DatabaseConfig 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);
}
@@ -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");
}
+4 -11
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<name>ebean ddl generation</name>
@@ -28,14 +28,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-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.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
+2 -11
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -14,7 +14,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
@@ -22,21 +22,12 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
+3
View File
@@ -0,0 +1,3 @@
# ebean.postgis.types
Ebean support for Postgres Geometry types
@@ -4,14 +4,11 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<name>ebean postgis</name>
<description>ebean postgis module</description>
<url>https://ebean.io/</url>
<artifactId>ebean-postgis</artifactId>
<name>ebean postgis types</name>
<artifactId>ebean-postgis-types</artifactId>
<properties>
<postgis.jdbc.version>2.5.1</postgis.jdbc.version>
@@ -22,14 +19,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<!-- provided scope -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
@@ -50,7 +47,7 @@
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.1</version>
<version>42.6.0</version>
<scope>provided</scope>
</dependency>
@@ -65,7 +62,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
@@ -76,13 +73,6 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
@@ -4,7 +4,7 @@ import io.ebeaninternal.api.GeoTypeProvider;
/**
* Provides GeoTypeProvider and ExtraTypeFactory.
*/
module io.ebean.postgis {
module io.ebean.postgis.types {
provides ExtraTypeFactory with io.ebean.postgis.PostgisExtraTypeFactory;
provides GeoTypeProvider with io.ebean.postgis.PostgisGeoTypeBindProvider;
-2
View File
@@ -1,2 +0,0 @@
# ebean-com.avaje.ebean.postgis
Ebean support for Postgres Geometry types - org.com.avaje.ebean.postgis and org.geolatte.geom
+11 -18
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<name>ebean querybean</name>
@@ -17,7 +17,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
@@ -63,28 +63,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.22.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.22.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
@@ -95,6 +81,13 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
@@ -0,0 +1,18 @@
package org.example.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import org.example.domain.other.OtherBean;
@SuppressWarnings("unused")
@Entity
public class OtherMain {
@Id
long id;
@ManyToOne
OtherBean other;
}
@@ -0,0 +1,13 @@
package org.example.domain.other;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@SuppressWarnings("unused")
@Entity
public class OtherBean {
@Id
long id;
String name;
}
@@ -0,0 +1,47 @@
package org.example.domain.other;
import jakarta.persistence.*;
import java.util.Objects;
import java.util.UUID;
@SuppressWarnings("unused")
@Entity
public class OtherSiteUser {
@Embeddable
public static class Id {
// Use siteId, userId matching by db column naming convention
public UUID siteId;
public UUID userId;
public Id(UUID siteId, UUID userId) {
this.siteId = siteId;
this.userId = userId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Id that = (Id) o;
return Objects.equals(siteId, that.siteId) && Objects.equals(userId, that.userId);
}
@Override
public int hashCode() {
return Objects.hash(siteId, userId);
}
}
@EmbeddedId
Id id;
String description;
@Version
long version;
}
+12 -20
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<artifactId>ebean-redis</artifactId>
@@ -22,42 +22,28 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.22.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.22.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
@@ -68,11 +54,17 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.repaint.maven</groupId>
<artifactId>tiles-maven-plugin</artifactId>
+3 -10
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<artifactId>ebean-spring-txn</artifactId>
@@ -28,7 +28,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
@@ -77,14 +77,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.22.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
+26 -16
View File
@@ -4,13 +4,18 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</parent>
<name>ebean test</name>
<description>Testing support for Ebean</description>
<artifactId>ebean-test</artifactId>
<properties>
<bytebuddy.version>1.14.9</bytebuddy.version>
<assertj.version>3.24.2</assertj.version>
</properties>
<dependencies>
<dependency>
@@ -28,20 +33,20 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
</dependency>
<dependency>
@@ -64,10 +69,22 @@
<version>${ebean-test-containers.version}</version>
</dependency>
<!-- support JDK 22+ -->
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>${bytebuddy.version}</version>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>${bytebuddy.version}</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.23.1</version>
<version>${assertj.version}</version>
</dependency>
<!-- Including JAXB for DB Migration generation with Java 11+ -->
@@ -132,14 +149,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>13.22.0</version>
<version>13.23.2-jakarta</version>
<scope>test</scope>
</dependency>
@@ -196,7 +213,7 @@
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.1</version>
<version>42.6.0</version>
<exclusions>
<exclusion>
<groupId>org.checkerframework</groupId>
@@ -272,18 +289,11 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
<scope>test</scope>
</dependency>
<!-- provided scope for Java 11 compilation (not required for Java 17+) -->
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
<version>1.1</version>
<version>1.3</version>
<scope>provided</scope>
</dependency>
@@ -33,7 +33,7 @@ class EbeanServer_deleteAllByIdTest extends BaseTestCase {
assertNotNull(bean2.getId());
List<String> loggedSql = LoggedSql.stop();
assertThat(loggedSql).hasSize(4);
assertThat(loggedSql).hasSize(5);
assertThat(loggedSql.get(0)).contains("insert into e_basicver");
assertSqlBind(loggedSql, 1, 3);
@@ -28,7 +28,7 @@ public class EbeanServer_saveAllTest extends BaseTestCase {
// assert
List<String> loggedSql = LoggedSql.stop();
assertThat(loggedSql).hasSize(4);
assertThat(loggedSql).hasSize(5);
assertThat(loggedSql.get(0)).contains("insert into e_basicver (");
assertThat(loggedSql.get(0)).contains("name, description, other, last_update) values (");
@@ -50,7 +50,7 @@ public class EbeanServer_saveAllTest extends BaseTestCase {
DB.deleteAll(someBeans);
loggedSql = LoggedSql.stop();
assertThat(loggedSql).hasSize(4);
assertThat(loggedSql).hasSize(5);
assertThat(loggedSql.get(0)).contains("delete from e_basicver where id=?");
}
@@ -125,7 +125,7 @@ public class EbeanServer_saveAllTest extends BaseTestCase {
// assert
List<String> loggedSql = LoggedSql.stop();
assertThat(loggedSql).hasSize(4);
assertThat(loggedSql).hasSize(5);
assertThat(loggedSql.get(0)).contains("insert into e_basicver (");
assertThat(loggedSql.get(0)).contains("name, description, other, last_update) values (");
@@ -151,7 +151,7 @@ public class EbeanServer_saveAllTest extends BaseTestCase {
txn.commit();
}
loggedSql = LoggedSql.stop();
assertThat(loggedSql).hasSize(4);
assertThat(loggedSql).hasSize(5);
assertThat(loggedSql.get(0)).contains("delete from e_basicver where id=?");
}
@@ -27,12 +27,12 @@ class TestDeleteCascadingOneToMany extends BaseTestCase {
DB.delete(a0);
List<String> sql = LoggedSql.stop();
assertThat(sql).hasSize(5);
assertThat(sql).hasSize(6);
assertThat(sql.get(0)).contains("select t0.id from section t0 where article_id=?");
assertThat(sql.get(1)).contains("select t0.id from sub_section t0 where (section_id)"); // in | any
assertThat(sql.get(2)).contains("delete from section where id"); // in | any
assertThat(sql.get(3)).contains(" -- bind");
assertThat(sql.get(4)).contains("delete from article where id=? and version=?");
assertThat(sql.get(5)).contains("delete from article where id=? and version=?");
}
@Test
@@ -40,25 +40,30 @@ class TestDeleteCascadeById extends BaseTestCase {
DB.delete(o);
List<String> sql = LoggedSql.collect();
assertThat(sql).hasSize(6);
assertThat(sql).hasSize(8);
assertThat(sql.get(0)).contains("select t0.id from o_order_detail t0 where order_id=?");
assertThat(sql.get(1)).contains("delete from o_order_detail where id");
assertThat(sql.get(2)).contains("-- bind(Array[3]");
assertThat(sql.get(3)).contains("delete from or_order_ship where order_id = ?");
assertThat(sql.get(4)).contains("-- bind(");
assertThat(sql.get(5)).contains("delete from o_order where id=? and updtime=?");
assertThat(sql.get(5)).contains("-- executeBatch");
assertThat(sql.get(6)).contains("-- executeBatch");
assertThat(sql.get(7)).contains("delete from o_order where id=? and updtime=?");
DB.delete(cust);
sql = LoggedSql.stop();
assertThat(sql).hasSize(9);
assertThat(sql).hasSize(12);
assertThat(sql.get(0)).contains("select t0.id from contact t0 where customer_id=");
assertThat(sql.get(1)).contains("delete from contact_note where (contact_id)");
assertThat(sql.get(2)).contains(" -- bind(Array[3]=");
assertThat(sql.get(3)).contains("delete from contact where id");
assertThat(sql.get(4)).contains(" -- bind(Array[3]");
assertThat(sql.get(5)).contains("delete from o_customer where id=? and version=?");
assertThat(sql.get(6)).contains("delete from o_address where id=? and updtime=?");
assertThat(sql.get(7)).contains(" -- bind(");
assertThat(sql.get(8)).contains(" -- bind(");
assertThat(sql.get(5)).contains(" -- executeBatch");
assertThat(sql.get(6)).contains(" -- executeBatch");
assertThat(sql.get(7)).contains("delete from o_customer where id=? and version=?");
assertThat(sql.get(8)).contains("delete from o_address where id=? and updtime=?");
assertThat(sql.get(9)).contains(" -- bind(");
assertThat(sql.get(10)).contains(" -- bind(");
assertThat(sql.get(11)).contains(" -- executeBatch");
}
}
@@ -100,7 +100,7 @@ public class TestBatchInsertFlush extends BaseTestCase {
assertSql(sql.get(0)).contains("insert into t_atable_thatisrelatively");
assertSql(sql.get(1)).contains("-- bind(");
// detail
assertThat(sql.get(3)).contains("insert into t_detail_with_other_namexxxyy");
assertThat(sql.get(4)).contains("insert into t_detail_with_other_namexxxyy");
assertThat(((SpiTransaction) transaction).label()).isEqualTo("TestBatchInsertFlush.no_cascade");
@@ -205,7 +205,7 @@ public class TestBatchInsertFlush extends BaseTestCase {
assertThat(LoggedSql.collect()).isEmpty();
Integer id = b1.getId();
assertNotNull(id);
assertThat(LoggedSql.collect()).hasSize(3);
assertThat(LoggedSql.collect()).hasSize(4);
EBasicVer b3 = new EBasicVer("b3");
server.save(b3);
@@ -231,7 +231,7 @@ public class TestBatchInsertFlush extends BaseTestCase {
assertThat(LoggedSql.collect()).isEmpty();
Integer id = b1.getId();
assertNotNull(id);
assertThat(LoggedSql.collect()).hasSize(3);
assertThat(LoggedSql.collect()).hasSize(4);
EBasicVer b3 = new EBasicVer("b3");
server.save(b3, txn);
@@ -298,7 +298,7 @@ public class TestBatchInsertFlush extends BaseTestCase {
server.save(b3, txn);
txn.commit();
assertThat(LoggedSql.collect()).hasSize(5);
assertThat(LoggedSql.collect()).hasSize(7);
} finally {
txn.end();
@@ -40,7 +40,7 @@ public class TestBatchInsertWithInitialisedCollection extends BaseTestCase {
}
List<String> loggedSql = LoggedSql.stop();
assertThat(loggedSql).hasSize(4);
assertThat(loggedSql).hasSize(5);
assertThat(loggedSql.get(0)).contains("insert into o_cached_bean (");
assertThat(loggedSql.get(0)).contains("name) values (?");
}

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