no effective change - format only

This commit is contained in:
Rob Bygrave
2016-11-17 19:17:34 +13:00
parent 63b08af3d2
commit bdd4370fe3
39 changed files with 4865 additions and 4120 deletions
@@ -49,7 +49,7 @@ class AllEqualsExpression extends NonPrepareExpression {
@Override
public void validate(SpiExpressionValidation validation) {
for (String propName: propMap.keySet()) {
for (String propName : propMap.keySet()) {
validation.validate(propName);
}
}
@@ -64,8 +64,8 @@ public class ArrayContainsExpression extends AbstractExpression {
}
ArrayContainsExpression that = (ArrayContainsExpression) other;
return this.propName.equals(that.propName)
&& this.contains == that.contains
&& this.values.length == that.values.length;
&& this.contains == that.contains
&& this.values.length == that.values.length;
}
@Override
@@ -39,8 +39,7 @@ public class ArrayIsEmptyExpression extends AbstractExpression {
return false;
}
ArrayIsEmptyExpression that = (ArrayIsEmptyExpression) other;
return this.propName.equals(that.propName)
&& this.empty == that.empty;
return this.propName.equals(that.propName) && this.empty == that.empty;
}
@Override
@@ -71,7 +71,6 @@ class BetweenExpression extends AbstractExpression {
@Override
public boolean isSameByBind(SpiExpression other) {
BetweenExpression that = (BetweenExpression) other;
return low().equals(that.low())
&& high().equals(that.high());
return low().equals(that.low()) && high().equals(that.high());
}
}
@@ -103,8 +103,7 @@ class BetweenPropertyExpression extends NonPrepareExpression {
}
BetweenPropertyExpression that = (BetweenPropertyExpression) other;
return lowProperty.equals(that.lowProperty)
&& highProperty.equals(that.highProperty);
return lowProperty.equals(that.lowProperty) && highProperty.equals(that.highProperty);
}
@Override
@@ -26,7 +26,7 @@ import java.util.Map;
*/
public class DefaultExpressionFactory implements SpiExpressionFactory {
private static final Object[] EMPTY_ARRAY = new Object[] {};
private static final Object[] EMPTY_ARRAY = new Object[]{};
private final boolean nativeIlike;
@@ -37,7 +37,7 @@ public class DefaultExpressionFactory implements SpiExpressionFactory {
this.nativeIlike = nativeIlike;
}
public ExpressionFactory createExpressionFactory(){
public ExpressionFactory createExpressionFactory() {
return this;
}
@@ -233,9 +233,9 @@ public class DefaultExpressionFactory implements SpiExpressionFactory {
if (bean == null || (!(bean instanceof EntityBean))) {
throw new IllegalStateException("Expecting an EntityBean");
}
return (EntityBean)bean;
return (EntityBean) bean;
}
/**
* Case insensitive {@link #exampleLike(Object)}
*/
@@ -372,19 +372,19 @@ public class DefaultExpressionFactory implements SpiExpressionFactory {
}
/**
* Exists subquery
* Exists subquery
*/
@Override
public Expression exists(Query<?> subQuery) {
return new ExistsQueryExpression((SpiQuery<?>) subQuery, false);
return new ExistsQueryExpression((SpiQuery<?>) subQuery, false);
}
/**
* Not exists subquery
* Not exists subquery
*/
@Override
public Expression notExists(Query<?> subQuery) {
return new ExistsQueryExpression((SpiQuery<?>) subQuery, true);
return new ExistsQueryExpression((SpiQuery<?>) subQuery, true);
}
@Override
@@ -427,9 +427,8 @@ public class DefaultExpressionFactory implements SpiExpressionFactory {
* Expression where all the property names in the map are equal to the
* corresponding value.
* </p>
*
* @param propertyMap
* a map keyed by property names.
*
* @param propertyMap a map keyed by property names.
*/
public Expression allEq(Map<String, Object> propertyMap) {
return new AllEqualsExpression(propertyMap);
@@ -443,7 +442,7 @@ public class DefaultExpressionFactory implements SpiExpressionFactory {
* </p>
*/
public Expression raw(String raw, Object value) {
return new RawExpression(raw, new Object[] { value });
return new RawExpression(raw, new Object[]{value});
}
/**
@@ -1,6 +1,20 @@
package com.avaje.ebeaninternal.server.expression;
import com.avaje.ebean.*;
import com.avaje.ebean.Expression;
import com.avaje.ebean.ExpressionFactory;
import com.avaje.ebean.ExpressionList;
import com.avaje.ebean.FetchPath;
import com.avaje.ebean.FutureIds;
import com.avaje.ebean.FutureList;
import com.avaje.ebean.FutureRowCount;
import com.avaje.ebean.Junction;
import com.avaje.ebean.OrderBy;
import com.avaje.ebean.PagedList;
import com.avaje.ebean.Query;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.QueryIterator;
import com.avaje.ebean.Version;
import com.avaje.ebean.event.BeanQueryRequest;
import com.avaje.ebean.search.Match;
import com.avaje.ebean.search.MultiMatch;
@@ -131,7 +145,7 @@ public class DefaultExpressionList<T> implements SpiExpressionList<T> {
// this is a Top level "text" expressions so we may need to wrap in Bool SHOULD etc.
if (list.isEmpty()) throw new IllegalStateException("empty expression list?");
if (allDocNestedPath!=null) context.startNested(allDocNestedPath);
if (allDocNestedPath != null) context.startNested(allDocNestedPath);
int size = list.size();
SpiExpression first = list.get(0);
@@ -161,13 +175,13 @@ public class DefaultExpressionList<T> implements SpiExpressionList<T> {
if (implicitBool || explicitBool) {
context.endBoolGroup();
}
if (allDocNestedPath!=null) context.endNested();
if (allDocNestedPath != null) context.endNested();
}
}
public void writeDocQuery(DocQueryContext context, SpiExpression idEquals) throws IOException {
if (allDocNestedPath!=null) context.startNested(allDocNestedPath);
if (allDocNestedPath != null) context.startNested(allDocNestedPath);
int size = list.size();
if (size == 1 && idEquals == null) {
// only 1 expression - skip bool
@@ -186,7 +200,7 @@ public class DefaultExpressionList<T> implements SpiExpressionList<T> {
}
context.endBool();
}
if (allDocNestedPath!=null) context.endNested();
if (allDocNestedPath != null) context.endNested();
}
@Override
@@ -1,9 +1,5 @@
package com.avaje.ebeaninternal.server.expression;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.avaje.ebeaninternal.api.SpiExpressionList;
import com.avaje.ebeaninternal.api.SpiExpressionRequest;
import com.avaje.ebeaninternal.server.core.DbExpressionHandler;
@@ -13,6 +9,10 @@ import com.avaje.ebeaninternal.server.deploy.DeployParser;
import com.avaje.ebeaninternal.server.persist.Binder;
import com.avaje.ebeaninternal.server.type.DataBind;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DefaultExpressionRequest implements SpiExpressionRequest {
private final SpiOrmQueryRequest<?> queryRequest;
@@ -1,8 +1,5 @@
package com.avaje.ebeaninternal.server.expression;
import java.io.IOException;
import java.util.List;
import com.avaje.ebean.event.BeanQueryRequest;
import com.avaje.ebeaninternal.api.HashQueryPlanBuilder;
import com.avaje.ebeaninternal.api.ManyWhereJoins;
@@ -14,6 +11,9 @@ import com.avaje.ebeaninternal.api.SpiQuery;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import com.avaje.ebeaninternal.server.query.CQuery;
import java.io.IOException;
import java.util.List;
class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpression {
protected final boolean not;
@@ -29,7 +29,7 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress
this.not = not;
}
ExistsQueryExpression(boolean not, String sql , List<Object> bindParams) {
ExistsQueryExpression(boolean not, String sql, List<Object> bindParams) {
this.not = not;
this.sql = sql;
this.bindParams = bindParams;
@@ -111,8 +111,8 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress
ExistsQueryExpression that = (ExistsQueryExpression) other;
return this.sql.equals(that.sql)
&& this.not == that.not
&& this.bindParams.size() == that.bindParams.size();
&& this.not == that.not
&& this.bindParams.size() == that.bindParams.size();
}
@Override
@@ -1,6 +1,12 @@
package com.avaje.ebeaninternal.server.expression;
import com.avaje.ebean.*;
import com.avaje.ebean.ExpressionFactory;
import com.avaje.ebean.ExpressionList;
import com.avaje.ebean.FutureIds;
import com.avaje.ebean.FutureList;
import com.avaje.ebean.FutureRowCount;
import com.avaje.ebean.OrderBy;
import com.avaje.ebean.Query;
import com.avaje.ebeaninternal.api.SpiExpressionList;
import javax.persistence.PersistenceException;
@@ -134,8 +134,8 @@ class InExpression extends AbstractExpression {
InExpression that = (InExpression) other;
return propName.equals(that.propName)
&& not == that.not
&& bindValues.length == that.bindValues.length;
&& not == that.not
&& bindValues.length == that.bindValues.length;
}
@Override
@@ -104,9 +104,9 @@ class InQueryExpression extends AbstractExpression implements UnsupportedDocStor
InQueryExpression that = (InQueryExpression) other;
return propName.equals(that.propName)
&& sql.equals(that.sql)
&& not == that.not
&& bindParams.size() == that.bindParams.size();
&& sql.equals(that.sql)
&& not == that.not
&& bindParams.size() == that.bindParams.size();
}
@Override
@@ -85,9 +85,9 @@ class IsEmptyExpression extends AbstractExpression {
request.append("not ");
}
request
.append("exists (select 1 from ")
.append(prop.getAssocIsEmpty(request, propertyPath))
.append(")");
.append("exists (select 1 from ")
.append(prop.getAssocIsEmpty(request, propertyPath))
.append(")");
}
/**
@@ -110,8 +110,7 @@ class IsEmptyExpression extends AbstractExpression {
}
IsEmptyExpression that = (IsEmptyExpression) other;
return this.propName.equals(that.propName)
&& this.empty == that.empty;
return this.propName.equals(that.propName) && this.empty == that.empty;
}
@Override
@@ -91,10 +91,10 @@ class JsonPathExpression extends AbstractExpression {
JsonPathExpression that = (JsonPathExpression) other;
return propName.equals(that.propName)
&& operator == that.operator
&& Same.sameByValue(path, that.path)
&& Same.sameByNull(value, that.value)
&& Same.sameByNull(upperValue, that.upperValue);
&& operator == that.operator
&& Same.sameByValue(path, that.path)
&& Same.sameByNull(value, that.value)
&& Same.sameByNull(upperValue, that.upperValue);
}
@Override
@@ -69,7 +69,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
List<SpiExpression> list = exprList.list;
if (list.size() == 1 && list.get(0) instanceof JunctionExpression) {
JunctionExpression nested = (JunctionExpression)list.get(0);
JunctionExpression nested = (JunctionExpression) list.get(0);
if (type == Type.AND && !nested.type.isText()) {
// and (and (a, b, c)) -> and (a, b, c)
// and (not (a, b, c)) -> not (a, b, c)
@@ -429,7 +429,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Path does not exist - for the given path in a JSON document.
*/
@Override
public ExpressionList<T> jsonNotExists(String propertyName, String path){
public ExpressionList<T> jsonNotExists(String propertyName, String path) {
return exprList.jsonNotExists(propertyName, path);
}
@@ -437,7 +437,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Equal to - for the value at the given path in the JSON document.
*/
@Override
public ExpressionList<T> jsonEqualTo(String propertyName, String path, Object value){
public ExpressionList<T> jsonEqualTo(String propertyName, String path, Object value) {
return exprList.jsonEqualTo(propertyName, path, value);
}
@@ -445,7 +445,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Not Equal to - for the given path in a JSON document.
*/
@Override
public ExpressionList<T> jsonNotEqualTo(String propertyName, String path, Object val){
public ExpressionList<T> jsonNotEqualTo(String propertyName, String path, Object val) {
return exprList.jsonNotEqualTo(propertyName, path, val);
}
@@ -453,7 +453,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Greater than - for the given path in a JSON document.
*/
@Override
public ExpressionList<T> jsonGreaterThan(String propertyName, String path, Object val){
public ExpressionList<T> jsonGreaterThan(String propertyName, String path, Object val) {
return exprList.jsonGreaterThan(propertyName, path, val);
}
@@ -461,7 +461,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Greater than or equal to - for the given path in a JSON document.
*/
@Override
public ExpressionList<T> jsonGreaterOrEqual(String propertyName, String path, Object val){
public ExpressionList<T> jsonGreaterOrEqual(String propertyName, String path, Object val) {
return exprList.jsonGreaterOrEqual(propertyName, path, val);
}
@@ -469,7 +469,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Less than - for the given path in a JSON document.
*/
@Override
public ExpressionList<T> jsonLessThan(String propertyName, String path, Object val){
public ExpressionList<T> jsonLessThan(String propertyName, String path, Object val) {
return exprList.jsonLessThan(propertyName, path, val);
}
@@ -477,7 +477,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Less than or equal to - for the given path in a JSON document.
*/
@Override
public ExpressionList<T> jsonLessOrEqualTo(String propertyName, String path, Object val){
public ExpressionList<T> jsonLessOrEqualTo(String propertyName, String path, Object val) {
return exprList.jsonLessOrEqualTo(propertyName, path, val);
}
@@ -485,7 +485,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
* Between - for the given path in a JSON document.
*/
@Override
public ExpressionList<T> jsonBetween(String propertyName, String path, Object lowerValue, Object upperValue){
public ExpressionList<T> jsonBetween(String propertyName, String path, Object lowerValue, Object upperValue) {
return exprList.jsonBetween(propertyName, path, lowerValue, upperValue);
}
@@ -82,8 +82,8 @@ class LikeExpression extends AbstractValueExpression {
LikeExpression that = (LikeExpression) other;
return this.propName.equals(that.propName)
&& this.caseInsensitive == that.caseInsensitive
&& this.type == that.type;
&& this.caseInsensitive == that.caseInsensitive
&& this.type == that.type;
}
@Override
@@ -159,15 +159,15 @@ abstract class LogicExpression implements SpiExpression {
LogicExpression that = (LogicExpression) other;
return this.joinType.equals(that.joinType)
&& this.expOne.isSameByPlan(that.expOne)
&& this.expTwo.isSameByPlan(that.expTwo);
&& this.expOne.isSameByPlan(that.expOne)
&& this.expTwo.isSameByPlan(that.expTwo);
}
@Override
public boolean isSameByBind(SpiExpression other) {
LogicExpression that = (LogicExpression) other;
return this.expOne.isSameByBind(that.expOne)
&& this.expTwo.isSameByBind(that.expTwo);
&& this.expTwo.isSameByBind(that.expTwo);
}
}
@@ -35,7 +35,7 @@ class NamedParamHelp {
Object value = value(sourceValue);
if (value instanceof Collection) {
values.addAll((Collection<?>)value);
values.addAll((Collection<?>) value);
} else {
values.add(value);
}
@@ -70,9 +70,9 @@ class NestedPathWrapperExpression implements SpiExpression {
@Override
public boolean isSameByPlan(SpiExpression other) {
if (other instanceof NestedPathWrapperExpression) {
NestedPathWrapperExpression that = (NestedPathWrapperExpression)other;
NestedPathWrapperExpression that = (NestedPathWrapperExpression) other;
return nestedPath.equals(that.nestedPath)
&& delegate.isSameByPlan(that.delegate);
&& delegate.isSameByPlan(that.delegate);
}
return false;
}
@@ -80,7 +80,7 @@ class NullExpression extends AbstractExpression {
NullExpression that = (NullExpression) other;
return this.propName.equals(that.propName)
&& this.notNull == that.notNull;
&& this.notNull == that.notNull;
}
@Override
@@ -68,12 +68,12 @@ class PrepareDocNested {
/**
* Reorganise the flat list of expressions into a tree grouping expressions by nested path.
*
* <p>
* Returns the new top level list of expressions.
*/
private List<SpiExpression> group() {
Map<String,Group> groups = new LinkedHashMap<>();
Map<String, Group> groups = new LinkedHashMap<>();
// organise expressions by nestedPath
for (int i = 0; i < origSize; i++) {
@@ -122,8 +122,8 @@ class PrepareDocNested {
String nestedPath = expr.nestedPath(beanDescriptor);
if (nestedPath == null) {
hasMixedNesting = true;
} if (nestedPath != null) {
}
if (nestedPath != null) {
hasNesting = true;
if (firstNestedPath == null) {
firstNestedPath = nestedPath;
@@ -122,8 +122,7 @@ public class SimpleExpression extends AbstractValueExpression {
}
SimpleExpression that = (SimpleExpression) other;
return this.propName.equals(that.propName)
&& this.type == that.type;
return this.propName.equals(that.propName) && this.type == that.type;
}
@Override
@@ -1,36 +1,36 @@
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>Collection objects for lazy loading</TITLE>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>Collection objects for lazy loading</TITLE>
</HEAD>
<Body BGCOLOR="#ffffff">
Expressions for building WHERE clauses.
<p>
You will most likely use expressions directly off the ExpressionList.
You will most likely use expressions directly off the ExpressionList.
</p>
<pre class="code">
Query&lt;Order&gt; query = Ebean.createQuery(Order.class)
.where()
.like(&quot;customer.name&quot;,&quot;rob%&quot;)
.gt(&quot;orderDate&quot;,lastWeek);
List&lt;Order&gt; orderList = query.findList();
...
</pre>
<p>
In the code above the LIKE and GREATER THAN Expressions are added to the where clause.
The way this works is that where() returns an ExpressionList which has methods on
it to create the standard expressions (EQUAL TO, LIKE etc).
In the code above the LIKE and GREATER THAN Expressions are added to the where clause.
The way this works is that where() returns an ExpressionList which has methods on
it to create the standard expressions (EQUAL TO, LIKE etc).
</p>
<p>
I expect most people to add their expressions in this way. The Expr expression factory
object also has the ability to create the standard expressions.
I expect most people to add their expressions in this way. The Expr expression factory
object also has the ability to create the standard expressions.
</p>
<p>
You can build your own Expression objects by implementing the Expression interface.
You can build your own Expression objects by implementing the Expression interface.
</p>
</Body>
</HTML>
</HTML>
@@ -182,7 +182,7 @@ class EqlAdapter<T> extends EQLBaseListener {
*/
private String trimParenthesis(String text) {
text = text.substring(1);
text = text.substring(0, text.length()-1);
text = text.substring(0, text.length() - 1);
return text;
}
@@ -198,20 +198,20 @@ class EqlAdapter<T> extends EQLBaseListener {
String path = getLeftHandSidePath(ctx);
EqlOperator op = getOperator(ctx);
if (op != EqlOperator.BETWEEN) {
throw new IllegalStateException("Expecting BETWEEN operator but got "+op);
throw new IllegalStateException("Expecting BETWEEN operator but got " + op);
}
helper.addBetween(path, child(ctx,2), child(ctx,4));
helper.addBetween(path, child(ctx, 2), child(ctx, 4));
}
@Override
public void enterPropertyBetween_expression(EQLParser.PropertyBetween_expressionContext ctx) {
checkChildren(ctx, 5);
String rawValue = child(ctx,0);
String rawValue = child(ctx, 0);
EqlOperator op = getOperator(ctx);
if (op != EqlOperator.BETWEEN) {
throw new IllegalStateException("Expecting BETWEEN operator but got "+op);
throw new IllegalStateException("Expecting BETWEEN operator but got " + op);
}
helper.addBetweenProperty(rawValue, child(ctx,2), child(ctx,4));
helper.addBetweenProperty(rawValue, child(ctx, 2), child(ctx, 4));
}
@Override
@@ -308,16 +308,23 @@ class EqlAdapter<T> extends EQLBaseListener {
private EqlOperator invert(EqlOperator op) {
switch (op) {
// no change
case EQ : return EqlOperator.EQ;
case IEQ : return EqlOperator.IEQ;
case NE : return EqlOperator.NE;
case EQ:
return EqlOperator.EQ;
case IEQ:
return EqlOperator.IEQ;
case NE:
return EqlOperator.NE;
// invert
case LT : return EqlOperator.GT;
case LTE : return EqlOperator.GTE;
case GT : return EqlOperator.LT;
case GTE : return EqlOperator.LTE;
case LT:
return EqlOperator.GT;
case LTE:
return EqlOperator.GTE;
case GT:
return EqlOperator.LT;
case GTE:
return EqlOperator.LTE;
default:
throw new IllegalStateException("Can not invert operator "+op);
throw new IllegalStateException("Can not invert operator " + op);
}
}
@@ -366,7 +373,7 @@ class EqlAdapter<T> extends EQLBaseListener {
}
private EqlOperator getOperator(ParserRuleContext ctx) {
String operator = child(ctx,1);
String operator = child(ctx, 1);
EqlOperator op = operatorMapping.get(operator);
if (op == null) {
throw new IllegalStateException("No operator found for " + operator);
@@ -122,12 +122,16 @@ class EqlAdapterHelper {
private Object getBindValue(ValueType valueType, String value) {
switch (valueType) {
case BOOL: return Boolean.parseBoolean(value);
case NUMBER: return new BigDecimal(value);
case STRING: return unquote(value);
case NAMED_PARAM: return owner.namedParam(value.substring(1));
case BOOL:
return Boolean.parseBoolean(value);
case NUMBER:
return new BigDecimal(value);
case STRING:
return unquote(value);
case NAMED_PARAM:
return owner.namedParam(value.substring(1));
default:
throw new IllegalArgumentException("Unhandled valueType "+valueType);
throw new IllegalArgumentException("Unhandled valueType " + valueType);
}
}
@@ -5,7 +5,7 @@ import java.util.Map;
class OperatorMapping {
Map<String,EqlOperator> map = new HashMap<>();
Map<String, EqlOperator> map = new HashMap<>();
public OperatorMapping() {
map.put("eq", EqlOperator.EQ);
@@ -43,7 +43,7 @@ class ParseFetchConfig {
}
private static int parseBatchSize(String path) {
path = path.substring(0, path.length()-1);
path = path.substring(0, path.length() - 1);
return Integer.parseInt(path);
}
}
File diff suppressed because it is too large Load Diff
@@ -1,301 +1,319 @@
// Generated from /home/rob/github/ebean/src/test/resources/EQL.g4 by ANTLR 4.5.3
package com.avaje.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.Lexer;
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.Lexer;
import org.antlr.v4.runtime.RecognitionException;
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.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class EQLLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.5.3", RuntimeMetaData.VERSION); }
static {
RuntimeMetaData.checkVersion("4.5.3", 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, INPUT_VARIABLE=58, PATH_VARIABLE=59,
BOOLEAN_LITERAL=60, NUMBER_LITERAL=61, DOUBLE=62, INT=63, ZERO=64, STRING_LITERAL=65,
WS=66;
public static String[] modeNames = {
"DEFAULT_MODE"
};
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, INPUT_VARIABLE = 58, PATH_VARIABLE = 59,
BOOLEAN_LITERAL = 60, NUMBER_LITERAL = 61, DOUBLE = 62, INT = 63, ZERO = 64, STRING_LITERAL = 65,
WS = 66;
public static String[] modeNames = {
"DEFAULT_MODE"
};
public static final String[] ruleNames = {
"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",
"INPUT_VARIABLE", "PATH_VARIABLE", "BOOLEAN_LITERAL", "NUMBER_LITERAL",
"DOUBLE", "INT", "ZERO", "STRING_LITERAL", "WS"
};
public static final String[] ruleNames = {
"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",
"INPUT_VARIABLE", "PATH_VARIABLE", "BOOLEAN_LITERAL", "NUMBER_LITERAL",
"DOUBLE", "INT", "ZERO", "STRING_LITERAL", "WS"
};
private static final String[] _LITERAL_NAMES = {
null, "'select'", "'('", "')'", "'distinct'", "'where'", "'order'", "'by'",
"','", "'nulls'", "'first'", "'last'", "'asc'", "'desc'", "'limit'", "'offset'",
"'fetch'", "'+'", "'query'", "'lazy'", "'or'", "'and'", "'not'", "'in'",
"'between'", "'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'",
null, null, null, null, null, null, "'0'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, 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", "BOOLEAN_LITERAL", "NUMBER_LITERAL", "DOUBLE", "INT",
"ZERO", "STRING_LITERAL", "WS"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
private static final String[] _LITERAL_NAMES = {
null, "'select'", "'('", "')'", "'distinct'", "'where'", "'order'", "'by'",
"','", "'nulls'", "'first'", "'last'", "'asc'", "'desc'", "'limit'", "'offset'",
"'fetch'", "'+'", "'query'", "'lazy'", "'or'", "'and'", "'not'", "'in'",
"'between'", "'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'",
null, null, null, null, null, null, "'0'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, 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", "BOOLEAN_LITERAL", "NUMBER_LITERAL", "DOUBLE", "INT",
"ZERO", "STRING_LITERAL", "WS"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
public Vocabulary getVocabulary() {
return VOCABULARY;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
@Override
public void recover(RecognitionException e) {
throw new RuntimeException("Error in grammer - " + e.getMessage());
}
@Override
public void recover(RecognitionException e) {
throw new RuntimeException("Error in grammer - " + e.getMessage());
}
public EQLLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
public EQLLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
@Override
public String getGrammarFileName() { return "EQL.g4"; }
@Override
public String getGrammarFileName() {
return "EQL.g4";
}
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String[] getModeNames() { return modeNames; }
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
public ATN getATN() { return _ATN; }
@Override
public ATN getATN() {
return _ATN;
}
public static final String _serializedATN =
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2D\u0200\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\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3"+
"\3\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\31\3\31\3\31\3\31\3\31\3\31"+
"\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\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\35\3\35\3\36"+
"\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\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\60\3\60\3\60\3\61\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3"+
"\64\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67\38\38"+
"\38\39\39\39\3:\3:\3:\3:\3;\3;\3;\7;\u01bb\n;\f;\16;\u01be\13;\3<\3<\7"+
"<\u01c2\n<\f<\16<\u01c5\13<\3=\3=\3=\3=\3=\3=\3=\3=\3=\5=\u01d0\n=\3>"+
"\5>\u01d3\n>\3>\3>\5>\u01d7\n>\3>\3>\5>\u01db\n>\3?\6?\u01de\n?\r?\16"+
"?\u01df\3?\3?\7?\u01e4\n?\f?\16?\u01e7\13?\3@\3@\7@\u01eb\n@\f@\16@\u01ee"+
"\13@\3A\3A\3B\3B\3B\3B\7B\u01f6\nB\fB\16B\u01f9\13B\3B\3B\3C\3C\3C\3C"+
"\2\2D\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\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\"\""+
"\u020b\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\2"+
"G\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\2"+
"m\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\3\u0087\3\2\2\2\5\u008e\3\2\2\2\7\u0090\3\2\2\2\t"+
"\u0092\3\2\2\2\13\u009b\3\2\2\2\r\u00a1\3\2\2\2\17\u00a7\3\2\2\2\21\u00aa"+
"\3\2\2\2\23\u00ac\3\2\2\2\25\u00b2\3\2\2\2\27\u00b8\3\2\2\2\31\u00bd\3"+
"\2\2\2\33\u00c1\3\2\2\2\35\u00c6\3\2\2\2\37\u00cc\3\2\2\2!\u00d3\3\2\2"+
"\2#\u00d9\3\2\2\2%\u00db\3\2\2\2\'\u00e1\3\2\2\2)\u00e6\3\2\2\2+\u00e9"+
"\3\2\2\2-\u00ed\3\2\2\2/\u00f1\3\2\2\2\61\u00f4\3\2\2\2\63\u00fc\3\2\2"+
"\2\65\u00ff\3\2\2\2\67\u0104\3\2\2\29\u010b\3\2\2\2;\u0115\3\2\2\2=\u011d"+
"\3\2\2\2?\u0123\3\2\2\2A\u012b\3\2\2\2C\u0136\3\2\2\2E\u013f\3\2\2\2G"+
"\u0144\3\2\2\2I\u014a\3\2\2\2K\u0153\3\2\2\2M\u015d\3\2\2\2O\u0168\3\2"+
"\2\2Q\u0174\3\2\2\2S\u017d\3\2\2\2U\u0187\3\2\2\2W\u0189\3\2\2\2Y\u018c"+
"\3\2\2\2[\u018e\3\2\2\2]\u0191\3\2\2\2_\u0194\3\2\2\2a\u0197\3\2\2\2c"+
"\u019b\3\2\2\2e\u019d\3\2\2\2g\u01a0\3\2\2\2i\u01a3\3\2\2\2k\u01a6\3\2"+
"\2\2m\u01aa\3\2\2\2o\u01ad\3\2\2\2q\u01b0\3\2\2\2s\u01b3\3\2\2\2u\u01b7"+
"\3\2\2\2w\u01bf\3\2\2\2y\u01cf\3\2\2\2{\u01da\3\2\2\2}\u01dd\3\2\2\2\177"+
"\u01e8\3\2\2\2\u0081\u01ef\3\2\2\2\u0083\u01f1\3\2\2\2\u0085\u01fc\3\2"+
"\2\2\u0087\u0088\7u\2\2\u0088\u0089\7g\2\2\u0089\u008a\7n\2\2\u008a\u008b"+
"\7g\2\2\u008b\u008c\7e\2\2\u008c\u008d\7v\2\2\u008d\4\3\2\2\2\u008e\u008f"+
"\7*\2\2\u008f\6\3\2\2\2\u0090\u0091\7+\2\2\u0091\b\3\2\2\2\u0092\u0093"+
"\7f\2\2\u0093\u0094\7k\2\2\u0094\u0095\7u\2\2\u0095\u0096\7v\2\2\u0096"+
"\u0097\7k\2\2\u0097\u0098\7p\2\2\u0098\u0099\7e\2\2\u0099\u009a\7v\2\2"+
"\u009a\n\3\2\2\2\u009b\u009c\7y\2\2\u009c\u009d\7j\2\2\u009d\u009e\7g"+
"\2\2\u009e\u009f\7t\2\2\u009f\u00a0\7g\2\2\u00a0\f\3\2\2\2\u00a1\u00a2"+
"\7q\2\2\u00a2\u00a3\7t\2\2\u00a3\u00a4\7f\2\2\u00a4\u00a5\7g\2\2\u00a5"+
"\u00a6\7t\2\2\u00a6\16\3\2\2\2\u00a7\u00a8\7d\2\2\u00a8\u00a9\7{\2\2\u00a9"+
"\20\3\2\2\2\u00aa\u00ab\7.\2\2\u00ab\22\3\2\2\2\u00ac\u00ad\7p\2\2\u00ad"+
"\u00ae\7w\2\2\u00ae\u00af\7n\2\2\u00af\u00b0\7n\2\2\u00b0\u00b1\7u\2\2"+
"\u00b1\24\3\2\2\2\u00b2\u00b3\7h\2\2\u00b3\u00b4\7k\2\2\u00b4\u00b5\7"+
"t\2\2\u00b5\u00b6\7u\2\2\u00b6\u00b7\7v\2\2\u00b7\26\3\2\2\2\u00b8\u00b9"+
"\7n\2\2\u00b9\u00ba\7c\2\2\u00ba\u00bb\7u\2\2\u00bb\u00bc\7v\2\2\u00bc"+
"\30\3\2\2\2\u00bd\u00be\7c\2\2\u00be\u00bf\7u\2\2\u00bf\u00c0\7e\2\2\u00c0"+
"\32\3\2\2\2\u00c1\u00c2\7f\2\2\u00c2\u00c3\7g\2\2\u00c3\u00c4\7u\2\2\u00c4"+
"\u00c5\7e\2\2\u00c5\34\3\2\2\2\u00c6\u00c7\7n\2\2\u00c7\u00c8\7k\2\2\u00c8"+
"\u00c9\7o\2\2\u00c9\u00ca\7k\2\2\u00ca\u00cb\7v\2\2\u00cb\36\3\2\2\2\u00cc"+
"\u00cd\7q\2\2\u00cd\u00ce\7h\2\2\u00ce\u00cf\7h\2\2\u00cf\u00d0\7u\2\2"+
"\u00d0\u00d1\7g\2\2\u00d1\u00d2\7v\2\2\u00d2 \3\2\2\2\u00d3\u00d4\7h\2"+
"\2\u00d4\u00d5\7g\2\2\u00d5\u00d6\7v\2\2\u00d6\u00d7\7e\2\2\u00d7\u00d8"+
"\7j\2\2\u00d8\"\3\2\2\2\u00d9\u00da\7-\2\2\u00da$\3\2\2\2\u00db\u00dc"+
"\7s\2\2\u00dc\u00dd\7w\2\2\u00dd\u00de\7g\2\2\u00de\u00df\7t\2\2\u00df"+
"\u00e0\7{\2\2\u00e0&\3\2\2\2\u00e1\u00e2\7n\2\2\u00e2\u00e3\7c\2\2\u00e3"+
"\u00e4\7|\2\2\u00e4\u00e5\7{\2\2\u00e5(\3\2\2\2\u00e6\u00e7\7q\2\2\u00e7"+
"\u00e8\7t\2\2\u00e8*\3\2\2\2\u00e9\u00ea\7c\2\2\u00ea\u00eb\7p\2\2\u00eb"+
"\u00ec\7f\2\2\u00ec,\3\2\2\2\u00ed\u00ee\7p\2\2\u00ee\u00ef\7q\2\2\u00ef"+
"\u00f0\7v\2\2\u00f0.\3\2\2\2\u00f1\u00f2\7k\2\2\u00f2\u00f3\7p\2\2\u00f3"+
"\60\3\2\2\2\u00f4\u00f5\7d\2\2\u00f5\u00f6\7g\2\2\u00f6\u00f7\7v\2\2\u00f7"+
"\u00f8\7y\2\2\u00f8\u00f9\7g\2\2\u00f9\u00fa\7g\2\2\u00fa\u00fb\7p\2\2"+
"\u00fb\62\3\2\2\2\u00fc\u00fd\7k\2\2\u00fd\u00fe\7u\2\2\u00fe\64\3\2\2"+
"\2\u00ff\u0100\7p\2\2\u0100\u0101\7w\2\2\u0101\u0102\7n\2\2\u0102\u0103"+
"\7n\2\2\u0103\66\3\2\2\2\u0104\u0105\7k\2\2\u0105\u0106\7u\2\2\u0106\u0107"+
"\7P\2\2\u0107\u0108\7w\2\2\u0108\u0109\7n\2\2\u0109\u010a\7n\2\2\u010a"+
"8\3\2\2\2\u010b\u010c\7k\2\2\u010c\u010d\7u\2\2\u010d\u010e\7P\2\2\u010e"+
"\u010f\7q\2\2\u010f\u0110\7v\2\2\u0110\u0111\7P\2\2\u0111\u0112\7w\2\2"+
"\u0112\u0113\7n\2\2\u0113\u0114\7n\2\2\u0114:\3\2\2\2\u0115\u0116\7p\2"+
"\2\u0116\u0117\7q\2\2\u0117\u0118\7v\2\2\u0118\u0119\7P\2\2\u0119\u011a"+
"\7w\2\2\u011a\u011b\7n\2\2\u011b\u011c\7n\2\2\u011c<\3\2\2\2\u011d\u011e"+
"\7g\2\2\u011e\u011f\7o\2\2\u011f\u0120\7r\2\2\u0120\u0121\7v\2\2\u0121"+
"\u0122\7{\2\2\u0122>\3\2\2\2\u0123\u0124\7k\2\2\u0124\u0125\7u\2\2\u0125"+
"\u0126\7G\2\2\u0126\u0127\7o\2\2\u0127\u0128\7r\2\2\u0128\u0129\7v\2\2"+
"\u0129\u012a\7{\2\2\u012a@\3\2\2\2\u012b\u012c\7k\2\2\u012c\u012d\7u\2"+
"\2\u012d\u012e\7P\2\2\u012e\u012f\7q\2\2\u012f\u0130\7v\2\2\u0130\u0131"+
"\7G\2\2\u0131\u0132\7o\2\2\u0132\u0133\7r\2\2\u0133\u0134\7v\2\2\u0134"+
"\u0135\7{\2\2\u0135B\3\2\2\2\u0136\u0137\7p\2\2\u0137\u0138\7q\2\2\u0138"+
"\u0139\7v\2\2\u0139\u013a\7G\2\2\u013a\u013b\7o\2\2\u013b\u013c\7r\2\2"+
"\u013c\u013d\7v\2\2\u013d\u013e\7{\2\2\u013eD\3\2\2\2\u013f\u0140\7n\2"+
"\2\u0140\u0141\7k\2\2\u0141\u0142\7m\2\2\u0142\u0143\7g\2\2\u0143F\3\2"+
"\2\2\u0144\u0145\7k\2\2\u0145\u0146\7n\2\2\u0146\u0147\7k\2\2\u0147\u0148"+
"\7m\2\2\u0148\u0149\7g\2\2\u0149H\3\2\2\2\u014a\u014b\7e\2\2\u014b\u014c"+
"\7q\2\2\u014c\u014d\7p\2\2\u014d\u014e\7v\2\2\u014e\u014f\7c\2\2\u014f"+
"\u0150\7k\2\2\u0150\u0151\7p\2\2\u0151\u0152\7u\2\2\u0152J\3\2\2\2\u0153"+
"\u0154\7k\2\2\u0154\u0155\7e\2\2\u0155\u0156\7q\2\2\u0156\u0157\7p\2\2"+
"\u0157\u0158\7v\2\2\u0158\u0159\7c\2\2\u0159\u015a\7k\2\2\u015a\u015b"+
"\7p\2\2\u015b\u015c\7u\2\2\u015cL\3\2\2\2\u015d\u015e\7u\2\2\u015e\u015f"+
"\7v\2\2\u015f\u0160\7c\2\2\u0160\u0161\7t\2\2\u0161\u0162\7v\2\2\u0162"+
"\u0163\7u\2\2\u0163\u0164\7Y\2\2\u0164\u0165\7k\2\2\u0165\u0166\7v\2\2"+
"\u0166\u0167\7j\2\2\u0167N\3\2\2\2\u0168\u0169\7k\2\2\u0169\u016a\7u\2"+
"\2\u016a\u016b\7v\2\2\u016b\u016c\7c\2\2\u016c\u016d\7t\2\2\u016d\u016e"+
"\7v\2\2\u016e\u016f\7u\2\2\u016f\u0170\7Y\2\2\u0170\u0171\7k\2\2\u0171"+
"\u0172\7v\2\2\u0172\u0173\7j\2\2\u0173P\3\2\2\2\u0174\u0175\7g\2\2\u0175"+
"\u0176\7p\2\2\u0176\u0177\7f\2\2\u0177\u0178\7u\2\2\u0178\u0179\7Y\2\2"+
"\u0179\u017a\7k\2\2\u017a\u017b\7v\2\2\u017b\u017c\7j\2\2\u017cR\3\2\2"+
"\2\u017d\u017e\7k\2\2\u017e\u017f\7g\2\2\u017f\u0180\7p\2\2\u0180\u0181"+
"\7f\2\2\u0181\u0182\7u\2\2\u0182\u0183\7Y\2\2\u0183\u0184\7k\2\2\u0184"+
"\u0185\7v\2\2\u0185\u0186\7j\2\2\u0186T\3\2\2\2\u0187\u0188\7?\2\2\u0188"+
"V\3\2\2\2\u0189\u018a\7g\2\2\u018a\u018b\7s\2\2\u018bX\3\2\2\2\u018c\u018d"+
"\7@\2\2\u018dZ\3\2\2\2\u018e\u018f\7i\2\2\u018f\u0190\7v\2\2\u0190\\\3"+
"\2\2\2\u0191\u0192\7@\2\2\u0192\u0193\7?\2\2\u0193^\3\2\2\2\u0194\u0195"+
"\7i\2\2\u0195\u0196\7g\2\2\u0196`\3\2\2\2\u0197\u0198\7i\2\2\u0198\u0199"+
"\7v\2\2\u0199\u019a\7g\2\2\u019ab\3\2\2\2\u019b\u019c\7>\2\2\u019cd\3"+
"\2\2\2\u019d\u019e\7n\2\2\u019e\u019f\7v\2\2\u019ff\3\2\2\2\u01a0\u01a1"+
"\7>\2\2\u01a1\u01a2\7?\2\2\u01a2h\3\2\2\2\u01a3\u01a4\7n\2\2\u01a4\u01a5"+
"\7g\2\2\u01a5j\3\2\2\2\u01a6\u01a7\7n\2\2\u01a7\u01a8\7v\2\2\u01a8\u01a9"+
"\7g\2\2\u01a9l\3\2\2\2\u01aa\u01ab\7>\2\2\u01ab\u01ac\7@\2\2\u01acn\3"+
"\2\2\2\u01ad\u01ae\7#\2\2\u01ae\u01af\7?\2\2\u01afp\3\2\2\2\u01b0\u01b1"+
"\7p\2\2\u01b1\u01b2\7g\2\2\u01b2r\3\2\2\2\u01b3\u01b4\7k\2\2\u01b4\u01b5"+
"\7g\2\2\u01b5\u01b6\7s\2\2\u01b6t\3\2\2\2\u01b7\u01b8\7<\2\2\u01b8\u01bc"+
"\t\2\2\2\u01b9\u01bb\t\3\2\2\u01ba\u01b9\3\2\2\2\u01bb\u01be\3\2\2\2\u01bc"+
"\u01ba\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bdv\3\2\2\2\u01be\u01bc\3\2\2\2"+
"\u01bf\u01c3\t\2\2\2\u01c0\u01c2\t\4\2\2\u01c1\u01c0\3\2\2\2\u01c2\u01c5"+
"\3\2\2\2\u01c3\u01c1\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4x\3\2\2\2\u01c5"+
"\u01c3\3\2\2\2\u01c6\u01c7\7v\2\2\u01c7\u01c8\7t\2\2\u01c8\u01c9\7w\2"+
"\2\u01c9\u01d0\7g\2\2\u01ca\u01cb\7h\2\2\u01cb\u01cc\7c\2\2\u01cc\u01cd"+
"\7n\2\2\u01cd\u01ce\7u\2\2\u01ce\u01d0\7g\2\2\u01cf\u01c6\3\2\2\2\u01cf"+
"\u01ca\3\2\2\2\u01d0z\3\2\2\2\u01d1\u01d3\7/\2\2\u01d2\u01d1\3\2\2\2\u01d2"+
"\u01d3\3\2\2\2\u01d3\u01d4\3\2\2\2\u01d4\u01db\5}?\2\u01d5\u01d7\7/\2"+
"\2\u01d6\u01d5\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d8\3\2\2\2\u01d8\u01db"+
"\5\177@\2\u01d9\u01db\5\u0081A\2\u01da\u01d2\3\2\2\2\u01da\u01d6\3\2\2"+
"\2\u01da\u01d9\3\2\2\2\u01db|\3\2\2\2\u01dc\u01de\t\5\2\2\u01dd\u01dc"+
"\3\2\2\2\u01de\u01df\3\2\2\2\u01df\u01dd\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0"+
"\u01e1\3\2\2\2\u01e1\u01e5\7\60\2\2\u01e2\u01e4\t\5\2\2\u01e3\u01e2\3"+
"\2\2\2\u01e4\u01e7\3\2\2\2\u01e5\u01e3\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6"+
"~\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e8\u01ec\t\6\2\2\u01e9\u01eb\t\5\2\2"+
"\u01ea\u01e9\3\2\2\2\u01eb\u01ee\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ec\u01ed"+
"\3\2\2\2\u01ed\u0080\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ef\u01f0\7\62\2\2"+
"\u01f0\u0082\3\2\2\2\u01f1\u01f7\7)\2\2\u01f2\u01f6\n\7\2\2\u01f3\u01f4"+
"\7)\2\2\u01f4\u01f6\7)\2\2\u01f5\u01f2\3\2\2\2\u01f5\u01f3\3\2\2\2\u01f6"+
"\u01f9\3\2\2\2\u01f7\u01f5\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8\u01fa\3\2"+
"\2\2\u01f9\u01f7\3\2\2\2\u01fa\u01fb\7)\2\2\u01fb\u0084\3\2\2\2\u01fc"+
"\u01fd\t\b\2\2\u01fd\u01fe\3\2\2\2\u01fe\u01ff\bC\2\2\u01ff\u0086\3\2"+
"\2\2\16\2\u01bc\u01c3\u01cf\u01d2\u01d6\u01da\u01df\u01e5\u01ec\u01f5"+
"\u01f7\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
public static final String _serializedATN =
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2D\u0200\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\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3" +
"\3\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\31\3\31\3\31\3\31\3\31\3\31" +
"\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\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\35\3\35\3\36" +
"\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\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\60\3\60\3\60\3\61\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3" +
"\64\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67\38\38" +
"\38\39\39\39\3:\3:\3:\3:\3;\3;\3;\7;\u01bb\n;\f;\16;\u01be\13;\3<\3<\7" +
"<\u01c2\n<\f<\16<\u01c5\13<\3=\3=\3=\3=\3=\3=\3=\3=\3=\5=\u01d0\n=\3>" +
"\5>\u01d3\n>\3>\3>\5>\u01d7\n>\3>\3>\5>\u01db\n>\3?\6?\u01de\n?\r?\16" +
"?\u01df\3?\3?\7?\u01e4\n?\f?\16?\u01e7\13?\3@\3@\7@\u01eb\n@\f@\16@\u01ee" +
"\13@\3A\3A\3B\3B\3B\3B\7B\u01f6\nB\fB\16B\u01f9\13B\3B\3B\3C\3C\3C\3C" +
"\2\2D\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\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\"\"" +
"\u020b\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\2" +
"G\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\2" +
"m\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\3\u0087\3\2\2\2\5\u008e\3\2\2\2\7\u0090\3\2\2\2\t" +
"\u0092\3\2\2\2\13\u009b\3\2\2\2\r\u00a1\3\2\2\2\17\u00a7\3\2\2\2\21\u00aa" +
"\3\2\2\2\23\u00ac\3\2\2\2\25\u00b2\3\2\2\2\27\u00b8\3\2\2\2\31\u00bd\3" +
"\2\2\2\33\u00c1\3\2\2\2\35\u00c6\3\2\2\2\37\u00cc\3\2\2\2!\u00d3\3\2\2" +
"\2#\u00d9\3\2\2\2%\u00db\3\2\2\2\'\u00e1\3\2\2\2)\u00e6\3\2\2\2+\u00e9" +
"\3\2\2\2-\u00ed\3\2\2\2/\u00f1\3\2\2\2\61\u00f4\3\2\2\2\63\u00fc\3\2\2" +
"\2\65\u00ff\3\2\2\2\67\u0104\3\2\2\29\u010b\3\2\2\2;\u0115\3\2\2\2=\u011d" +
"\3\2\2\2?\u0123\3\2\2\2A\u012b\3\2\2\2C\u0136\3\2\2\2E\u013f\3\2\2\2G" +
"\u0144\3\2\2\2I\u014a\3\2\2\2K\u0153\3\2\2\2M\u015d\3\2\2\2O\u0168\3\2" +
"\2\2Q\u0174\3\2\2\2S\u017d\3\2\2\2U\u0187\3\2\2\2W\u0189\3\2\2\2Y\u018c" +
"\3\2\2\2[\u018e\3\2\2\2]\u0191\3\2\2\2_\u0194\3\2\2\2a\u0197\3\2\2\2c" +
"\u019b\3\2\2\2e\u019d\3\2\2\2g\u01a0\3\2\2\2i\u01a3\3\2\2\2k\u01a6\3\2" +
"\2\2m\u01aa\3\2\2\2o\u01ad\3\2\2\2q\u01b0\3\2\2\2s\u01b3\3\2\2\2u\u01b7" +
"\3\2\2\2w\u01bf\3\2\2\2y\u01cf\3\2\2\2{\u01da\3\2\2\2}\u01dd\3\2\2\2\177" +
"\u01e8\3\2\2\2\u0081\u01ef\3\2\2\2\u0083\u01f1\3\2\2\2\u0085\u01fc\3\2" +
"\2\2\u0087\u0088\7u\2\2\u0088\u0089\7g\2\2\u0089\u008a\7n\2\2\u008a\u008b" +
"\7g\2\2\u008b\u008c\7e\2\2\u008c\u008d\7v\2\2\u008d\4\3\2\2\2\u008e\u008f" +
"\7*\2\2\u008f\6\3\2\2\2\u0090\u0091\7+\2\2\u0091\b\3\2\2\2\u0092\u0093" +
"\7f\2\2\u0093\u0094\7k\2\2\u0094\u0095\7u\2\2\u0095\u0096\7v\2\2\u0096" +
"\u0097\7k\2\2\u0097\u0098\7p\2\2\u0098\u0099\7e\2\2\u0099\u009a\7v\2\2" +
"\u009a\n\3\2\2\2\u009b\u009c\7y\2\2\u009c\u009d\7j\2\2\u009d\u009e\7g" +
"\2\2\u009e\u009f\7t\2\2\u009f\u00a0\7g\2\2\u00a0\f\3\2\2\2\u00a1\u00a2" +
"\7q\2\2\u00a2\u00a3\7t\2\2\u00a3\u00a4\7f\2\2\u00a4\u00a5\7g\2\2\u00a5" +
"\u00a6\7t\2\2\u00a6\16\3\2\2\2\u00a7\u00a8\7d\2\2\u00a8\u00a9\7{\2\2\u00a9" +
"\20\3\2\2\2\u00aa\u00ab\7.\2\2\u00ab\22\3\2\2\2\u00ac\u00ad\7p\2\2\u00ad" +
"\u00ae\7w\2\2\u00ae\u00af\7n\2\2\u00af\u00b0\7n\2\2\u00b0\u00b1\7u\2\2" +
"\u00b1\24\3\2\2\2\u00b2\u00b3\7h\2\2\u00b3\u00b4\7k\2\2\u00b4\u00b5\7" +
"t\2\2\u00b5\u00b6\7u\2\2\u00b6\u00b7\7v\2\2\u00b7\26\3\2\2\2\u00b8\u00b9" +
"\7n\2\2\u00b9\u00ba\7c\2\2\u00ba\u00bb\7u\2\2\u00bb\u00bc\7v\2\2\u00bc" +
"\30\3\2\2\2\u00bd\u00be\7c\2\2\u00be\u00bf\7u\2\2\u00bf\u00c0\7e\2\2\u00c0" +
"\32\3\2\2\2\u00c1\u00c2\7f\2\2\u00c2\u00c3\7g\2\2\u00c3\u00c4\7u\2\2\u00c4" +
"\u00c5\7e\2\2\u00c5\34\3\2\2\2\u00c6\u00c7\7n\2\2\u00c7\u00c8\7k\2\2\u00c8" +
"\u00c9\7o\2\2\u00c9\u00ca\7k\2\2\u00ca\u00cb\7v\2\2\u00cb\36\3\2\2\2\u00cc" +
"\u00cd\7q\2\2\u00cd\u00ce\7h\2\2\u00ce\u00cf\7h\2\2\u00cf\u00d0\7u\2\2" +
"\u00d0\u00d1\7g\2\2\u00d1\u00d2\7v\2\2\u00d2 \3\2\2\2\u00d3\u00d4\7h\2" +
"\2\u00d4\u00d5\7g\2\2\u00d5\u00d6\7v\2\2\u00d6\u00d7\7e\2\2\u00d7\u00d8" +
"\7j\2\2\u00d8\"\3\2\2\2\u00d9\u00da\7-\2\2\u00da$\3\2\2\2\u00db\u00dc" +
"\7s\2\2\u00dc\u00dd\7w\2\2\u00dd\u00de\7g\2\2\u00de\u00df\7t\2\2\u00df" +
"\u00e0\7{\2\2\u00e0&\3\2\2\2\u00e1\u00e2\7n\2\2\u00e2\u00e3\7c\2\2\u00e3" +
"\u00e4\7|\2\2\u00e4\u00e5\7{\2\2\u00e5(\3\2\2\2\u00e6\u00e7\7q\2\2\u00e7" +
"\u00e8\7t\2\2\u00e8*\3\2\2\2\u00e9\u00ea\7c\2\2\u00ea\u00eb\7p\2\2\u00eb" +
"\u00ec\7f\2\2\u00ec,\3\2\2\2\u00ed\u00ee\7p\2\2\u00ee\u00ef\7q\2\2\u00ef" +
"\u00f0\7v\2\2\u00f0.\3\2\2\2\u00f1\u00f2\7k\2\2\u00f2\u00f3\7p\2\2\u00f3" +
"\60\3\2\2\2\u00f4\u00f5\7d\2\2\u00f5\u00f6\7g\2\2\u00f6\u00f7\7v\2\2\u00f7" +
"\u00f8\7y\2\2\u00f8\u00f9\7g\2\2\u00f9\u00fa\7g\2\2\u00fa\u00fb\7p\2\2" +
"\u00fb\62\3\2\2\2\u00fc\u00fd\7k\2\2\u00fd\u00fe\7u\2\2\u00fe\64\3\2\2" +
"\2\u00ff\u0100\7p\2\2\u0100\u0101\7w\2\2\u0101\u0102\7n\2\2\u0102\u0103" +
"\7n\2\2\u0103\66\3\2\2\2\u0104\u0105\7k\2\2\u0105\u0106\7u\2\2\u0106\u0107" +
"\7P\2\2\u0107\u0108\7w\2\2\u0108\u0109\7n\2\2\u0109\u010a\7n\2\2\u010a" +
"8\3\2\2\2\u010b\u010c\7k\2\2\u010c\u010d\7u\2\2\u010d\u010e\7P\2\2\u010e" +
"\u010f\7q\2\2\u010f\u0110\7v\2\2\u0110\u0111\7P\2\2\u0111\u0112\7w\2\2" +
"\u0112\u0113\7n\2\2\u0113\u0114\7n\2\2\u0114:\3\2\2\2\u0115\u0116\7p\2" +
"\2\u0116\u0117\7q\2\2\u0117\u0118\7v\2\2\u0118\u0119\7P\2\2\u0119\u011a" +
"\7w\2\2\u011a\u011b\7n\2\2\u011b\u011c\7n\2\2\u011c<\3\2\2\2\u011d\u011e" +
"\7g\2\2\u011e\u011f\7o\2\2\u011f\u0120\7r\2\2\u0120\u0121\7v\2\2\u0121" +
"\u0122\7{\2\2\u0122>\3\2\2\2\u0123\u0124\7k\2\2\u0124\u0125\7u\2\2\u0125" +
"\u0126\7G\2\2\u0126\u0127\7o\2\2\u0127\u0128\7r\2\2\u0128\u0129\7v\2\2" +
"\u0129\u012a\7{\2\2\u012a@\3\2\2\2\u012b\u012c\7k\2\2\u012c\u012d\7u\2" +
"\2\u012d\u012e\7P\2\2\u012e\u012f\7q\2\2\u012f\u0130\7v\2\2\u0130\u0131" +
"\7G\2\2\u0131\u0132\7o\2\2\u0132\u0133\7r\2\2\u0133\u0134\7v\2\2\u0134" +
"\u0135\7{\2\2\u0135B\3\2\2\2\u0136\u0137\7p\2\2\u0137\u0138\7q\2\2\u0138" +
"\u0139\7v\2\2\u0139\u013a\7G\2\2\u013a\u013b\7o\2\2\u013b\u013c\7r\2\2" +
"\u013c\u013d\7v\2\2\u013d\u013e\7{\2\2\u013eD\3\2\2\2\u013f\u0140\7n\2" +
"\2\u0140\u0141\7k\2\2\u0141\u0142\7m\2\2\u0142\u0143\7g\2\2\u0143F\3\2" +
"\2\2\u0144\u0145\7k\2\2\u0145\u0146\7n\2\2\u0146\u0147\7k\2\2\u0147\u0148" +
"\7m\2\2\u0148\u0149\7g\2\2\u0149H\3\2\2\2\u014a\u014b\7e\2\2\u014b\u014c" +
"\7q\2\2\u014c\u014d\7p\2\2\u014d\u014e\7v\2\2\u014e\u014f\7c\2\2\u014f" +
"\u0150\7k\2\2\u0150\u0151\7p\2\2\u0151\u0152\7u\2\2\u0152J\3\2\2\2\u0153" +
"\u0154\7k\2\2\u0154\u0155\7e\2\2\u0155\u0156\7q\2\2\u0156\u0157\7p\2\2" +
"\u0157\u0158\7v\2\2\u0158\u0159\7c\2\2\u0159\u015a\7k\2\2\u015a\u015b" +
"\7p\2\2\u015b\u015c\7u\2\2\u015cL\3\2\2\2\u015d\u015e\7u\2\2\u015e\u015f" +
"\7v\2\2\u015f\u0160\7c\2\2\u0160\u0161\7t\2\2\u0161\u0162\7v\2\2\u0162" +
"\u0163\7u\2\2\u0163\u0164\7Y\2\2\u0164\u0165\7k\2\2\u0165\u0166\7v\2\2" +
"\u0166\u0167\7j\2\2\u0167N\3\2\2\2\u0168\u0169\7k\2\2\u0169\u016a\7u\2" +
"\2\u016a\u016b\7v\2\2\u016b\u016c\7c\2\2\u016c\u016d\7t\2\2\u016d\u016e" +
"\7v\2\2\u016e\u016f\7u\2\2\u016f\u0170\7Y\2\2\u0170\u0171\7k\2\2\u0171" +
"\u0172\7v\2\2\u0172\u0173\7j\2\2\u0173P\3\2\2\2\u0174\u0175\7g\2\2\u0175" +
"\u0176\7p\2\2\u0176\u0177\7f\2\2\u0177\u0178\7u\2\2\u0178\u0179\7Y\2\2" +
"\u0179\u017a\7k\2\2\u017a\u017b\7v\2\2\u017b\u017c\7j\2\2\u017cR\3\2\2" +
"\2\u017d\u017e\7k\2\2\u017e\u017f\7g\2\2\u017f\u0180\7p\2\2\u0180\u0181" +
"\7f\2\2\u0181\u0182\7u\2\2\u0182\u0183\7Y\2\2\u0183\u0184\7k\2\2\u0184" +
"\u0185\7v\2\2\u0185\u0186\7j\2\2\u0186T\3\2\2\2\u0187\u0188\7?\2\2\u0188" +
"V\3\2\2\2\u0189\u018a\7g\2\2\u018a\u018b\7s\2\2\u018bX\3\2\2\2\u018c\u018d" +
"\7@\2\2\u018dZ\3\2\2\2\u018e\u018f\7i\2\2\u018f\u0190\7v\2\2\u0190\\\3" +
"\2\2\2\u0191\u0192\7@\2\2\u0192\u0193\7?\2\2\u0193^\3\2\2\2\u0194\u0195" +
"\7i\2\2\u0195\u0196\7g\2\2\u0196`\3\2\2\2\u0197\u0198\7i\2\2\u0198\u0199" +
"\7v\2\2\u0199\u019a\7g\2\2\u019ab\3\2\2\2\u019b\u019c\7>\2\2\u019cd\3" +
"\2\2\2\u019d\u019e\7n\2\2\u019e\u019f\7v\2\2\u019ff\3\2\2\2\u01a0\u01a1" +
"\7>\2\2\u01a1\u01a2\7?\2\2\u01a2h\3\2\2\2\u01a3\u01a4\7n\2\2\u01a4\u01a5" +
"\7g\2\2\u01a5j\3\2\2\2\u01a6\u01a7\7n\2\2\u01a7\u01a8\7v\2\2\u01a8\u01a9" +
"\7g\2\2\u01a9l\3\2\2\2\u01aa\u01ab\7>\2\2\u01ab\u01ac\7@\2\2\u01acn\3" +
"\2\2\2\u01ad\u01ae\7#\2\2\u01ae\u01af\7?\2\2\u01afp\3\2\2\2\u01b0\u01b1" +
"\7p\2\2\u01b1\u01b2\7g\2\2\u01b2r\3\2\2\2\u01b3\u01b4\7k\2\2\u01b4\u01b5" +
"\7g\2\2\u01b5\u01b6\7s\2\2\u01b6t\3\2\2\2\u01b7\u01b8\7<\2\2\u01b8\u01bc" +
"\t\2\2\2\u01b9\u01bb\t\3\2\2\u01ba\u01b9\3\2\2\2\u01bb\u01be\3\2\2\2\u01bc" +
"\u01ba\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bdv\3\2\2\2\u01be\u01bc\3\2\2\2" +
"\u01bf\u01c3\t\2\2\2\u01c0\u01c2\t\4\2\2\u01c1\u01c0\3\2\2\2\u01c2\u01c5" +
"\3\2\2\2\u01c3\u01c1\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4x\3\2\2\2\u01c5" +
"\u01c3\3\2\2\2\u01c6\u01c7\7v\2\2\u01c7\u01c8\7t\2\2\u01c8\u01c9\7w\2" +
"\2\u01c9\u01d0\7g\2\2\u01ca\u01cb\7h\2\2\u01cb\u01cc\7c\2\2\u01cc\u01cd" +
"\7n\2\2\u01cd\u01ce\7u\2\2\u01ce\u01d0\7g\2\2\u01cf\u01c6\3\2\2\2\u01cf" +
"\u01ca\3\2\2\2\u01d0z\3\2\2\2\u01d1\u01d3\7/\2\2\u01d2\u01d1\3\2\2\2\u01d2" +
"\u01d3\3\2\2\2\u01d3\u01d4\3\2\2\2\u01d4\u01db\5}?\2\u01d5\u01d7\7/\2" +
"\2\u01d6\u01d5\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d8\3\2\2\2\u01d8\u01db" +
"\5\177@\2\u01d9\u01db\5\u0081A\2\u01da\u01d2\3\2\2\2\u01da\u01d6\3\2\2" +
"\2\u01da\u01d9\3\2\2\2\u01db|\3\2\2\2\u01dc\u01de\t\5\2\2\u01dd\u01dc" +
"\3\2\2\2\u01de\u01df\3\2\2\2\u01df\u01dd\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0" +
"\u01e1\3\2\2\2\u01e1\u01e5\7\60\2\2\u01e2\u01e4\t\5\2\2\u01e3\u01e2\3" +
"\2\2\2\u01e4\u01e7\3\2\2\2\u01e5\u01e3\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6" +
"~\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e8\u01ec\t\6\2\2\u01e9\u01eb\t\5\2\2" +
"\u01ea\u01e9\3\2\2\2\u01eb\u01ee\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ec\u01ed" +
"\3\2\2\2\u01ed\u0080\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ef\u01f0\7\62\2\2" +
"\u01f0\u0082\3\2\2\2\u01f1\u01f7\7)\2\2\u01f2\u01f6\n\7\2\2\u01f3\u01f4" +
"\7)\2\2\u01f4\u01f6\7)\2\2\u01f5\u01f2\3\2\2\2\u01f5\u01f3\3\2\2\2\u01f6" +
"\u01f9\3\2\2\2\u01f7\u01f5\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8\u01fa\3\2" +
"\2\2\u01f9\u01f7\3\2\2\2\u01fa\u01fb\7)\2\2\u01fb\u0084\3\2\2\2\u01fc" +
"\u01fd\t\b\2\2\u01fd\u01fe\3\2\2\2\u01fe\u01ff\bC\2\2\u01ff\u0086\3\2" +
"\2\2\16\2\u01bc\u01c3\u01cf\u01d2\u01d6\u01da\u01df\u01e5\u01ec\u01f5" +
"\u01f7\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
@@ -1,5 +1,6 @@
// Generated from /home/rob/github/ebean/src/test/resources/EQL.g4 by ANTLR 4.5.3
package com.avaje.ebeaninternal.server.grammer.antlr;
import org.antlr.v4.runtime.tree.ParseTreeListener;
/**
@@ -7,404 +8,563 @@ import org.antlr.v4.runtime.tree.ParseTreeListener;
* {@link EQLParser}.
*/
public interface EQLListener extends ParseTreeListener {
/**
* Enter a parse tree produced by {@link EQLParser#select_statement}.
* @param ctx the parse tree
*/
void enterSelect_statement(EQLParser.Select_statementContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#select_statement}.
* @param ctx the parse tree
*/
void exitSelect_statement(EQLParser.Select_statementContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#select_clause}.
* @param ctx the parse tree
*/
void enterSelect_clause(EQLParser.Select_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#select_clause}.
* @param ctx the parse tree
*/
void exitSelect_clause(EQLParser.Select_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#distinct}.
* @param ctx the parse tree
*/
void enterDistinct(EQLParser.DistinctContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#distinct}.
* @param ctx the parse tree
*/
void exitDistinct(EQLParser.DistinctContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_clause}.
* @param ctx the parse tree
*/
void enterFetch_clause(EQLParser.Fetch_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_clause}.
* @param ctx the parse tree
*/
void exitFetch_clause(EQLParser.Fetch_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#where_clause}.
* @param ctx the parse tree
*/
void enterWhere_clause(EQLParser.Where_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#where_clause}.
* @param ctx the parse tree
*/
void exitWhere_clause(EQLParser.Where_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#orderby_clause}.
* @param ctx the parse tree
*/
void enterOrderby_clause(EQLParser.Orderby_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#orderby_clause}.
* @param ctx the parse tree
*/
void exitOrderby_clause(EQLParser.Orderby_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#orderby_property}.
* @param ctx the parse tree
*/
void enterOrderby_property(EQLParser.Orderby_propertyContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#orderby_property}.
* @param ctx the parse tree
*/
void exitOrderby_property(EQLParser.Orderby_propertyContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#nulls_firstlast}.
* @param ctx the parse tree
*/
void enterNulls_firstlast(EQLParser.Nulls_firstlastContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#nulls_firstlast}.
* @param ctx the parse tree
*/
void exitNulls_firstlast(EQLParser.Nulls_firstlastContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#asc_desc}.
* @param ctx the parse tree
*/
void enterAsc_desc(EQLParser.Asc_descContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#asc_desc}.
* @param ctx the parse tree
*/
void exitAsc_desc(EQLParser.Asc_descContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#limit_clause}.
* @param ctx the parse tree
*/
void enterLimit_clause(EQLParser.Limit_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#limit_clause}.
* @param ctx the parse tree
*/
void exitLimit_clause(EQLParser.Limit_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#offset_clause}.
* @param ctx the parse tree
*/
void enterOffset_clause(EQLParser.Offset_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#offset_clause}.
* @param ctx the parse tree
*/
void exitOffset_clause(EQLParser.Offset_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_path}.
* @param ctx the parse tree
*/
void enterFetch_path(EQLParser.Fetch_pathContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_path}.
* @param ctx the parse tree
*/
void exitFetch_path(EQLParser.Fetch_pathContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_property_set}.
* @param ctx the parse tree
*/
void enterFetch_property_set(EQLParser.Fetch_property_setContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_property_set}.
* @param ctx the parse tree
*/
void exitFetch_property_set(EQLParser.Fetch_property_setContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_property_group}.
* @param ctx the parse tree
*/
void enterFetch_property_group(EQLParser.Fetch_property_groupContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_property_group}.
* @param ctx the parse tree
*/
void exitFetch_property_group(EQLParser.Fetch_property_groupContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_property}.
* @param ctx the parse tree
*/
void enterFetch_property(EQLParser.Fetch_propertyContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_property}.
* @param ctx the parse tree
*/
void exitFetch_property(EQLParser.Fetch_propertyContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_query_hint}.
* @param ctx the parse tree
*/
void enterFetch_query_hint(EQLParser.Fetch_query_hintContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_query_hint}.
* @param ctx the parse tree
*/
void exitFetch_query_hint(EQLParser.Fetch_query_hintContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_lazy_hint}.
* @param ctx the parse tree
*/
void enterFetch_lazy_hint(EQLParser.Fetch_lazy_hintContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_lazy_hint}.
* @param ctx the parse tree
*/
void exitFetch_lazy_hint(EQLParser.Fetch_lazy_hintContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_option}.
* @param ctx the parse tree
*/
void enterFetch_option(EQLParser.Fetch_optionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_option}.
* @param ctx the parse tree
*/
void exitFetch_option(EQLParser.Fetch_optionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_query_option}.
* @param ctx the parse tree
*/
void enterFetch_query_option(EQLParser.Fetch_query_optionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_query_option}.
* @param ctx the parse tree
*/
void exitFetch_query_option(EQLParser.Fetch_query_optionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_lazy_option}.
* @param ctx the parse tree
*/
void enterFetch_lazy_option(EQLParser.Fetch_lazy_optionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_lazy_option}.
* @param ctx the parse tree
*/
void exitFetch_lazy_option(EQLParser.Fetch_lazy_optionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_batch_size}.
* @param ctx the parse tree
*/
void enterFetch_batch_size(EQLParser.Fetch_batch_sizeContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_batch_size}.
* @param ctx the parse tree
*/
void exitFetch_batch_size(EQLParser.Fetch_batch_sizeContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_expression}.
* @param ctx the parse tree
*/
void enterConditional_expression(EQLParser.Conditional_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_expression}.
* @param ctx the parse tree
*/
void exitConditional_expression(EQLParser.Conditional_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_term}.
* @param ctx the parse tree
*/
void enterConditional_term(EQLParser.Conditional_termContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_term}.
* @param ctx the parse tree
*/
void exitConditional_term(EQLParser.Conditional_termContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_factor}.
* @param ctx the parse tree
*/
void enterConditional_factor(EQLParser.Conditional_factorContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_factor}.
* @param ctx the parse tree
*/
void exitConditional_factor(EQLParser.Conditional_factorContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_primary}.
* @param ctx the parse tree
*/
void enterConditional_primary(EQLParser.Conditional_primaryContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_primary}.
* @param ctx the parse tree
*/
void exitConditional_primary(EQLParser.Conditional_primaryContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#any_expression}.
* @param ctx the parse tree
*/
void enterAny_expression(EQLParser.Any_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#any_expression}.
* @param ctx the parse tree
*/
void exitAny_expression(EQLParser.Any_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#in_expression}.
* @param ctx the parse tree
*/
void enterIn_expression(EQLParser.In_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#in_expression}.
* @param ctx the parse tree
*/
void exitIn_expression(EQLParser.In_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#in_value}.
* @param ctx the parse tree
*/
void enterIn_value(EQLParser.In_valueContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#in_value}.
* @param ctx the parse tree
*/
void exitIn_value(EQLParser.In_valueContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#between_expression}.
* @param ctx the parse tree
*/
void enterBetween_expression(EQLParser.Between_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#between_expression}.
* @param ctx the parse tree
*/
void exitBetween_expression(EQLParser.Between_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#propertyBetween_expression}.
* @param ctx the parse tree
*/
void enterPropertyBetween_expression(EQLParser.PropertyBetween_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#propertyBetween_expression}.
* @param ctx the parse tree
*/
void exitPropertyBetween_expression(EQLParser.PropertyBetween_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isNull_expression}.
* @param ctx the parse tree
*/
void enterIsNull_expression(EQLParser.IsNull_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isNull_expression}.
* @param ctx the parse tree
*/
void exitIsNull_expression(EQLParser.IsNull_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isNotNull_expression}.
* @param ctx the parse tree
*/
void enterIsNotNull_expression(EQLParser.IsNotNull_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isNotNull_expression}.
* @param ctx the parse tree
*/
void exitIsNotNull_expression(EQLParser.IsNotNull_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isEmpty_expression}.
* @param ctx the parse tree
*/
void enterIsEmpty_expression(EQLParser.IsEmpty_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isEmpty_expression}.
* @param ctx the parse tree
*/
void exitIsEmpty_expression(EQLParser.IsEmpty_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isNotEmpty_expression}.
* @param ctx the parse tree
*/
void enterIsNotEmpty_expression(EQLParser.IsNotEmpty_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isNotEmpty_expression}.
* @param ctx the parse tree
*/
void exitIsNotEmpty_expression(EQLParser.IsNotEmpty_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#like_expression}.
* @param ctx the parse tree
*/
void enterLike_expression(EQLParser.Like_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#like_expression}.
* @param ctx the parse tree
*/
void exitLike_expression(EQLParser.Like_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#like_op}.
* @param ctx the parse tree
*/
void enterLike_op(EQLParser.Like_opContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#like_op}.
* @param ctx the parse tree
*/
void exitLike_op(EQLParser.Like_opContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#comparison_expression}.
* @param ctx the parse tree
*/
void enterComparison_expression(EQLParser.Comparison_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#comparison_expression}.
* @param ctx the parse tree
*/
void exitComparison_expression(EQLParser.Comparison_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#comparison_operator}.
* @param ctx the parse tree
*/
void enterComparison_operator(EQLParser.Comparison_operatorContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#comparison_operator}.
* @param ctx the parse tree
*/
void exitComparison_operator(EQLParser.Comparison_operatorContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#value_expression}.
* @param ctx the parse tree
*/
void enterValue_expression(EQLParser.Value_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#value_expression}.
* @param ctx the parse tree
*/
void exitValue_expression(EQLParser.Value_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#literal}.
* @param ctx the parse tree
*/
void enterLiteral(EQLParser.LiteralContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#literal}.
* @param ctx the parse tree
*/
void exitLiteral(EQLParser.LiteralContext ctx);
}
/**
* Enter a parse tree produced by {@link EQLParser#select_statement}.
*
* @param ctx the parse tree
*/
void enterSelect_statement(EQLParser.Select_statementContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#select_statement}.
*
* @param ctx the parse tree
*/
void exitSelect_statement(EQLParser.Select_statementContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#select_clause}.
*
* @param ctx the parse tree
*/
void enterSelect_clause(EQLParser.Select_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#select_clause}.
*
* @param ctx the parse tree
*/
void exitSelect_clause(EQLParser.Select_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#distinct}.
*
* @param ctx the parse tree
*/
void enterDistinct(EQLParser.DistinctContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#distinct}.
*
* @param ctx the parse tree
*/
void exitDistinct(EQLParser.DistinctContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_clause}.
*
* @param ctx the parse tree
*/
void enterFetch_clause(EQLParser.Fetch_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_clause}.
*
* @param ctx the parse tree
*/
void exitFetch_clause(EQLParser.Fetch_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#where_clause}.
*
* @param ctx the parse tree
*/
void enterWhere_clause(EQLParser.Where_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#where_clause}.
*
* @param ctx the parse tree
*/
void exitWhere_clause(EQLParser.Where_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#orderby_clause}.
*
* @param ctx the parse tree
*/
void enterOrderby_clause(EQLParser.Orderby_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#orderby_clause}.
*
* @param ctx the parse tree
*/
void exitOrderby_clause(EQLParser.Orderby_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#orderby_property}.
*
* @param ctx the parse tree
*/
void enterOrderby_property(EQLParser.Orderby_propertyContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#orderby_property}.
*
* @param ctx the parse tree
*/
void exitOrderby_property(EQLParser.Orderby_propertyContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#nulls_firstlast}.
*
* @param ctx the parse tree
*/
void enterNulls_firstlast(EQLParser.Nulls_firstlastContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#nulls_firstlast}.
*
* @param ctx the parse tree
*/
void exitNulls_firstlast(EQLParser.Nulls_firstlastContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#asc_desc}.
*
* @param ctx the parse tree
*/
void enterAsc_desc(EQLParser.Asc_descContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#asc_desc}.
*
* @param ctx the parse tree
*/
void exitAsc_desc(EQLParser.Asc_descContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#limit_clause}.
*
* @param ctx the parse tree
*/
void enterLimit_clause(EQLParser.Limit_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#limit_clause}.
*
* @param ctx the parse tree
*/
void exitLimit_clause(EQLParser.Limit_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#offset_clause}.
*
* @param ctx the parse tree
*/
void enterOffset_clause(EQLParser.Offset_clauseContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#offset_clause}.
*
* @param ctx the parse tree
*/
void exitOffset_clause(EQLParser.Offset_clauseContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_path}.
*
* @param ctx the parse tree
*/
void enterFetch_path(EQLParser.Fetch_pathContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_path}.
*
* @param ctx the parse tree
*/
void exitFetch_path(EQLParser.Fetch_pathContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_property_set}.
*
* @param ctx the parse tree
*/
void enterFetch_property_set(EQLParser.Fetch_property_setContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_property_set}.
*
* @param ctx the parse tree
*/
void exitFetch_property_set(EQLParser.Fetch_property_setContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_property_group}.
*
* @param ctx the parse tree
*/
void enterFetch_property_group(EQLParser.Fetch_property_groupContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_property_group}.
*
* @param ctx the parse tree
*/
void exitFetch_property_group(EQLParser.Fetch_property_groupContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_property}.
*
* @param ctx the parse tree
*/
void enterFetch_property(EQLParser.Fetch_propertyContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_property}.
*
* @param ctx the parse tree
*/
void exitFetch_property(EQLParser.Fetch_propertyContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_query_hint}.
*
* @param ctx the parse tree
*/
void enterFetch_query_hint(EQLParser.Fetch_query_hintContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_query_hint}.
*
* @param ctx the parse tree
*/
void exitFetch_query_hint(EQLParser.Fetch_query_hintContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_lazy_hint}.
*
* @param ctx the parse tree
*/
void enterFetch_lazy_hint(EQLParser.Fetch_lazy_hintContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_lazy_hint}.
*
* @param ctx the parse tree
*/
void exitFetch_lazy_hint(EQLParser.Fetch_lazy_hintContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_option}.
*
* @param ctx the parse tree
*/
void enterFetch_option(EQLParser.Fetch_optionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_option}.
*
* @param ctx the parse tree
*/
void exitFetch_option(EQLParser.Fetch_optionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_query_option}.
*
* @param ctx the parse tree
*/
void enterFetch_query_option(EQLParser.Fetch_query_optionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_query_option}.
*
* @param ctx the parse tree
*/
void exitFetch_query_option(EQLParser.Fetch_query_optionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_lazy_option}.
*
* @param ctx the parse tree
*/
void enterFetch_lazy_option(EQLParser.Fetch_lazy_optionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_lazy_option}.
*
* @param ctx the parse tree
*/
void exitFetch_lazy_option(EQLParser.Fetch_lazy_optionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#fetch_batch_size}.
*
* @param ctx the parse tree
*/
void enterFetch_batch_size(EQLParser.Fetch_batch_sizeContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#fetch_batch_size}.
*
* @param ctx the parse tree
*/
void exitFetch_batch_size(EQLParser.Fetch_batch_sizeContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_expression}.
*
* @param ctx the parse tree
*/
void enterConditional_expression(EQLParser.Conditional_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_expression}.
*
* @param ctx the parse tree
*/
void exitConditional_expression(EQLParser.Conditional_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_term}.
*
* @param ctx the parse tree
*/
void enterConditional_term(EQLParser.Conditional_termContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_term}.
*
* @param ctx the parse tree
*/
void exitConditional_term(EQLParser.Conditional_termContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_factor}.
*
* @param ctx the parse tree
*/
void enterConditional_factor(EQLParser.Conditional_factorContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_factor}.
*
* @param ctx the parse tree
*/
void exitConditional_factor(EQLParser.Conditional_factorContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#conditional_primary}.
*
* @param ctx the parse tree
*/
void enterConditional_primary(EQLParser.Conditional_primaryContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#conditional_primary}.
*
* @param ctx the parse tree
*/
void exitConditional_primary(EQLParser.Conditional_primaryContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#any_expression}.
*
* @param ctx the parse tree
*/
void enterAny_expression(EQLParser.Any_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#any_expression}.
*
* @param ctx the parse tree
*/
void exitAny_expression(EQLParser.Any_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#in_expression}.
*
* @param ctx the parse tree
*/
void enterIn_expression(EQLParser.In_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#in_expression}.
*
* @param ctx the parse tree
*/
void exitIn_expression(EQLParser.In_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#in_value}.
*
* @param ctx the parse tree
*/
void enterIn_value(EQLParser.In_valueContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#in_value}.
*
* @param ctx the parse tree
*/
void exitIn_value(EQLParser.In_valueContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#between_expression}.
*
* @param ctx the parse tree
*/
void enterBetween_expression(EQLParser.Between_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#between_expression}.
*
* @param ctx the parse tree
*/
void exitBetween_expression(EQLParser.Between_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#propertyBetween_expression}.
*
* @param ctx the parse tree
*/
void enterPropertyBetween_expression(EQLParser.PropertyBetween_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#propertyBetween_expression}.
*
* @param ctx the parse tree
*/
void exitPropertyBetween_expression(EQLParser.PropertyBetween_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isNull_expression}.
*
* @param ctx the parse tree
*/
void enterIsNull_expression(EQLParser.IsNull_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isNull_expression}.
*
* @param ctx the parse tree
*/
void exitIsNull_expression(EQLParser.IsNull_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isNotNull_expression}.
*
* @param ctx the parse tree
*/
void enterIsNotNull_expression(EQLParser.IsNotNull_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isNotNull_expression}.
*
* @param ctx the parse tree
*/
void exitIsNotNull_expression(EQLParser.IsNotNull_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isEmpty_expression}.
*
* @param ctx the parse tree
*/
void enterIsEmpty_expression(EQLParser.IsEmpty_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isEmpty_expression}.
*
* @param ctx the parse tree
*/
void exitIsEmpty_expression(EQLParser.IsEmpty_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#isNotEmpty_expression}.
*
* @param ctx the parse tree
*/
void enterIsNotEmpty_expression(EQLParser.IsNotEmpty_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#isNotEmpty_expression}.
*
* @param ctx the parse tree
*/
void exitIsNotEmpty_expression(EQLParser.IsNotEmpty_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#like_expression}.
*
* @param ctx the parse tree
*/
void enterLike_expression(EQLParser.Like_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#like_expression}.
*
* @param ctx the parse tree
*/
void exitLike_expression(EQLParser.Like_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#like_op}.
*
* @param ctx the parse tree
*/
void enterLike_op(EQLParser.Like_opContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#like_op}.
*
* @param ctx the parse tree
*/
void exitLike_op(EQLParser.Like_opContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#comparison_expression}.
*
* @param ctx the parse tree
*/
void enterComparison_expression(EQLParser.Comparison_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#comparison_expression}.
*
* @param ctx the parse tree
*/
void exitComparison_expression(EQLParser.Comparison_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#comparison_operator}.
*
* @param ctx the parse tree
*/
void enterComparison_operator(EQLParser.Comparison_operatorContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#comparison_operator}.
*
* @param ctx the parse tree
*/
void exitComparison_operator(EQLParser.Comparison_operatorContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#value_expression}.
*
* @param ctx the parse tree
*/
void enterValue_expression(EQLParser.Value_expressionContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#value_expression}.
*
* @param ctx the parse tree
*/
void exitValue_expression(EQLParser.Value_expressionContext ctx);
/**
* Enter a parse tree produced by {@link EQLParser#literal}.
*
* @param ctx the parse tree
*/
void enterLiteral(EQLParser.LiteralContext ctx);
/**
* Exit a parse tree produced by {@link EQLParser#literal}.
*
* @param ctx the parse tree
*/
void exitLiteral(EQLParser.LiteralContext ctx);
}
File diff suppressed because it is too large Load Diff
@@ -1,11 +1,11 @@
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>Id Generation</TITLE>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>Id Generation</TITLE>
</HEAD>
<Body BGCOLOR="#ffffff">
Id Generation (Sequences, UUIDGen etc)
</Body>
</HTML>
</HTML>
@@ -1,11 +1,11 @@
package com.avaje.ebeaninternal.server.lib;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* Daemon based ScheduleThreadPool.
* <p>
@@ -15,35 +15,35 @@ import java.util.concurrent.atomic.AtomicInteger;
* on shutdown or register with the JVM shutdown hook to perform a nice shutdown
* of the daemon threads etc.
* </p>
*
*
* @author rbygrave
*/
public class DaemonThreadFactory implements ThreadFactory {
private static final AtomicInteger poolNumber = new AtomicInteger(1);
private final ThreadGroup group;
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
private static final AtomicInteger poolNumber = new AtomicInteger(1);
public DaemonThreadFactory(String namePrefix) {
SecurityManager s = System.getSecurityManager();
this.group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
this.namePrefix = namePrefix != null ? namePrefix : "pool-" + poolNumber.getAndIncrement() + "-thread-";
private final ThreadGroup group;
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
public DaemonThreadFactory(String namePrefix) {
SecurityManager s = System.getSecurityManager();
this.group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
this.namePrefix = namePrefix != null ? namePrefix : "pool-" + poolNumber.getAndIncrement() + "-thread-";
}
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
t.setDaemon(true);
if (t.getPriority() != Thread.NORM_PRIORITY) {
t.setPriority(Thread.NORM_PRIORITY);
}
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
t.setDaemon(true);
if (t.getPriority() != Thread.NORM_PRIORITY) {
t.setPriority(Thread.NORM_PRIORITY);
}
return t;
}
}
return t;
}
}
@@ -21,87 +21,87 @@ import java.util.List;
*/
public final class ShutdownManager {
private static final Logger logger = LoggerFactory.getLogger(ShutdownManager.class);
private static final Logger logger = LoggerFactory.getLogger(ShutdownManager.class);
static final List<SpiEbeanServer> servers = new ArrayList<>();
static final List<SpiEbeanServer> servers = new ArrayList<>();
static final ShutdownHook shutdownHook = new ShutdownHook();
static final ShutdownHook shutdownHook = new ShutdownHook();
static boolean stopping;
static boolean stopping;
static SpiContainer container;
static SpiContainer container;
static {
// Register the Shutdown hook
registerShutdownHook();
}
static {
// Register the Shutdown hook
registerShutdownHook();
}
/**
* Disallow construction.
*/
private ShutdownManager() {
}
/**
* Disallow construction.
*/
private ShutdownManager() {
}
public static void registerContainer(SpiContainer ebeanContainer){
container = ebeanContainer;
}
/**
* Make sure the ShutdownManager is activated.
*/
public static void touch() {
// Do nothing
}
public static void registerContainer(SpiContainer ebeanContainer) {
container = ebeanContainer;
}
/**
* Return true if the system is in the process of stopping.
*/
public static boolean isStopping() {
synchronized (servers) {
return stopping;
}
}
/**
* Make sure the ShutdownManager is activated.
*/
public static void touch() {
// Do nothing
}
/**
* Deregister the Shutdown hook.
/**
* Return true if the system is in the process of stopping.
*/
public static boolean isStopping() {
synchronized (servers) {
return stopping;
}
}
/**
* Deregister the Shutdown hook.
* <p>
* In calling this method it is expected that application code will invoke
* the shutdown() method.
* </p>
* <p>
* For running in a Servlet Container a redeploy will cause a shutdown, and
* for that case we need to make sure the shutdown hook is deregistered.
* </p>
*/
public static void deregisterShutdownHook() {
synchronized (servers) {
try {
Runtime.getRuntime().removeShutdownHook(shutdownHook);
} catch (IllegalStateException ex) {
if (!ex.getMessage().equals("Shutdown in progress")) {
throw ex;
}
}
}
}
* <p>
* For running in a Servlet Container a redeploy will cause a shutdown, and
* for that case we need to make sure the shutdown hook is deregistered.
* </p>
*/
public static void deregisterShutdownHook() {
synchronized (servers) {
try {
Runtime.getRuntime().removeShutdownHook(shutdownHook);
} catch (IllegalStateException ex) {
if (!ex.getMessage().equals("Shutdown in progress")) {
throw ex;
}
}
}
}
/**
* Register the shutdown hook with the Runtime.
*/
protected static void registerShutdownHook() {
synchronized (servers) {
try {
/**
* Register the shutdown hook with the Runtime.
*/
protected static void registerShutdownHook() {
synchronized (servers) {
try {
String value = System.getProperty("ebean.registerShutdownHook");
if (value == null || !value.trim().equalsIgnoreCase("false")) {
Runtime.getRuntime().addShutdownHook(shutdownHook);
}
} catch (IllegalStateException ex) {
if (!ex.getMessage().equals("Shutdown in progress")) {
throw ex;
}
}
}
}
} catch (IllegalStateException ex) {
if (!ex.getMessage().equals("Shutdown in progress")) {
throw ex;
}
}
}
}
/**
* Shutdown gracefully cleaning up any resources as required.
@@ -134,7 +134,7 @@ public final class ShutdownManager {
logger.error("Error running custom shutdown runnable", e);
}
}
if (container != null) {
// shutdown cluster networking if active
container.shutdown();
@@ -150,10 +150,10 @@ public final class ShutdownManager {
ex.printStackTrace();
}
}
if ("true".equalsIgnoreCase(System.getProperty("ebean.datasource.deregisterAllDrivers", "false"))) {
deregisterAllJdbcDrivers();
}
}
}
}
@@ -163,29 +163,29 @@ public final class ShutdownManager {
while (drivers.hasMoreElements()) {
Driver driver = drivers.nextElement();
try {
logger.info("Deregistering jdbc driver: "+driver);
logger.info("Deregistering jdbc driver: " + driver);
DriverManager.deregisterDriver(driver);
} catch (SQLException e) {
logger.error("Error deregistering driver "+driver, e);
logger.error("Error deregistering driver " + driver, e);
}
}
}
/**
* Register an ebeanServer to be shutdown when the JVM is shutdown.
*/
public static void registerEbeanServer(SpiEbeanServer server) {
synchronized (servers) {
servers.add(server);
}
}
/**
* Deregister an ebeanServer.
* <p>
* This is done when the ebeanServer is shutdown manually.
* </p>
*/
/**
* Register an ebeanServer to be shutdown when the JVM is shutdown.
*/
public static void registerEbeanServer(SpiEbeanServer server) {
synchronized (servers) {
servers.add(server);
}
}
/**
* Deregister an ebeanServer.
* <p>
* This is done when the ebeanServer is shutdown manually.
* </p>
*/
public static void unregisterEbeanServer(SpiEbeanServer server) {
synchronized (servers) {
servers.remove(server);
@@ -1,13 +1,13 @@
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>AvajeLib</TITLE>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>AvajeLib</TITLE>
</HEAD>
<Body BGCOLOR="#ffffff">
Core services for an application.
<P>
Core services including Logging, Deployment properties and Background thread for
running frequent tasks.
Core services including Logging, Deployment properties and Background thread for
running frequent tasks.
</P>
</Body>
</HTML>
</HTML>
@@ -10,7 +10,7 @@ public class Str {
/**
* Append strings together.
*/
public static String add(String s0, String s1, String ... args) {
public static String add(String s0, String s1, String... args) {
// determine a decent buffer size
int len = 16 + s0.length() + s1.length();
@@ -8,293 +8,285 @@ import java.util.Map;
*/
public class StringHelper {
/**
* Parses out a list of Name Value pairs that are delimited together. Will
* always return a StringMap. If allNameValuePairs is null, or no name
* values can be parsed out an empty StringMap is returned.
*
* @param allNameValuePairs
* the entire string to be parsed.
* @param listDelimiter
* (typically ';') the delimited between the list
* @param nameValueSeparator
* (typically '=') the separator between the name and value
*/
public static Map<String, String> delimitedToMap(String allNameValuePairs,
String listDelimiter, String nameValueSeparator) {
/**
* Parses out a list of Name Value pairs that are delimited together. Will
* always return a StringMap. If allNameValuePairs is null, or no name
* values can be parsed out an empty StringMap is returned.
*
* @param allNameValuePairs the entire string to be parsed.
* @param listDelimiter (typically ';') the delimited between the list
* @param nameValueSeparator (typically '=') the separator between the name and value
*/
public static Map<String, String> delimitedToMap(String allNameValuePairs,
String listDelimiter, String nameValueSeparator) {
HashMap<String, String> params = new HashMap<>();
if ((allNameValuePairs == null) || (allNameValuePairs.isEmpty())) {
return params;
}
// trim off any leading listDelimiter...
allNameValuePairs = trimFront(allNameValuePairs, listDelimiter);
return getKeyValue(params, 0, allNameValuePairs, listDelimiter, nameValueSeparator);
}
HashMap<String, String> params = new HashMap<>();
if ((allNameValuePairs == null) || (allNameValuePairs.isEmpty())) {
return params;
}
// trim off any leading listDelimiter...
allNameValuePairs = trimFront(allNameValuePairs, listDelimiter);
return getKeyValue(params, 0, allNameValuePairs, listDelimiter, nameValueSeparator);
}
/**
* Trims off recurring strings from the front of a string.
*
* @param source
* the source string
* @param trim
* the string to trim off the front
*/
public static String trimFront(String source, String trim) {
if (source == null) {
return null;
}
if (source.indexOf(trim) == 0) {
// dp("trim ...");
return trimFront(source.substring(trim.length()), trim);
} else {
return source;
}
}
/**
* Trims off recurring strings from the front of a string.
*
* @param source the source string
* @param trim the string to trim off the front
*/
public static String trimFront(String source, String trim) {
if (source == null) {
return null;
}
if (source.indexOf(trim) == 0) {
// dp("trim ...");
return trimFront(source.substring(trim.length()), trim);
} else {
return source;
}
}
/**
* Return true if the value is null or an empty string.
*/
public static boolean isNull(String value) {
/**
* Return true if the value is null or an empty string.
*/
public static boolean isNull(String value) {
return value == null || value.trim().isEmpty();
}
/**
* Recursively pulls out the key value pairs from a raw string.
*/
private static HashMap<String, String> getKeyValue(HashMap<String, String> map, int pos,
String allNameValuePairs, String listDelimiter, String nameValueSeparator) {
/**
* Recursively pulls out the key value pairs from a raw string.
*/
private static HashMap<String, String> getKeyValue(HashMap<String, String> map, int pos,
String allNameValuePairs, String listDelimiter, String nameValueSeparator) {
if (pos >= allNameValuePairs.length()) {
// dp("end as "+pos+" >= "+allNameValuePairs.length() );
return map;
}
if (pos >= allNameValuePairs.length()) {
// dp("end as "+pos+" >= "+allNameValuePairs.length() );
return map;
}
int equalsPos = allNameValuePairs.indexOf(nameValueSeparator, pos);
int delimPos = allNameValuePairs.indexOf(listDelimiter, pos);
int equalsPos = allNameValuePairs.indexOf(nameValueSeparator, pos);
int delimPos = allNameValuePairs.indexOf(listDelimiter, pos);
if (delimPos == -1) {
delimPos = allNameValuePairs.length();
}
if (equalsPos == -1) {
// dp("no more equals...");
return map;
}
if (delimPos == (equalsPos + 1)) {
// dp("Ignoring as nothing between delim and equals...
// delim:"+delimPos+" eq:"+equalsPos);
return getKeyValue(map, delimPos + 1, allNameValuePairs, listDelimiter,
nameValueSeparator);
}
if (equalsPos > delimPos) {
// there is a key without a value?
String key = allNameValuePairs.substring(pos, delimPos);
key = key.trim();
if (!key.isEmpty()) {
map.put(key, null);
}
return getKeyValue(map, delimPos + 1, allNameValuePairs, listDelimiter,
nameValueSeparator);
if (delimPos == -1) {
delimPos = allNameValuePairs.length();
}
if (equalsPos == -1) {
// dp("no more equals...");
return map;
}
if (delimPos == (equalsPos + 1)) {
// dp("Ignoring as nothing between delim and equals...
// delim:"+delimPos+" eq:"+equalsPos);
return getKeyValue(map, delimPos + 1, allNameValuePairs, listDelimiter,
nameValueSeparator);
}
if (equalsPos > delimPos) {
// there is a key without a value?
String key = allNameValuePairs.substring(pos, delimPos);
key = key.trim();
if (!key.isEmpty()) {
map.put(key, null);
}
return getKeyValue(map, delimPos + 1, allNameValuePairs, listDelimiter,
nameValueSeparator);
}
String key = allNameValuePairs.substring(pos, equalsPos);
}
String key = allNameValuePairs.substring(pos, equalsPos);
if (delimPos > -1) {
String value = allNameValuePairs.substring(equalsPos + 1, delimPos);
// dp("cont "+key+","+value+" pos:"+pos+"
// len:"+allNameValuePairs.length());
key = key.trim();
if (delimPos > -1) {
String value = allNameValuePairs.substring(equalsPos + 1, delimPos);
// dp("cont "+key+","+value+" pos:"+pos+"
// len:"+allNameValuePairs.length());
key = key.trim();
map.put(key, value);
pos = delimPos + 1;
map.put(key, value);
pos = delimPos + 1;
// recurse the rest of the values...
return getKeyValue(map, pos, allNameValuePairs, listDelimiter, nameValueSeparator);
} else {
// dp("ERROR: delimPos < 0 ???");
return map;
}
}
// recurse the rest of the values...
return getKeyValue(map, pos, allNameValuePairs, listDelimiter, nameValueSeparator);
} else {
// dp("ERROR: delimPos < 0 ???");
return map;
}
}
/**
* This method takes a String and will replace all occurrences of the match
* String with that of the replace String.
*
* @param source
* the source string
* @param match
* the string used to find a match
* @param replace
* the string used to replace match with
* @return the source string after the search and replace
*/
public static String replaceString(String source, String match, String replace) {
if (source == null){
return null;
}
if (replace == null){
return source;
}
if (match == null){
throw new NullPointerException("match is null?");
}
if (match.equals(replace)){
return source;
}
return replaceString(source, match, replace, 30, 0, source.length());
}
/**
* This method takes a String and will replace all occurrences of the match
* String with that of the replace String.
*
* @param source the source string
* @param match the string used to find a match
* @param replace the string used to replace match with
* @return the source string after the search and replace
*/
public static String replaceString(String source, String match, String replace) {
if (source == null) {
return null;
}
if (replace == null) {
return source;
}
if (match == null) {
throw new NullPointerException("match is null?");
}
if (match.equals(replace)) {
return source;
}
return replaceString(source, match, replace, 30, 0, source.length());
}
/**
* Additionally specify the additionalSize to add to the buffer. This will
* make the buffer bigger so that it doesn't have to grow when replacement
* occurs.
*/
public static String replaceString(String source, String match, String replace,
int additionalSize, int startPos, int endPos) {
/**
* Additionally specify the additionalSize to add to the buffer. This will
* make the buffer bigger so that it doesn't have to grow when replacement
* occurs.
*/
public static String replaceString(String source, String match, String replace,
int additionalSize, int startPos, int endPos) {
if (source == null){
return null;
}
char match0 = match.charAt(0);
int matchLength = match.length();
if (source == null) {
return null;
}
if (matchLength == 1 && replace.length() == 1) {
char replace0 = replace.charAt(0);
return source.replace(match0, replace0);
}
if (matchLength >= replace.length()) {
additionalSize = 0;
}
char match0 = match.charAt(0);
int matchLength = match.length();
if (matchLength == 1 && replace.length() == 1) {
char replace0 = replace.charAt(0);
return source.replace(match0, replace0);
}
if (matchLength >= replace.length()) {
additionalSize = 0;
}
int sourceLength = source.length();
int lastMatch = endPos - matchLength;
int sourceLength = source.length();
int lastMatch = endPos - matchLength;
StringBuilder sb = new StringBuilder(sourceLength + additionalSize);
StringBuilder sb = new StringBuilder(sourceLength + additionalSize);
if (startPos > 0) {
sb.append(source.substring(0, startPos));
}
if (startPos > 0) {
sb.append(source.substring(0, startPos));
}
char sourceChar;
boolean isMatch;
int sourceMatchPos;
char sourceChar;
boolean isMatch;
int sourceMatchPos;
for (int i = startPos; i < sourceLength; i++) {
sourceChar = source.charAt(i);
if (i > lastMatch || sourceChar != match0) {
sb.append(sourceChar);
for (int i = startPos; i < sourceLength; i++) {
sourceChar = source.charAt(i);
if (i > lastMatch || sourceChar != match0) {
sb.append(sourceChar);
} else {
// check to see if this is a match
isMatch = true;
sourceMatchPos = i;
// check each following character...
for (int j = 1; j < matchLength; j++) {
sourceMatchPos++;
if (source.charAt(sourceMatchPos) != match.charAt(j)) {
isMatch = false;
break;
}
}
if (isMatch) {
i = i + matchLength - 1;
sb.append(replace);
} else {
// was not a match
sb.append(sourceChar);
}
}
}
} else {
// check to see if this is a match
isMatch = true;
sourceMatchPos = i;
return sb.toString();
}
// check each following character...
for (int j = 1; j < matchLength; j++) {
sourceMatchPos++;
if (source.charAt(sourceMatchPos) != match.charAt(j)) {
isMatch = false;
break;
}
}
if (isMatch) {
i = i + matchLength - 1;
sb.append(replace);
} else {
// was not a match
sb.append(sourceChar);
}
}
}
/**
* A search and replace with multiple matching strings.
* <p>
* Useful when converting CRNL CR and NL all to a BR tag for example.
* </p>
*
* <pre><code>
* String[] multi = { &quot;\r\n&quot;, &quot;\r&quot;, &quot;\n&quot; };
* content = StringHelper.replaceStringMulti(content, multi, &quot;&lt;br/&gt;&quot;);
* </code></pre>
*/
public static String replaceStringMulti(String source, String[] match, String replace) {
return replaceStringMulti(source, match, replace, 30, 0, source.length());
}
return sb.toString();
}
/**
* Additionally specify an additional size estimate for the buffer plus
* start and end positions.
* <p>
* The start and end positions can limit the search and replace. Otherwise
* these default to startPos = 0 and endPos = source.length().
* </p>
*/
public static String replaceStringMulti(String source, String[] match, String replace,
int additionalSize, int startPos, int endPos) {
/**
* A search and replace with multiple matching strings.
* <p>
* Useful when converting CRNL CR and NL all to a BR tag for example.
* </p>
* <p>
* <pre><code>
* String[] multi = { &quot;\r\n&quot;, &quot;\r&quot;, &quot;\n&quot; };
* content = StringHelper.replaceStringMulti(content, multi, &quot;&lt;br/&gt;&quot;);
* </code></pre>
*/
public static String replaceStringMulti(String source, String[] match, String replace) {
return replaceStringMulti(source, match, replace, 30, 0, source.length());
}
int shortestMatch = match[0].length();
/**
* Additionally specify an additional size estimate for the buffer plus
* start and end positions.
* <p>
* The start and end positions can limit the search and replace. Otherwise
* these default to startPos = 0 and endPos = source.length().
* </p>
*/
public static String replaceStringMulti(String source, String[] match, String replace,
int additionalSize, int startPos, int endPos) {
char[] match0 = new char[match.length];
for (int i = 0; i < match0.length; i++) {
match0[i] = match[i].charAt(0);
if (match[i].length() < shortestMatch) {
shortestMatch = match[i].length();
}
}
int shortestMatch = match[0].length();
StringBuilder sb = new StringBuilder(source.length() + additionalSize);
char[] match0 = new char[match.length];
for (int i = 0; i < match0.length; i++) {
match0[i] = match[i].charAt(0);
if (match[i].length() < shortestMatch) {
shortestMatch = match[i].length();
}
}
char sourceChar;
StringBuilder sb = new StringBuilder(source.length() + additionalSize);
int len = source.length();
int lastMatch = endPos - shortestMatch;
char sourceChar;
if (startPos > 0) {
sb.append(source.substring(0, startPos));
}
int len = source.length();
int lastMatch = endPos - shortestMatch;
int matchCount;
if (startPos > 0) {
sb.append(source.substring(0, startPos));
}
for (int i = startPos; i < len; i++) {
sourceChar = source.charAt(i);
if (i > lastMatch) {
sb.append(sourceChar);
} else {
matchCount = 0;
for (int k = 0; k < match0.length; k++) {
if (matchCount == 0 && sourceChar == match0[k]) {
if (match[k].length() + i <= len) {
int matchCount;
++matchCount;
int j = 1;
for (; j < match[k].length(); j++) {
if (source.charAt(i + j) != match[k].charAt(j)) {
--matchCount;
break;
}
}
if (matchCount > 0) {
i = i + j - 1;
sb.append(replace);
break;
}
}
}
}
if (matchCount == 0) {
sb.append(sourceChar);
}
}
}
for (int i = startPos; i < len; i++) {
sourceChar = source.charAt(i);
if (i > lastMatch) {
sb.append(sourceChar);
} else {
matchCount = 0;
for (int k = 0; k < match0.length; k++) {
if (matchCount == 0 && sourceChar == match0[k]) {
if (match[k].length() + i <= len) {
return sb.toString();
}
++matchCount;
int j = 1;
for (; j < match[k].length(); j++) {
if (source.charAt(i + j) != match[k].charAt(j)) {
--matchCount;
break;
}
}
if (matchCount > 0) {
i = i + j - 1;
sb.append(replace);
break;
}
}
}
}
if (matchCount == 0) {
sb.append(sourceChar);
}
}
}
return sb.toString();
}
}
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>AvajeLib</TITLE>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
<TITLE>AvajeLib</TITLE>
</HEAD>
<Body BGCOLOR="#ffffff">
General utility objects.
@@ -9,4 +9,4 @@ General utility objects.
<P>Provides general utility objects.
</P>
</Body>
</HTML>
</HTML>