From dc766f2ca26005a72cae3e3e91e5826a8c692baa Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Tue, 16 Jun 2015 11:55:51 +0200 Subject: [PATCH] [ADQL] Fix the ADQL DEBUG mode ; now ADQLParser.setParser(boolean) is doing what it is supposed to do. --- src/adql/parser/ADQLParser.java | 11014 ++++++++++++------------- src/adql/parser/adqlGrammar.jj | 13 +- test/adql/parser/TestADQLParser.java | 12 + 3 files changed, 5174 insertions(+), 5865 deletions(-) diff --git a/src/adql/parser/ADQLParser.java b/src/adql/parser/ADQLParser.java index c992291..3bad241 100644 --- a/src/adql/parser/ADQLParser.java +++ b/src/adql/parser/ADQLParser.java @@ -1,45 +1,31 @@ /* Generated By:JavaCC: Do not edit this line. ADQLParser.java */ package adql.parser; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; import java.util.Stack; import java.util.Vector; +import java.util.ArrayList; +import java.util.Collection; + +import java.io.FileReader; +import java.io.IOException; import adql.db.exception.UnresolvedIdentifiersException; -import adql.parser.ADQLQueryFactory.JoinType; + import adql.parser.IdentifierItems.IdentifierItem; -import adql.query.ADQLOrder; -import adql.query.ADQLQuery; -import adql.query.ClauseADQL; -import adql.query.ClauseConstraints; -import adql.query.ClauseSelect; -import adql.query.ColumnReference; -import adql.query.SelectAllColumns; -import adql.query.SelectItem; -import adql.query.TextPosition; -import adql.query.constraint.ADQLConstraint; -import adql.query.constraint.Between; -import adql.query.constraint.Comparison; -import adql.query.constraint.ComparisonOperator; -import adql.query.constraint.ConstraintsGroup; -import adql.query.constraint.In; -import adql.query.from.ADQLJoin; -import adql.query.from.FromContent; -import adql.query.operand.ADQLColumn; -import adql.query.operand.ADQLOperand; -import adql.query.operand.Concatenation; -import adql.query.operand.OperationType; -import adql.query.operand.function.ADQLFunction; -import adql.query.operand.function.MathFunction; -import adql.query.operand.function.MathFunctionType; -import adql.query.operand.function.SQLFunction; -import adql.query.operand.function.SQLFunctionType; -import adql.query.operand.function.UserDefinedFunction; -import adql.query.operand.function.geometry.GeometryFunction; + +import adql.parser.ADQLQueryFactory.JoinType; + +import adql.query.*; +import adql.query.from.*; +import adql.query.constraint.*; + +import adql.query.operand.*; + +import adql.query.operand.function.*; + +import adql.query.operand.function.geometry.*; import adql.query.operand.function.geometry.GeometryFunction.GeometryValue; -import adql.query.operand.function.geometry.PointFunction; + import adql.translator.PostgreSQLTranslator; import adql.translator.TranslationException; @@ -59,102 +45,105 @@ import adql.translator.TranslationException; * @see ADQLQueryFactory * * @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de -* @version 1.3 (10/2014) +* @version 1.4 (06/2015) */ public class ADQLParser implements ADQLParserConstants { - /** Tools to build the object representation of the ADQL query. */ - private ADQLQueryFactory queryFactory = new ADQLQueryFactory(); + /** Tools to build the object representation of the ADQL query. */ + private ADQLQueryFactory queryFactory = new ADQLQueryFactory(); - /** The stack of queries (because there may be some sub-queries). */ - private Stack<ADQLQuery> stackQuery = new Stack<ADQLQuery>(); + /** The stack of queries (because there may be some sub-queries). */ + private Stack<ADQLQuery> stackQuery = new Stack<ADQLQuery>(); - /** The object representation of the ADQL query to parse. (ONLY USED DURING THE PARSING, else it is always <i>null</i>). */ - private ADQLQuery query = null; + /** The object representation of the ADQL query to parse. (ONLY USED DURING THE PARSING, else it is always <i>null</i>). */ + private ADQLQuery query = null; - /** Checks each ADQLQuery (sub-query or not) just after their generation. */ - private QueryChecker queryChecker = null; + /** Checks each ADQLQuery (sub-query or not) just after their generation. */ + private QueryChecker queryChecker = null; - /** The first token of a table/column name. This token is extracted by {@link #Identifier()}. */ - private Token currentIdentifierToken = null; + /** The first token of a table/column name. This token is extracted by {@link #Identifier()}. */ + private Token currentIdentifierToken = null; - /** + /** * Builds an ADQL parser without a query to parse. */ - public ADQLParser(){ - this(new java.io.ByteArrayInputStream("".getBytes())); - } + public ADQLParser(){ + this(new java.io.ByteArrayInputStream("".getBytes())); + setDebug(false); + } - /** + /** * Builds an ADQL parser without a query to parse but with a QueryChecker and a ADQLQueryFactory. * * @param checker The object to use to check each ADQLQuery. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(QueryChecker checker, ADQLQueryFactory factory){ - this(); + public ADQLParser(QueryChecker checker, ADQLQueryFactory factory) { + this(); - queryChecker = checker; + queryChecker = checker; - if (factory != null) - queryFactory = factory; - } + if (factory != null) + queryFactory = factory; + } - /** + /** * Builds an ADQL parser without a query to parse but with a QueryChecker. * * @param checker The object to use to check each ADQLQuery. */ - public ADQLParser(QueryChecker checker){ - this(checker, null); - } + public ADQLParser(QueryChecker checker) { + this(checker, null); + } - /** + /** * Builds an ADQL parser without a query to parse but with a ADQLQueryFactory. * * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(ADQLQueryFactory factory){ - this((QueryChecker)null, factory); - } + public ADQLParser(ADQLQueryFactory factory) { + this((QueryChecker)null, factory); + } - /** + /** * Builds a parser with a stream containing the query to parse. * * @param stream The stream in which the ADQL query to parse is given. * @param checker The object to use to check each ADQLQuery. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(java.io.InputStream stream, QueryChecker checker, ADQLQueryFactory factory){ - this(stream); + public ADQLParser(java.io.InputStream stream, QueryChecker checker, ADQLQueryFactory factory) { + this(stream); - queryChecker = checker; + setDebug(false); - if (factory != null) - queryFactory = factory; - } + queryChecker = checker; - /** + if (factory != null) + queryFactory = factory; + } + + /** * Builds a parser with a stream containing the query to parse. * * @param stream The stream in which the ADQL query to parse is given. * @param checker The object to use to check each ADQLQuery. */ - public ADQLParser(java.io.InputStream stream, QueryChecker checker){ - this(stream, checker, null); - } + public ADQLParser(java.io.InputStream stream, QueryChecker checker) { + this(stream, checker, null); + } - /** + /** * Builds a parser with a stream containing the query to parse. * * @param stream The stream in which the ADQL query to parse is given. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(java.io.InputStream stream, ADQLQueryFactory factory){ - this(stream, (QueryChecker)null, factory); - } + public ADQLParser(java.io.InputStream stream, ADQLQueryFactory factory) { + this(stream, (QueryChecker)null, factory); + } - /** + /** * Builds a parser with a stream containing the query to parse. * * @param stream The stream in which the ADQL query to parse is given. @@ -162,110 +151,114 @@ public class ADQLParser implements ADQLParserConstants { * @param checker The object to use to check each ADQLQuery. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(java.io.InputStream stream, String encoding, QueryChecker checker, ADQLQueryFactory factory){ - this(stream, encoding); + public ADQLParser(java.io.InputStream stream, String encoding, QueryChecker checker, ADQLQueryFactory factory) { + this(stream, encoding); - queryChecker = checker; + queryChecker = checker; - if (factory != null) - queryFactory = factory; - } + if (factory != null) + queryFactory = factory; + } - /** + /** * Builds a parser with a stream containing the query to parse. * * @param stream The stream in which the ADQL query to parse is given. * @param encoding The supplied encoding. * @param checker The object to use to check each ADQLQuery. */ - public ADQLParser(java.io.InputStream stream, String encoding, QueryChecker checker){ - this(stream, encoding, checker, null); - } + public ADQLParser(java.io.InputStream stream, String encoding, QueryChecker checker) { + this(stream, encoding, checker, null); + } - /** + /** * Builds a parser with a stream containing the query to parse. * * @param stream The stream in which the ADQL query to parse is given. * @param encoding The supplied encoding. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(java.io.InputStream stream, String encoding, ADQLQueryFactory factory){ - this(stream, encoding, null, factory); - } + public ADQLParser(java.io.InputStream stream, String encoding, ADQLQueryFactory factory) { + this(stream, encoding, null, factory); + } - /** + /** * Builds a parser with a reader containing the query to parse. * * @param reader The reader in which the ADQL query to parse is given. * @param checker The object to use to check each ADQLQuery. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(java.io.Reader reader, QueryChecker checker, ADQLQueryFactory factory){ - this(reader); + public ADQLParser(java.io.Reader reader, QueryChecker checker, ADQLQueryFactory factory) { + this(reader); + + setDebug(false); - queryChecker = checker; + queryChecker = checker; - if (factory != null) - queryFactory = factory; - } + if (factory != null) + queryFactory = factory; + } - /** + /** * Builds a parser with a reader containing the query to parse. * * @param reader The reader in which the ADQL query to parse is given. * @param checker The object to use to check each ADQLQuery. */ - public ADQLParser(java.io.Reader reader, QueryChecker checker){ - this(reader, checker, null); - } + public ADQLParser(java.io.Reader reader, QueryChecker checker) { + this(reader, checker, null); + } - /** + /** * Builds a parser with a reader containing the query to parse. * * @param reader The reader in which the ADQL query to parse is given. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(java.io.Reader reader, ADQLQueryFactory factory){ - this(reader, null, factory); - } + public ADQLParser(java.io.Reader reader, ADQLQueryFactory factory) { + this(reader, null, factory); + } - /** + /** * Builds a parser with another token manager. * * @param tm The manager which associates a token to a numeric code. * @param checker The object to use to check each ADQLQuery. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(ADQLParserTokenManager tm, QueryChecker checker, ADQLQueryFactory factory){ - this(tm); + public ADQLParser(ADQLParserTokenManager tm, QueryChecker checker, ADQLQueryFactory factory) { + this(tm); - queryChecker = checker; + setDebug(false); - if (factory != null) - queryFactory = factory; - } + queryChecker = checker; - /** + if (factory != null) + queryFactory = factory; + } + + /** * Builds a parser with another token manager. * * @param tm The manager which associates a token to a numeric code. * @param checker The object to use to check each ADQLQuery. */ - public ADQLParser(ADQLParserTokenManager tm, QueryChecker checker){ - this(tm, checker, null); - } + public ADQLParser(ADQLParserTokenManager tm, QueryChecker checker) { + this(tm, checker, null); + } - /** + /** * Builds a parser with another token manager. * * @param tm The manager which associates a token to a numeric code. * @param factory The object to use to build an object representation of the given ADQL query. */ - public ADQLParser(ADQLParserTokenManager tm, ADQLQueryFactory factory){ - this(tm, null, factory); - } + public ADQLParser(ADQLParserTokenManager tm, ADQLQueryFactory factory) { + this(tm, null, factory); + } - /** + /** * Parses the query given at the creation of this parser or in the <i>ReInit</i> functions. * * @return The object representation of the given ADQL query. @@ -273,13 +266,13 @@ public class ADQLParser implements ADQLParserConstants { * * @see ADQLParser#Query() */ - public final ADQLQuery parseQuery() throws ParseException{ - stackQuery.clear(); - query = null; - return Query(); - } + public final ADQLQuery parseQuery() throws ParseException { + stackQuery.clear(); + query = null; + return Query(); + } - /** + /** * Parses the query given in parameter. * * @param q The ADQL query to parse. @@ -290,14 +283,14 @@ public class ADQLParser implements ADQLParserConstants { * @see ADQLParser#setDebug(boolean) * @see ADQLParser#Query() */ - public final ADQLQuery parseQuery(String q) throws ParseException{ - stackQuery.clear(); - query = null; - ReInit(new java.io.ByteArrayInputStream(q.getBytes())); - return Query(); - } - - /** + public final ADQLQuery parseQuery(String q) throws ParseException { + stackQuery.clear(); + query = null; + ReInit(new java.io.ByteArrayInputStream(q.getBytes())); + return Query(); + } + + /** * Parses the query contained in the stream given in parameter. * * @param stream The stream which contains the ADQL query to parse. @@ -308,46 +301,44 @@ public class ADQLParser implements ADQLParserConstants { * @see ADQLParser#setDebug(boolean) * @see ADQLParser#Query() */ - public final ADQLQuery parseQuery(java.io.InputStream stream) throws ParseException{ - stackQuery.clear(); - query = null; - ReInit(stream); - return Query(); - } - - public final void setDebug(boolean debug){ - if (debug) - enable_tracing(); - else - disable_tracing(); - } - - public final QueryChecker getQueryChecker(){ - return queryChecker; - } - - public final void setQueryChecker(QueryChecker checker){ - queryChecker = checker; - } - - public final ADQLQueryFactory getQueryFactory(){ - return queryFactory; - } - - public final void setQueryFactory(ADQLQueryFactory factory){ - queryFactory = (factory != null) ? factory : (new ADQLQueryFactory()); - } - - private final ParseException generateParseException(Exception ex){ - if (!(ex instanceof ParseException)){ - ParseException pex = new ParseException("[" + ex.getClass().getName() + "] " + ex.getMessage()); - pex.setStackTrace(ex.getStackTrace()); - return pex; - }else - return (ParseException)ex; - } - - /** + public final ADQLQuery parseQuery(java.io.InputStream stream) throws ParseException { + stackQuery.clear(); + query = null; + ReInit(stream); + return Query(); + } + + public final void setDebug(boolean debug){ + if (debug) enable_tracing(); + else disable_tracing(); + } + + public final QueryChecker getQueryChecker(){ + return queryChecker; + } + + public final void setQueryChecker(QueryChecker checker){ + queryChecker = checker; + } + + public final ADQLQueryFactory getQueryFactory(){ + return queryFactory; + } + + public final void setQueryFactory(ADQLQueryFactory factory){ + queryFactory = (factory!=null)?factory:(new ADQLQueryFactory()); + } + + private final ParseException generateParseException(Exception ex){ + if (!(ex instanceof ParseException)){ + ParseException pex = new ParseException("["+ex.getClass().getName()+"] "+ex.getMessage()); + pex.setStackTrace(ex.getStackTrace()); + return pex; + }else + return (ParseException)ex; + } + + /** * <p>Gets the specified ADQL query and parses the given ADQL query. The SQL translation is then printed if the syntax is correct.</p> * <p><b>ONLY the syntax is checked: the query is NOT EXECUTED !</b></p> * <p>Supplied parameters are: <ul><li>[-debug] -url http://...</li><li>[-debug] -file ...</li><li>[-debug] -query SELECT...</li></ul></p> @@ -355,5689 +346,4988 @@ public class ADQLParser implements ADQLParserConstants { * @param args * @throws Exception */ - public static final void main(String[] args) throws Exception{ - final String USAGE = "Usage:\u005cn\u005ctadqlParser.jar [-d] [-v] [-e] [-a|-s] [<FILE>|<URL>]\u005cn\u005cnNOTE: If no file or URL is given, the ADQL query is expected in the standard input. This query must end with a ';' !\u005cn\u005cnParameters:\u005cn\u005ct-v or --verbose : Print the main steps of the parsing\u005cn\u005ct-d or --debug : Print stack traces when a grave error occurs\u005cn\u005ct-e or --explain : Explain the ADQL parsing (or Expand the parsing tree)\u005cn\u005ct-a or --adql : Display the understood ADQL query\u005cn\u005ct-s or --sql : Ask the SQL translation of the given ADQL query (SQL compatible with PostgreSQL)\u005cn\u005cnReturn:\u005cn\u005ctBy default: nothing if the query is correct. Otherwise a message explaining why the query is not correct is displayed.\u005cn\u005ctWith the -s option, the SQL translation of the given ADQL query will be returned.\u005cn\u005ctWith the -a option, the ADQL query is returned as it has been understood.\u005cn\u005cnExit status:\u005cn\u005ct0\u005ctOK !\u005cn\u005ct1\u005ctParameter error (missing or incorrect parameter)\u005cn\u005ct2\u005ctFile error (incorrect file/url, reading error, ...)\u005cn\u005ct3\u005ctParsing error (syntactic or semantic error)\u005cn\u005ct4\u005ctTranslation error (a problem has occurred during the translation of the given ADQL query in SQL)."; - - ADQLParser parser; - - final String urlRegex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; - - String file = null, metaFile = null; - short mode = -1; - boolean verbose = false, debug = false, explain = false; - - // Parameters reading: - for(int i = 0; i < args.length; i++){ - if (args[i].equalsIgnoreCase("-d") || args[i].equalsIgnoreCase("--debug")) - debug = true; - else if (args[i].equalsIgnoreCase("-v") || args[i].equalsIgnoreCase("--verbose")) - verbose = true; - else if (args[i].equalsIgnoreCase("-e") || args[i].equalsIgnoreCase("--explain")) - explain = true; - else if (args[i].equalsIgnoreCase("-a") || args[i].equalsIgnoreCase("--adql")){ - if (mode != -1){ - System.err.println("((!)) Too much parameter: you must choose between -s, -c, -a or nothing ((!))\u005cn" + USAGE); - System.exit(1); - }else - mode = 1; - }else if (args[i].equalsIgnoreCase("-s") || args[i].equalsIgnoreCase("--sql")){ - if (mode != -1){ - System.err.println("((!)) Too much parameter: you must choose between -s, -c, -a or nothing ((!))\u005cn" + USAGE); - System.exit(1); - }else - mode = 2; - }else if (args[i].equalsIgnoreCase("-h") || args[i].equalsIgnoreCase("--help")){ - System.out.println(USAGE); - System.exit(0); - }else if (args[i].startsWith("-")){ - System.err.println("((!)) Unknown parameter: \u005c"" + args[i] + "\u005c" ((!))\u005cn" + USAGE); - System.exit(1); - }else - file = args[i].trim(); - } - - try{ - - if (file == null || file.length()==0) - parser = new ADQLParser(System.in); - else if (file.matches(urlRegex)) - parser = new ADQLParser((new java.net.URL(file)).openStream()); - else - parser = new ADQLParser(new FileReader(file)); - - parser.setDebug(explain); - - // Query parsing: - try{ - if (verbose) - System.out.print("((i)) Parsing ADQL query..."); - ADQLQuery q = parser.parseQuery(); - if (verbose) - System.out.println("((i)) CORRECT ADQL QUERY ((i))"); - if (mode == 2){ - PostgreSQLTranslator translator = new PostgreSQLTranslator(); - if (verbose) - System.out.print("((i)) Translating in SQL..."); - String sql = translator.translate(q); - if (verbose) - System.out.println("ok"); - System.out.println(sql); - }else if (mode == 1){ - System.out.println(q.toADQL()); - } - }catch(UnresolvedIdentifiersException uie){ - System.err.println("((X)) " + uie.getNbErrors() + " unresolved identifiers:"); - for(ParseException pe : uie) - System.err.println("\u005ct - at " + pe.getPosition() + ": " + uie.getMessage()); - if (debug) - uie.printStackTrace(System.err); - System.exit(3); - }catch(ParseException pe){ - System.err.println("((X)) Syntax error: " + pe.getMessage() + " ((X))"); - if (debug) - pe.printStackTrace(System.err); - System.exit(3); - }catch(TranslationException te){ - if (verbose) - System.out.println("error"); - System.err.println("((X)) Translation error: " + te.getMessage() + " ((X))"); - if (debug) - te.printStackTrace(System.err); - System.exit(4); - } - - }catch(IOException ioe){ - System.err.println("\u005cn((X)) Error while reading the file \u005c"" + file + "\u005c": " + ioe.getMessage() + " ((X))"); - if (debug) - ioe.printStackTrace(System.err); - System.exit(2); - } - - } - - /* ########## */ - /* # SYNTAX # */ - /* ########## */ - - /* ******************* */ - /* GENERAL ADQL SYNTAX */ - /* ******************* */ - /** - * Parses the ADQL query given at the parser creation or in the {@link ADQLParser#ReInit(java.io.InputStream)} - * or in the <i>parseQuery</i> functions. - * - * @return The object representation of the query. - * @throws ParseException If the query syntax is incorrect. - */ - final public ADQLQuery Query() throws ParseException{ - ADQLQuery q = null; - q = QueryExpression(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case 0: - jj_consume_token(0); - break; - case EOQ: - jj_consume_token(EOQ); - break; - default: - jj_la1[0] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - // check the query: - if (queryChecker != null) - queryChecker.check(q); - - { - if (true) - return q; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLQuery QueryExpression() throws ParseException{ - try{ - // create the query: - query = queryFactory.createQuery(); - stackQuery.push(query); - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - Select(); - From(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case WHERE: - Where(); - break; - default: - jj_la1[1] = jj_gen; - ; - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case GROUP_BY: - GroupBy(); - break; - default: - jj_la1[2] = jj_gen; - ; - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case HAVING: - Having(); - break; - default: - jj_la1[3] = jj_gen; - ; - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ORDER_BY: - OrderBy(); - break; - default: - jj_la1[4] = jj_gen; - ; - } - // get the previous query (!= null if the current query is a sub-query): - ADQLQuery previousQuery = stackQuery.pop(); - if (stackQuery.isEmpty()) - query = null; - else - query = stackQuery.peek(); - - { - if (true) - return previousQuery; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLQuery SubQueryExpression() throws ParseException{ - ADQLQuery q = null; - jj_consume_token(LEFT_PAR); - q = QueryExpression(); - jj_consume_token(RIGHT_PAR); - { - if (true) - return q; - } - throw new Error("Missing return statement in function"); - } - - final public void Select() throws ParseException{ - ClauseSelect select = query.getSelect(); - SelectItem item = null; - Token t = null; - jj_consume_token(SELECT); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case QUANTIFIER: - t = jj_consume_token(QUANTIFIER); - select.setDistinctColumns(t.image.equalsIgnoreCase("DISTINCT")); - break; - default: - jj_la1[5] = jj_gen; - ; - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case TOP: - jj_consume_token(TOP); - t = jj_consume_token(UNSIGNED_INTEGER); - try{ - select.setLimit(Integer.parseInt(t.image)); - }catch(NumberFormatException nfe){ - { - if (true) - throw new ParseException("[l." + t.beginLine + ";c." + t.beginColumn + "] The TOP limit (\u005c"" + t.image + "\u005c") isn't a regular unsigned integer !"); - } - } - break; - default: - jj_la1[6] = jj_gen; - ; - } - item = SelectItem(); - select.add(item); - label_1: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[7] = jj_gen; - break label_1; - } - jj_consume_token(COMMA); - item = SelectItem(); - select.add(item); - } - } - - final public SelectItem SelectItem() throws ParseException{ - IdentifierItems identifiers = new IdentifierItems(true); - IdentifierItem id = null, label = null; - ADQLOperand op = null; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ASTERISK: - jj_consume_token(ASTERISK); - { - if (true) - return new SelectAllColumns(query); - } - break; - default: - jj_la1[11] = jj_gen; - if (jj_2_1(7)){ - id = Identifier(); - jj_consume_token(DOT); - identifiers.append(id); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - id = Identifier(); - jj_consume_token(DOT); - identifiers.append(id); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - id = Identifier(); - jj_consume_token(DOT); - identifiers.append(id); - break; - default: - jj_la1[8] = jj_gen; - ; - } - break; - default: - jj_la1[9] = jj_gen; - ; - } - jj_consume_token(ASTERISK); - try{ - ; - { - if (true) - return new SelectAllColumns(queryFactory.createTable(identifiers, null)); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - case PLUS: - case MINUS: - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - case BOX: - case CENTROID: - case CIRCLE: - case POINT: - case POLYGON: - case REGION: - case CONTAINS: - case INTERSECTS: - case AREA: - case COORD1: - case COORD2: - case COORDSYS: - case DISTANCE: - case ABS: - case CEILING: - case DEGREES: - case EXP: - case FLOOR: - case LOG: - case LOG10: - case MOD: - case PI: - case POWER: - case RADIANS: - case RAND: - case ROUND: - case SQRT: - case TRUNCATE: - case ACOS: - case ASIN: - case ATAN: - case ATAN2: - case COS: - case COT: - case SIN: - case TAN: - case STRING_LITERAL: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - op = ValueExpression(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case AS: - jj_consume_token(AS); - label = Identifier(); - break; - default: - jj_la1[10] = jj_gen; - ; - } - break; - default: - jj_la1[12] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - } - try{ - SelectItem item = queryFactory.createSelectItem(op, (label == null) ? null : label.identifier); - if (label != null) - item.setCaseSensitive(label.caseSensitivity); - { - if (true) - return item; - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public void From() throws ParseException{ - FromContent content = null, content2 = null; - try{ - jj_consume_token(FROM); - content = TableRef(); - label_2: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[13] = jj_gen; - break label_2; - } - jj_consume_token(COMMA); - content2 = TableRef(); - content = queryFactory.createJoin(JoinType.CROSS, content, content2); - } - query.setFrom(content); - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - } - - final public void Where() throws ParseException{ - ClauseConstraints where = query.getWhere(); - ADQLConstraint condition; - jj_consume_token(WHERE); - ConditionsList(where); - } - - final public void GroupBy() throws ParseException{ - ClauseADQL<ColumnReference> groupBy = query.getGroupBy(); - ColumnReference colRef = null; - jj_consume_token(GROUP_BY); - colRef = ColumnRef(); - groupBy.add(colRef); - label_3: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[14] = jj_gen; - break label_3; - } - jj_consume_token(COMMA); - colRef = ColumnRef(); - groupBy.add(colRef); - } - } - - final public void Having() throws ParseException{ - ClauseConstraints having = query.getHaving(); - jj_consume_token(HAVING); - ConditionsList(having); - } - - final public void OrderBy() throws ParseException{ - ClauseADQL<ADQLOrder> orderBy = query.getOrderBy(); - ADQLOrder order = null; - jj_consume_token(ORDER_BY); - order = OrderItem(); - orderBy.add(order); - label_4: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[15] = jj_gen; - break label_4; - } - jj_consume_token(COMMA); - order = OrderItem(); - orderBy.add(order); - } - } - - /* *************************** */ - /* COLUMN AND TABLE REFERENCES */ - /* *************************** */ - final public IdentifierItem Identifier() throws ParseException{ - Token t; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case REGULAR_IDENTIFIER: - t = jj_consume_token(REGULAR_IDENTIFIER); - { - if (true) - return new IdentifierItem(t, false); - } - break; - case DELIMITED_IDENTIFIER: - t = jj_consume_token(DELIMITED_IDENTIFIER); - { - if (true) - return new IdentifierItem(t, true); - } - break; - default: - jj_la1[16] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - throw new Error("Missing return statement in function"); - } - - /** - * Extracts the name of a table with its possible catalog and schema prefixes. - * - * @return A {@link IdentifierItems} which contains at most three items: catalogName, schemaName and tableName. - */ - final public IdentifierItems TableName() throws ParseException{ - IdentifierItems identifiers = new IdentifierItems(true); - IdentifierItem id = null; - id = Identifier(); - identifiers.append(id); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DOT: - jj_consume_token(DOT); - id = Identifier(); - identifiers.append(id); - break; - default: - jj_la1[17] = jj_gen; - ; - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DOT: - jj_consume_token(DOT); - id = Identifier(); - identifiers.append(id); - break; - default: - jj_la1[18] = jj_gen; - ; - } - { - if (true) - return identifiers; - } - throw new Error("Missing return statement in function"); - } - - /** - * Extracts the name of a column with its possible catalog, schema and table prefixes. - * - * @return A {@link IdentifierItems} which contains at most four items: catalogName, schemaName, tableName and columnName. - */ - final public IdentifierItems ColumnName() throws ParseException{ - IdentifierItem id; - IdentifierItems table = null, identifiers = new IdentifierItems(false); - id = Identifier(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DOT: - jj_consume_token(DOT); - table = TableName(); - break; - default: - jj_la1[19] = jj_gen; - ; - } - identifiers.append(id); - if (table != null){ - for(int i = 0; i < table.size(); i++) - identifiers.append(table.get(i)); - } - { - if (true) - return identifiers; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLColumn Column() throws ParseException{ - IdentifierItems identifiers; - identifiers = ColumnName(); - try{ - { - if (true) - return queryFactory.createColumn(identifiers); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public ColumnReference ColumnRef() throws ParseException{ - IdentifierItems identifiers = null; - Token ind = null; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - identifiers = ColumnName(); - break; - case UNSIGNED_INTEGER: - ind = jj_consume_token(UNSIGNED_INTEGER); - break; - default: - jj_la1[20] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - try{ - ColumnReference colRef = null; - if (identifiers != null) - colRef = queryFactory.createColRef(identifiers); - else - colRef = queryFactory.createColRef(Integer.parseInt(ind.image), new TextPosition(ind)); - { - if (true) - return colRef; - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOrder OrderItem() throws ParseException{ - IdentifierItems identifiers = null; - Token ind = null, desc = null; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - identifiers = ColumnName(); - break; - case UNSIGNED_INTEGER: - ind = jj_consume_token(UNSIGNED_INTEGER); - break; - default: - jj_la1[21] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ASC: - case DESC: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ASC: - jj_consume_token(ASC); - break; - case DESC: - desc = jj_consume_token(DESC); - break; - default: - jj_la1[22] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[23] = jj_gen; - ; - } - try{ - ADQLOrder order = null; - if (identifiers != null) - order = queryFactory.createOrder(identifiers, desc != null); - else - order = queryFactory.createOrder(Integer.parseInt(ind.image), desc != null, new TextPosition(ind)); - { - if (true) - return order; - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public FromContent SimpleTableRef() throws ParseException{ - IdentifierItem alias = null; - IdentifierItems identifiers = null; - ADQLQuery subQuery = null; - FromContent content = null; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - identifiers = TableName(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case AS: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case AS: - jj_consume_token(AS); - break; - default: - jj_la1[24] = jj_gen; - ; - } - alias = Identifier(); - break; - default: - jj_la1[25] = jj_gen; - ; - } - { - if (true) - return queryFactory.createTable(identifiers, alias); - } - break; - default: - jj_la1[27] = jj_gen; - if (jj_2_2(2)){ - subQuery = SubQueryExpression(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case AS: - jj_consume_token(AS); - break; - default: - jj_la1[26] = jj_gen; - ; - } - alias = Identifier(); - { - if (true) - return queryFactory.createTable(subQuery, alias); - } - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - jj_consume_token(LEFT_PAR); - content = JoinedTable(); - jj_consume_token(RIGHT_PAR); - { - if (true) - return content; - } - break; - default: - jj_la1[28] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public FromContent TableRef() throws ParseException{ - FromContent content; - content = SimpleTableRef(); - label_5: while(true){ - if (jj_2_3(2)){ - ; - }else{ - break label_5; - } - content = JoinSpecification(content); - } - { - if (true) - return content; - } - throw new Error("Missing return statement in function"); - } - - final public FromContent JoinedTable() throws ParseException{ - FromContent content; - content = SimpleTableRef(); - label_6: while(true){ - content = JoinSpecification(content); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NATURAL: - case INNER: - case RIGHT: - case LEFT: - case FULL: - case JOIN: - ; - break; - default: - jj_la1[29] = jj_gen; - break label_6; - } - } - { - if (true) - return content; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLJoin JoinSpecification(FromContent leftTable) throws ParseException{ - boolean natural = false; - JoinType type = JoinType.INNER; - ClauseConstraints condition = new ClauseConstraints("ON"); - ArrayList<ADQLColumn> lstColumns = new ArrayList<ADQLColumn>(); - IdentifierItem id; - FromContent rightTable; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NATURAL: - jj_consume_token(NATURAL); - natural = true; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case INNER: - case RIGHT: - case LEFT: - case FULL: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case INNER: - jj_consume_token(INNER); - break; - case RIGHT: - case LEFT: - case FULL: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT: - jj_consume_token(LEFT); - type = JoinType.OUTER_LEFT; - break; - case RIGHT: - jj_consume_token(RIGHT); - type = JoinType.OUTER_RIGHT; - break; - case FULL: - jj_consume_token(FULL); - type = JoinType.OUTER_FULL; - break; - default: - jj_la1[30] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case OUTER: - jj_consume_token(OUTER); - break; - default: - jj_la1[31] = jj_gen; - ; - } - break; - default: - jj_la1[32] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[33] = jj_gen; - ; - } - jj_consume_token(JOIN); - rightTable = TableRef(); - { - if (true) - return queryFactory.createJoin(type, leftTable, rightTable); - } - break; - case INNER: - case RIGHT: - case LEFT: - case FULL: - case JOIN: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case INNER: - case RIGHT: - case LEFT: - case FULL: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case INNER: - jj_consume_token(INNER); - break; - case RIGHT: - case LEFT: - case FULL: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT: - jj_consume_token(LEFT); - type = JoinType.OUTER_LEFT; - break; - case RIGHT: - jj_consume_token(RIGHT); - type = JoinType.OUTER_RIGHT; - break; - case FULL: - jj_consume_token(FULL); - type = JoinType.OUTER_FULL; - break; - default: - jj_la1[34] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case OUTER: - jj_consume_token(OUTER); - break; - default: - jj_la1[35] = jj_gen; - ; - } - break; - default: - jj_la1[36] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[37] = jj_gen; - ; - } - jj_consume_token(JOIN); - rightTable = TableRef(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ON: - jj_consume_token(ON); - ConditionsList(condition); - { - if (true) - return queryFactory.createJoin(type, leftTable, rightTable, condition); - } - break; - case USING: - jj_consume_token(USING); - jj_consume_token(LEFT_PAR); - id = Identifier(); - lstColumns.add(queryFactory.createColumn(id)); - label_7: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[38] = jj_gen; - break label_7; - } - jj_consume_token(COMMA); - id = Identifier(); - lstColumns.add(queryFactory.createColumn(id)); - } - jj_consume_token(RIGHT_PAR); - { - if (true) - return queryFactory.createJoin(type, leftTable, rightTable, lstColumns); - } - break; - default: - jj_la1[39] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[40] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - /* ****** */ - /* STRING */ - /* ****** */ - final public String String() throws ParseException{ - Token t; - String str = ""; - label_8: while(true){ - t = jj_consume_token(STRING_LITERAL); - str += t.image.substring(1, t.image.length() - 1).replaceAll("''", "'"); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case STRING_LITERAL: - ; - break; - default: - jj_la1[41] = jj_gen; - break label_8; - } - } - { - if (true) - return str; - } - throw new Error("Missing return statement in function"); - } - - /* ************* */ - /* NUMERIC TYPES */ - /* ************* */ - final public String UnsignedNumeric() throws ParseException{ - Token t; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case SCIENTIFIC_NUMBER: - t = jj_consume_token(SCIENTIFIC_NUMBER); - break; - case UNSIGNED_FLOAT: - t = jj_consume_token(UNSIGNED_FLOAT); - break; - case UNSIGNED_INTEGER: - t = jj_consume_token(UNSIGNED_INTEGER); - break; - default: - jj_la1[42] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - { - if (true) - return t.image; - } - throw new Error("Missing return statement in function"); - } - - final public String UnsignedFloat() throws ParseException{ - Token t; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case UNSIGNED_INTEGER: - t = jj_consume_token(UNSIGNED_INTEGER); - break; - case UNSIGNED_FLOAT: - t = jj_consume_token(UNSIGNED_FLOAT); - break; - default: - jj_la1[43] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - { - if (true) - return t.image; - } - throw new Error("Missing return statement in function"); - } - - final public String SignedInteger() throws ParseException{ - Token sign = null, number; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case PLUS: - case MINUS: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case PLUS: - sign = jj_consume_token(PLUS); - break; - case MINUS: - sign = jj_consume_token(MINUS); - break; - default: - jj_la1[44] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[45] = jj_gen; - ; - } - number = jj_consume_token(UNSIGNED_INTEGER); - { - if (true) - return ((sign == null) ? "" : sign.image) + number.image; - } - throw new Error("Missing return statement in function"); - } - - /* *********** */ - /* EXPRESSIONS */ - /* *********** */ - final public ADQLOperand NumericValueExpressionPrimary() throws ParseException{ - String expr; - ADQLColumn column; - ADQLOperand op; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - // unsigned_value_specification - expr = UnsignedNumeric(); - { - if (true) - return queryFactory.createNumericConstant(expr); - } - break; - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - column = Column(); - column.setExpectedType('N'); - { - if (true) - return column; - } - break; - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - op = SqlFunction(); - { - if (true) - return op; - } - break; - case LEFT_PAR: - jj_consume_token(LEFT_PAR); - op = NumericExpression(); - jj_consume_token(RIGHT_PAR); - { - if (true) - return queryFactory.createWrappedOperand(op); - } - break; - default: - jj_la1[46] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand StringValueExpressionPrimary() throws ParseException{ - String expr; - ADQLColumn column; - ADQLOperand op; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case STRING_LITERAL: - // string - expr = String(); - { - if (true) - return queryFactory.createStringConstant(expr); - } - break; - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - column = Column(); - column.setExpectedType('S'); - { - if (true) - return column; - } - break; - case LEFT_PAR: - jj_consume_token(LEFT_PAR); - op = StringExpression(); - jj_consume_token(RIGHT_PAR); - { - if (true) - return queryFactory.createWrappedOperand(op); - } - break; - default: - jj_la1[47] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand ValueExpression() throws ParseException{ - ADQLOperand valueExpr = null; - try{ - if (jj_2_4(2147483647)){ - valueExpr = NumericExpression(); - }else if (jj_2_5(2147483647)){ - valueExpr = StringExpression(); - }else if (jj_2_6(2147483647)){ - jj_consume_token(LEFT_PAR); - valueExpr = ValueExpression(); - jj_consume_token(RIGHT_PAR); - valueExpr = queryFactory.createWrappedOperand(valueExpr); - }else if (jj_2_7(2147483647)){ - valueExpr = UserDefinedFunction(); - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case BOX: - case CENTROID: - case CIRCLE: - case POINT: - case POLYGON: - case REGION: - valueExpr = GeometryValueFunction(); - break; - default: - jj_la1[48] = jj_gen; - if (jj_2_8(2147483647)){ - valueExpr = Column(); - }else if (jj_2_9(2147483647)){ - valueExpr = StringFactor(); - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - case PLUS: - case MINUS: - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - case CONTAINS: - case INTERSECTS: - case AREA: - case COORD1: - case COORD2: - case DISTANCE: - case ABS: - case CEILING: - case DEGREES: - case EXP: - case FLOOR: - case LOG: - case LOG10: - case MOD: - case PI: - case POWER: - case RADIANS: - case RAND: - case ROUND: - case SQRT: - case TRUNCATE: - case ACOS: - case ASIN: - case ATAN: - case ATAN2: - case COS: - case COT: - case SIN: - case TAN: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - valueExpr = Factor(); - break; - default: - jj_la1[49] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - } - } - { - if (true) - return valueExpr; - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand NumericExpression() throws ParseException{ - Token sign = null; - ADQLOperand leftOp, rightOp = null; - leftOp = NumericTerm(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case PLUS: - case MINUS: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case PLUS: - sign = jj_consume_token(PLUS); - break; - case MINUS: - sign = jj_consume_token(MINUS); - break; - default: - jj_la1[50] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - rightOp = NumericExpression(); - break; - default: - jj_la1[51] = jj_gen; - ; - } - if (sign == null){ - if (true) - return leftOp; - }else{ - try{ - { - if (true) - return queryFactory.createOperation(leftOp, OperationType.getOperator(sign.image), rightOp); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand NumericTerm() throws ParseException{ - Token sign = null; - ADQLOperand leftOp, rightOp = null; - leftOp = Factor(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ASTERISK: - case DIVIDE: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ASTERISK: - sign = jj_consume_token(ASTERISK); - break; - case DIVIDE: - sign = jj_consume_token(DIVIDE); - break; - default: - jj_la1[52] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - rightOp = NumericTerm(); - break; - default: - jj_la1[53] = jj_gen; - ; - } - if (sign == null){ - if (true) - return leftOp; - }else{ - try{ - { - if (true) - return queryFactory.createOperation(leftOp, OperationType.getOperator(sign.image), rightOp); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand Factor() throws ParseException{ - boolean negative = false;; - ADQLOperand op; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case PLUS: - case MINUS: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case PLUS: - jj_consume_token(PLUS); - break; - case MINUS: - jj_consume_token(MINUS); - negative = true; - break; - default: - jj_la1[54] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[55] = jj_gen; - ; - } - if (jj_2_10(2)){ - op = NumericFunction(); - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - op = NumericValueExpressionPrimary(); - break; - default: - jj_la1[56] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - if (negative){ - try{ - op = queryFactory.createNegativeOperand(op); - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - } - - { - if (true) - return op; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand StringExpression() throws ParseException{ - ADQLOperand leftOp; - ADQLOperand rightOp = null; - leftOp = StringFactor(); - label_9: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case CONCAT: - ; - break; - default: - jj_la1[57] = jj_gen; - break label_9; - } - jj_consume_token(CONCAT); - rightOp = StringFactor(); - if (!(leftOp instanceof Concatenation)){ - try{ - ADQLOperand temp = leftOp; - leftOp = queryFactory.createConcatenation(); - ((Concatenation)leftOp).add(temp); - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - } - ((Concatenation)leftOp).add(rightOp); - } - { - if (true) - return leftOp; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand StringFactor() throws ParseException{ - ADQLOperand op; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COORDSYS: - op = ExtractCoordSys(); - break; - default: - jj_la1[58] = jj_gen; - if (jj_2_11(2)){ - op = UserDefinedFunction(); - ((UserDefinedFunction)op).setExpectedType('S'); - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - case STRING_LITERAL: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - op = StringValueExpressionPrimary(); - break; - default: - jj_la1[59] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - } - { - if (true) - return op; - } - throw new Error("Missing return statement in function"); - } - - final public GeometryValue<GeometryFunction> GeometryExpression() throws ParseException{ - ADQLColumn col = null; - GeometryFunction gf = null; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - col = Column(); - break; - case BOX: - case CENTROID: - case CIRCLE: - case POINT: - case POLYGON: - case REGION: - gf = GeometryValueFunction(); - break; - default: - jj_la1[60] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - if (col != null){ - col.setExpectedType('G'); - { - if (true) - return new GeometryValue<GeometryFunction>(col); - } - }else{ - if (true) - return new GeometryValue<GeometryFunction>(gf); - } - throw new Error("Missing return statement in function"); - } - - /* ********************************** */ - /* BOOLEAN EXPRESSIONS (WHERE clause) */ - /* ********************************** */ - final public ClauseConstraints ConditionsList(ClauseConstraints clause) throws ParseException{ - ADQLConstraint constraint = null; - Token op = null; - boolean notOp = false; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NOT: - jj_consume_token(NOT); - notOp = true; - break; - default: - jj_la1[61] = jj_gen; - ; - } - constraint = Constraint(); - if (notOp) - constraint = queryFactory.createNot(constraint); - notOp = false; - if (clause instanceof ADQLConstraint) - clause.add(constraint); - else - clause.add(constraint); - label_10: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case AND: - case OR: - ; - break; - default: - jj_la1[62] = jj_gen; - break label_10; - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case AND: - op = jj_consume_token(AND); - break; - case OR: - op = jj_consume_token(OR); - break; - default: - jj_la1[63] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NOT: - jj_consume_token(NOT); - notOp = true; - break; - default: - jj_la1[64] = jj_gen; - ; - } - constraint = Constraint(); - if (notOp) - constraint = queryFactory.createNot(constraint); - notOp = false; - if (clause instanceof ADQLConstraint) - clause.add(op.image, constraint); - else - clause.add(op.image, constraint); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - { - if (true) - return clause; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLConstraint Constraint() throws ParseException{ - ADQLConstraint constraint = null; - if (jj_2_12(2147483647)){ - constraint = Predicate(); - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - jj_consume_token(LEFT_PAR); - try{ - constraint = queryFactory.createGroupOfConstraints(); - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - ConditionsList((ConstraintsGroup)constraint); - jj_consume_token(RIGHT_PAR); - break; - default: - jj_la1[65] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - { - if (true) - return constraint; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLConstraint Predicate() throws ParseException{ - ADQLQuery q = null; - ADQLColumn column = null; - ADQLOperand strExpr1 = null, strExpr2 = null; - ADQLOperand op; - Token notToken = null; - ADQLConstraint constraint = null; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case EXISTS: - jj_consume_token(EXISTS); - q = SubQueryExpression(); - { - if (true) - return queryFactory.createExists(q); - } - break; - default: - jj_la1[70] = jj_gen; - if (jj_2_14(2147483647)){ - column = Column(); - jj_consume_token(IS); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NOT: - notToken = jj_consume_token(NOT); - break; - default: - jj_la1[66] = jj_gen; - ; - } - jj_consume_token(NULL); - { - if (true) - return queryFactory.createIsNull((notToken != null), column); - } - }else if (jj_2_15(2147483647)){ - strExpr1 = StringExpression(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NOT: - notToken = jj_consume_token(NOT); - break; - default: - jj_la1[67] = jj_gen; - ; - } - jj_consume_token(LIKE); - strExpr2 = StringExpression(); - { - if (true) - return queryFactory.createComparison(strExpr1, (notToken == null) ? ComparisonOperator.LIKE : ComparisonOperator.NOTLIKE, strExpr2); - } - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - case PLUS: - case MINUS: - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - case BOX: - case CENTROID: - case CIRCLE: - case POINT: - case POLYGON: - case REGION: - case CONTAINS: - case INTERSECTS: - case AREA: - case COORD1: - case COORD2: - case COORDSYS: - case DISTANCE: - case ABS: - case CEILING: - case DEGREES: - case EXP: - case FLOOR: - case LOG: - case LOG10: - case MOD: - case PI: - case POWER: - case RADIANS: - case RAND: - case ROUND: - case SQRT: - case TRUNCATE: - case ACOS: - case ASIN: - case ATAN: - case ATAN2: - case COS: - case COT: - case SIN: - case TAN: - case STRING_LITERAL: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - op = ValueExpression(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case EQUAL: - case NOT_EQUAL: - case LESS_THAN: - case LESS_EQUAL_THAN: - case GREATER_THAN: - case GREATER_EQUAL_THAN: - constraint = ComparisonEnd(op); - break; - default: - jj_la1[68] = jj_gen; - if (jj_2_13(2)){ - constraint = BetweenEnd(op); - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NOT: - case IN: - constraint = InEnd(op); - break; - default: - jj_la1[69] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - } - break; - default: - jj_la1[71] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - { - if (true) - return constraint; - } - throw new Error("Missing return statement in function"); - } - - final public Comparison ComparisonEnd(ADQLOperand leftOp) throws ParseException{ - Token comp; - ADQLOperand rightOp; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case EQUAL: - comp = jj_consume_token(EQUAL); - break; - case NOT_EQUAL: - comp = jj_consume_token(NOT_EQUAL); - break; - case LESS_THAN: - comp = jj_consume_token(LESS_THAN); - break; - case LESS_EQUAL_THAN: - comp = jj_consume_token(LESS_EQUAL_THAN); - break; - case GREATER_THAN: - comp = jj_consume_token(GREATER_THAN); - break; - case GREATER_EQUAL_THAN: - comp = jj_consume_token(GREATER_EQUAL_THAN); - break; - default: - jj_la1[72] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - rightOp = ValueExpression(); - try{ - { - if (true) - return queryFactory.createComparison(leftOp, ComparisonOperator.getOperator(comp.image), rightOp); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public Between BetweenEnd(ADQLOperand leftOp) throws ParseException{ - Token notToken = null; - ADQLOperand min, max; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NOT: - notToken = jj_consume_token(NOT); - break; - default: - jj_la1[73] = jj_gen; - ; - } - jj_consume_token(BETWEEN); - min = ValueExpression(); - jj_consume_token(AND); - max = ValueExpression(); - try{ - { - if (true) - return queryFactory.createBetween((notToken != null), leftOp, min, max); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public In InEnd(ADQLOperand leftOp) throws ParseException{ - Token not = null; - ADQLQuery q = null; - ADQLOperand item; - Vector<ADQLOperand> items = new Vector<ADQLOperand>(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case NOT: - not = jj_consume_token(NOT); - break; - default: - jj_la1[74] = jj_gen; - ; - } - jj_consume_token(IN); - if (jj_2_16(2)){ - q = SubQueryExpression(); - }else{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - jj_consume_token(LEFT_PAR); - item = ValueExpression(); - items.add(item); - label_11: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[75] = jj_gen; - break label_11; - } - jj_consume_token(COMMA); - item = ValueExpression(); - items.add(item); - } - jj_consume_token(RIGHT_PAR); - break; - default: - jj_la1[76] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - try{ - if (q != null){ - if (true) - return queryFactory.createIn(leftOp, q, not != null); - }else{ - ADQLOperand[] list = new ADQLOperand[items.size()]; - int i = 0; - for(ADQLOperand op : items) - list[i++] = op; - { - if (true) - return queryFactory.createIn(leftOp, list, not != null); - } - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - /* ************* */ - /* SQL FUNCTIONS */ - /* ************* */ - final public SQLFunction SqlFunction() throws ParseException{ - Token fct, all = null, distinct = null; - ADQLOperand op = null; - SQLFunction funct = null; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COUNT: - jj_consume_token(COUNT); - jj_consume_token(LEFT_PAR); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case QUANTIFIER: - distinct = jj_consume_token(QUANTIFIER); - break; - default: - jj_la1[77] = jj_gen; - ; - } - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ASTERISK: - all = jj_consume_token(ASTERISK); - break; - case LEFT_PAR: - case PLUS: - case MINUS: - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - case BOX: - case CENTROID: - case CIRCLE: - case POINT: - case POLYGON: - case REGION: - case CONTAINS: - case INTERSECTS: - case AREA: - case COORD1: - case COORD2: - case COORDSYS: - case DISTANCE: - case ABS: - case CEILING: - case DEGREES: - case EXP: - case FLOOR: - case LOG: - case LOG10: - case MOD: - case PI: - case POWER: - case RADIANS: - case RAND: - case ROUND: - case SQRT: - case TRUNCATE: - case ACOS: - case ASIN: - case ATAN: - case ATAN2: - case COS: - case COT: - case SIN: - case TAN: - case STRING_LITERAL: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - op = ValueExpression(); - break; - default: - jj_la1[78] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jj_consume_token(RIGHT_PAR); - funct = queryFactory.createSQLFunction((all != null) ? SQLFunctionType.COUNT_ALL : SQLFunctionType.COUNT, op, distinct != null && distinct.image.equalsIgnoreCase("distinct")); - break; - case AVG: - case MAX: - case MIN: - case SUM: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case AVG: - fct = jj_consume_token(AVG); - break; - case MAX: - fct = jj_consume_token(MAX); - break; - case MIN: - fct = jj_consume_token(MIN); - break; - case SUM: - fct = jj_consume_token(SUM); - break; - default: - jj_la1[79] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jj_consume_token(LEFT_PAR); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case QUANTIFIER: - distinct = jj_consume_token(QUANTIFIER); - break; - default: - jj_la1[80] = jj_gen; - ; - } - op = ValueExpression(); - jj_consume_token(RIGHT_PAR); - funct = queryFactory.createSQLFunction(SQLFunctionType.valueOf(fct.image.toUpperCase()), op, distinct != null && distinct.image.equalsIgnoreCase("distinct")); - break; - default: - jj_la1[81] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - { - if (true) - return funct; - } - throw new Error("Missing return statement in function"); - } - - /* ************** */ - /* ADQL FUNCTIONS */ - /* ************** */ - final public ADQLOperand[] Coordinates() throws ParseException{ - ADQLOperand[] ops = new ADQLOperand[2]; - ops[0] = NumericExpression(); - jj_consume_token(COMMA); - ops[1] = NumericExpression(); - { - if (true) - return ops; - } - throw new Error("Missing return statement in function"); - } - - final public GeometryFunction GeometryFunction() throws ParseException{ - Token t = null; - GeometryValue<GeometryFunction> gvf1, gvf2; - GeometryValue<PointFunction> gvp1, gvp2; - GeometryFunction gf = null; - PointFunction p1 = null, p2 = null; - ADQLColumn col1 = null, col2 = null; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case CONTAINS: - case INTERSECTS: - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case CONTAINS: - t = jj_consume_token(CONTAINS); - break; - case INTERSECTS: - t = jj_consume_token(INTERSECTS); - break; - default: - jj_la1[82] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jj_consume_token(LEFT_PAR); - gvf1 = GeometryExpression(); - jj_consume_token(COMMA); - gvf2 = GeometryExpression(); - jj_consume_token(RIGHT_PAR); - if (t.image.equalsIgnoreCase("contains")) - gf = queryFactory.createContains(gvf1, gvf2); - else - gf = queryFactory.createIntersects(gvf1, gvf2); - break; - case AREA: - jj_consume_token(AREA); - jj_consume_token(LEFT_PAR); - gvf1 = GeometryExpression(); - jj_consume_token(RIGHT_PAR); - gf = queryFactory.createArea(gvf1); - break; - case COORD1: - jj_consume_token(COORD1); - jj_consume_token(LEFT_PAR); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case POINT: - p1 = Point(); - gf = queryFactory.createCoord1(p1); - break; - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - col1 = Column(); - col1.setExpectedType('G'); - gf = queryFactory.createCoord1(col1); - break; - default: - jj_la1[83] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jj_consume_token(RIGHT_PAR); - break; - case COORD2: - jj_consume_token(COORD2); - jj_consume_token(LEFT_PAR); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case POINT: - p1 = Point(); - gf = queryFactory.createCoord2(p1); - break; - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - col1 = Column(); - col1.setExpectedType('G'); - gf = queryFactory.createCoord2(col1); - break; - default: - jj_la1[84] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jj_consume_token(RIGHT_PAR); - break; - case DISTANCE: - jj_consume_token(DISTANCE); - jj_consume_token(LEFT_PAR); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case POINT: - p1 = Point(); - break; - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - col1 = Column(); - break; - default: - jj_la1[85] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - if (p1 != null) - gvp1 = new GeometryValue<PointFunction>(p1); - else{ - col1.setExpectedType('G'); - gvp1 = new GeometryValue<PointFunction>(col1); - } - jj_consume_token(COMMA); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case POINT: - p2 = Point(); - break; - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - col2 = Column(); - break; - default: - jj_la1[86] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - if (p2 != null) - gvp2 = new GeometryValue<PointFunction>(p2); - else{ - col2.setExpectedType('G'); - gvp2 = new GeometryValue<PointFunction>(col2); - } - jj_consume_token(RIGHT_PAR); - gf = queryFactory.createDistance(gvp1, gvp2); - break; - default: - jj_la1[87] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - { - if (true) - return gf; - } - throw new Error("Missing return statement in function"); - } - - final public ADQLOperand CoordinateSystem() throws ParseException{ - ADQLOperand coordSys = null; - coordSys = StringExpression(); - { - if (true) - return coordSys; - } - throw new Error("Missing return statement in function"); - } - - final public GeometryFunction GeometryValueFunction() throws ParseException{ - ADQLOperand coordSys; - ADQLOperand width, height; - ADQLOperand[] coords, tmp; - Vector<ADQLOperand> vCoords; - ADQLOperand op = null; - GeometryValue<GeometryFunction> gvf = null; - GeometryFunction gf = null; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case BOX: - jj_consume_token(BOX); - jj_consume_token(LEFT_PAR); - coordSys = CoordinateSystem(); - jj_consume_token(COMMA); - coords = Coordinates(); - jj_consume_token(COMMA); - width = NumericExpression(); - jj_consume_token(COMMA); - height = NumericExpression(); - jj_consume_token(RIGHT_PAR); - gf = queryFactory.createBox(coordSys, coords[0], coords[1], width, height); - break; - case CENTROID: - jj_consume_token(CENTROID); - jj_consume_token(LEFT_PAR); - gvf = GeometryExpression(); - jj_consume_token(RIGHT_PAR); - gf = queryFactory.createCentroid(gvf); - break; - case CIRCLE: - jj_consume_token(CIRCLE); - jj_consume_token(LEFT_PAR); - coordSys = CoordinateSystem(); - jj_consume_token(COMMA); - coords = Coordinates(); - jj_consume_token(COMMA); - width = NumericExpression(); - jj_consume_token(RIGHT_PAR); - gf = queryFactory.createCircle(coordSys, coords[0], coords[1], width); - break; - case POINT: - gf = Point(); - break; - case POLYGON: - jj_consume_token(POLYGON); - jj_consume_token(LEFT_PAR); - coordSys = CoordinateSystem(); - vCoords = new Vector<ADQLOperand>(); - jj_consume_token(COMMA); - tmp = Coordinates(); - vCoords.add(tmp[0]); - vCoords.add(tmp[1]); - jj_consume_token(COMMA); - tmp = Coordinates(); - vCoords.add(tmp[0]); - vCoords.add(tmp[1]); - jj_consume_token(COMMA); - tmp = Coordinates(); - vCoords.add(tmp[0]); - vCoords.add(tmp[1]); - label_12: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[88] = jj_gen; - break label_12; - } - jj_consume_token(COMMA); - tmp = Coordinates(); - vCoords.add(tmp[0]); - vCoords.add(tmp[1]); - } - jj_consume_token(RIGHT_PAR); - gf = queryFactory.createPolygon(coordSys, vCoords); - break; - case REGION: - jj_consume_token(REGION); - jj_consume_token(LEFT_PAR); - op = StringExpression(); - jj_consume_token(RIGHT_PAR); - gf = queryFactory.createRegion(op); - break; - default: - jj_la1[89] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - { - if (true) - return gf; - } - throw new Error("Missing return statement in function"); - } - - final public PointFunction Point() throws ParseException{ - ADQLOperand coordSys; - ADQLOperand[] coords; - jj_consume_token(POINT); - jj_consume_token(LEFT_PAR); - coordSys = CoordinateSystem(); - jj_consume_token(COMMA); - coords = Coordinates(); - jj_consume_token(RIGHT_PAR); - try{ - { - if (true) - return queryFactory.createPoint(coordSys, coords[0], coords[1]); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public GeometryFunction ExtractCoordSys() throws ParseException{ - GeometryValue<GeometryFunction> gvf; - jj_consume_token(COORDSYS); - jj_consume_token(LEFT_PAR); - gvf = GeometryExpression(); - jj_consume_token(RIGHT_PAR); - try{ - { - if (true) - return queryFactory.createExtractCoordSys(gvf); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - /* ***************** */ - /* NUMERIC FUNCTIONS */ - /* ***************** */ - final public ADQLFunction NumericFunction() throws ParseException{ - ADQLFunction fct; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ABS: - case CEILING: - case DEGREES: - case EXP: - case FLOOR: - case LOG: - case LOG10: - case MOD: - case PI: - case POWER: - case RADIANS: - case RAND: - case ROUND: - case SQRT: - case TRUNCATE: - fct = MathFunction(); - break; - case ACOS: - case ASIN: - case ATAN: - case ATAN2: - case COS: - case COT: - case SIN: - case TAN: - fct = TrigFunction(); - break; - case CONTAINS: - case INTERSECTS: - case AREA: - case COORD1: - case COORD2: - case DISTANCE: - fct = GeometryFunction(); - break; - case REGULAR_IDENTIFIER: - fct = UserDefinedFunction(); - ((UserDefinedFunction)fct).setExpectedType('N'); - break; - default: - jj_la1[90] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - { - if (true) - return fct; - } - throw new Error("Missing return statement in function"); - } - - final public MathFunction MathFunction() throws ParseException{ - Token fct = null; - ADQLOperand param1 = null, param2 = null; - String integerValue = null; - try{ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ABS: - fct = jj_consume_token(ABS); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case CEILING: - fct = jj_consume_token(CEILING); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case DEGREES: - fct = jj_consume_token(DEGREES); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case EXP: - fct = jj_consume_token(EXP); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case FLOOR: - fct = jj_consume_token(FLOOR); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case LOG: - fct = jj_consume_token(LOG); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case LOG10: - fct = jj_consume_token(LOG10); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case MOD: - fct = jj_consume_token(MOD); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(COMMA); - param2 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case PI: - fct = jj_consume_token(PI); - jj_consume_token(LEFT_PAR); - jj_consume_token(RIGHT_PAR); - break; - case POWER: - fct = jj_consume_token(POWER); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(COMMA); - param2 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case RADIANS: - fct = jj_consume_token(RADIANS); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case RAND: - fct = jj_consume_token(RAND); - jj_consume_token(LEFT_PAR); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - case PLUS: - case MINUS: - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - case CONTAINS: - case INTERSECTS: - case AREA: - case COORD1: - case COORD2: - case DISTANCE: - case ABS: - case CEILING: - case DEGREES: - case EXP: - case FLOOR: - case LOG: - case LOG10: - case MOD: - case PI: - case POWER: - case RADIANS: - case RAND: - case ROUND: - case SQRT: - case TRUNCATE: - case ACOS: - case ASIN: - case ATAN: - case ATAN2: - case COS: - case COT: - case SIN: - case TAN: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - param1 = NumericExpression(); - break; - default: - jj_la1[91] = jj_gen; - ; - } - jj_consume_token(RIGHT_PAR); - break; - case ROUND: - fct = jj_consume_token(ROUND); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - jj_consume_token(COMMA); - integerValue = SignedInteger(); - param2 = queryFactory.createNumericConstant(integerValue); - break; - default: - jj_la1[92] = jj_gen; - ; - } - jj_consume_token(RIGHT_PAR); - break; - case SQRT: - fct = jj_consume_token(SQRT); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case TRUNCATE: - fct = jj_consume_token(TRUNCATE); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - jj_consume_token(COMMA); - integerValue = SignedInteger(); - param2 = queryFactory.createNumericConstant(integerValue); - break; - default: - jj_la1[93] = jj_gen; - ; - } - jj_consume_token(RIGHT_PAR); - break; - default: - jj_la1[94] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - if (param1 != null){ - if (true) - return queryFactory.createMathFunction(MathFunctionType.valueOf(fct.image.toUpperCase()), param1, param2); - }else{ - if (true) - return null; - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public MathFunction TrigFunction() throws ParseException{ - Token fct = null; - ADQLOperand param1 = null, param2 = null; - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case ACOS: - fct = jj_consume_token(ACOS); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case ASIN: - fct = jj_consume_token(ASIN); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case ATAN: - fct = jj_consume_token(ATAN); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case ATAN2: - fct = jj_consume_token(ATAN2); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(COMMA); - param2 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case COS: - fct = jj_consume_token(COS); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case COT: - fct = jj_consume_token(COT); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case SIN: - fct = jj_consume_token(SIN); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - case TAN: - fct = jj_consume_token(TAN); - jj_consume_token(LEFT_PAR); - param1 = NumericExpression(); - jj_consume_token(RIGHT_PAR); - break; - default: - jj_la1[95] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - try{ - if (param1 != null){ - if (true) - return queryFactory.createMathFunction(MathFunctionType.valueOf(fct.image.toUpperCase()), param1, param2); - }else{ - if (true) - return null; - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - final public UserDefinedFunction UserDefinedFunction() throws ParseException{ - Token fct; - Vector<ADQLOperand> params = new Vector<ADQLOperand>(); - ADQLOperand op; - fct = jj_consume_token(REGULAR_IDENTIFIER); - jj_consume_token(LEFT_PAR); - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case LEFT_PAR: - case PLUS: - case MINUS: - case AVG: - case MAX: - case MIN: - case SUM: - case COUNT: - case BOX: - case CENTROID: - case CIRCLE: - case POINT: - case POLYGON: - case REGION: - case CONTAINS: - case INTERSECTS: - case AREA: - case COORD1: - case COORD2: - case COORDSYS: - case DISTANCE: - case ABS: - case CEILING: - case DEGREES: - case EXP: - case FLOOR: - case LOG: - case LOG10: - case MOD: - case PI: - case POWER: - case RADIANS: - case RAND: - case ROUND: - case SQRT: - case TRUNCATE: - case ACOS: - case ASIN: - case ATAN: - case ATAN2: - case COS: - case COT: - case SIN: - case TAN: - case STRING_LITERAL: - case DELIMITED_IDENTIFIER: - case REGULAR_IDENTIFIER: - case SCIENTIFIC_NUMBER: - case UNSIGNED_FLOAT: - case UNSIGNED_INTEGER: - op = ValueExpression(); - params.add(op); - label_13: while(true){ - switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ - case COMMA: - ; - break; - default: - jj_la1[96] = jj_gen; - break label_13; - } - jj_consume_token(COMMA); - op = ValueExpression(); - params.add(op); - } - break; - default: - jj_la1[97] = jj_gen; - ; - } - jj_consume_token(RIGHT_PAR); - //System.out.println("INFO [ADQLParser]: \""+fct.image+"\" (from line "+fct.beginLine+" and column "+fct.beginColumn+" to line "+token.endLine+" and column "+(token.endColumn+1)+") is considered as an user defined function !"); - try{ - // Build the parameters list: - ADQLOperand[] parameters = new ADQLOperand[params.size()]; - for(int i = 0; i < params.size(); i++) - parameters[i] = params.get(i); - - // Create the UDF function: - { - if (true) - return queryFactory.createUserDefinedFunction(fct.image, parameters); - } - }catch(UnsupportedOperationException uoe){ - /* This catch clause is just for backward compatibility: - * if the createUserDefinedFunction(...) is overridden and - * the function can not be identified a such exception may be thrown). */ - { - if (true) - throw new ParseException(uoe.getMessage(), new TextPosition(fct, token)); - } - }catch(Exception ex){ - { - if (true) - throw generateParseException(ex); - } - } - throw new Error("Missing return statement in function"); - } - - private boolean jj_2_1(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_1(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(0, xla); - } - } - - private boolean jj_2_2(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_2(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(1, xla); - } - } - - private boolean jj_2_3(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_3(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(2, xla); - } - } - - private boolean jj_2_4(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_4(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(3, xla); - } - } - - private boolean jj_2_5(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_5(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(4, xla); - } - } - - private boolean jj_2_6(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_6(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(5, xla); - } - } - - private boolean jj_2_7(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_7(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(6, xla); - } - } - - private boolean jj_2_8(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_8(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(7, xla); - } - } - - private boolean jj_2_9(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_9(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(8, xla); - } - } - - private boolean jj_2_10(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_10(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(9, xla); - } - } - - private boolean jj_2_11(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_11(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(10, xla); - } - } - - private boolean jj_2_12(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_12(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(11, xla); - } - } - - private boolean jj_2_13(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_13(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(12, xla); - } - } - - private boolean jj_2_14(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_14(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(13, xla); - } - } - - private boolean jj_2_15(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_15(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(14, xla); - } - } - - private boolean jj_2_16(int xla){ - jj_la = xla; - jj_lastpos = jj_scanpos = token; - try{ - return !jj_3_16(); - }catch(LookaheadSuccess ls){ - return true; - }finally{ - jj_save(15, xla); - } - } - - private boolean jj_3R_185(){ - if (jj_scan_token(NOT)) - return true; - return false; - } - - private boolean jj_3R_146(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_46()) - return true; - return false; - } - - private boolean jj_3R_149(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_161()){ - jj_scanpos = xsp; - if (jj_3_1()){ - jj_scanpos = xsp; - if (jj_3R_162()) - return true; - } - } - return false; - } - - private boolean jj_3R_150(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_149()) - return true; - return false; - } - - private boolean jj_3R_145(){ - if (jj_3R_109()) - return true; - return false; - } - - private boolean jj_3R_163(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_185()) - jj_scanpos = xsp; - if (jj_3R_186()) - return true; - while(true){ - xsp = jj_scanpos; - if (jj_3R_187()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_148(){ - if (jj_scan_token(TOP)) - return true; - if (jj_scan_token(UNSIGNED_INTEGER)) - return true; - return false; - } - - private boolean jj_3R_147(){ - if (jj_scan_token(QUANTIFIER)) - return true; - return false; - } - - private boolean jj_3R_48(){ - if (jj_scan_token(SELECT)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_147()) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_148()) - jj_scanpos = xsp; - if (jj_3R_149()) - return true; - while(true){ - xsp = jj_scanpos; - if (jj_3R_150()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_144(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_16(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_31()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_53(){ - if (jj_3R_74()) - return true; - return false; - } - - private boolean jj_3R_122(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_144()){ - jj_scanpos = xsp; - if (jj_3R_145()) - return true; - } - return false; - } - - private boolean jj_3R_55(){ - if (jj_3R_76()) - return true; - return false; - } - - private boolean jj_3_11(){ - if (jj_3R_24()) - return true; - return false; - } - - private boolean jj_3R_54(){ - if (jj_3R_75()) - return true; - return false; - } - - private boolean jj_3R_35(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_54()){ - jj_scanpos = xsp; - if (jj_3_11()){ - jj_scanpos = xsp; - if (jj_3R_55()) - return true; - } - } - return false; - } - - private boolean jj_3R_133(){ - if (jj_3R_155()) - return true; - return false; - } - - private boolean jj_3R_132(){ - if (jj_3R_154()) - return true; - return false; - } - - private boolean jj_3R_131(){ - if (jj_3R_153()) - return true; - return false; - } - - private boolean jj_3R_130(){ - if (jj_3R_152()) - return true; - return false; - } - - private boolean jj_3R_123(){ - if (jj_3R_46()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_146()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_47(){ - if (jj_scan_token(CONCAT)) - return true; - if (jj_3R_35()) - return true; - return false; - } - - private boolean jj_3R_174(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_191()) - return true; - return false; - } - - private boolean jj_3R_173(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_191()) - return true; - return false; - } - - private boolean jj_3R_31(){ - if (jj_3R_48()) - return true; - if (jj_3R_129()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_130()) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_131()) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_132()) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_133()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_27(){ - if (jj_3R_35()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_47()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_73(){ - if (jj_scan_token(MINUS)) - return true; - return false; - } - - private boolean jj_3_10(){ - if (jj_3R_23()) - return true; - return false; - } - - private boolean jj_3R_52(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)){ - jj_scanpos = xsp; - if (jj_3R_73()) - return true; - } - return false; - } - - private boolean jj_3R_168(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(10)){ - jj_scanpos = xsp; - if (jj_scan_token(11)) - return true; - } - if (jj_3R_135()) - return true; - return false; - } - - private boolean jj_3R_112(){ - if (jj_scan_token(FULL)) - return true; - return false; - } - - private boolean jj_3R_34(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_52()) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3_10()){ - jj_scanpos = xsp; - if (jj_3R_53()) - return true; - } - return false; - } - - private boolean jj_3R_24(){ - if (jj_scan_token(REGULAR_IDENTIFIER)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_123()) - jj_scanpos = xsp; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_156(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)){ - jj_scanpos = xsp; - if (jj_scan_token(9)) - return true; - } - if (jj_3R_108()) - return true; - return false; - } - - private boolean jj_3R_19(){ - if (jj_3R_34()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)){ - jj_scanpos = xsp; - if (jj_scan_token(9)){ - jj_scanpos = xsp; - if (jj_scan_token(10)){ - jj_scanpos = xsp; - if (jj_scan_token(11)) - return true; - } - } - } - return false; - } - - private boolean jj_3R_172(){ - if (jj_3R_108()) - return true; - return false; - } - - private boolean jj_3R_20(){ - if (jj_3R_35()) - return true; - if (jj_scan_token(CONCAT)) - return true; - return false; - } - - private boolean jj_3R_135(){ - if (jj_3R_34()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_168()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_100(){ - if (jj_scan_token(TAN)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3_9(){ - if (jj_3R_22()) - return true; - return false; - } - - private boolean jj_3R_99(){ - if (jj_scan_token(SIN)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3_8(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_98(){ - if (jj_scan_token(COT)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_115(){ - if (jj_scan_token(FULL)) - return true; - return false; - } - - private boolean jj_3R_97(){ - if (jj_scan_token(COS)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3_7(){ - if (jj_scan_token(REGULAR_IDENTIFIER)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - return false; - } - - private boolean jj_3R_96(){ - if (jj_scan_token(ATAN2)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3_6(){ - if (jj_scan_token(LEFT_PAR)) - return true; - return false; - } - - private boolean jj_3R_95(){ - if (jj_scan_token(ATAN)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3_5(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(63)){ - jj_scanpos = xsp; - if (jj_3R_20()) - return true; - } - return false; - } - - private boolean jj_3R_94(){ - if (jj_scan_token(ASIN)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3_4(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_18()){ - jj_scanpos = xsp; - if (jj_3R_19()) - return true; - } - return false; - } - - private boolean jj_3R_18(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)){ - jj_scanpos = xsp; - if (jj_scan_token(9)) - return true; - } - return false; - } - - private boolean jj_3R_93(){ - if (jj_scan_token(ACOS)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_58(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_93()){ - jj_scanpos = xsp; - if (jj_3R_94()){ - jj_scanpos = xsp; - if (jj_3R_95()){ - jj_scanpos = xsp; - if (jj_3R_96()){ - jj_scanpos = xsp; - if (jj_3R_97()){ - jj_scanpos = xsp; - if (jj_3R_98()){ - jj_scanpos = xsp; - if (jj_3R_99()){ - jj_scanpos = xsp; - if (jj_3R_100()) - return true; - } - } - } - } - } - } - } - return false; - } - - private boolean jj_3R_69(){ - if (jj_3R_34()) - return true; - return false; - } - - private boolean jj_3R_68(){ - if (jj_3R_35()) - return true; - return false; - } - - private boolean jj_3R_67(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_108(){ - if (jj_3R_135()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_156()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_92(){ - if (jj_scan_token(TRUNCATE)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_174()) - jj_scanpos = xsp; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_66(){ - if (jj_3R_109()) - return true; - return false; - } - - private boolean jj_3R_91(){ - if (jj_scan_token(SQRT)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_65(){ - if (jj_3R_24()) - return true; - return false; - } - - private boolean jj_3R_90(){ - if (jj_scan_token(ROUND)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_173()) - jj_scanpos = xsp; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_64(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_46()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_89(){ - if (jj_scan_token(RAND)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_172()) - jj_scanpos = xsp; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_63(){ - if (jj_3R_27()) - return true; - return false; - } - - private boolean jj_3R_88(){ - if (jj_scan_token(RADIANS)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_87(){ - if (jj_scan_token(POWER)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_62(){ - if (jj_3R_108()) - return true; - return false; - } - - private boolean jj_3R_86(){ - if (jj_scan_token(PI)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_111(){ - if (jj_scan_token(RIGHT)) - return true; - return false; - } - - private boolean jj_3R_85(){ - if (jj_scan_token(MOD)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_84(){ - if (jj_scan_token(LOG10)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_83(){ - if (jj_scan_token(LOG)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_82(){ - if (jj_scan_token(FLOOR)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_81(){ - if (jj_scan_token(EXP)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_80(){ - if (jj_scan_token(DEGREES)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_126(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_27()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_79(){ - if (jj_scan_token(CEILING)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_125(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_78(){ - if (jj_scan_token(ABS)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_46(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_62()){ - jj_scanpos = xsp; - if (jj_3R_63()){ - jj_scanpos = xsp; - if (jj_3R_64()){ - jj_scanpos = xsp; - if (jj_3R_65()){ - jj_scanpos = xsp; - if (jj_3R_66()){ - jj_scanpos = xsp; - if (jj_3R_67()){ - jj_scanpos = xsp; - if (jj_3R_68()){ - jj_scanpos = xsp; - if (jj_3R_69()) - return true; - } - } - } - } - } - } - } - return false; - } - - private boolean jj_3R_124(){ - if (jj_3R_22()) - return true; - return false; - } - - private boolean jj_3R_57(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_78()){ - jj_scanpos = xsp; - if (jj_3R_79()){ - jj_scanpos = xsp; - if (jj_3R_80()){ - jj_scanpos = xsp; - if (jj_3R_81()){ - jj_scanpos = xsp; - if (jj_3R_82()){ - jj_scanpos = xsp; - if (jj_3R_83()){ - jj_scanpos = xsp; - if (jj_3R_84()){ - jj_scanpos = xsp; - if (jj_3R_85()){ - jj_scanpos = xsp; - if (jj_3R_86()){ - jj_scanpos = xsp; - if (jj_3R_87()){ - jj_scanpos = xsp; - if (jj_3R_88()){ - jj_scanpos = xsp; - if (jj_3R_89()){ - jj_scanpos = xsp; - if (jj_3R_90()){ - jj_scanpos = xsp; - if (jj_3R_91()){ - jj_scanpos = xsp; - if (jj_3R_92()) - return true; - } - } - } - } - } - } - } - } - } - } - } - } - } - } - return false; - } - - private boolean jj_3R_121(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_120(){ - if (jj_3R_143()) - return true; - return false; - } - - private boolean jj_3R_41(){ - if (jj_3R_24()) - return true; - return false; - } - - private boolean jj_3R_76(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_124()){ - jj_scanpos = xsp; - if (jj_3R_125()){ - jj_scanpos = xsp; - if (jj_3R_126()) - return true; - } - } - return false; - } - - private boolean jj_3R_40(){ - if (jj_3R_59()) - return true; - return false; - } - - private boolean jj_3R_114(){ - if (jj_scan_token(RIGHT)) - return true; - return false; - } - - private boolean jj_3R_119(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_39(){ - if (jj_3R_58()) - return true; - return false; - } - - private boolean jj_3R_118(){ - if (jj_3R_142()) - return true; - return false; - } - - private boolean jj_3R_38(){ - if (jj_3R_57()) - return true; - return false; - } - - private boolean jj_3R_23(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_38()){ - jj_scanpos = xsp; - if (jj_3R_39()){ - jj_scanpos = xsp; - if (jj_3R_40()){ - jj_scanpos = xsp; - if (jj_3R_41()) - return true; - } - } - } - return false; - } - - private boolean jj_3R_201(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_14()) - return true; - return false; - } - - private boolean jj_3R_74(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_118()){ - jj_scanpos = xsp; - if (jj_3R_119()){ - jj_scanpos = xsp; - if (jj_3R_120()){ - jj_scanpos = xsp; - if (jj_3R_121()) - return true; - } - } - } - return false; - } - - private boolean jj_3R_110(){ - if (jj_scan_token(LEFT)) - return true; - return false; - } - - private boolean jj_3R_70(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_110()){ - jj_scanpos = xsp; - if (jj_3R_111()){ - jj_scanpos = xsp; - if (jj_3R_112()) - return true; - } - } - xsp = jj_scanpos; - if (jj_scan_token(25)) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_75(){ - if (jj_scan_token(COORDSYS)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_122()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_178(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_171(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_170()) - return true; - return false; - } - - private boolean jj_3R_176(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_197(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)){ - jj_scanpos = xsp; - if (jj_scan_token(9)) - return true; - } - return false; - } - - private boolean jj_3R_191(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_197()) - jj_scanpos = xsp; - if (jj_scan_token(UNSIGNED_INTEGER)) - return true; - return false; - } - - private boolean jj_3R_49(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(24)){ - jj_scanpos = xsp; - if (jj_3R_70()) - return true; - } - return false; - } - - private boolean jj_3R_141(){ - if (jj_scan_token(REGION)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_27()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_158(){ - if (jj_scan_token(POINT)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_169()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_170()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_142(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(99)){ - jj_scanpos = xsp; - if (jj_scan_token(100)){ - jj_scanpos = xsp; - if (jj_scan_token(101)) - return true; - } - } - return false; - } - - private boolean jj_3R_200(){ - if (jj_scan_token(USING)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_14()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_201()){ - jj_scanpos = xsp; - break; - } - } - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_113(){ - if (jj_scan_token(LEFT)) - return true; - return false; - } - - private boolean jj_3R_140(){ - if (jj_scan_token(POLYGON)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_169()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_170()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_170()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_170()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_171()){ - jj_scanpos = xsp; - break; - } - } - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_71(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_113()){ - jj_scanpos = xsp; - if (jj_3R_114()){ - jj_scanpos = xsp; - if (jj_3R_115()) - return true; - } - } - xsp = jj_scanpos; - if (jj_scan_token(25)) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_199(){ - if (jj_scan_token(ON)) - return true; - if (jj_3R_163()) - return true; - return false; - } - - private boolean jj_3R_139(){ - if (jj_3R_158()) - return true; - return false; - } - - private boolean jj_3R_37(){ - if (jj_scan_token(STRING_LITERAL)) - return true; - return false; - } - - private boolean jj_3R_22(){ - Token xsp; - if (jj_3R_37()) - return true; - while(true){ - xsp = jj_scanpos; - if (jj_3R_37()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_138(){ - if (jj_scan_token(CIRCLE)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_169()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_170()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_50(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(24)){ - jj_scanpos = xsp; - if (jj_3R_71()) - return true; - } - return false; - } - - private boolean jj_3R_33(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_50()) - jj_scanpos = xsp; - if (jj_scan_token(JOIN)) - return true; - if (jj_3R_51()) - return true; - xsp = jj_scanpos; - if (jj_3R_199()){ - jj_scanpos = xsp; - if (jj_3R_200()) - return true; - } - return false; - } - - private boolean jj_3R_137(){ - if (jj_scan_token(CENTROID)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_122()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_32(){ - if (jj_scan_token(NATURAL)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_49()) - jj_scanpos = xsp; - if (jj_scan_token(JOIN)) - return true; - if (jj_3R_51()) - return true; - return false; - } - - private boolean jj_3R_136(){ - if (jj_scan_token(BOX)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_169()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_170()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_108()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_192(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(22)) - jj_scanpos = xsp; - if (jj_3R_14()) - return true; - return false; - } - - private boolean jj_3R_182(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_190(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(45)){ - jj_scanpos = xsp; - if (jj_scan_token(46)) - return true; - } - return false; - } - - private boolean jj_3R_183(){ - if (jj_3R_46()) - return true; - return false; - } - - private boolean jj_3R_180(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_109(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_136()){ - jj_scanpos = xsp; - if (jj_3R_137()){ - jj_scanpos = xsp; - if (jj_3R_138()){ - jj_scanpos = xsp; - if (jj_3R_139()){ - jj_scanpos = xsp; - if (jj_3R_140()){ - jj_scanpos = xsp; - if (jj_3R_141()) - return true; - } - } - } - } - } - return false; - } - - private boolean jj_3R_181(){ - if (jj_3R_158()) - return true; - return false; - } - - private boolean jj_3R_177(){ - if (jj_3R_158()) - return true; - return false; - } - - private boolean jj_3R_175(){ - if (jj_3R_158()) - return true; - return false; - } - - private boolean jj_3R_17(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_32()){ - jj_scanpos = xsp; - if (jj_3R_33()) - return true; - } - return false; - } - - private boolean jj_3R_169(){ - if (jj_3R_27()) - return true; - return false; - } - - private boolean jj_3R_198(){ - if (jj_3R_17()) - return true; - return false; - } - - private boolean jj_3R_117(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_193()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_193(){ - if (jj_3R_72()) - return true; - Token xsp; - if (jj_3R_198()) - return true; - while(true){ - xsp = jj_scanpos; - if (jj_3R_198()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_179(){ - if (jj_3R_158()) - return true; - return false; - } - - private boolean jj_3_3(){ - if (jj_3R_17()) - return true; - return false; - } - - private boolean jj_3R_116(){ - if (jj_3R_77()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_192()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_51(){ - if (jj_3R_72()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3_3()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3_2(){ - if (jj_3R_16()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(22)) - jj_scanpos = xsp; - if (jj_3R_14()) - return true; - return false; - } - - private boolean jj_3R_105(){ - if (jj_scan_token(DISTANCE)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_179()){ - jj_scanpos = xsp; - if (jj_3R_180()) - return true; - } - if (jj_scan_token(COMMA)) - return true; - xsp = jj_scanpos; - if (jj_3R_181()){ - jj_scanpos = xsp; - if (jj_3R_182()) - return true; - } - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_104(){ - if (jj_scan_token(COORD2)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_177()){ - jj_scanpos = xsp; - if (jj_3R_178()) - return true; - } - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_103(){ - if (jj_scan_token(COORD1)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_175()){ - jj_scanpos = xsp; - if (jj_3R_176()) - return true; - } - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_102(){ - if (jj_scan_token(AREA)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_122()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_72(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_116()){ - jj_scanpos = xsp; - if (jj_3_2()){ - jj_scanpos = xsp; - if (jj_3R_117()) - return true; - } - } - return false; - } - - private boolean jj_3R_101(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(58)){ - jj_scanpos = xsp; - if (jj_scan_token(59)) - return true; - } - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_122()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_122()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_157(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_46()) - return true; - return false; - } - - private boolean jj_3R_189(){ - if (jj_3R_36()) - return true; - return false; - } - - private boolean jj_3R_166(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_189()){ - jj_scanpos = xsp; - if (jj_scan_token(101)) - return true; - } - xsp = jj_scanpos; - if (jj_3R_190()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_59(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_101()){ - jj_scanpos = xsp; - if (jj_3R_102()){ - jj_scanpos = xsp; - if (jj_3R_103()){ - jj_scanpos = xsp; - if (jj_3R_104()){ - jj_scanpos = xsp; - if (jj_3R_105()) - return true; - } - } - } - } - return false; - } - - private boolean jj_3R_160(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(47)){ - jj_scanpos = xsp; - if (jj_scan_token(48)){ - jj_scanpos = xsp; - if (jj_scan_token(49)){ - jj_scanpos = xsp; - if (jj_scan_token(50)) - return true; - } - } - } - if (jj_scan_token(LEFT_PAR)) - return true; - xsp = jj_scanpos; - if (jj_scan_token(19)) - jj_scanpos = xsp; - if (jj_3R_46()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_170(){ - if (jj_3R_108()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_108()) - return true; - return false; - } - - private boolean jj_3R_159(){ - if (jj_scan_token(COUNT)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(19)) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_scan_token(10)){ - jj_scanpos = xsp; - if (jj_3R_183()) - return true; - } - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_188(){ - if (jj_3R_36()) - return true; - return false; - } - - private boolean jj_3R_164(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_188()){ - jj_scanpos = xsp; - if (jj_scan_token(101)) - return true; - } - return false; - } - - private boolean jj_3R_56(){ - if (jj_scan_token(DOT)) - return true; - if (jj_3R_77()) - return true; - return false; - } - - private boolean jj_3R_143(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_159()){ - jj_scanpos = xsp; - if (jj_3R_160()) - return true; - } - return false; - } - - private boolean jj_3R_21(){ - if (jj_3R_36()) - return true; - return false; - } - - private boolean jj_3R_36(){ - if (jj_3R_14()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_56()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_128(){ - if (jj_scan_token(DOT)) - return true; - if (jj_3R_14()) - return true; - return false; - } - - private boolean jj_3R_127(){ - if (jj_scan_token(DOT)) - return true; - if (jj_3R_14()) - return true; - return false; - } - - private boolean jj_3R_134(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_46()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_157()){ - jj_scanpos = xsp; - break; - } - } - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3_16(){ - if (jj_3R_16()) - return true; - return false; - } - - private boolean jj_3R_107(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(35)) - jj_scanpos = xsp; - if (jj_scan_token(IN)) - return true; - xsp = jj_scanpos; - if (jj_3_16()){ - jj_scanpos = xsp; - if (jj_3R_134()) - return true; - } - return false; - } - - private boolean jj_3R_77(){ - if (jj_3R_14()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_127()) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_128()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_29(){ - if (jj_scan_token(DELIMITED_IDENTIFIER)) - return true; - return false; - } - - private boolean jj_3R_28(){ - if (jj_scan_token(REGULAR_IDENTIFIER)) - return true; - return false; - } - - private boolean jj_3R_26(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(35)) - jj_scanpos = xsp; - if (jj_scan_token(BETWEEN)) - return true; - if (jj_3R_46()) - return true; - if (jj_scan_token(AND)) - return true; - if (jj_3R_46()) - return true; - return false; - } - - private boolean jj_3R_61(){ - if (jj_3R_107()) - return true; - return false; - } - - private boolean jj_3R_14(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_28()){ - jj_scanpos = xsp; - if (jj_3R_29()) - return true; - } - return false; - } - - private boolean jj_3_13(){ - if (jj_3R_26()) - return true; - return false; - } - - private boolean jj_3_15(){ - if (jj_3R_27()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(35)) - jj_scanpos = xsp; - if (jj_scan_token(LIKE)) - return true; - return false; - } - - private boolean jj_3R_60(){ - if (jj_3R_106()) - return true; - return false; - } - - private boolean jj_3R_167(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_166()) - return true; - return false; - } - - private boolean jj_3_14(){ - if (jj_3R_21()) - return true; - if (jj_scan_token(IS)) - return true; - return false; - } - - private boolean jj_3R_106(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(12)){ - jj_scanpos = xsp; - if (jj_scan_token(13)){ - jj_scanpos = xsp; - if (jj_scan_token(14)){ - jj_scanpos = xsp; - if (jj_scan_token(15)){ - jj_scanpos = xsp; - if (jj_scan_token(16)){ - jj_scanpos = xsp; - if (jj_scan_token(17)) - return true; - } - } - } - } - } - if (jj_3R_46()) - return true; - return false; - } - - private boolean jj_3R_155(){ - if (jj_scan_token(ORDER_BY)) - return true; - if (jj_3R_166()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_167()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_154(){ - if (jj_scan_token(HAVING)) - return true; - if (jj_3R_163()) - return true; - return false; - } - - private boolean jj_3R_45(){ - if (jj_3R_46()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_60()){ - jj_scanpos = xsp; - if (jj_3_13()){ - jj_scanpos = xsp; - if (jj_3R_61()) - return true; - } - } - return false; - } - - private boolean jj_3R_44(){ - if (jj_3R_27()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(35)) - jj_scanpos = xsp; - if (jj_scan_token(LIKE)) - return true; - if (jj_3R_27()) - return true; - return false; - } - - private boolean jj_3R_165(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_164()) - return true; - return false; - } - - private boolean jj_3R_43(){ - if (jj_3R_21()) - return true; - if (jj_scan_token(IS)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(35)) - jj_scanpos = xsp; - if (jj_scan_token(NULL)) - return true; - return false; - } - - private boolean jj_3R_184(){ - if (jj_scan_token(AS)) - return true; - if (jj_3R_14()) - return true; - return false; - } - - private boolean jj_3R_153(){ - if (jj_scan_token(GROUP_BY)) - return true; - if (jj_3R_164()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_165()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3R_42(){ - if (jj_scan_token(EXISTS)) - return true; - if (jj_3R_16()) - return true; - return false; - } - - private boolean jj_3R_151(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_51()) - return true; - return false; - } - - private boolean jj_3R_152(){ - if (jj_scan_token(WHERE)) - return true; - if (jj_3R_163()) - return true; - return false; - } - - private boolean jj_3R_30(){ - if (jj_3R_14()) - return true; - if (jj_scan_token(DOT)) - return true; - return false; - } - - private boolean jj_3R_25(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_42()){ - jj_scanpos = xsp; - if (jj_3R_43()){ - jj_scanpos = xsp; - if (jj_3R_44()){ - jj_scanpos = xsp; - if (jj_3R_45()) - return true; - } - } - } - return false; - } - - private boolean jj_3R_129(){ - if (jj_scan_token(FROM)) - return true; - if (jj_3R_51()) - return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_151()){ - jj_scanpos = xsp; - break; - } - } - return false; - } - - private boolean jj_3_12(){ - if (jj_3R_25()) - return true; - return false; - } - - private boolean jj_3R_162(){ - if (jj_3R_46()) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_184()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_15(){ - if (jj_3R_14()) - return true; - if (jj_scan_token(DOT)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_30()) - jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_195(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_163()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_194(){ - if (jj_3R_25()) - return true; - return false; - } - - private boolean jj_3R_186(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_194()){ - jj_scanpos = xsp; - if (jj_3R_195()) - return true; - } - return false; - } - - private boolean jj_3R_196(){ - if (jj_scan_token(NOT)) - return true; - return false; - } - - private boolean jj_3R_187(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(33)){ - jj_scanpos = xsp; - if (jj_scan_token(34)) - return true; - } - xsp = jj_scanpos; - if (jj_3R_196()) - jj_scanpos = xsp; - if (jj_3R_186()) - return true; - return false; - } - - private boolean jj_3R_161(){ - if (jj_scan_token(ASTERISK)) - return true; - return false; - } - - private boolean jj_3_1(){ - if (jj_3R_14()) - return true; - if (jj_scan_token(DOT)) - return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_15()) - jj_scanpos = xsp; - if (jj_scan_token(ASTERISK)) - return true; - return false; - } - - /** Generated Token Manager. */ - public ADQLParserTokenManager token_source; - SimpleCharStream jj_input_stream; - /** Current token. */ - public Token token; - /** Next token. */ - public Token jj_nt; - private int jj_ntk; - private Token jj_scanpos, jj_lastpos; - private int jj_la; - private int jj_gen; - final private int[] jj_la1 = new int[98]; - static private int[] jj_la1_0; - static private int[] jj_la1_1; - static private int[] jj_la1_2; - static private int[] jj_la1_3; - static{ - jj_la1_init_0(); - jj_la1_init_1(); - jj_la1_init_2(); - jj_la1_init_3(); - } - - private static void jj_la1_init_0(){ - jj_la1_0 = new int[]{0x41,0x0,0x0,0x0,0x0,0x80000,0x100000,0x20,0x0,0x0,0x400000,0x400,0x304,0x20,0x20,0x20,0x0,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x400000,0x400000,0x400000,0x0,0x4,0x3d800000,0x1c000000,0x2000000,0x1d000000,0x1d000000,0x1c000000,0x2000000,0x1d000000,0x1d000000,0x20,0xc0000000,0x3d800000,0x0,0x0,0x0,0x300,0x300,0x4,0x4,0x0,0x304,0x300,0x300,0xc00,0xc00,0x300,0x300,0x4,0x80,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x3f000,0x0,0x0,0x304,0x3f000,0x0,0x0,0x20,0x4,0x80000,0x704,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x304,0x20,0x20,0x0,0x0,0x20,0x304,}; - } - - private static void jj_la1_init_1(){ - jj_la1_1 = new int[]{0x0,0x1,0x400,0x800,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x6000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000,0x0,0x3f00000,0x7c0f8000,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000,0x0,0x80000000,0x0,0x3f00000,0x8,0x6,0x6,0x8,0x0,0x8,0x8,0x0,0x108,0x200,0xffff8000,0x0,0x8,0x8,0x0,0x0,0x0,0xffff8000,0x78000,0x0,0xf8000,0xc000000,0x800000,0x800000,0x800000,0x800000,0x7c000000,0x0,0x3f00000,0x7c000000,0x7c0f8000,0x0,0x0,0x0,0x0,0x0,0xffff8000,}; - } - - private static void jj_la1_init_2(){ - jj_la1_2 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0xffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xffffff,0xffffff,0x0,0x0,0xfffe,0xff0000,0x0,0x20ffffff,}; - } - - private static void jj_la1_init_3(){ - jj_la1_3 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x3b,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x23,0x23,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x30,0x0,0x0,0x3b,0x3,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x2,0x3b,0x0,0x0,0x0,0x0,0x0,0x3b,}; - } - - final private JJCalls[] jj_2_rtns = new JJCalls[16]; - private boolean jj_rescan = false; - private int jj_gc = 0; - - /** Constructor with InputStream. */ - public ADQLParser(java.io.InputStream stream){ - this(stream, (String)null); - } - - /** Constructor with InputStream and supplied encoding */ - public ADQLParser(java.io.InputStream stream, String encoding){ - try{ - jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); - }catch(java.io.UnsupportedEncodingException e){ - throw new RuntimeException(e); - } - token_source = new ADQLParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for(int i = 0; i < 98; i++) - jj_la1[i] = -1; - for(int i = 0; i < jj_2_rtns.length; i++) - jj_2_rtns[i] = new JJCalls(); - } - - /** Reinitialise. */ - public void ReInit(java.io.InputStream stream){ - ReInit(stream, null); - } - - /** Reinitialise. */ - public void ReInit(java.io.InputStream stream, String encoding){ - try{ - jj_input_stream.ReInit(stream, encoding, 1, 1); - }catch(java.io.UnsupportedEncodingException e){ - throw new RuntimeException(e); - } - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for(int i = 0; i < 98; i++) - jj_la1[i] = -1; - for(int i = 0; i < jj_2_rtns.length; i++) - jj_2_rtns[i] = new JJCalls(); - } - - /** Constructor. */ - public ADQLParser(java.io.Reader stream){ - jj_input_stream = new SimpleCharStream(stream, 1, 1); - token_source = new ADQLParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for(int i = 0; i < 98; i++) - jj_la1[i] = -1; - for(int i = 0; i < jj_2_rtns.length; i++) - jj_2_rtns[i] = new JJCalls(); - } - - /** Reinitialise. */ - public void ReInit(java.io.Reader stream){ - jj_input_stream.ReInit(stream, 1, 1); - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for(int i = 0; i < 98; i++) - jj_la1[i] = -1; - for(int i = 0; i < jj_2_rtns.length; i++) - jj_2_rtns[i] = new JJCalls(); - } - - /** Constructor with generated Token Manager. */ - public ADQLParser(ADQLParserTokenManager tm){ - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for(int i = 0; i < 98; i++) - jj_la1[i] = -1; - for(int i = 0; i < jj_2_rtns.length; i++) - jj_2_rtns[i] = new JJCalls(); - } - - /** Reinitialise. */ - public void ReInit(ADQLParserTokenManager tm){ - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for(int i = 0; i < 98; i++) - jj_la1[i] = -1; - for(int i = 0; i < jj_2_rtns.length; i++) - jj_2_rtns[i] = new JJCalls(); - } - - private Token jj_consume_token(int kind) throws ParseException{ - Token oldToken; - if ((oldToken = token).next != null) - token = token.next; - else - token = token.next = token_source.getNextToken(); - jj_ntk = -1; - if (token.kind == kind){ - jj_gen++; - if (++jj_gc > 100){ - jj_gc = 0; - for(int i = 0; i < jj_2_rtns.length; i++){ - JJCalls c = jj_2_rtns[i]; - while(c != null){ - if (c.gen < jj_gen) - c.first = null; - c = c.next; - } - } - } - return token; - } - token = oldToken; - jj_kind = kind; - throw generateParseException(); - } - - static private final class LookaheadSuccess extends java.lang.Error {} - - final private LookaheadSuccess jj_ls = new LookaheadSuccess(); - - private boolean jj_scan_token(int kind){ - if (jj_scanpos == jj_lastpos){ - jj_la--; - if (jj_scanpos.next == null){ - jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); - }else{ - jj_lastpos = jj_scanpos = jj_scanpos.next; - } - }else{ - jj_scanpos = jj_scanpos.next; - } - if (jj_rescan){ - int i = 0; - Token tok = token; - while(tok != null && tok != jj_scanpos){ - i++; - tok = tok.next; - } - if (tok != null) - jj_add_error_token(kind, i); - } - if (jj_scanpos.kind != kind) - return true; - if (jj_la == 0 && jj_scanpos == jj_lastpos) - throw jj_ls; - return false; - } - - /** Get the next Token. */ - final public Token getNextToken(){ - if (token.next != null) - token = token.next; - else - token = token.next = token_source.getNextToken(); - jj_ntk = -1; - jj_gen++; - return token; - } - - /** Get the specific Token. */ - final public Token getToken(int index){ - Token t = token; - for(int i = 0; i < index; i++){ - if (t.next != null) - t = t.next; - else - t = t.next = token_source.getNextToken(); - } - return t; - } - - private int jj_ntk(){ - if ((jj_nt = token.next) == null) - return (jj_ntk = (token.next = token_source.getNextToken()).kind); - else - return (jj_ntk = jj_nt.kind); - } - - private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>(); - private int[] jj_expentry; - private int jj_kind = -1; - private int[] jj_lasttokens = new int[100]; - private int jj_endpos; - - private void jj_add_error_token(int kind, int pos){ - if (pos >= 100) - return; - if (pos == jj_endpos + 1){ - jj_lasttokens[jj_endpos++] = kind; - }else if (jj_endpos != 0){ - jj_expentry = new int[jj_endpos]; - for(int i = 0; i < jj_endpos; i++){ - jj_expentry[i] = jj_lasttokens[i]; - } - jj_entries_loop: for(java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();){ - int[] oldentry = (int[])(it.next()); - if (oldentry.length == jj_expentry.length){ - for(int i = 0; i < jj_expentry.length; i++){ - if (oldentry[i] != jj_expentry[i]){ - continue jj_entries_loop; - } - } - jj_expentries.add(jj_expentry); - break jj_entries_loop; - } - } - if (pos != 0) - jj_lasttokens[(jj_endpos = pos) - 1] = kind; - } - } - - /** Generate ParseException. */ - public ParseException generateParseException(){ - jj_expentries.clear(); - boolean[] la1tokens = new boolean[103]; - if (jj_kind >= 0){ - la1tokens[jj_kind] = true; - jj_kind = -1; - } - for(int i = 0; i < 98; i++){ - if (jj_la1[i] == jj_gen){ - for(int j = 0; j < 32; j++){ - if ((jj_la1_0[i] & (1 << j)) != 0){ - la1tokens[j] = true; - } - if ((jj_la1_1[i] & (1 << j)) != 0){ - la1tokens[32 + j] = true; - } - if ((jj_la1_2[i] & (1 << j)) != 0){ - la1tokens[64 + j] = true; - } - if ((jj_la1_3[i] & (1 << j)) != 0){ - la1tokens[96 + j] = true; - } - } - } - } - for(int i = 0; i < 103; i++){ - if (la1tokens[i]){ - jj_expentry = new int[1]; - jj_expentry[0] = i; - jj_expentries.add(jj_expentry); - } - } - jj_endpos = 0; - jj_rescan_token(); - jj_add_error_token(0, 0); - int[][] exptokseq = new int[jj_expentries.size()][]; - for(int i = 0; i < jj_expentries.size(); i++){ - exptokseq[i] = jj_expentries.get(i); - } - return new ParseException(token, exptokseq, tokenImage); - } - - /** Enable tracing. */ - final public void enable_tracing(){} - - /** Disable tracing. */ - final public void disable_tracing(){} - - private void jj_rescan_token(){ - jj_rescan = true; - for(int i = 0; i < 16; i++){ - try{ - JJCalls p = jj_2_rtns[i]; - do{ - if (p.gen > jj_gen){ - jj_la = p.arg; - jj_lastpos = jj_scanpos = p.first; - switch(i){ - case 0: - jj_3_1(); - break; - case 1: - jj_3_2(); - break; - case 2: - jj_3_3(); - break; - case 3: - jj_3_4(); - break; - case 4: - jj_3_5(); - break; - case 5: - jj_3_6(); - break; - case 6: - jj_3_7(); - break; - case 7: - jj_3_8(); - break; - case 8: - jj_3_9(); - break; - case 9: - jj_3_10(); - break; - case 10: - jj_3_11(); - break; - case 11: - jj_3_12(); - break; - case 12: - jj_3_13(); - break; - case 13: - jj_3_14(); - break; - case 14: - jj_3_15(); - break; - case 15: - jj_3_16(); - break; - } - } - p = p.next; - }while(p != null); - }catch(LookaheadSuccess ls){} - } - jj_rescan = false; - } - - private void jj_save(int index, int xla){ - JJCalls p = jj_2_rtns[index]; - while(p.gen > jj_gen){ - if (p.next == null){ - p = p.next = new JJCalls(); - break; - } - p = p.next; - } - p.gen = jj_gen + xla - jj_la; - p.first = token; - p.arg = xla; - } - - static final class JJCalls { - int gen; - Token first; - int arg; - JJCalls next; - } + public static final void main(String[] args) throws Exception { + final String USAGE = "Usage:\u005cn\u005ctadqlParser.jar [-d] [-v] [-e] [-a|-s] [<FILE>|<URL>]\u005cn\u005cnNOTE: If no file or URL is given, the ADQL query is expected in the standard input. This query must end with a ';' !\u005cn\u005cnParameters:\u005cn\u005ct-v or --verbose : Print the main steps of the parsing\u005cn\u005ct-d or --debug : Print stack traces when a grave error occurs\u005cn\u005ct-e or --explain : Explain the ADQL parsing (or Expand the parsing tree)\u005cn\u005ct-a or --adql : Display the understood ADQL query\u005cn\u005ct-s or --sql : Ask the SQL translation of the given ADQL query (SQL compatible with PostgreSQL)\u005cn\u005cnReturn:\u005cn\u005ctBy default: nothing if the query is correct. Otherwise a message explaining why the query is not correct is displayed.\u005cn\u005ctWith the -s option, the SQL translation of the given ADQL query will be returned.\u005cn\u005ctWith the -a option, the ADQL query is returned as it has been understood.\u005cn\u005cnExit status:\u005cn\u005ct0\u005ctOK !\u005cn\u005ct1\u005ctParameter error (missing or incorrect parameter)\u005cn\u005ct2\u005ctFile error (incorrect file/url, reading error, ...)\u005cn\u005ct3\u005ctParsing error (syntactic or semantic error)\u005cn\u005ct4\u005ctTranslation error (a problem has occurred during the translation of the given ADQL query in SQL)."; + + ADQLParser parser; + + final String urlRegex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; + + String file = null, metaFile = null; + short mode = -1; + boolean verbose=false, debug=false, explain=false; + + // Parameters reading: + for(int i=0; i<args.length; i++){ + if (args[i].equalsIgnoreCase("-d") || args[i].equalsIgnoreCase("--debug")) + debug = true; + else if (args[i].equalsIgnoreCase("-v") || args[i].equalsIgnoreCase("--verbose")) + verbose = true; + else if (args[i].equalsIgnoreCase("-e") || args[i].equalsIgnoreCase("--explain")) + explain = true; + else if (args[i].equalsIgnoreCase("-a") || args[i].equalsIgnoreCase("--adql")){ + if (mode != -1){ + System.err.println("((!)) Too much parameter: you must choose between -s, -c, -a or nothing ((!))\u005cn"+USAGE); + System.exit(1); + }else + mode = 1; + }else if (args[i].equalsIgnoreCase("-s") || args[i].equalsIgnoreCase("--sql")){ + if (mode != -1){ + System.err.println("((!)) Too much parameter: you must choose between -s, -c, -a or nothing ((!))\u005cn"+USAGE); + System.exit(1); + }else + mode = 2; + }else if (args[i].equalsIgnoreCase("-h") || args[i].equalsIgnoreCase("--help")){ + System.out.println(USAGE); + System.exit(0); + }else if (args[i].startsWith("-")){ + System.err.println("((!)) Unknown parameter: \u005c""+args[i]+"\u005c" ((!))\u005cn"+USAGE); + System.exit(1); + }else + file = args[i].trim(); + } + + try{ + + if (file == null || file.isEmpty()) + parser = new ADQLParser(System.in); + else if (file.matches(urlRegex)) + parser = new ADQLParser((new java.net.URL(file)).openStream()); + else + parser = new ADQLParser(new FileReader(file)); + + parser.setDebug(explain); + + // Query parsing: + try{ + if (verbose) System.out.print("((i)) Parsing ADQL query..."); + ADQLQuery q = parser.parseQuery(); + if (verbose) System.out.println("((i)) CORRECT ADQL QUERY ((i))"); + if (mode==2){ + PostgreSQLTranslator translator = new PostgreSQLTranslator(); + if (verbose) System.out.print("((i)) Translating in SQL..."); + String sql = translator.translate(q); + if (verbose) System.out.println("ok"); + System.out.println(sql); + }else if (mode==1){ + System.out.println(q.toADQL()); + } + }catch(UnresolvedIdentifiersException uie){ + System.err.println("((X)) "+uie.getNbErrors()+" unresolved identifiers:"); + for(ParseException pe : uie) + System.err.println("\u005ct - at "+pe.getPosition()+": "+uie.getMessage()); + if (debug) uie.printStackTrace(System.err); + System.exit(3); + }catch(ParseException pe){ + System.err.println("((X)) Syntax error: "+pe.getMessage()+" ((X))"); + if (debug) pe.printStackTrace(System.err); + System.exit(3); + }catch(TranslationException te){ + if (verbose) System.out.println("error"); + System.err.println("((X)) Translation error: "+te.getMessage()+" ((X))"); + if (debug) te.printStackTrace(System.err); + System.exit(4); + } + + }catch(IOException ioe){ + System.err.println("\u005cn((X)) Error while reading the file \u005c""+file+"\u005c": "+ioe.getMessage()+" ((X))"); + if (debug) ioe.printStackTrace(System.err); + System.exit(2); + } + + } + + /* ########## */ + /* # SYNTAX # */ + /* ########## */ + +/* ******************* */ +/* GENERAL ADQL SYNTAX */ +/* ******************* */ +/** +* Parses the ADQL query given at the parser creation or in the {@link ADQLParser#ReInit(java.io.InputStream)} +* or in the <i>parseQuery</i> functions. +* +* @return The object representation of the query. +* @throws ParseException If the query syntax is incorrect. +*/ + final public ADQLQuery Query() throws ParseException { + trace_call("Query"); + try { + ADQLQuery q = null; + q = QueryExpression(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 0: + jj_consume_token(0); + break; + case EOQ: + jj_consume_token(EOQ); + break; + default: + jj_la1[0] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + // check the query: + if (queryChecker != null) + queryChecker.check(q); + + {if (true) return q;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("Query"); + } + } + + final public ADQLQuery QueryExpression() throws ParseException { + trace_call("QueryExpression"); + try { + try{ + // create the query: + query = queryFactory.createQuery(); + stackQuery.push(query); + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + Select(); + From(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case WHERE: + Where(); + break; + default: + jj_la1[1] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case GROUP_BY: + GroupBy(); + break; + default: + jj_la1[2] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case HAVING: + Having(); + break; + default: + jj_la1[3] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ORDER_BY: + OrderBy(); + break; + default: + jj_la1[4] = jj_gen; + ; + } + // get the previous query (!= null if the current query is a sub-query): + ADQLQuery previousQuery = stackQuery.pop(); + if (stackQuery.isEmpty()) + query = null; + else + query = stackQuery.peek(); + + {if (true) return previousQuery;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("QueryExpression"); + } + } + + final public ADQLQuery SubQueryExpression() throws ParseException { + trace_call("SubQueryExpression"); + try { + ADQLQuery q = null; + jj_consume_token(LEFT_PAR); + q = QueryExpression(); + jj_consume_token(RIGHT_PAR); + {if (true) return q;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("SubQueryExpression"); + } + } + + final public void Select() throws ParseException { + trace_call("Select"); + try { + ClauseSelect select = query.getSelect(); SelectItem item=null; Token t = null; + jj_consume_token(SELECT); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case QUANTIFIER: + t = jj_consume_token(QUANTIFIER); + select.setDistinctColumns(t.image.equalsIgnoreCase("DISTINCT")); + break; + default: + jj_la1[5] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case TOP: + jj_consume_token(TOP); + t = jj_consume_token(UNSIGNED_INTEGER); + try{ + select.setLimit(Integer.parseInt(t.image)); + }catch(NumberFormatException nfe){ + {if (true) throw new ParseException("[l."+t.beginLine+";c."+t.beginColumn+"] The TOP limit (\u005c""+t.image+"\u005c") isn't a regular unsigned integer !");} + } + break; + default: + jj_la1[6] = jj_gen; + ; + } + item = SelectItem(); + select.add(item); + label_1: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[7] = jj_gen; + break label_1; + } + jj_consume_token(COMMA); + item = SelectItem(); + select.add(item); + } + } finally { + trace_return("Select"); + } + } + + final public SelectItem SelectItem() throws ParseException { + trace_call("SelectItem"); + try { + IdentifierItems identifiers = new IdentifierItems(true); IdentifierItem id = null, label = null; ADQLOperand op = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ASTERISK: + jj_consume_token(ASTERISK); + {if (true) return new SelectAllColumns(query);} + break; + default: + jj_la1[11] = jj_gen; + if (jj_2_1(7)) { + id = Identifier(); + jj_consume_token(DOT); + identifiers.append(id); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + id = Identifier(); + jj_consume_token(DOT); + identifiers.append(id); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + id = Identifier(); + jj_consume_token(DOT); + identifiers.append(id); + break; + default: + jj_la1[8] = jj_gen; + ; + } + break; + default: + jj_la1[9] = jj_gen; + ; + } + jj_consume_token(ASTERISK); + try{; + {if (true) return new SelectAllColumns( queryFactory.createTable(identifiers, null) );} + }catch(Exception ex) { + {if (true) throw generateParseException(ex);} + } + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + case PLUS: + case MINUS: + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + case BOX: + case CENTROID: + case CIRCLE: + case POINT: + case POLYGON: + case REGION: + case CONTAINS: + case INTERSECTS: + case AREA: + case COORD1: + case COORD2: + case COORDSYS: + case DISTANCE: + case ABS: + case CEILING: + case DEGREES: + case EXP: + case FLOOR: + case LOG: + case LOG10: + case MOD: + case PI: + case POWER: + case RADIANS: + case RAND: + case ROUND: + case SQRT: + case TRUNCATE: + case ACOS: + case ASIN: + case ATAN: + case ATAN2: + case COS: + case COT: + case SIN: + case TAN: + case STRING_LITERAL: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + op = ValueExpression(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case AS: + jj_consume_token(AS); + label = Identifier(); + break; + default: + jj_la1[10] = jj_gen; + ; + } + break; + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + try{ + SelectItem item = queryFactory.createSelectItem(op, (label==null)?null:label.identifier); + if (label != null) + item.setCaseSensitive(label.caseSensitivity); + {if (true) return item;} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("SelectItem"); + } + } + + final public void From() throws ParseException { + trace_call("From"); + try { + FromContent content = null, content2 = null; + try { + jj_consume_token(FROM); + content = TableRef(); + label_2: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[13] = jj_gen; + break label_2; + } + jj_consume_token(COMMA); + content2 = TableRef(); + content = queryFactory.createJoin(JoinType.CROSS, content, content2); + } + query.setFrom(content); + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + } finally { + trace_return("From"); + } + } + + final public void Where() throws ParseException { + trace_call("Where"); + try { + ClauseConstraints where = query.getWhere(); ADQLConstraint condition; + jj_consume_token(WHERE); + ConditionsList(where); + } finally { + trace_return("Where"); + } + } + + final public void GroupBy() throws ParseException { + trace_call("GroupBy"); + try { + ClauseADQL<ColumnReference> groupBy = query.getGroupBy(); ColumnReference colRef = null; + jj_consume_token(GROUP_BY); + colRef = ColumnRef(); + groupBy.add(colRef); + label_3: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[14] = jj_gen; + break label_3; + } + jj_consume_token(COMMA); + colRef = ColumnRef(); + groupBy.add(colRef); + } + } finally { + trace_return("GroupBy"); + } + } + + final public void Having() throws ParseException { + trace_call("Having"); + try { + ClauseConstraints having = query.getHaving(); + jj_consume_token(HAVING); + ConditionsList(having); + } finally { + trace_return("Having"); + } + } + + final public void OrderBy() throws ParseException { + trace_call("OrderBy"); + try { + ClauseADQL<ADQLOrder> orderBy = query.getOrderBy(); ADQLOrder order = null; + jj_consume_token(ORDER_BY); + order = OrderItem(); + orderBy.add(order); + label_4: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[15] = jj_gen; + break label_4; + } + jj_consume_token(COMMA); + order = OrderItem(); + orderBy.add(order); + } + } finally { + trace_return("OrderBy"); + } + } + +/* *************************** */ +/* COLUMN AND TABLE REFERENCES */ +/* *************************** */ + final public IdentifierItem Identifier() throws ParseException { + trace_call("Identifier"); + try { + Token t; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case REGULAR_IDENTIFIER: + t = jj_consume_token(REGULAR_IDENTIFIER); + {if (true) return new IdentifierItem(t, false);} + break; + case DELIMITED_IDENTIFIER: + t = jj_consume_token(DELIMITED_IDENTIFIER); + {if (true) return new IdentifierItem(t, true);} + break; + default: + jj_la1[16] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("Identifier"); + } + } + +/** + * Extracts the name of a table with its possible catalog and schema prefixes. + * + * @return A {@link IdentifierItems} which contains at most three items: catalogName, schemaName and tableName. + */ + final public IdentifierItems TableName() throws ParseException { + trace_call("TableName"); + try { + IdentifierItems identifiers=new IdentifierItems(true); IdentifierItem id=null; + id = Identifier(); + identifiers.append(id); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + jj_consume_token(DOT); + id = Identifier(); + identifiers.append(id); + break; + default: + jj_la1[17] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + jj_consume_token(DOT); + id = Identifier(); + identifiers.append(id); + break; + default: + jj_la1[18] = jj_gen; + ; + } + {if (true) return identifiers;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("TableName"); + } + } + +/** + * Extracts the name of a column with its possible catalog, schema and table prefixes. + * + * @return A {@link IdentifierItems} which contains at most four items: catalogName, schemaName, tableName and columnName. + */ + final public IdentifierItems ColumnName() throws ParseException { + trace_call("ColumnName"); + try { + IdentifierItem id; IdentifierItems table=null, identifiers=new IdentifierItems(false); + id = Identifier(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + jj_consume_token(DOT); + table = TableName(); + break; + default: + jj_la1[19] = jj_gen; + ; + } + identifiers.append(id); + if (table != null){ + for(int i=0; i<table.size(); i++) + identifiers.append(table.get(i)); + } + {if (true) return identifiers;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("ColumnName"); + } + } + + final public ADQLColumn Column() throws ParseException { + trace_call("Column"); + try { + IdentifierItems identifiers; + identifiers = ColumnName(); + try{ + {if (true) return queryFactory.createColumn(identifiers);} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("Column"); + } + } + + final public ColumnReference ColumnRef() throws ParseException { + trace_call("ColumnRef"); + try { + IdentifierItems identifiers = null; Token ind = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + identifiers = ColumnName(); + break; + case UNSIGNED_INTEGER: + ind = jj_consume_token(UNSIGNED_INTEGER); + break; + default: + jj_la1[20] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + try{ + ColumnReference colRef = null; + if (identifiers != null) + colRef = queryFactory.createColRef(identifiers); + else + colRef = queryFactory.createColRef(Integer.parseInt(ind.image), new TextPosition(ind)); + {if (true) return colRef;} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("ColumnRef"); + } + } + + final public ADQLOrder OrderItem() throws ParseException { + trace_call("OrderItem"); + try { + IdentifierItems identifiers = null; Token ind = null, desc = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + identifiers = ColumnName(); + break; + case UNSIGNED_INTEGER: + ind = jj_consume_token(UNSIGNED_INTEGER); + break; + default: + jj_la1[21] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ASC: + case DESC: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ASC: + jj_consume_token(ASC); + break; + case DESC: + desc = jj_consume_token(DESC); + break; + default: + jj_la1[22] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[23] = jj_gen; + ; + } + try{ + ADQLOrder order = null; + if (identifiers != null) + order = queryFactory.createOrder(identifiers, desc!=null); + else + order = queryFactory.createOrder(Integer.parseInt(ind.image), desc!=null, new TextPosition(ind)); + {if (true) return order;} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("OrderItem"); + } + } + + final public FromContent SimpleTableRef() throws ParseException { + trace_call("SimpleTableRef"); + try { + IdentifierItem alias = null; IdentifierItems identifiers = null; ADQLQuery subQuery = null; FromContent content = null; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + identifiers = TableName(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case AS: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case AS: + jj_consume_token(AS); + break; + default: + jj_la1[24] = jj_gen; + ; + } + alias = Identifier(); + break; + default: + jj_la1[25] = jj_gen; + ; + } + {if (true) return queryFactory.createTable(identifiers, alias);} + break; + default: + jj_la1[27] = jj_gen; + if (jj_2_2(2)) { + subQuery = SubQueryExpression(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case AS: + jj_consume_token(AS); + break; + default: + jj_la1[26] = jj_gen; + ; + } + alias = Identifier(); + {if (true) return queryFactory.createTable(subQuery, alias);} + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + jj_consume_token(LEFT_PAR); + content = JoinedTable(); + jj_consume_token(RIGHT_PAR); + {if (true) return content;} + break; + default: + jj_la1[28] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("SimpleTableRef"); + } + } + + final public FromContent TableRef() throws ParseException { + trace_call("TableRef"); + try { + FromContent content; + content = SimpleTableRef(); + label_5: + while (true) { + if (jj_2_3(2)) { + ; + } else { + break label_5; + } + content = JoinSpecification(content); + } + {if (true) return content;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("TableRef"); + } + } + + final public FromContent JoinedTable() throws ParseException { + trace_call("JoinedTable"); + try { + FromContent content; + content = SimpleTableRef(); + label_6: + while (true) { + content = JoinSpecification(content); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NATURAL: + case INNER: + case RIGHT: + case LEFT: + case FULL: + case JOIN: + ; + break; + default: + jj_la1[29] = jj_gen; + break label_6; + } + } + {if (true) return content;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("JoinedTable"); + } + } + + final public ADQLJoin JoinSpecification(FromContent leftTable) throws ParseException { + trace_call("JoinSpecification"); + try { + boolean natural = false; JoinType type = JoinType.INNER; ClauseConstraints condition = new ClauseConstraints("ON"); ArrayList<ADQLColumn> lstColumns=new ArrayList<ADQLColumn>(); IdentifierItem id; FromContent rightTable; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NATURAL: + jj_consume_token(NATURAL); + natural=true; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case INNER: + case RIGHT: + case LEFT: + case FULL: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case INNER: + jj_consume_token(INNER); + break; + case RIGHT: + case LEFT: + case FULL: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT: + jj_consume_token(LEFT); + type = JoinType.OUTER_LEFT; + break; + case RIGHT: + jj_consume_token(RIGHT); + type = JoinType.OUTER_RIGHT; + break; + case FULL: + jj_consume_token(FULL); + type = JoinType.OUTER_FULL; + break; + default: + jj_la1[30] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case OUTER: + jj_consume_token(OUTER); + break; + default: + jj_la1[31] = jj_gen; + ; + } + break; + default: + jj_la1[32] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[33] = jj_gen; + ; + } + jj_consume_token(JOIN); + rightTable = TableRef(); + {if (true) return queryFactory.createJoin(type, leftTable, rightTable);} + break; + case INNER: + case RIGHT: + case LEFT: + case FULL: + case JOIN: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case INNER: + case RIGHT: + case LEFT: + case FULL: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case INNER: + jj_consume_token(INNER); + break; + case RIGHT: + case LEFT: + case FULL: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT: + jj_consume_token(LEFT); + type = JoinType.OUTER_LEFT; + break; + case RIGHT: + jj_consume_token(RIGHT); + type = JoinType.OUTER_RIGHT; + break; + case FULL: + jj_consume_token(FULL); + type = JoinType.OUTER_FULL; + break; + default: + jj_la1[34] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case OUTER: + jj_consume_token(OUTER); + break; + default: + jj_la1[35] = jj_gen; + ; + } + break; + default: + jj_la1[36] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[37] = jj_gen; + ; + } + jj_consume_token(JOIN); + rightTable = TableRef(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ON: + jj_consume_token(ON); + ConditionsList(condition); + {if (true) return queryFactory.createJoin(type, leftTable, rightTable, condition);} + break; + case USING: + jj_consume_token(USING); + jj_consume_token(LEFT_PAR); + id = Identifier(); + lstColumns.add( queryFactory.createColumn(id) ); + label_7: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[38] = jj_gen; + break label_7; + } + jj_consume_token(COMMA); + id = Identifier(); + lstColumns.add( queryFactory.createColumn(id) ); + } + jj_consume_token(RIGHT_PAR); + {if (true) return queryFactory.createJoin(type, leftTable, rightTable, lstColumns);} + break; + default: + jj_la1[39] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[40] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("JoinSpecification"); + } + } + +/* ****** */ +/* STRING */ +/* ****** */ + final public String String() throws ParseException { + trace_call("String"); + try { + Token t; String str=""; + label_8: + while (true) { + t = jj_consume_token(STRING_LITERAL); + str += t.image.substring(1,t.image.length()-1).replaceAll("''", "'"); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STRING_LITERAL: + ; + break; + default: + jj_la1[41] = jj_gen; + break label_8; + } + } + {if (true) return str;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("String"); + } + } + +/* ************* */ +/* NUMERIC TYPES */ +/* ************* */ + final public String UnsignedNumeric() throws ParseException { + trace_call("UnsignedNumeric"); + try { + Token t; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SCIENTIFIC_NUMBER: + t = jj_consume_token(SCIENTIFIC_NUMBER); + break; + case UNSIGNED_FLOAT: + t = jj_consume_token(UNSIGNED_FLOAT); + break; + case UNSIGNED_INTEGER: + t = jj_consume_token(UNSIGNED_INTEGER); + break; + default: + jj_la1[42] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return t.image;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("UnsignedNumeric"); + } + } + + final public String UnsignedFloat() throws ParseException { + trace_call("UnsignedFloat"); + try { + Token t; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case UNSIGNED_INTEGER: + t = jj_consume_token(UNSIGNED_INTEGER); + break; + case UNSIGNED_FLOAT: + t = jj_consume_token(UNSIGNED_FLOAT); + break; + default: + jj_la1[43] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return t.image;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("UnsignedFloat"); + } + } + + final public String SignedInteger() throws ParseException { + trace_call("SignedInteger"); + try { + Token sign=null, number; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + case MINUS: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + sign = jj_consume_token(PLUS); + break; + case MINUS: + sign = jj_consume_token(MINUS); + break; + default: + jj_la1[44] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[45] = jj_gen; + ; + } + number = jj_consume_token(UNSIGNED_INTEGER); + {if (true) return ((sign==null)?"":sign.image)+number.image;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("SignedInteger"); + } + } + +/* *********** */ +/* EXPRESSIONS */ +/* *********** */ + final public ADQLOperand NumericValueExpressionPrimary() throws ParseException { + trace_call("NumericValueExpressionPrimary"); + try { + String expr; ADQLColumn column; ADQLOperand op; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + // unsigned_value_specification + expr = UnsignedNumeric(); + {if (true) return queryFactory.createNumericConstant(expr);} + break; + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + column = Column(); + column.setExpectedType('N'); {if (true) return column;} + break; + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + op = SqlFunction(); + {if (true) return op;} + break; + case LEFT_PAR: + jj_consume_token(LEFT_PAR); + op = NumericExpression(); + jj_consume_token(RIGHT_PAR); + {if (true) return queryFactory.createWrappedOperand(op);} + break; + default: + jj_la1[46] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("NumericValueExpressionPrimary"); + } + } + + final public ADQLOperand StringValueExpressionPrimary() throws ParseException { + trace_call("StringValueExpressionPrimary"); + try { + String expr; ADQLColumn column; ADQLOperand op; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STRING_LITERAL: + // string + expr = String(); + {if (true) return queryFactory.createStringConstant(expr);} + break; + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + column = Column(); + column.setExpectedType('S'); {if (true) return column;} + break; + case LEFT_PAR: + jj_consume_token(LEFT_PAR); + op = StringExpression(); + jj_consume_token(RIGHT_PAR); + {if (true) return queryFactory.createWrappedOperand(op);} + break; + default: + jj_la1[47] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("StringValueExpressionPrimary"); + } + } + + final public ADQLOperand ValueExpression() throws ParseException { + trace_call("ValueExpression"); + try { + ADQLOperand valueExpr = null; + try { + if (jj_2_4(2147483647)) { + valueExpr = NumericExpression(); + } else if (jj_2_5(2147483647)) { + valueExpr = StringExpression(); + } else if (jj_2_6(2147483647)) { + jj_consume_token(LEFT_PAR); + valueExpr = ValueExpression(); + jj_consume_token(RIGHT_PAR); + valueExpr = queryFactory.createWrappedOperand(valueExpr); + } else if (jj_2_7(2147483647)) { + valueExpr = UserDefinedFunction(); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case BOX: + case CENTROID: + case CIRCLE: + case POINT: + case POLYGON: + case REGION: + valueExpr = GeometryValueFunction(); + break; + default: + jj_la1[48] = jj_gen; + if (jj_2_8(2147483647)) { + valueExpr = Column(); + } else if (jj_2_9(2147483647)) { + valueExpr = StringFactor(); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + case PLUS: + case MINUS: + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + case CONTAINS: + case INTERSECTS: + case AREA: + case COORD1: + case COORD2: + case DISTANCE: + case ABS: + case CEILING: + case DEGREES: + case EXP: + case FLOOR: + case LOG: + case LOG10: + case MOD: + case PI: + case POWER: + case RADIANS: + case RAND: + case ROUND: + case SQRT: + case TRUNCATE: + case ACOS: + case ASIN: + case ATAN: + case ATAN2: + case COS: + case COT: + case SIN: + case TAN: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + valueExpr = Factor(); + break; + default: + jj_la1[49] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + } + {if (true) return valueExpr;} + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("ValueExpression"); + } + } + + final public ADQLOperand NumericExpression() throws ParseException { + trace_call("NumericExpression"); + try { + Token sign=null; ADQLOperand leftOp, rightOp=null; + leftOp = NumericTerm(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + case MINUS: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + sign = jj_consume_token(PLUS); + break; + case MINUS: + sign = jj_consume_token(MINUS); + break; + default: + jj_la1[50] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + rightOp = NumericExpression(); + break; + default: + jj_la1[51] = jj_gen; + ; + } + if (sign == null) + {if (true) return leftOp;} + else{ + try{ + {if (true) return queryFactory.createOperation(leftOp, OperationType.getOperator(sign.image), rightOp);} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("NumericExpression"); + } + } + + final public ADQLOperand NumericTerm() throws ParseException { + trace_call("NumericTerm"); + try { + Token sign=null; ADQLOperand leftOp, rightOp=null; + leftOp = Factor(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ASTERISK: + case DIVIDE: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ASTERISK: + sign = jj_consume_token(ASTERISK); + break; + case DIVIDE: + sign = jj_consume_token(DIVIDE); + break; + default: + jj_la1[52] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + rightOp = NumericTerm(); + break; + default: + jj_la1[53] = jj_gen; + ; + } + if (sign == null) + {if (true) return leftOp;} + else{ + try{ + {if (true) return queryFactory.createOperation(leftOp, OperationType.getOperator(sign.image), rightOp);} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("NumericTerm"); + } + } + + final public ADQLOperand Factor() throws ParseException { + trace_call("Factor"); + try { + boolean negative = false;; ADQLOperand op; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + case MINUS: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + jj_consume_token(PLUS); + break; + case MINUS: + jj_consume_token(MINUS); + negative = true; + break; + default: + jj_la1[54] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[55] = jj_gen; + ; + } + if (jj_2_10(2)) { + op = NumericFunction(); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + op = NumericValueExpressionPrimary(); + break; + default: + jj_la1[56] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + if (negative){ + try{ + op = queryFactory.createNegativeOperand(op); + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + } + + {if (true) return op;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("Factor"); + } + } + + final public ADQLOperand StringExpression() throws ParseException { + trace_call("StringExpression"); + try { + ADQLOperand leftOp; ADQLOperand rightOp = null; + leftOp = StringFactor(); + label_9: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case CONCAT: + ; + break; + default: + jj_la1[57] = jj_gen; + break label_9; + } + jj_consume_token(CONCAT); + rightOp = StringFactor(); + if (!(leftOp instanceof Concatenation)){ + try{ + ADQLOperand temp = leftOp; + leftOp = queryFactory.createConcatenation(); + ((Concatenation)leftOp).add(temp); + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + } + ((Concatenation)leftOp).add(rightOp); + } + {if (true) return leftOp;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("StringExpression"); + } + } + + final public ADQLOperand StringFactor() throws ParseException { + trace_call("StringFactor"); + try { + ADQLOperand op; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COORDSYS: + op = ExtractCoordSys(); + break; + default: + jj_la1[58] = jj_gen; + if (jj_2_11(2)) { + op = UserDefinedFunction(); + ((UserDefinedFunction)op).setExpectedType('S'); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + case STRING_LITERAL: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + op = StringValueExpressionPrimary(); + break; + default: + jj_la1[59] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + {if (true) return op;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("StringFactor"); + } + } + + final public GeometryValue<GeometryFunction> GeometryExpression() throws ParseException { + trace_call("GeometryExpression"); + try { + ADQLColumn col = null; GeometryFunction gf = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + col = Column(); + break; + case BOX: + case CENTROID: + case CIRCLE: + case POINT: + case POLYGON: + case REGION: + gf = GeometryValueFunction(); + break; + default: + jj_la1[60] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (col != null){ + col.setExpectedType('G'); + {if (true) return new GeometryValue<GeometryFunction>(col);} + }else + {if (true) return new GeometryValue<GeometryFunction>(gf);} + throw new Error("Missing return statement in function"); + } finally { + trace_return("GeometryExpression"); + } + } + +/* ********************************** */ +/* BOOLEAN EXPRESSIONS (WHERE clause) */ +/* ********************************** */ + final public ClauseConstraints ConditionsList(ClauseConstraints clause) throws ParseException { + trace_call("ConditionsList"); + try { + ADQLConstraint constraint = null; Token op = null; boolean notOp = false; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NOT: + jj_consume_token(NOT); + notOp = true; + break; + default: + jj_la1[61] = jj_gen; + ; + } + constraint = Constraint(); + if (notOp) constraint = queryFactory.createNot(constraint); + notOp = false; + if (clause instanceof ADQLConstraint) + clause.add(constraint); + else + clause.add(constraint); + label_10: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case AND: + case OR: + ; + break; + default: + jj_la1[62] = jj_gen; + break label_10; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case AND: + op = jj_consume_token(AND); + break; + case OR: + op = jj_consume_token(OR); + break; + default: + jj_la1[63] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NOT: + jj_consume_token(NOT); + notOp = true; + break; + default: + jj_la1[64] = jj_gen; + ; + } + constraint = Constraint(); + if (notOp) constraint = queryFactory.createNot(constraint); + notOp = false; + if (clause instanceof ADQLConstraint) + clause.add(op.image, constraint); + else + clause.add(op.image, constraint); + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + {if (true) return clause;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("ConditionsList"); + } + } + + final public ADQLConstraint Constraint() throws ParseException { + trace_call("Constraint"); + try { + ADQLConstraint constraint = null; + if (jj_2_12(2147483647)) { + constraint = Predicate(); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + jj_consume_token(LEFT_PAR); + try{ + constraint = queryFactory.createGroupOfConstraints(); + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + ConditionsList((ConstraintsGroup)constraint); + jj_consume_token(RIGHT_PAR); + break; + default: + jj_la1[65] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + {if (true) return constraint;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("Constraint"); + } + } + + final public ADQLConstraint Predicate() throws ParseException { + trace_call("Predicate"); + try { + ADQLQuery q=null; ADQLColumn column=null; ADQLOperand strExpr1=null, strExpr2=null; ADQLOperand op; Token notToken = null; ADQLConstraint constraint = null; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case EXISTS: + jj_consume_token(EXISTS); + q = SubQueryExpression(); + {if (true) return queryFactory.createExists(q);} + break; + default: + jj_la1[70] = jj_gen; + if (jj_2_14(2147483647)) { + column = Column(); + jj_consume_token(IS); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NOT: + notToken = jj_consume_token(NOT); + break; + default: + jj_la1[66] = jj_gen; + ; + } + jj_consume_token(NULL); + {if (true) return queryFactory.createIsNull((notToken!=null), column);} + } else if (jj_2_15(2147483647)) { + strExpr1 = StringExpression(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NOT: + notToken = jj_consume_token(NOT); + break; + default: + jj_la1[67] = jj_gen; + ; + } + jj_consume_token(LIKE); + strExpr2 = StringExpression(); + {if (true) return queryFactory.createComparison(strExpr1, (notToken==null)?ComparisonOperator.LIKE:ComparisonOperator.NOTLIKE, strExpr2);} + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + case PLUS: + case MINUS: + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + case BOX: + case CENTROID: + case CIRCLE: + case POINT: + case POLYGON: + case REGION: + case CONTAINS: + case INTERSECTS: + case AREA: + case COORD1: + case COORD2: + case COORDSYS: + case DISTANCE: + case ABS: + case CEILING: + case DEGREES: + case EXP: + case FLOOR: + case LOG: + case LOG10: + case MOD: + case PI: + case POWER: + case RADIANS: + case RAND: + case ROUND: + case SQRT: + case TRUNCATE: + case ACOS: + case ASIN: + case ATAN: + case ATAN2: + case COS: + case COT: + case SIN: + case TAN: + case STRING_LITERAL: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + op = ValueExpression(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case EQUAL: + case NOT_EQUAL: + case LESS_THAN: + case LESS_EQUAL_THAN: + case GREATER_THAN: + case GREATER_EQUAL_THAN: + constraint = ComparisonEnd(op); + break; + default: + jj_la1[68] = jj_gen; + if (jj_2_13(2)) { + constraint = BetweenEnd(op); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NOT: + case IN: + constraint = InEnd(op); + break; + default: + jj_la1[69] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + break; + default: + jj_la1[71] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + {if (true) return constraint;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("Predicate"); + } + } + + final public Comparison ComparisonEnd(ADQLOperand leftOp) throws ParseException { + trace_call("ComparisonEnd"); + try { + Token comp; ADQLOperand rightOp; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case EQUAL: + comp = jj_consume_token(EQUAL); + break; + case NOT_EQUAL: + comp = jj_consume_token(NOT_EQUAL); + break; + case LESS_THAN: + comp = jj_consume_token(LESS_THAN); + break; + case LESS_EQUAL_THAN: + comp = jj_consume_token(LESS_EQUAL_THAN); + break; + case GREATER_THAN: + comp = jj_consume_token(GREATER_THAN); + break; + case GREATER_EQUAL_THAN: + comp = jj_consume_token(GREATER_EQUAL_THAN); + break; + default: + jj_la1[72] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + rightOp = ValueExpression(); + try{ + {if (true) return queryFactory.createComparison(leftOp, ComparisonOperator.getOperator(comp.image), rightOp);} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("ComparisonEnd"); + } + } + + final public Between BetweenEnd(ADQLOperand leftOp) throws ParseException { + trace_call("BetweenEnd"); + try { + Token notToken=null; ADQLOperand min, max; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NOT: + notToken = jj_consume_token(NOT); + break; + default: + jj_la1[73] = jj_gen; + ; + } + jj_consume_token(BETWEEN); + min = ValueExpression(); + jj_consume_token(AND); + max = ValueExpression(); + try{ + {if (true) return queryFactory.createBetween((notToken!=null), leftOp, min, max);} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("BetweenEnd"); + } + } + + final public In InEnd(ADQLOperand leftOp) throws ParseException { + trace_call("InEnd"); + try { + Token not=null; ADQLQuery q = null; ADQLOperand item; Vector<ADQLOperand> items = new Vector<ADQLOperand>(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NOT: + not = jj_consume_token(NOT); + break; + default: + jj_la1[74] = jj_gen; + ; + } + jj_consume_token(IN); + if (jj_2_16(2)) { + q = SubQueryExpression(); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + jj_consume_token(LEFT_PAR); + item = ValueExpression(); + items.add(item); + label_11: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[75] = jj_gen; + break label_11; + } + jj_consume_token(COMMA); + item = ValueExpression(); + items.add(item); + } + jj_consume_token(RIGHT_PAR); + break; + default: + jj_la1[76] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + try{ + if (q != null) + {if (true) return queryFactory.createIn(leftOp, q, not!=null);} + else{ + ADQLOperand[] list = new ADQLOperand[items.size()]; + int i=0; + for(ADQLOperand op : items) + list[i++] = op; + {if (true) return queryFactory.createIn(leftOp, list, not!=null);} + } + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("InEnd"); + } + } + +/* ************* */ +/* SQL FUNCTIONS */ +/* ************* */ + final public SQLFunction SqlFunction() throws ParseException { + trace_call("SqlFunction"); + try { + Token fct, all=null, distinct=null; ADQLOperand op=null; SQLFunction funct = null; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COUNT: + jj_consume_token(COUNT); + jj_consume_token(LEFT_PAR); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case QUANTIFIER: + distinct = jj_consume_token(QUANTIFIER); + break; + default: + jj_la1[77] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ASTERISK: + all = jj_consume_token(ASTERISK); + break; + case LEFT_PAR: + case PLUS: + case MINUS: + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + case BOX: + case CENTROID: + case CIRCLE: + case POINT: + case POLYGON: + case REGION: + case CONTAINS: + case INTERSECTS: + case AREA: + case COORD1: + case COORD2: + case COORDSYS: + case DISTANCE: + case ABS: + case CEILING: + case DEGREES: + case EXP: + case FLOOR: + case LOG: + case LOG10: + case MOD: + case PI: + case POWER: + case RADIANS: + case RAND: + case ROUND: + case SQRT: + case TRUNCATE: + case ACOS: + case ASIN: + case ATAN: + case ATAN2: + case COS: + case COT: + case SIN: + case TAN: + case STRING_LITERAL: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + op = ValueExpression(); + break; + default: + jj_la1[78] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(RIGHT_PAR); + funct = queryFactory.createSQLFunction((all!=null)?SQLFunctionType.COUNT_ALL:SQLFunctionType.COUNT, op, distinct != null && distinct.image.equalsIgnoreCase("distinct")); + break; + case AVG: + case MAX: + case MIN: + case SUM: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case AVG: + fct = jj_consume_token(AVG); + break; + case MAX: + fct = jj_consume_token(MAX); + break; + case MIN: + fct = jj_consume_token(MIN); + break; + case SUM: + fct = jj_consume_token(SUM); + break; + default: + jj_la1[79] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(LEFT_PAR); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case QUANTIFIER: + distinct = jj_consume_token(QUANTIFIER); + break; + default: + jj_la1[80] = jj_gen; + ; + } + op = ValueExpression(); + jj_consume_token(RIGHT_PAR); + funct = queryFactory.createSQLFunction(SQLFunctionType.valueOf(fct.image.toUpperCase()), op, distinct != null && distinct.image.equalsIgnoreCase("distinct")); + break; + default: + jj_la1[81] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + {if (true) return funct;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("SqlFunction"); + } + } + +/* ************** */ +/* ADQL FUNCTIONS */ +/* ************** */ + final public ADQLOperand[] Coordinates() throws ParseException { + trace_call("Coordinates"); + try { + ADQLOperand[] ops = new ADQLOperand[2]; + ops[0] = NumericExpression(); + jj_consume_token(COMMA); + ops[1] = NumericExpression(); + {if (true) return ops;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("Coordinates"); + } + } + + final public GeometryFunction GeometryFunction() throws ParseException { + trace_call("GeometryFunction"); + try { + Token t=null; GeometryValue<GeometryFunction> gvf1, gvf2; GeometryValue<PointFunction> gvp1, gvp2; GeometryFunction gf = null; PointFunction p1=null, p2=null; ADQLColumn col1 = null, col2 = null; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case CONTAINS: + case INTERSECTS: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case CONTAINS: + t = jj_consume_token(CONTAINS); + break; + case INTERSECTS: + t = jj_consume_token(INTERSECTS); + break; + default: + jj_la1[82] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(LEFT_PAR); + gvf1 = GeometryExpression(); + jj_consume_token(COMMA); + gvf2 = GeometryExpression(); + jj_consume_token(RIGHT_PAR); + if (t.image.equalsIgnoreCase("contains")) + gf = queryFactory.createContains(gvf1, gvf2); + else + gf = queryFactory.createIntersects(gvf1, gvf2); + break; + case AREA: + jj_consume_token(AREA); + jj_consume_token(LEFT_PAR); + gvf1 = GeometryExpression(); + jj_consume_token(RIGHT_PAR); + gf = queryFactory.createArea(gvf1); + break; + case COORD1: + jj_consume_token(COORD1); + jj_consume_token(LEFT_PAR); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case POINT: + p1 = Point(); + gf = queryFactory.createCoord1(p1); + break; + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + col1 = Column(); + col1.setExpectedType('G'); gf = queryFactory.createCoord1(col1); + break; + default: + jj_la1[83] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(RIGHT_PAR); + break; + case COORD2: + jj_consume_token(COORD2); + jj_consume_token(LEFT_PAR); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case POINT: + p1 = Point(); + gf = queryFactory.createCoord2(p1); + break; + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + col1 = Column(); + col1.setExpectedType('G'); gf = queryFactory.createCoord2(col1); + break; + default: + jj_la1[84] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(RIGHT_PAR); + break; + case DISTANCE: + jj_consume_token(DISTANCE); + jj_consume_token(LEFT_PAR); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case POINT: + p1 = Point(); + break; + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + col1 = Column(); + break; + default: + jj_la1[85] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (p1 != null) + gvp1 = new GeometryValue<PointFunction>(p1); + else{ + col1.setExpectedType('G'); + gvp1 = new GeometryValue<PointFunction>(col1); + } + jj_consume_token(COMMA); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case POINT: + p2 = Point(); + break; + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + col2 = Column(); + break; + default: + jj_la1[86] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (p2 != null) + gvp2 = new GeometryValue<PointFunction>(p2); + else{ + col2.setExpectedType('G'); + gvp2 = new GeometryValue<PointFunction>(col2); + } + jj_consume_token(RIGHT_PAR); + gf = queryFactory.createDistance(gvp1, gvp2); + break; + default: + jj_la1[87] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + {if (true) return gf;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("GeometryFunction"); + } + } + + final public ADQLOperand CoordinateSystem() throws ParseException { + trace_call("CoordinateSystem"); + try { + ADQLOperand coordSys=null; + coordSys = StringExpression(); + {if (true) return coordSys;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("CoordinateSystem"); + } + } + + final public GeometryFunction GeometryValueFunction() throws ParseException { + trace_call("GeometryValueFunction"); + try { + ADQLOperand coordSys; ADQLOperand width, height; ADQLOperand[] coords, tmp; Vector<ADQLOperand> vCoords; ADQLOperand op=null; GeometryValue<GeometryFunction> gvf = null; GeometryFunction gf = null; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case BOX: + jj_consume_token(BOX); + jj_consume_token(LEFT_PAR); + coordSys = CoordinateSystem(); + jj_consume_token(COMMA); + coords = Coordinates(); + jj_consume_token(COMMA); + width = NumericExpression(); + jj_consume_token(COMMA); + height = NumericExpression(); + jj_consume_token(RIGHT_PAR); + gf = queryFactory.createBox(coordSys, coords[0], coords[1], width, height); + break; + case CENTROID: + jj_consume_token(CENTROID); + jj_consume_token(LEFT_PAR); + gvf = GeometryExpression(); + jj_consume_token(RIGHT_PAR); + gf = queryFactory.createCentroid(gvf); + break; + case CIRCLE: + jj_consume_token(CIRCLE); + jj_consume_token(LEFT_PAR); + coordSys = CoordinateSystem(); + jj_consume_token(COMMA); + coords = Coordinates(); + jj_consume_token(COMMA); + width = NumericExpression(); + jj_consume_token(RIGHT_PAR); + gf = queryFactory.createCircle(coordSys, coords[0], coords[1], width); + break; + case POINT: + gf = Point(); + break; + case POLYGON: + jj_consume_token(POLYGON); + jj_consume_token(LEFT_PAR); + coordSys = CoordinateSystem(); + vCoords = new Vector<ADQLOperand>(); + jj_consume_token(COMMA); + tmp = Coordinates(); + vCoords.add(tmp[0]); vCoords.add(tmp[1]); + jj_consume_token(COMMA); + tmp = Coordinates(); + vCoords.add(tmp[0]); vCoords.add(tmp[1]); + jj_consume_token(COMMA); + tmp = Coordinates(); + vCoords.add(tmp[0]); vCoords.add(tmp[1]); + label_12: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[88] = jj_gen; + break label_12; + } + jj_consume_token(COMMA); + tmp = Coordinates(); + vCoords.add(tmp[0]); vCoords.add(tmp[1]); + } + jj_consume_token(RIGHT_PAR); + gf = queryFactory.createPolygon(coordSys, vCoords); + break; + case REGION: + jj_consume_token(REGION); + jj_consume_token(LEFT_PAR); + op = StringExpression(); + jj_consume_token(RIGHT_PAR); + gf = queryFactory.createRegion(op); + break; + default: + jj_la1[89] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + {if (true) return gf;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("GeometryValueFunction"); + } + } + + final public PointFunction Point() throws ParseException { + trace_call("Point"); + try { + ADQLOperand coordSys; ADQLOperand[] coords; + jj_consume_token(POINT); + jj_consume_token(LEFT_PAR); + coordSys = CoordinateSystem(); + jj_consume_token(COMMA); + coords = Coordinates(); + jj_consume_token(RIGHT_PAR); + try{ + {if (true) return queryFactory.createPoint(coordSys, coords[0], coords[1]);} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("Point"); + } + } + + final public GeometryFunction ExtractCoordSys() throws ParseException { + trace_call("ExtractCoordSys"); + try { + GeometryValue<GeometryFunction> gvf; + jj_consume_token(COORDSYS); + jj_consume_token(LEFT_PAR); + gvf = GeometryExpression(); + jj_consume_token(RIGHT_PAR); + try{ + {if (true) return queryFactory.createExtractCoordSys(gvf);} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("ExtractCoordSys"); + } + } + +/* ***************** */ +/* NUMERIC FUNCTIONS */ +/* ***************** */ + final public ADQLFunction NumericFunction() throws ParseException { + trace_call("NumericFunction"); + try { + ADQLFunction fct; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ABS: + case CEILING: + case DEGREES: + case EXP: + case FLOOR: + case LOG: + case LOG10: + case MOD: + case PI: + case POWER: + case RADIANS: + case RAND: + case ROUND: + case SQRT: + case TRUNCATE: + fct = MathFunction(); + break; + case ACOS: + case ASIN: + case ATAN: + case ATAN2: + case COS: + case COT: + case SIN: + case TAN: + fct = TrigFunction(); + break; + case CONTAINS: + case INTERSECTS: + case AREA: + case COORD1: + case COORD2: + case DISTANCE: + fct = GeometryFunction(); + break; + case REGULAR_IDENTIFIER: + fct = UserDefinedFunction(); + ((UserDefinedFunction)fct).setExpectedType('N'); + break; + default: + jj_la1[90] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return fct;} + throw new Error("Missing return statement in function"); + } finally { + trace_return("NumericFunction"); + } + } + + final public MathFunction MathFunction() throws ParseException { + trace_call("MathFunction"); + try { + Token fct=null; ADQLOperand param1=null, param2=null; String integerValue = null; + try { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ABS: + fct = jj_consume_token(ABS); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case CEILING: + fct = jj_consume_token(CEILING); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case DEGREES: + fct = jj_consume_token(DEGREES); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case EXP: + fct = jj_consume_token(EXP); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case FLOOR: + fct = jj_consume_token(FLOOR); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case LOG: + fct = jj_consume_token(LOG); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case LOG10: + fct = jj_consume_token(LOG10); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case MOD: + fct = jj_consume_token(MOD); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(COMMA); + param2 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case PI: + fct = jj_consume_token(PI); + jj_consume_token(LEFT_PAR); + jj_consume_token(RIGHT_PAR); + break; + case POWER: + fct = jj_consume_token(POWER); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(COMMA); + param2 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case RADIANS: + fct = jj_consume_token(RADIANS); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case RAND: + fct = jj_consume_token(RAND); + jj_consume_token(LEFT_PAR); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + case PLUS: + case MINUS: + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + case CONTAINS: + case INTERSECTS: + case AREA: + case COORD1: + case COORD2: + case DISTANCE: + case ABS: + case CEILING: + case DEGREES: + case EXP: + case FLOOR: + case LOG: + case LOG10: + case MOD: + case PI: + case POWER: + case RADIANS: + case RAND: + case ROUND: + case SQRT: + case TRUNCATE: + case ACOS: + case ASIN: + case ATAN: + case ATAN2: + case COS: + case COT: + case SIN: + case TAN: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + param1 = NumericExpression(); + break; + default: + jj_la1[91] = jj_gen; + ; + } + jj_consume_token(RIGHT_PAR); + break; + case ROUND: + fct = jj_consume_token(ROUND); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + integerValue = SignedInteger(); + param2 = queryFactory.createNumericConstant(integerValue); + break; + default: + jj_la1[92] = jj_gen; + ; + } + jj_consume_token(RIGHT_PAR); + break; + case SQRT: + fct = jj_consume_token(SQRT); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case TRUNCATE: + fct = jj_consume_token(TRUNCATE); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + integerValue = SignedInteger(); + param2 = queryFactory.createNumericConstant(integerValue); + break; + default: + jj_la1[93] = jj_gen; + ; + } + jj_consume_token(RIGHT_PAR); + break; + default: + jj_la1[94] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (param1 != null) + {if (true) return queryFactory.createMathFunction(MathFunctionType.valueOf(fct.image.toUpperCase()), param1, param2);} + else + {if (true) return null;} + } catch (Exception ex) { + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("MathFunction"); + } + } + + final public MathFunction TrigFunction() throws ParseException { + trace_call("TrigFunction"); + try { + Token fct=null; ADQLOperand param1=null, param2=null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ACOS: + fct = jj_consume_token(ACOS); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case ASIN: + fct = jj_consume_token(ASIN); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case ATAN: + fct = jj_consume_token(ATAN); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case ATAN2: + fct = jj_consume_token(ATAN2); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(COMMA); + param2 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case COS: + fct = jj_consume_token(COS); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case COT: + fct = jj_consume_token(COT); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case SIN: + fct = jj_consume_token(SIN); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + case TAN: + fct = jj_consume_token(TAN); + jj_consume_token(LEFT_PAR); + param1 = NumericExpression(); + jj_consume_token(RIGHT_PAR); + break; + default: + jj_la1[95] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + try{ + if (param1 != null) + {if (true) return queryFactory.createMathFunction(MathFunctionType.valueOf(fct.image.toUpperCase()), param1, param2);} + else + {if (true) return null;} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("TrigFunction"); + } + } + + final public UserDefinedFunction UserDefinedFunction() throws ParseException { + trace_call("UserDefinedFunction"); + try { + Token fct; Vector<ADQLOperand> params = new Vector<ADQLOperand>(); ADQLOperand op; + fct = jj_consume_token(REGULAR_IDENTIFIER); + jj_consume_token(LEFT_PAR); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case LEFT_PAR: + case PLUS: + case MINUS: + case AVG: + case MAX: + case MIN: + case SUM: + case COUNT: + case BOX: + case CENTROID: + case CIRCLE: + case POINT: + case POLYGON: + case REGION: + case CONTAINS: + case INTERSECTS: + case AREA: + case COORD1: + case COORD2: + case COORDSYS: + case DISTANCE: + case ABS: + case CEILING: + case DEGREES: + case EXP: + case FLOOR: + case LOG: + case LOG10: + case MOD: + case PI: + case POWER: + case RADIANS: + case RAND: + case ROUND: + case SQRT: + case TRUNCATE: + case ACOS: + case ASIN: + case ATAN: + case ATAN2: + case COS: + case COT: + case SIN: + case TAN: + case STRING_LITERAL: + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER: + case SCIENTIFIC_NUMBER: + case UNSIGNED_FLOAT: + case UNSIGNED_INTEGER: + op = ValueExpression(); + params.add(op); + label_13: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[96] = jj_gen; + break label_13; + } + jj_consume_token(COMMA); + op = ValueExpression(); + params.add(op); + } + break; + default: + jj_la1[97] = jj_gen; + ; + } + jj_consume_token(RIGHT_PAR); + //System.out.println("INFO [ADQLParser]: \""+fct.image+"\" (from line "+fct.beginLine+" and column "+fct.beginColumn+" to line "+token.endLine+" and column "+(token.endColumn+1)+") is considered as an user defined function !"); + try{ + // Build the parameters list: + ADQLOperand[] parameters = new ADQLOperand[params.size()]; + for(int i=0; i<params.size(); i++) + parameters[i] = params.get(i); + + // Create the UDF function: + {if (true) return queryFactory.createUserDefinedFunction(fct.image, parameters);} + }catch(UnsupportedOperationException uoe){ + /* This catch clause is just for backward compatibility: + * if the createUserDefinedFunction(...) is overridden and + * the function can not be identified a such exception may be thrown). */ + {if (true) throw new ParseException(uoe.getMessage(), new TextPosition(fct, token));} + }catch(Exception ex){ + {if (true) throw generateParseException(ex);} + } + throw new Error("Missing return statement in function"); + } finally { + trace_return("UserDefinedFunction"); + } + } + + private boolean jj_2_1(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_1(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(0, xla); } + } + + private boolean jj_2_2(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_2(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(1, xla); } + } + + private boolean jj_2_3(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_3(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(2, xla); } + } + + private boolean jj_2_4(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_4(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(3, xla); } + } + + private boolean jj_2_5(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_5(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(4, xla); } + } + + private boolean jj_2_6(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_6(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(5, xla); } + } + + private boolean jj_2_7(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_7(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(6, xla); } + } + + private boolean jj_2_8(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_8(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(7, xla); } + } + + private boolean jj_2_9(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_9(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(8, xla); } + } + + private boolean jj_2_10(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_10(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(9, xla); } + } + + private boolean jj_2_11(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_11(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(10, xla); } + } + + private boolean jj_2_12(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_12(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(11, xla); } + } + + private boolean jj_2_13(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_13(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(12, xla); } + } + + private boolean jj_2_14(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_14(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(13, xla); } + } + + private boolean jj_2_15(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_15(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(14, xla); } + } + + private boolean jj_2_16(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_16(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(15, xla); } + } + + private boolean jj_3R_145() { + if (jj_3R_109()) return true; + return false; + } + + private boolean jj_3R_163() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_185()) jj_scanpos = xsp; + if (jj_3R_186()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_187()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_148() { + if (jj_scan_token(TOP)) return true; + if (jj_scan_token(UNSIGNED_INTEGER)) return true; + return false; + } + + private boolean jj_3R_147() { + if (jj_scan_token(QUANTIFIER)) return true; + return false; + } + + private boolean jj_3R_48() { + if (jj_scan_token(SELECT)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_147()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_148()) jj_scanpos = xsp; + if (jj_3R_149()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_150()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_144() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_16() { + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_31()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_53() { + if (jj_3R_74()) return true; + return false; + } + + private boolean jj_3R_122() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_144()) { + jj_scanpos = xsp; + if (jj_3R_145()) return true; + } + return false; + } + + private boolean jj_3R_55() { + if (jj_3R_76()) return true; + return false; + } + + private boolean jj_3_11() { + if (jj_3R_24()) return true; + return false; + } + + private boolean jj_3R_54() { + if (jj_3R_75()) return true; + return false; + } + + private boolean jj_3R_35() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_54()) { + jj_scanpos = xsp; + if (jj_3_11()) { + jj_scanpos = xsp; + if (jj_3R_55()) return true; + } + } + return false; + } + + private boolean jj_3R_133() { + if (jj_3R_155()) return true; + return false; + } + + private boolean jj_3R_132() { + if (jj_3R_154()) return true; + return false; + } + + private boolean jj_3R_131() { + if (jj_3R_153()) return true; + return false; + } + + private boolean jj_3R_130() { + if (jj_3R_152()) return true; + return false; + } + + private boolean jj_3R_123() { + if (jj_3R_46()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_146()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_47() { + if (jj_scan_token(CONCAT)) return true; + if (jj_3R_35()) return true; + return false; + } + + private boolean jj_3R_174() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_191()) return true; + return false; + } + + private boolean jj_3R_173() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_191()) return true; + return false; + } + + private boolean jj_3R_31() { + if (jj_3R_48()) return true; + if (jj_3R_129()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_130()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_131()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_132()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_133()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_27() { + if (jj_3R_35()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_47()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_73() { + if (jj_scan_token(MINUS)) return true; + return false; + } + + private boolean jj_3_10() { + if (jj_3R_23()) return true; + return false; + } + + private boolean jj_3R_52() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(8)) { + jj_scanpos = xsp; + if (jj_3R_73()) return true; + } + return false; + } + + private boolean jj_3R_168() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(10)) { + jj_scanpos = xsp; + if (jj_scan_token(11)) return true; + } + if (jj_3R_135()) return true; + return false; + } + + private boolean jj_3R_112() { + if (jj_scan_token(FULL)) return true; + return false; + } + + private boolean jj_3R_34() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_52()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3_10()) { + jj_scanpos = xsp; + if (jj_3R_53()) return true; + } + return false; + } + + private boolean jj_3R_24() { + if (jj_scan_token(REGULAR_IDENTIFIER)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_123()) jj_scanpos = xsp; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_156() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(8)) { + jj_scanpos = xsp; + if (jj_scan_token(9)) return true; + } + if (jj_3R_108()) return true; + return false; + } + + private boolean jj_3R_19() { + if (jj_3R_34()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(8)) { + jj_scanpos = xsp; + if (jj_scan_token(9)) { + jj_scanpos = xsp; + if (jj_scan_token(10)) { + jj_scanpos = xsp; + if (jj_scan_token(11)) return true; + } + } + } + return false; + } + + private boolean jj_3R_172() { + if (jj_3R_108()) return true; + return false; + } + + private boolean jj_3R_20() { + if (jj_3R_35()) return true; + if (jj_scan_token(CONCAT)) return true; + return false; + } + + private boolean jj_3R_135() { + if (jj_3R_34()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_168()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_100() { + if (jj_scan_token(TAN)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_9() { + if (jj_3R_22()) return true; + return false; + } + + private boolean jj_3R_99() { + if (jj_scan_token(SIN)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_8() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_98() { + if (jj_scan_token(COT)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_115() { + if (jj_scan_token(FULL)) return true; + return false; + } + + private boolean jj_3R_97() { + if (jj_scan_token(COS)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_7() { + if (jj_scan_token(REGULAR_IDENTIFIER)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + return false; + } + + private boolean jj_3R_96() { + if (jj_scan_token(ATAN2)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_6() { + if (jj_scan_token(LEFT_PAR)) return true; + return false; + } + + private boolean jj_3R_95() { + if (jj_scan_token(ATAN)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_5() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(63)) { + jj_scanpos = xsp; + if (jj_3R_20()) return true; + } + return false; + } + + private boolean jj_3R_94() { + if (jj_scan_token(ASIN)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_4() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_18()) { + jj_scanpos = xsp; + if (jj_3R_19()) return true; + } + return false; + } + + private boolean jj_3R_18() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(8)) { + jj_scanpos = xsp; + if (jj_scan_token(9)) return true; + } + return false; + } + + private boolean jj_3R_93() { + if (jj_scan_token(ACOS)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_58() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_93()) { + jj_scanpos = xsp; + if (jj_3R_94()) { + jj_scanpos = xsp; + if (jj_3R_95()) { + jj_scanpos = xsp; + if (jj_3R_96()) { + jj_scanpos = xsp; + if (jj_3R_97()) { + jj_scanpos = xsp; + if (jj_3R_98()) { + jj_scanpos = xsp; + if (jj_3R_99()) { + jj_scanpos = xsp; + if (jj_3R_100()) return true; + } + } + } + } + } + } + } + return false; + } + + private boolean jj_3R_69() { + if (jj_3R_34()) return true; + return false; + } + + private boolean jj_3R_68() { + if (jj_3R_35()) return true; + return false; + } + + private boolean jj_3R_67() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_108() { + if (jj_3R_135()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_156()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_92() { + if (jj_scan_token(TRUNCATE)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_174()) jj_scanpos = xsp; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_66() { + if (jj_3R_109()) return true; + return false; + } + + private boolean jj_3R_91() { + if (jj_scan_token(SQRT)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_65() { + if (jj_3R_24()) return true; + return false; + } + + private boolean jj_3R_90() { + if (jj_scan_token(ROUND)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_173()) jj_scanpos = xsp; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_64() { + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_46()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_89() { + if (jj_scan_token(RAND)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_172()) jj_scanpos = xsp; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_63() { + if (jj_3R_27()) return true; + return false; + } + + private boolean jj_3R_88() { + if (jj_scan_token(RADIANS)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_87() { + if (jj_scan_token(POWER)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_62() { + if (jj_3R_108()) return true; + return false; + } + + private boolean jj_3R_86() { + if (jj_scan_token(PI)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_111() { + if (jj_scan_token(RIGHT)) return true; + return false; + } + + private boolean jj_3R_85() { + if (jj_scan_token(MOD)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_84() { + if (jj_scan_token(LOG10)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_83() { + if (jj_scan_token(LOG)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_82() { + if (jj_scan_token(FLOOR)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_81() { + if (jj_scan_token(EXP)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_80() { + if (jj_scan_token(DEGREES)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_126() { + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_27()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_79() { + if (jj_scan_token(CEILING)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_125() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_78() { + if (jj_scan_token(ABS)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_46() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_62()) { + jj_scanpos = xsp; + if (jj_3R_63()) { + jj_scanpos = xsp; + if (jj_3R_64()) { + jj_scanpos = xsp; + if (jj_3R_65()) { + jj_scanpos = xsp; + if (jj_3R_66()) { + jj_scanpos = xsp; + if (jj_3R_67()) { + jj_scanpos = xsp; + if (jj_3R_68()) { + jj_scanpos = xsp; + if (jj_3R_69()) return true; + } + } + } + } + } + } + } + return false; + } + + private boolean jj_3R_124() { + if (jj_3R_22()) return true; + return false; + } + + private boolean jj_3R_57() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_78()) { + jj_scanpos = xsp; + if (jj_3R_79()) { + jj_scanpos = xsp; + if (jj_3R_80()) { + jj_scanpos = xsp; + if (jj_3R_81()) { + jj_scanpos = xsp; + if (jj_3R_82()) { + jj_scanpos = xsp; + if (jj_3R_83()) { + jj_scanpos = xsp; + if (jj_3R_84()) { + jj_scanpos = xsp; + if (jj_3R_85()) { + jj_scanpos = xsp; + if (jj_3R_86()) { + jj_scanpos = xsp; + if (jj_3R_87()) { + jj_scanpos = xsp; + if (jj_3R_88()) { + jj_scanpos = xsp; + if (jj_3R_89()) { + jj_scanpos = xsp; + if (jj_3R_90()) { + jj_scanpos = xsp; + if (jj_3R_91()) { + jj_scanpos = xsp; + if (jj_3R_92()) return true; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + private boolean jj_3R_121() { + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_120() { + if (jj_3R_143()) return true; + return false; + } + + private boolean jj_3R_41() { + if (jj_3R_24()) return true; + return false; + } + + private boolean jj_3R_76() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_124()) { + jj_scanpos = xsp; + if (jj_3R_125()) { + jj_scanpos = xsp; + if (jj_3R_126()) return true; + } + } + return false; + } + + private boolean jj_3R_40() { + if (jj_3R_59()) return true; + return false; + } + + private boolean jj_3R_114() { + if (jj_scan_token(RIGHT)) return true; + return false; + } + + private boolean jj_3R_119() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_39() { + if (jj_3R_58()) return true; + return false; + } + + private boolean jj_3R_118() { + if (jj_3R_142()) return true; + return false; + } + + private boolean jj_3R_38() { + if (jj_3R_57()) return true; + return false; + } + + private boolean jj_3R_23() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_38()) { + jj_scanpos = xsp; + if (jj_3R_39()) { + jj_scanpos = xsp; + if (jj_3R_40()) { + jj_scanpos = xsp; + if (jj_3R_41()) return true; + } + } + } + return false; + } + + private boolean jj_3R_201() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_14()) return true; + return false; + } + + private boolean jj_3R_74() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_118()) { + jj_scanpos = xsp; + if (jj_3R_119()) { + jj_scanpos = xsp; + if (jj_3R_120()) { + jj_scanpos = xsp; + if (jj_3R_121()) return true; + } + } + } + return false; + } + + private boolean jj_3R_110() { + if (jj_scan_token(LEFT)) return true; + return false; + } + + private boolean jj_3R_70() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_110()) { + jj_scanpos = xsp; + if (jj_3R_111()) { + jj_scanpos = xsp; + if (jj_3R_112()) return true; + } + } + xsp = jj_scanpos; + if (jj_scan_token(25)) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_75() { + if (jj_scan_token(COORDSYS)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_122()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_178() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_171() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_170()) return true; + return false; + } + + private boolean jj_3R_176() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_197() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(8)) { + jj_scanpos = xsp; + if (jj_scan_token(9)) return true; + } + return false; + } + + private boolean jj_3R_191() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_197()) jj_scanpos = xsp; + if (jj_scan_token(UNSIGNED_INTEGER)) return true; + return false; + } + + private boolean jj_3R_49() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(24)) { + jj_scanpos = xsp; + if (jj_3R_70()) return true; + } + return false; + } + + private boolean jj_3R_141() { + if (jj_scan_token(REGION)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_27()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_158() { + if (jj_scan_token(POINT)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_169()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_170()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_142() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(99)) { + jj_scanpos = xsp; + if (jj_scan_token(100)) { + jj_scanpos = xsp; + if (jj_scan_token(101)) return true; + } + } + return false; + } + + private boolean jj_3R_200() { + if (jj_scan_token(USING)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_14()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_201()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_113() { + if (jj_scan_token(LEFT)) return true; + return false; + } + + private boolean jj_3R_140() { + if (jj_scan_token(POLYGON)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_169()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_170()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_170()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_170()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_171()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_71() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_113()) { + jj_scanpos = xsp; + if (jj_3R_114()) { + jj_scanpos = xsp; + if (jj_3R_115()) return true; + } + } + xsp = jj_scanpos; + if (jj_scan_token(25)) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_199() { + if (jj_scan_token(ON)) return true; + if (jj_3R_163()) return true; + return false; + } + + private boolean jj_3R_139() { + if (jj_3R_158()) return true; + return false; + } + + private boolean jj_3R_37() { + if (jj_scan_token(STRING_LITERAL)) return true; + return false; + } + + private boolean jj_3R_22() { + Token xsp; + if (jj_3R_37()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_37()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_138() { + if (jj_scan_token(CIRCLE)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_169()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_170()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_50() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(24)) { + jj_scanpos = xsp; + if (jj_3R_71()) return true; + } + return false; + } + + private boolean jj_3R_33() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_50()) jj_scanpos = xsp; + if (jj_scan_token(JOIN)) return true; + if (jj_3R_51()) return true; + xsp = jj_scanpos; + if (jj_3R_199()) { + jj_scanpos = xsp; + if (jj_3R_200()) return true; + } + return false; + } + + private boolean jj_3R_137() { + if (jj_scan_token(CENTROID)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_122()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_32() { + if (jj_scan_token(NATURAL)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_49()) jj_scanpos = xsp; + if (jj_scan_token(JOIN)) return true; + if (jj_3R_51()) return true; + return false; + } + + private boolean jj_3R_136() { + if (jj_scan_token(BOX)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_169()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_170()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_192() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(22)) jj_scanpos = xsp; + if (jj_3R_14()) return true; + return false; + } + + private boolean jj_3R_182() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_190() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(45)) { + jj_scanpos = xsp; + if (jj_scan_token(46)) return true; + } + return false; + } + + private boolean jj_3R_183() { + if (jj_3R_46()) return true; + return false; + } + + private boolean jj_3R_180() { + if (jj_3R_21()) return true; + return false; + } + + private boolean jj_3R_109() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_136()) { + jj_scanpos = xsp; + if (jj_3R_137()) { + jj_scanpos = xsp; + if (jj_3R_138()) { + jj_scanpos = xsp; + if (jj_3R_139()) { + jj_scanpos = xsp; + if (jj_3R_140()) { + jj_scanpos = xsp; + if (jj_3R_141()) return true; + } + } + } + } + } + return false; + } + + private boolean jj_3R_181() { + if (jj_3R_158()) return true; + return false; + } + + private boolean jj_3R_177() { + if (jj_3R_158()) return true; + return false; + } + + private boolean jj_3R_175() { + if (jj_3R_158()) return true; + return false; + } + + private boolean jj_3R_17() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_32()) { + jj_scanpos = xsp; + if (jj_3R_33()) return true; + } + return false; + } + + private boolean jj_3R_169() { + if (jj_3R_27()) return true; + return false; + } + + private boolean jj_3R_198() { + if (jj_3R_17()) return true; + return false; + } + + private boolean jj_3R_117() { + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_193()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_193() { + if (jj_3R_72()) return true; + Token xsp; + if (jj_3R_198()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_198()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_179() { + if (jj_3R_158()) return true; + return false; + } + + private boolean jj_3_3() { + if (jj_3R_17()) return true; + return false; + } + + private boolean jj_3R_116() { + if (jj_3R_77()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_192()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_51() { + if (jj_3R_72()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3_3()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3_2() { + if (jj_3R_16()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(22)) jj_scanpos = xsp; + if (jj_3R_14()) return true; + return false; + } + + private boolean jj_3R_105() { + if (jj_scan_token(DISTANCE)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_179()) { + jj_scanpos = xsp; + if (jj_3R_180()) return true; + } + if (jj_scan_token(COMMA)) return true; + xsp = jj_scanpos; + if (jj_3R_181()) { + jj_scanpos = xsp; + if (jj_3R_182()) return true; + } + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_104() { + if (jj_scan_token(COORD2)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_177()) { + jj_scanpos = xsp; + if (jj_3R_178()) return true; + } + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_103() { + if (jj_scan_token(COORD1)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_175()) { + jj_scanpos = xsp; + if (jj_3R_176()) return true; + } + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_102() { + if (jj_scan_token(AREA)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_122()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_72() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_116()) { + jj_scanpos = xsp; + if (jj_3_2()) { + jj_scanpos = xsp; + if (jj_3R_117()) return true; + } + } + return false; + } + + private boolean jj_3R_101() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(58)) { + jj_scanpos = xsp; + if (jj_scan_token(59)) return true; + } + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_122()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_122()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_157() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_46()) return true; + return false; + } + + private boolean jj_3R_189() { + if (jj_3R_36()) return true; + return false; + } + + private boolean jj_3R_166() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_189()) { + jj_scanpos = xsp; + if (jj_scan_token(101)) return true; + } + xsp = jj_scanpos; + if (jj_3R_190()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_59() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_101()) { + jj_scanpos = xsp; + if (jj_3R_102()) { + jj_scanpos = xsp; + if (jj_3R_103()) { + jj_scanpos = xsp; + if (jj_3R_104()) { + jj_scanpos = xsp; + if (jj_3R_105()) return true; + } + } + } + } + return false; + } + + private boolean jj_3R_160() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(47)) { + jj_scanpos = xsp; + if (jj_scan_token(48)) { + jj_scanpos = xsp; + if (jj_scan_token(49)) { + jj_scanpos = xsp; + if (jj_scan_token(50)) return true; + } + } + } + if (jj_scan_token(LEFT_PAR)) return true; + xsp = jj_scanpos; + if (jj_scan_token(19)) jj_scanpos = xsp; + if (jj_3R_46()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_170() { + if (jj_3R_108()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; + return false; + } + + private boolean jj_3R_159() { + if (jj_scan_token(COUNT)) return true; + if (jj_scan_token(LEFT_PAR)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(19)) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(10)) { + jj_scanpos = xsp; + if (jj_3R_183()) return true; + } + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_188() { + if (jj_3R_36()) return true; + return false; + } + + private boolean jj_3R_164() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_188()) { + jj_scanpos = xsp; + if (jj_scan_token(101)) return true; + } + return false; + } + + private boolean jj_3R_56() { + if (jj_scan_token(DOT)) return true; + if (jj_3R_77()) return true; + return false; + } + + private boolean jj_3R_143() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_159()) { + jj_scanpos = xsp; + if (jj_3R_160()) return true; + } + return false; + } + + private boolean jj_3R_21() { + if (jj_3R_36()) return true; + return false; + } + + private boolean jj_3R_36() { + if (jj_3R_14()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_56()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_128() { + if (jj_scan_token(DOT)) return true; + if (jj_3R_14()) return true; + return false; + } + + private boolean jj_3R_127() { + if (jj_scan_token(DOT)) return true; + if (jj_3R_14()) return true; + return false; + } + + private boolean jj_3R_134() { + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_46()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_157()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_16() { + if (jj_3R_16()) return true; + return false; + } + + private boolean jj_3R_107() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(35)) jj_scanpos = xsp; + if (jj_scan_token(IN)) return true; + xsp = jj_scanpos; + if (jj_3_16()) { + jj_scanpos = xsp; + if (jj_3R_134()) return true; + } + return false; + } + + private boolean jj_3R_77() { + if (jj_3R_14()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_127()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_128()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_29() { + if (jj_scan_token(DELIMITED_IDENTIFIER)) return true; + return false; + } + + private boolean jj_3R_28() { + if (jj_scan_token(REGULAR_IDENTIFIER)) return true; + return false; + } + + private boolean jj_3R_26() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(35)) jj_scanpos = xsp; + if (jj_scan_token(BETWEEN)) return true; + if (jj_3R_46()) return true; + if (jj_scan_token(AND)) return true; + if (jj_3R_46()) return true; + return false; + } + + private boolean jj_3R_61() { + if (jj_3R_107()) return true; + return false; + } + + private boolean jj_3R_14() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_28()) { + jj_scanpos = xsp; + if (jj_3R_29()) return true; + } + return false; + } + + private boolean jj_3_13() { + if (jj_3R_26()) return true; + return false; + } + + private boolean jj_3_15() { + if (jj_3R_27()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(35)) jj_scanpos = xsp; + if (jj_scan_token(LIKE)) return true; + return false; + } + + private boolean jj_3R_60() { + if (jj_3R_106()) return true; + return false; + } + + private boolean jj_3R_167() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_166()) return true; + return false; + } + + private boolean jj_3_14() { + if (jj_3R_21()) return true; + if (jj_scan_token(IS)) return true; + return false; + } + + private boolean jj_3R_106() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(12)) { + jj_scanpos = xsp; + if (jj_scan_token(13)) { + jj_scanpos = xsp; + if (jj_scan_token(14)) { + jj_scanpos = xsp; + if (jj_scan_token(15)) { + jj_scanpos = xsp; + if (jj_scan_token(16)) { + jj_scanpos = xsp; + if (jj_scan_token(17)) return true; + } + } + } + } + } + if (jj_3R_46()) return true; + return false; + } + + private boolean jj_3R_155() { + if (jj_scan_token(ORDER_BY)) return true; + if (jj_3R_166()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_167()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_154() { + if (jj_scan_token(HAVING)) return true; + if (jj_3R_163()) return true; + return false; + } + + private boolean jj_3R_45() { + if (jj_3R_46()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_60()) { + jj_scanpos = xsp; + if (jj_3_13()) { + jj_scanpos = xsp; + if (jj_3R_61()) return true; + } + } + return false; + } + + private boolean jj_3R_44() { + if (jj_3R_27()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(35)) jj_scanpos = xsp; + if (jj_scan_token(LIKE)) return true; + if (jj_3R_27()) return true; + return false; + } + + private boolean jj_3R_165() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_164()) return true; + return false; + } + + private boolean jj_3R_43() { + if (jj_3R_21()) return true; + if (jj_scan_token(IS)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(35)) jj_scanpos = xsp; + if (jj_scan_token(NULL)) return true; + return false; + } + + private boolean jj_3R_184() { + if (jj_scan_token(AS)) return true; + if (jj_3R_14()) return true; + return false; + } + + private boolean jj_3R_153() { + if (jj_scan_token(GROUP_BY)) return true; + if (jj_3R_164()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_165()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_42() { + if (jj_scan_token(EXISTS)) return true; + if (jj_3R_16()) return true; + return false; + } + + private boolean jj_3R_151() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_51()) return true; + return false; + } + + private boolean jj_3R_152() { + if (jj_scan_token(WHERE)) return true; + if (jj_3R_163()) return true; + return false; + } + + private boolean jj_3R_30() { + if (jj_3R_14()) return true; + if (jj_scan_token(DOT)) return true; + return false; + } + + private boolean jj_3R_25() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_42()) { + jj_scanpos = xsp; + if (jj_3R_43()) { + jj_scanpos = xsp; + if (jj_3R_44()) { + jj_scanpos = xsp; + if (jj_3R_45()) return true; + } + } + } + return false; + } + + private boolean jj_3R_129() { + if (jj_scan_token(FROM)) return true; + if (jj_3R_51()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_151()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3_12() { + if (jj_3R_25()) return true; + return false; + } + + private boolean jj_3R_162() { + if (jj_3R_46()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_184()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_15() { + if (jj_3R_14()) return true; + if (jj_scan_token(DOT)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_30()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_195() { + if (jj_scan_token(LEFT_PAR)) return true; + if (jj_3R_163()) return true; + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3R_194() { + if (jj_3R_25()) return true; + return false; + } + + private boolean jj_3R_186() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_194()) { + jj_scanpos = xsp; + if (jj_3R_195()) return true; + } + return false; + } + + private boolean jj_3R_196() { + if (jj_scan_token(NOT)) return true; + return false; + } + + private boolean jj_3R_187() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(33)) { + jj_scanpos = xsp; + if (jj_scan_token(34)) return true; + } + xsp = jj_scanpos; + if (jj_3R_196()) jj_scanpos = xsp; + if (jj_3R_186()) return true; + return false; + } + + private boolean jj_3R_161() { + if (jj_scan_token(ASTERISK)) return true; + return false; + } + + private boolean jj_3_1() { + if (jj_3R_14()) return true; + if (jj_scan_token(DOT)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_15()) jj_scanpos = xsp; + if (jj_scan_token(ASTERISK)) return true; + return false; + } + + private boolean jj_3R_185() { + if (jj_scan_token(NOT)) return true; + return false; + } + + private boolean jj_3R_146() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_46()) return true; + return false; + } + + private boolean jj_3R_149() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_161()) { + jj_scanpos = xsp; + if (jj_3_1()) { + jj_scanpos = xsp; + if (jj_3R_162()) return true; + } + } + return false; + } + + private boolean jj_3R_150() { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_149()) return true; + return false; + } + + /** Generated Token Manager. */ + public ADQLParserTokenManager token_source; + SimpleCharStream jj_input_stream; + /** Current token. */ + public Token token; + /** Next token. */ + public Token jj_nt; + private int jj_ntk; + private Token jj_scanpos, jj_lastpos; + private int jj_la; + private int jj_gen; + final private int[] jj_la1 = new int[98]; + static private int[] jj_la1_0; + static private int[] jj_la1_1; + static private int[] jj_la1_2; + static private int[] jj_la1_3; + static { + jj_la1_init_0(); + jj_la1_init_1(); + jj_la1_init_2(); + jj_la1_init_3(); + } + private static void jj_la1_init_0() { + jj_la1_0 = new int[] {0x41,0x0,0x0,0x0,0x0,0x80000,0x100000,0x20,0x0,0x0,0x400000,0x400,0x304,0x20,0x20,0x20,0x0,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x400000,0x400000,0x400000,0x0,0x4,0x3d800000,0x1c000000,0x2000000,0x1d000000,0x1d000000,0x1c000000,0x2000000,0x1d000000,0x1d000000,0x20,0xc0000000,0x3d800000,0x0,0x0,0x0,0x300,0x300,0x4,0x4,0x0,0x304,0x300,0x300,0xc00,0xc00,0x300,0x300,0x4,0x80,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x3f000,0x0,0x0,0x304,0x3f000,0x0,0x0,0x20,0x4,0x80000,0x704,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x304,0x20,0x20,0x0,0x0,0x20,0x304,}; + } + private static void jj_la1_init_1() { + jj_la1_1 = new int[] {0x0,0x1,0x400,0x800,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x6000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000,0x0,0x3f00000,0x7c0f8000,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000,0x0,0x80000000,0x0,0x3f00000,0x8,0x6,0x6,0x8,0x0,0x8,0x8,0x0,0x108,0x200,0xffff8000,0x0,0x8,0x8,0x0,0x0,0x0,0xffff8000,0x78000,0x0,0xf8000,0xc000000,0x800000,0x800000,0x800000,0x800000,0x7c000000,0x0,0x3f00000,0x7c000000,0x7c0f8000,0x0,0x0,0x0,0x0,0x0,0xffff8000,}; + } + private static void jj_la1_init_2() { + jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0xffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xffffff,0xffffff,0x0,0x0,0xfffe,0xff0000,0x0,0x20ffffff,}; + } + private static void jj_la1_init_3() { + jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x3b,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x23,0x23,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x30,0x0,0x0,0x3b,0x3,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x2,0x3b,0x0,0x0,0x0,0x0,0x0,0x3b,}; + } + final private JJCalls[] jj_2_rtns = new JJCalls[16]; + private boolean jj_rescan = false; + private int jj_gc = 0; + + /** Constructor with InputStream. */ + public ADQLParser(java.io.InputStream stream) { + this(stream, (String)null); + } + /** Constructor with InputStream and supplied encoding */ + public ADQLParser(java.io.InputStream stream, String encoding) { + try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } + token_source = new ADQLParserTokenManager(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 98; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + /** Reinitialise. */ + public void ReInit(java.io.InputStream stream) { + ReInit(stream, null); + } + /** Reinitialise. */ + public void ReInit(java.io.InputStream stream, String encoding) { + try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } + token_source.ReInit(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 98; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + /** Constructor. */ + public ADQLParser(java.io.Reader stream) { + jj_input_stream = new SimpleCharStream(stream, 1, 1); + token_source = new ADQLParserTokenManager(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 98; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + /** Reinitialise. */ + public void ReInit(java.io.Reader stream) { + jj_input_stream.ReInit(stream, 1, 1); + token_source.ReInit(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 98; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + /** Constructor with generated Token Manager. */ + public ADQLParser(ADQLParserTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 98; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + /** Reinitialise. */ + public void ReInit(ADQLParserTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 98; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + private Token jj_consume_token(int kind) throws ParseException { + Token oldToken; + if ((oldToken = token).next != null) token = token.next; + else token = token.next = token_source.getNextToken(); + jj_ntk = -1; + if (token.kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + for (int i = 0; i < jj_2_rtns.length; i++) { + JJCalls c = jj_2_rtns[i]; + while (c != null) { + if (c.gen < jj_gen) c.first = null; + c = c.next; + } + } + } + trace_token(token, ""); + return token; + } + token = oldToken; + jj_kind = kind; + throw generateParseException(); + } + + static private final class LookaheadSuccess extends java.lang.Error { } + final private LookaheadSuccess jj_ls = new LookaheadSuccess(); + private boolean jj_scan_token(int kind) { + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos.next == null) { + jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos.next; + } + } else { + jj_scanpos = jj_scanpos.next; + } + if (jj_rescan) { + int i = 0; Token tok = token; + while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } + if (tok != null) jj_add_error_token(kind, i); + } + if (jj_scanpos.kind != kind) return true; + if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; + return false; + } + + +/** Get the next Token. */ + final public Token getNextToken() { + if (token.next != null) token = token.next; + else token = token.next = token_source.getNextToken(); + jj_ntk = -1; + jj_gen++; + trace_token(token, " (in getNextToken)"); + return token; + } + +/** Get the specific Token. */ + final public Token getToken(int index) { + Token t = token; + for (int i = 0; i < index; i++) { + if (t.next != null) t = t.next; + else t = t.next = token_source.getNextToken(); + } + return t; + } + + private int jj_ntk() { + if ((jj_nt=token.next) == null) + return (jj_ntk = (token.next=token_source.getNextToken()).kind); + else + return (jj_ntk = jj_nt.kind); + } + + private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>(); + private int[] jj_expentry; + private int jj_kind = -1; + private int[] jj_lasttokens = new int[100]; + private int jj_endpos; + + private void jj_add_error_token(int kind, int pos) { + if (pos >= 100) return; + if (pos == jj_endpos + 1) { + jj_lasttokens[jj_endpos++] = kind; + } else if (jj_endpos != 0) { + jj_expentry = new int[jj_endpos]; + for (int i = 0; i < jj_endpos; i++) { + jj_expentry[i] = jj_lasttokens[i]; + } + jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) { + int[] oldentry = (int[])(it.next()); + if (oldentry.length == jj_expentry.length) { + for (int i = 0; i < jj_expentry.length; i++) { + if (oldentry[i] != jj_expentry[i]) { + continue jj_entries_loop; + } + } + jj_expentries.add(jj_expentry); + break jj_entries_loop; + } + } + if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; + } + } + + /** Generate ParseException. */ + public ParseException generateParseException() { + jj_expentries.clear(); + boolean[] la1tokens = new boolean[103]; + if (jj_kind >= 0) { + la1tokens[jj_kind] = true; + jj_kind = -1; + } + for (int i = 0; i < 98; i++) { + if (jj_la1[i] == jj_gen) { + for (int j = 0; j < 32; j++) { + if ((jj_la1_0[i] & (1<<j)) != 0) { + la1tokens[j] = true; + } + if ((jj_la1_1[i] & (1<<j)) != 0) { + la1tokens[32+j] = true; + } + if ((jj_la1_2[i] & (1<<j)) != 0) { + la1tokens[64+j] = true; + } + if ((jj_la1_3[i] & (1<<j)) != 0) { + la1tokens[96+j] = true; + } + } + } + } + for (int i = 0; i < 103; i++) { + if (la1tokens[i]) { + jj_expentry = new int[1]; + jj_expentry[0] = i; + jj_expentries.add(jj_expentry); + } + } + jj_endpos = 0; + jj_rescan_token(); + jj_add_error_token(0, 0); + int[][] exptokseq = new int[jj_expentries.size()][]; + for (int i = 0; i < jj_expentries.size(); i++) { + exptokseq[i] = jj_expentries.get(i); + } + return new ParseException(token, exptokseq, tokenImage); + } + + private int trace_indent = 0; + private boolean trace_enabled = true; + +/** Enable tracing. */ + final public void enable_tracing() { + trace_enabled = true; + } + +/** Disable tracing. */ + final public void disable_tracing() { + trace_enabled = false; + } + + private void trace_call(String s) { + if (trace_enabled) { + for (int i = 0; i < trace_indent; i++) { System.out.print(" "); } + System.out.println("Call: " + s); + } + trace_indent = trace_indent + 2; + } + + private void trace_return(String s) { + trace_indent = trace_indent - 2; + if (trace_enabled) { + for (int i = 0; i < trace_indent; i++) { System.out.print(" "); } + System.out.println("Return: " + s); + } + } + + private void trace_token(Token t, String where) { + if (trace_enabled) { + for (int i = 0; i < trace_indent; i++) { System.out.print(" "); } + System.out.print("Consumed token: <" + tokenImage[t.kind]); + if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) { + System.out.print(": \"" + t.image + "\""); + } + System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where); + } + } + + private void trace_scan(Token t1, int t2) { + if (trace_enabled) { + for (int i = 0; i < trace_indent; i++) { System.out.print(" "); } + System.out.print("Visited token: <" + tokenImage[t1.kind]); + if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) { + System.out.print(": \"" + t1.image + "\""); + } + System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">"); + } + } + + private void jj_rescan_token() { + jj_rescan = true; + for (int i = 0; i < 16; i++) { + try { + JJCalls p = jj_2_rtns[i]; + do { + if (p.gen > jj_gen) { + jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; + switch (i) { + case 0: jj_3_1(); break; + case 1: jj_3_2(); break; + case 2: jj_3_3(); break; + case 3: jj_3_4(); break; + case 4: jj_3_5(); break; + case 5: jj_3_6(); break; + case 6: jj_3_7(); break; + case 7: jj_3_8(); break; + case 8: jj_3_9(); break; + case 9: jj_3_10(); break; + case 10: jj_3_11(); break; + case 11: jj_3_12(); break; + case 12: jj_3_13(); break; + case 13: jj_3_14(); break; + case 14: jj_3_15(); break; + case 15: jj_3_16(); break; + } + } + p = p.next; + } while (p != null); + } catch(LookaheadSuccess ls) { } + } + jj_rescan = false; + } + + private void jj_save(int index, int xla) { + JJCalls p = jj_2_rtns[index]; + while (p.gen > jj_gen) { + if (p.next == null) { p = p.next = new JJCalls(); break; } + p = p.next; + } + p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; + } + + static final class JJCalls { + int gen; + Token first; + int arg; + JJCalls next; + } } diff --git a/src/adql/parser/adqlGrammar.jj b/src/adql/parser/adqlGrammar.jj index 52e6ded..25f5657 100644 --- a/src/adql/parser/adqlGrammar.jj +++ b/src/adql/parser/adqlGrammar.jj @@ -26,7 +26,7 @@ * If the syntax is not conform to the ADQL definition an error message is printed else it will be the message "Correct syntax". * * Author: Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de -* Version: 1.3 (10/2014) +* Version: 1.4 (06/2015) */ /* ########### */ @@ -35,7 +35,7 @@ options { STATIC = false; IGNORE_CASE = true; - DEBUG_PARSER = false; + DEBUG_PARSER = true; } /* ########## */ @@ -89,7 +89,7 @@ import adql.translator.TranslationException; * @see ADQLQueryFactory * * @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de -* @version 1.3 (10/2014) +* @version 1.4 (06/2015) */ public class ADQLParser { @@ -113,6 +113,7 @@ public class ADQLParser { */ public ADQLParser(){ this(new java.io.ByteArrayInputStream("".getBytes())); + setDebug(false); } /** @@ -158,6 +159,8 @@ public class ADQLParser { public ADQLParser(java.io.InputStream stream, QueryChecker checker, ADQLQueryFactory factory) { this(stream); + setDebug(false); + queryChecker = checker; if (factory != null) @@ -233,6 +236,8 @@ public class ADQLParser { public ADQLParser(java.io.Reader reader, QueryChecker checker, ADQLQueryFactory factory) { this(reader); + setDebug(false); + queryChecker = checker; if (factory != null) @@ -269,6 +274,8 @@ public class ADQLParser { public ADQLParser(ADQLParserTokenManager tm, QueryChecker checker, ADQLQueryFactory factory) { this(tm); + setDebug(false); + queryChecker = checker; if (factory != null) diff --git a/test/adql/parser/TestADQLParser.java b/test/adql/parser/TestADQLParser.java index 10837d5..82366d6 100644 --- a/test/adql/parser/TestADQLParser.java +++ b/test/adql/parser/TestADQLParser.java @@ -26,6 +26,18 @@ public class TestADQLParser { @After public void tearDown() throws Exception{} + + @Test + public void testDelimitedIdentifiersWithDot(){ + ADQLParser parser = new ADQLParser(); + try{ + ADQLQuery query = parser.parseQuery("SELECT * FROM \"B/avo.rad/catalog\";"); + assertEquals("B/avo.rad/catalog", query.getFrom().getTables().get(0).getTableName()); + }catch(Exception e){ + e.printStackTrace(System.err); + fail("The ADQL query is strictly correct! No error should have occured. (see stdout for more details)"); + } + } @Test public void test(){ -- GitLab