From db0dfdada2f87df8545567c867e6f79dfa5e61a1 Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Wed, 13 Sep 2017 18:53:22 +0200 Subject: [PATCH] [ADQL] Append an HINT message in the ParseException message when an ADQL reserved word is encountered instead of a column/table/schema name/alias. No list of ADQL reserved words has been added into the ADQL grammar. However, the ADQL grammar has been slightly changed in order to provide a more precise location of the REAL wrong part of the query. Before this commit, if an ADQL reserved word (e.g. 'point') was encountered outside of its normal syntax (e.g. 'point' no followed by an opening parenthesis), the next token was highlighted instead of this one. Hence a confusing error message. For instance, the following ADQL query: ```sql SELECT point FROM aTable ``` returned the following error message: > Encountered "FROM". Was expecting: "(" Now, it will return the following one: > Encountered "point". Was expecting one of: "*" <QUANTIFIER> "TOP" [...] > (HINT: "point" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.) This error message highlights exactly the source of the problem and even provide to the user a clear explanation of why the query did not parse and how it could be solved. --- src/adql/parser/ADQLParser.java | 1348 ++++++++++---------- src/adql/parser/ParseException.java | 42 +- src/adql/parser/ParseException.java.backup | 42 +- src/adql/parser/adqlGrammar.jj | 15 +- test/adql/parser/TestADQLParser.java | 78 ++ 5 files changed, 833 insertions(+), 692 deletions(-) diff --git a/src/adql/parser/ADQLParser.java b/src/adql/parser/ADQLParser.java index 86491d8..0ebb8f6 100644 --- a/src/adql/parser/ADQLParser.java +++ b/src/adql/parser/ADQLParser.java @@ -1904,76 +1904,25 @@ public class ADQLParser implements ADQLParserConstants { ((WrappedOperand)valueExpr).setPosition(new TextPosition(left, right)); }else if (jj_2_7(2147483647)){ valueExpr = UserDefinedFunction(); + }else if (jj_2_8(2)){ + valueExpr = GeometryValueFunction(); + }else if (jj_2_9(2147483647)){ + valueExpr = Column(); + }else if (jj_2_10(2147483647)){ + valueExpr = StringFactor(); + }else if (jj_2_11(3)){ + valueExpr = Factor(); }else{ switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ - case BOX: - case CENTROID: - case CIRCLE: - case POINT: - case POLYGON: - case REGION:{ - valueExpr = GeometryValueFunction(); + case DELIMITED_IDENTIFIER: + case REGULAR_IDENTIFIER:{ + valueExpr = Column(); 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_f() : 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(); - } - } + jj_consume_token(-1); + throw new ParseException(); } } { @@ -2011,7 +1960,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[50] = jj_gen; + jj_la1[49] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2019,7 +1968,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[51] = jj_gen;; + jj_la1[50] = jj_gen;; } if (sign == null){ if ("" != null) @@ -2064,7 +2013,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[52] = jj_gen; + jj_la1[51] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2072,7 +2021,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[53] = jj_gen;; + jj_la1[52] = jj_gen;; } if (sign == null){ if ("" != null) @@ -2118,16 +2067,16 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[54] = jj_gen; + jj_la1[53] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; } default: - jj_la1[55] = jj_gen;; + jj_la1[54] = jj_gen;; } - if (jj_2_10(2)){ + if (jj_2_12(2)){ op = NumericFunction(); }else{ switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ @@ -2146,7 +2095,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[56] = jj_gen; + jj_la1[55] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2191,7 +2140,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[57] = jj_gen; + jj_la1[56] = jj_gen; break label_9; } jj_consume_token(CONCAT); @@ -2234,8 +2183,8 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[58] = jj_gen; - if (jj_2_11(2)){ + jj_la1[57] = jj_gen; + if (jj_2_13(2)){ op = UserDefinedFunction(); ((UserDefinedFunction)op).setExpectedType('S'); }else{ @@ -2248,7 +2197,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[59] = jj_gen; + jj_la1[58] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2285,7 +2234,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[60] = jj_gen; + jj_la1[59] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2322,7 +2271,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[61] = jj_gen;; + jj_la1[60] = jj_gen;; } constraint = Constraint(); if (notOp){ @@ -2344,7 +2293,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[62] = jj_gen; + jj_la1[61] = jj_gen; break label_10; } switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ @@ -2357,7 +2306,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[63] = jj_gen; + jj_la1[62] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2368,7 +2317,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[64] = jj_gen;; + jj_la1[63] = jj_gen;; } constraint = Constraint(); if (notOp){ @@ -2409,7 +2358,7 @@ public class ADQLParser implements ADQLParserConstants { try{ ADQLConstraint constraint = null; Token start, end; - if (jj_2_12(2147483647)){ + if (jj_2_14(2147483647)){ constraint = Predicate(); }else{ switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ @@ -2429,7 +2378,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[65] = jj_gen; + jj_la1[64] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2467,8 +2416,8 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[70] = jj_gen; - if (jj_2_14(2147483647)){ + jj_la1[69] = jj_gen; + if (jj_2_16(2147483647)){ column = Column(); jj_consume_token(IS); switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ @@ -2477,7 +2426,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[66] = jj_gen;; + jj_la1[65] = jj_gen;; } end = jj_consume_token(NULL); IsNull in = queryFactory.createIsNull((notToken != null), column); @@ -2486,7 +2435,7 @@ public class ADQLParser implements ADQLParserConstants { if ("" != null) return in; } - }else if (jj_2_15(2147483647)){ + }else if (jj_2_17(2147483647)){ strExpr1 = StringExpression(); switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ case NOT:{ @@ -2494,7 +2443,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[67] = jj_gen;; + jj_la1[66] = jj_gen;; } jj_consume_token(LIKE); strExpr2 = StringExpression(); @@ -2568,8 +2517,8 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[68] = jj_gen; - if (jj_2_13(2)){ + jj_la1[67] = jj_gen; + if (jj_2_15(2)){ constraint = BetweenEnd(op); }else{ switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ @@ -2579,7 +2528,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[69] = jj_gen; + jj_la1[68] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2588,7 +2537,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[71] = jj_gen; + jj_la1[70] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2641,7 +2590,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[72] = jj_gen; + jj_la1[71] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2676,7 +2625,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[73] = jj_gen;; + jj_la1[72] = jj_gen;; } start = jj_consume_token(BETWEEN); min = ValueExpression(); @@ -2716,10 +2665,10 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[74] = jj_gen;; + jj_la1[73] = jj_gen;; } start = jj_consume_token(IN); - if (jj_2_16(2)){ + if (jj_2_18(2)){ q = SubQueryExpression(); }else{ switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ @@ -2734,7 +2683,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[75] = jj_gen; + jj_la1[74] = jj_gen; break label_11; } jj_consume_token(COMMA); @@ -2745,7 +2694,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[76] = jj_gen; + jj_la1[75] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2800,7 +2749,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[77] = jj_gen;; + jj_la1[76] = jj_gen;; } switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){ case ASTERISK:{ @@ -2861,7 +2810,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[78] = jj_gen; + jj_la1[77] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2892,7 +2841,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[79] = jj_gen; + jj_la1[78] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2903,7 +2852,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[80] = jj_gen;; + jj_la1[79] = jj_gen;; } op = ValueExpression(); end = jj_consume_token(RIGHT_PAR); @@ -2912,7 +2861,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[81] = jj_gen; + jj_la1[80] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2975,7 +2924,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[82] = jj_gen; + jj_la1[81] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3015,7 +2964,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[83] = jj_gen; + jj_la1[82] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3039,7 +2988,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[84] = jj_gen; + jj_la1[83] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3060,7 +3009,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[85] = jj_gen; + jj_la1[84] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3082,7 +3031,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[86] = jj_gen; + jj_la1[85] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3097,7 +3046,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[87] = jj_gen; + jj_la1[86] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3208,7 +3157,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[88] = jj_gen; + jj_la1[87] = jj_gen; break label_12; } jj_consume_token(COMMA); @@ -3229,7 +3178,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[89] = jj_gen; + jj_la1[88] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3362,7 +3311,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[90] = jj_gen; + jj_la1[89] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3514,7 +3463,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[91] = jj_gen;; + jj_la1[90] = jj_gen;; } end = jj_consume_token(RIGHT_PAR); break; @@ -3530,7 +3479,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[92] = jj_gen;; + jj_la1[91] = jj_gen;; } end = jj_consume_token(RIGHT_PAR); break; @@ -3553,13 +3502,13 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[93] = jj_gen;; + jj_la1[92] = jj_gen;; } end = jj_consume_token(RIGHT_PAR); break; } default: - jj_la1[94] = jj_gen; + jj_la1[93] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3646,7 +3595,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[95] = jj_gen; + jj_la1[94] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3737,7 +3686,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[96] = jj_gen; + jj_la1[95] = jj_gen; break label_13; } jj_consume_token(COMMA); @@ -3747,7 +3696,7 @@ public class ADQLParser implements ADQLParserConstants { break; } default: - jj_la1[97] = jj_gen;; + jj_la1[96] = jj_gen;; } end = 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 !"); @@ -3975,24 +3924,42 @@ public class ADQLParser implements ADQLParserConstants { } } - private boolean jj_3R_107(){ - if (jj_scan_token(RIGHT)) + private boolean jj_2_17(int xla){ + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try{ + return !jj_3_17(); + }catch(LookaheadSuccess ls){ return true; - return false; + }finally{ + jj_save(16, xla); + } } - private boolean jj_3R_55(){ + private boolean jj_2_18(int xla){ + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try{ + return !jj_3_18(); + }catch(LookaheadSuccess ls){ + return true; + }finally{ + jj_save(17, xla); + } + } + + private boolean jj_3R_65(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_96()){ + if (jj_3R_107()){ jj_scanpos = xsp; - if (jj_3R_97()){ + if (jj_3R_108()){ jj_scanpos = xsp; - if (jj_3R_98()){ + if (jj_3R_109()){ jj_scanpos = xsp; - if (jj_3R_99()){ + if (jj_3R_110()){ jj_scanpos = xsp; - if (jj_3R_100()) + if (jj_3R_111()) return true; } } @@ -4001,17 +3968,17 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_135(){ - if (jj_3R_101()) + private boolean jj_3R_137(){ + if (jj_3R_112()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; return false; } - private boolean jj_3R_139(){ + private boolean jj_3R_134(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(48)){ @@ -4030,28 +3997,20 @@ public class ADQLParser implements ADQLParserConstants { xsp = jj_scanpos; if (jj_scan_token(19)) jj_scanpos = xsp; - if (jj_3R_42()) + if (jj_3R_51()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_128(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(98)){ - jj_scanpos = xsp; - if (jj_scan_token(99)){ - jj_scanpos = xsp; - if (jj_scan_token(100)) - return true; - } - } + private boolean jj_3R_117(){ + if (jj_scan_token(RIGHT)) + return true; return false; } - private boolean jj_3R_138(){ + private boolean jj_3R_133(){ if (jj_scan_token(COUNT)) return true; if (jj_scan_token(LEFT_PAR)) @@ -4063,7 +4022,7 @@ public class ADQLParser implements ADQLParserConstants { xsp = jj_scanpos; if (jj_scan_token(10)){ jj_scanpos = xsp; - if (jj_3R_151()) + if (jj_3R_146()) return true; } if (jj_scan_token(RIGHT_PAR)) @@ -4071,61 +4030,75 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_103(){ + private boolean jj_3R_126(){ + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(98)){ + jj_scanpos = xsp; + if (jj_scan_token(99)){ + jj_scanpos = xsp; + if (jj_scan_token(100)) + return true; + } + } + return false; + } + + private boolean jj_3R_113(){ if (jj_scan_token(LEFT)) return true; return false; } - private boolean jj_3R_64(){ + private boolean jj_3R_73(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_103()){ + if (jj_3R_113()){ jj_scanpos = xsp; - if (jj_3R_104()){ + if (jj_3R_114()){ jj_scanpos = xsp; - if (jj_3R_105()) + if (jj_3R_115()) return true; } } return false; } - private boolean jj_3R_45(){ + private boolean jj_3R_127(){ Token xsp; xsp = jj_scanpos; - if (jj_scan_token(24)){ + if (jj_3R_133()){ jj_scanpos = xsp; - if (jj_3R_64()) + if (jj_3R_134()) return true; } return false; } - private boolean jj_3R_129(){ + private boolean jj_3R_54(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_138()){ + if (jj_scan_token(24)){ jj_scanpos = xsp; - if (jj_3R_139()) + if (jj_3R_73()) return true; } return false; } - private boolean jj_3R_37(){ + private boolean jj_3R_44(){ if (jj_scan_token(STRING_LITERAL)) return true; return false; } - private boolean jj_3R_22(){ + private boolean jj_3R_23(){ Token xsp; - if (jj_3R_37()) + if (jj_3R_44()) return true; while(true){ xsp = jj_scanpos; - if (jj_3R_37()){ + if (jj_3R_44()){ jj_scanpos = xsp; break; } @@ -4133,20 +4106,20 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_106(){ + private boolean jj_3R_116(){ if (jj_scan_token(LEFT)) return true; return false; } - private boolean jj_3R_65(){ + private boolean jj_3R_74(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_106()){ + if (jj_3R_116()){ jj_scanpos = xsp; - if (jj_3R_107()){ + if (jj_3R_117()){ jj_scanpos = xsp; - if (jj_3R_108()) + if (jj_3R_118()) return true; } } @@ -4156,43 +4129,61 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_46(){ + private boolean jj_3R_55(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(24)){ jj_scanpos = xsp; - if (jj_3R_65()) + if (jj_3R_74()) return true; } return false; } - private boolean jj_3R_33(){ + private boolean jj_3_18(){ + if (jj_3R_16()) + return true; + return false; + } + + private boolean jj_3R_35(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_46()) + if (jj_3R_55()) jj_scanpos = xsp; if (jj_scan_token(JOIN)) return true; - if (jj_3R_47()) + if (jj_3R_56()) return true; return false; } - private boolean jj_3R_32(){ + private boolean jj_3R_34(){ if (jj_scan_token(NATURAL)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_45()) + if (jj_3R_54()) jj_scanpos = xsp; if (jj_scan_token(JOIN)) return true; return false; } - private boolean jj_3_16(){ - if (jj_3R_16()) + private boolean jj_3R_28(){ + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(35)) + jj_scanpos = xsp; + if (jj_scan_token(BETWEEN)) + return true; + if (jj_3R_51()) + return true; + return false; + } + + private boolean jj_3_15(){ + if (jj_3R_28()) return true; return false; } @@ -4200,141 +4191,113 @@ public class ADQLParser implements ADQLParserConstants { private boolean jj_3R_17(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_32()){ + if (jj_3R_34()){ jj_scanpos = xsp; - if (jj_3R_33()) + if (jj_3R_35()) return true; } return false; } - private boolean jj_3R_26(){ + private boolean jj_3_17(){ + if (jj_3R_29()) + return true; Token xsp; xsp = jj_scanpos; if (jj_scan_token(35)) jj_scanpos = xsp; - if (jj_scan_token(BETWEEN)) - return true; - if (jj_3R_42()) + if (jj_scan_token(LIKE)) return true; return false; } - private boolean jj_3R_67(){ + private boolean jj_3R_76(){ if (jj_scan_token(LEFT_PAR)) return true; return false; } - private boolean jj_3_13(){ - if (jj_3R_26()) - return true; - return false; - } - private boolean jj_3_3(){ if (jj_3R_17()) return true; return false; } - private boolean jj_3_15(){ - if (jj_3R_27()) + private boolean jj_3_16(){ + if (jj_3R_22()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(35)) - jj_scanpos = xsp; - if (jj_scan_token(LIKE)) + if (jj_scan_token(IS)) return true; return false; } - private boolean jj_3_14(){ - if (jj_3R_21()) + private boolean jj_3_2(){ + if (jj_3R_16()) return true; - if (jj_scan_token(IS)) + return false; + } + + private boolean jj_3R_75(){ + if (jj_3R_79()) return true; return false; } - private boolean jj_3_2(){ - if (jj_3R_16()) + private boolean jj_3R_132(){ + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_51()) return true; return false; } - private boolean jj_3R_66(){ - if (jj_3R_72()) + private boolean jj_3R_27(){ + if (jj_3R_51()) return true; return false; } - private boolean jj_3R_47(){ + private boolean jj_3R_56(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_66()){ + if (jj_3R_75()){ jj_scanpos = xsp; if (jj_3_2()){ jj_scanpos = xsp; - if (jj_3R_67()) + if (jj_3R_76()) return true; } } return false; } - private boolean jj_3R_132(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_42()) - return true; - return false; - } - - private boolean jj_3R_25(){ - if (jj_3R_42()) - return true; - return false; - } - - private boolean jj_3_12(){ + private boolean jj_3_14(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(41)){ jj_scanpos = xsp; - if (jj_3R_25()) + if (jj_3R_27()) return true; } return false; } - private boolean jj_3R_52(){ + private boolean jj_3R_60(){ if (jj_scan_token(DOT)) return true; - if (jj_3R_72()) + if (jj_3R_79()) 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()) + private boolean jj_3R_22(){ + if (jj_3R_43()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_52()) - jj_scanpos = xsp; return false; } - private boolean jj_3R_114(){ - if (jj_3R_42()) + private boolean jj_3R_120(){ + if (jj_3R_51()) return true; Token xsp; while(true){ @@ -4347,107 +4310,117 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_119(){ - if (jj_scan_token(DOT)) + private boolean jj_3R_148(){ + if (jj_scan_token(COMMA)) return true; - if (jj_3R_14()) + if (jj_3R_151()) return true; return false; } - private boolean jj_3R_118(){ - if (jj_scan_token(DOT)) + private boolean jj_3R_147(){ + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_151()) return true; + return false; + } + + private boolean jj_3R_43(){ if (jj_3R_14()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_60()) + jj_scanpos = xsp; return false; } - private boolean jj_3R_142(){ - if (jj_scan_token(COMMA)) + private boolean jj_3R_125(){ + if (jj_scan_token(DOT)) return true; - if (jj_3R_152()) + if (jj_3R_14()) return true; return false; } - private boolean jj_3R_141(){ - if (jj_scan_token(COMMA)) + private boolean jj_3R_124(){ + if (jj_scan_token(DOT)) return true; - if (jj_3R_152()) + if (jj_3R_14()) return true; return false; } - private boolean jj_3R_72(){ + private boolean jj_3R_79(){ if (jj_3R_14()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_118()) + if (jj_3R_124()) jj_scanpos = xsp; xsp = jj_scanpos; - if (jj_3R_119()) + if (jj_3R_125()) jj_scanpos = xsp; return false; } - private boolean jj_3R_29(){ + private boolean jj_3R_31(){ if (jj_scan_token(DELIMITED_IDENTIFIER)) return true; return false; } - private boolean jj_3R_28(){ + private boolean jj_3R_30(){ if (jj_scan_token(REGULAR_IDENTIFIER)) 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_3R_131(){ - if (jj_3R_102()) + if (jj_3R_21()) return true; return false; } - private boolean jj_3R_24(){ + private boolean jj_3R_26(){ if (jj_scan_token(REGULAR_IDENTIFIER)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_114()) + if (jj_3R_120()) jj_scanpos = xsp; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_140(){ - if (jj_3R_101()) + private boolean jj_3R_139(){ + if (jj_3R_112()) return true; return false; } + private boolean jj_3R_14(){ + Token xsp; + xsp = jj_scanpos; + if (jj_3R_30()){ + jj_scanpos = xsp; + if (jj_3R_31()) + return true; + } + return false; + } + private boolean jj_3R_130(){ - if (jj_3R_21()) + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_113(){ + private boolean jj_3R_119(){ Token xsp; xsp = jj_scanpos; if (jj_3R_130()){ @@ -4458,156 +4431,156 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_95(){ + private boolean jj_3R_106(){ if (jj_scan_token(TAN)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_94(){ + private boolean jj_3R_105(){ if (jj_scan_token(SIN)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_51(){ - if (jj_3R_71()) + private boolean jj_3R_58(){ + if (jj_3R_78()) return true; return false; } - private boolean jj_3R_93(){ + private boolean jj_3R_104(){ if (jj_scan_token(COT)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3_11(){ - if (jj_3R_24()) + private boolean jj_3_13(){ + if (jj_3R_26()) return true; return false; } - private boolean jj_3R_92(){ + private boolean jj_3R_103(){ if (jj_scan_token(COS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_91(){ + private boolean jj_3R_102(){ if (jj_scan_token(ATAN2)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_50(){ - if (jj_3R_70()) + private boolean jj_3R_57(){ + if (jj_3R_77()) return true; return false; } - private boolean jj_3R_90(){ + private boolean jj_3R_101(){ if (jj_scan_token(ATAN)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_35(){ + private boolean jj_3R_36(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_50()){ + if (jj_3R_57()){ jj_scanpos = xsp; - if (jj_3_11()){ + if (jj_3_13()){ jj_scanpos = xsp; - if (jj_3R_51()) + if (jj_3R_58()) return true; } } return false; } - private boolean jj_3R_89(){ + private boolean jj_3R_100(){ if (jj_scan_token(ASIN)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_88(){ + private boolean jj_3R_99(){ if (jj_scan_token(ACOS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_54(){ + private boolean jj_3R_64(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_88()){ + if (jj_3R_99()){ jj_scanpos = xsp; - if (jj_3R_89()){ + if (jj_3R_100()){ jj_scanpos = xsp; - if (jj_3R_90()){ + if (jj_3R_101()){ jj_scanpos = xsp; - if (jj_3R_91()){ + if (jj_3R_102()){ jj_scanpos = xsp; - if (jj_3R_92()){ + if (jj_3R_103()){ jj_scanpos = xsp; - if (jj_3R_93()){ + if (jj_3R_104()){ jj_scanpos = xsp; - if (jj_3R_94()){ + if (jj_3R_105()){ jj_scanpos = xsp; - if (jj_3R_95()) + if (jj_3R_106()) return true; } } @@ -4619,99 +4592,99 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_49(){ - if (jj_3R_69()) + private boolean jj_3R_46(){ + if (jj_3R_62()) return true; return false; } - private boolean jj_3R_87(){ + private boolean jj_3R_98(){ if (jj_scan_token(TRUNCATE)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_142()) + if (jj_3R_148()) jj_scanpos = xsp; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_86(){ + private boolean jj_3R_97(){ if (jj_scan_token(SQRT)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_85(){ + private boolean jj_3R_96(){ if (jj_scan_token(ROUND)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_141()) + if (jj_3R_147()) jj_scanpos = xsp; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_84(){ + private boolean jj_3R_95(){ if (jj_scan_token(RAND)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_140()) + if (jj_3R_139()) jj_scanpos = xsp; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_83(){ + private boolean jj_3R_94(){ if (jj_scan_token(RADIANS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_82(){ + private boolean jj_3R_93(){ if (jj_scan_token(POWER)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_81(){ + private boolean jj_3R_92(){ if (jj_scan_token(PI)) return true; if (jj_scan_token(LEFT_PAR)) @@ -4721,129 +4694,121 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_80(){ + private boolean jj_3R_91(){ if (jj_scan_token(MOD)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_79(){ + private boolean jj_3R_90(){ if (jj_scan_token(LOG10)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_78(){ + private boolean jj_3R_89(){ if (jj_scan_token(LOG)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_77(){ + private boolean jj_3R_88(){ if (jj_scan_token(FLOOR)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_76(){ + private boolean jj_3R_87(){ if (jj_scan_token(EXP)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_43(){ + private boolean jj_3R_52(){ if (jj_scan_token(CONCAT)) return true; - if (jj_3R_35()) + if (jj_3R_36()) return true; return false; } - private boolean jj_3R_75(){ + private boolean jj_3R_86(){ if (jj_scan_token(DEGREES)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_74(){ + private boolean jj_3R_85(){ if (jj_scan_token(CEILING)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_73(){ + private boolean jj_3R_84(){ if (jj_scan_token(ABS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_101()) + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) 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_27(){ - if (jj_3R_35()) + private boolean jj_3R_29(){ + if (jj_3R_36()) return true; Token xsp; while(true){ xsp = jj_scanpos; - if (jj_3R_43()){ + if (jj_3R_52()){ jj_scanpos = xsp; break; } @@ -4851,38 +4816,38 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_53(){ + private boolean jj_3R_63(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_73()){ + if (jj_3R_84()){ jj_scanpos = xsp; - if (jj_3R_74()){ + if (jj_3R_85()){ jj_scanpos = xsp; - if (jj_3R_75()){ + if (jj_3R_86()){ jj_scanpos = xsp; - if (jj_3R_76()){ + if (jj_3R_87()){ jj_scanpos = xsp; - if (jj_3R_77()){ + if (jj_3R_88()){ jj_scanpos = xsp; - if (jj_3R_78()){ + if (jj_3R_89()){ jj_scanpos = xsp; - if (jj_3R_79()){ + if (jj_3R_90()){ jj_scanpos = xsp; - if (jj_3R_80()){ + if (jj_3R_91()){ jj_scanpos = xsp; - if (jj_3R_81()){ + if (jj_3R_92()){ jj_scanpos = xsp; - if (jj_3R_82()){ + if (jj_3R_93()){ jj_scanpos = xsp; - if (jj_3R_83()){ + if (jj_3R_94()){ jj_scanpos = xsp; - if (jj_3R_84()){ + if (jj_3R_95()){ jj_scanpos = xsp; - if (jj_3R_85()){ + if (jj_3R_96()){ jj_scanpos = xsp; - if (jj_3R_86()){ + if (jj_3R_97()){ jj_scanpos = xsp; - if (jj_3R_87()) + if (jj_3R_98()) return true; } } @@ -4901,58 +4866,54 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_68(){ + private boolean jj_3R_61(){ if (jj_scan_token(MINUS)) return true; return false; } - private boolean jj_3R_41(){ - if (jj_3R_24()) + private boolean jj_3R_50(){ + if (jj_3R_26()) return true; return false; } - private boolean jj_3R_40(){ - if (jj_3R_55()) + private boolean jj_3R_49(){ + if (jj_3R_65()) return true; return false; } - private boolean jj_3R_15(){ - if (jj_3R_14()) - return true; - if (jj_scan_token(DOT)) + private boolean jj_3R_48(){ + if (jj_3R_64()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_30()) - jj_scanpos = xsp; return false; } - private boolean jj_3R_39(){ - if (jj_3R_54()) + private boolean jj_3R_32(){ + if (jj_3R_14()) + return true; + if (jj_scan_token(DOT)) return true; return false; } - private boolean jj_3R_38(){ - if (jj_3R_53()) + private boolean jj_3R_47(){ + if (jj_3R_63()) return true; return false; } - private boolean jj_3R_23(){ + private boolean jj_3R_25(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_38()){ + if (jj_3R_47()){ jj_scanpos = xsp; - if (jj_3R_39()){ + if (jj_3R_48()){ jj_scanpos = xsp; - if (jj_3R_40()){ + if (jj_3R_49()){ jj_scanpos = xsp; - if (jj_3R_41()) + if (jj_3R_50()) return true; } } @@ -4960,24 +4921,36 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3_10(){ - if (jj_3R_23()) + private boolean jj_3_12(){ + if (jj_3R_25()) return true; return false; } - private boolean jj_3R_48(){ + private boolean jj_3R_45(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(8)){ jj_scanpos = xsp; - if (jj_3R_68()) + if (jj_3R_61()) return true; } return false; } - private boolean jj_3R_133(){ + 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_32()) + jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_135(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(10)){ @@ -4985,53 +4958,104 @@ public class ADQLParser implements ADQLParserConstants { if (jj_scan_token(11)) return true; } - if (jj_3R_120()) + if (jj_3R_128()) return true; return false; } - private boolean jj_3R_34(){ + private boolean jj_3R_24(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_48()) + if (jj_3R_45()) jj_scanpos = xsp; xsp = jj_scanpos; - if (jj_3_10()){ + if (jj_3_12()){ jj_scanpos = xsp; - if (jj_3R_49()) + if (jj_3R_46()) return true; } return false; } - private boolean jj_3R_70(){ + private boolean jj_3R_77(){ if (jj_scan_token(COORDSYS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_113()) + if (jj_3R_119()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_146(){ - if (jj_3R_21()) + private boolean jj_3R_143(){ + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_144(){ - if (jj_3R_21()) + private boolean jj_3R_141(){ + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_137(){ + private boolean jj_3R_138(){ if (jj_scan_token(COMMA)) return true; + if (jj_3R_137()) + return true; + return false; + } + + private boolean jj_3R_129(){ + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(8)){ + jj_scanpos = xsp; + if (jj_scan_token(9)) + return true; + } + if (jj_3R_112()) + return true; + return false; + } + + private boolean jj_3R_59(){ + if (jj_scan_token(POINT)) + return true; + if (jj_scan_token(LEFT_PAR)) + return true; + if (jj_3R_136()) + return true; + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_137()) + return true; + if (jj_scan_token(RIGHT_PAR)) + return true; + return false; + } + + private boolean jj_3R_128(){ + if (jj_3R_24()) + return true; + Token xsp; + xsp = jj_scanpos; if (jj_3R_135()) + jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_42(){ + if (jj_scan_token(REGION)) + return true; + if (jj_scan_token(LEFT_PAR)) + return true; + if (jj_3R_29()) + return true; + if (jj_scan_token(RIGHT_PAR)) return true; return false; } @@ -5051,7 +5075,7 @@ public class ADQLParser implements ADQLParserConstants { } private boolean jj_3R_19(){ - if (jj_3R_34()) + if (jj_3R_24()) return true; Token xsp; xsp = jj_scanpos; @@ -5069,73 +5093,76 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_121(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)){ - jj_scanpos = xsp; - if (jj_scan_token(9)) - return true; - } - if (jj_3R_101()) - return true; - return false; - } - private boolean jj_3R_20(){ - if (jj_3R_35()) + if (jj_3R_36()) return true; if (jj_scan_token(CONCAT)) return true; return false; } - private boolean jj_3R_136(){ - if (jj_scan_token(POINT)) + private boolean jj_3R_41(){ + if (jj_scan_token(POLYGON)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_134()) + if (jj_3R_136()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_135()) + if (jj_3R_137()) return true; + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_137()) + return true; + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_137()) + return true; + Token xsp; + while(true){ + xsp = jj_scanpos; + if (jj_3R_138()){ + jj_scanpos = xsp; + break; + } + } if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_120(){ - if (jj_3R_34()) + private boolean jj_3R_72(){ + if (jj_3R_22()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_133()) - jj_scanpos = xsp; return false; } - private boolean jj_3R_127(){ - if (jj_scan_token(REGION)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_27()) + private boolean jj_3R_40(){ + if (jj_3R_59()) return true; - if (jj_scan_token(RIGHT_PAR)) + return false; + } + + private boolean jj_3_10(){ + if (jj_3R_23()) return true; return false; } - private boolean jj_3_9(){ - if (jj_3R_22()) + private boolean jj_3R_112(){ + if (jj_3R_128()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_129()) + jj_scanpos = xsp; return false; } - private boolean jj_3_8(){ - if (jj_3R_21()) + private boolean jj_3_9(){ + if (jj_3R_22()) return true; return false; } @@ -5154,46 +5181,34 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3_5(){ - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(64)){ - jj_scanpos = xsp; - if (jj_3R_20()) - return true; - } - return false; - } - - private boolean jj_3R_126(){ - if (jj_scan_token(POLYGON)) + private boolean jj_3R_39(){ + if (jj_scan_token(CIRCLE)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_134()) + if (jj_3R_136()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_135()) + if (jj_3R_137()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_135()) - return true; - if (jj_scan_token(COMMA)) + if (jj_3R_112()) return true; - if (jj_3R_135()) + if (jj_scan_token(RIGHT_PAR)) return true; + return false; + } + + private boolean jj_3_5(){ Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_137()){ - jj_scanpos = xsp; - break; - } + xsp = jj_scanpos; + if (jj_scan_token(64)){ + jj_scanpos = xsp; + if (jj_3R_20()) + return true; } - if (jj_scan_token(RIGHT_PAR)) - return true; return false; } @@ -5219,181 +5234,145 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_63(){ - if (jj_3R_34()) - return true; - return false; - } - - private boolean jj_3R_125(){ - if (jj_3R_136()) + private boolean jj_3R_38(){ + if (jj_scan_token(CENTROID)) + return true; + if (jj_scan_token(LEFT_PAR)) + return true; + if (jj_3R_119()) + return true; + if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_62(){ - if (jj_3R_35()) + private boolean jj_3_11(){ + if (jj_3R_24()) return true; return false; } - private boolean jj_3R_61(){ - if (jj_3R_21()) + private boolean jj_3R_71(){ + if (jj_3R_36()) return true; return false; } - private boolean jj_3R_101(){ - if (jj_3R_120()) + private boolean jj_3R_70(){ + if (jj_3R_22()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_121()) - jj_scanpos = xsp; return false; } - private boolean jj_3R_60(){ - if (jj_3R_102()) + private boolean jj_3_8(){ + if (jj_3R_21()) return true; return false; } - private boolean jj_3R_59(){ - if (jj_3R_24()) + private boolean jj_3R_69(){ + if (jj_3R_26()) return true; return false; } - private boolean jj_3R_58(){ + private boolean jj_3R_68(){ if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_42()) + if (jj_3R_51()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_57(){ - if (jj_3R_27()) - return true; - return false; - } - - private boolean jj_3R_124(){ - if (jj_scan_token(CIRCLE)) + private boolean jj_3R_37(){ + if (jj_scan_token(BOX)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_134()) + if (jj_3R_136()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_135()) + if (jj_3R_137()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_101()) + if (jj_3R_112()) + return true; + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_112()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_44(){ - if (jj_scan_token(SELECT)) + private boolean jj_3R_67(){ + if (jj_3R_29()) return true; return false; } - private boolean jj_3R_56(){ - if (jj_3R_101()) + private boolean jj_3R_53(){ + if (jj_scan_token(SELECT)) return true; return false; } - private boolean jj_3R_123(){ - if (jj_scan_token(CENTROID)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_113()) + private boolean jj_3R_66(){ + if (jj_3R_112()) return true; - if (jj_scan_token(RIGHT_PAR)) + return false; + } + + private boolean jj_3R_150(){ + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_117(){ + private boolean jj_3R_123(){ if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_27()) + if (jj_3R_29()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_16(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_31()) + private boolean jj_3R_142(){ + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_122(){ - if (jj_scan_token(BOX)) - return true; + private boolean jj_3R_16(){ if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_134()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_135()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_101()) - return true; - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_101()) - return true; - if (jj_scan_token(RIGHT_PAR)) - return true; - return false; - } - - private boolean jj_3R_116(){ - if (jj_3R_21()) + if (jj_3R_33()) return true; return false; } - private boolean jj_3R_42(){ + private boolean jj_3R_21(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_56()){ + if (jj_3R_37()){ jj_scanpos = xsp; - if (jj_3R_57()){ + if (jj_3R_38()){ jj_scanpos = xsp; - if (jj_3R_58()){ + if (jj_3R_39()){ jj_scanpos = xsp; - if (jj_3R_59()){ + if (jj_3R_40()){ jj_scanpos = xsp; - if (jj_3R_60()){ + if (jj_3R_41()){ jj_scanpos = xsp; - if (jj_3R_61()){ - jj_scanpos = xsp; - if (jj_3R_62()){ - jj_scanpos = xsp; - if (jj_3R_63()) - return true; - } - } + if (jj_3R_42()) + return true; } } } @@ -5402,45 +5381,48 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_115(){ - if (jj_3R_22()) - return true; - return false; - } - - private boolean jj_3R_150(){ - if (jj_3R_21()) + private boolean jj_3R_146(){ + if (jj_3R_51()) return true; return false; } - private boolean jj_3R_105(){ - if (jj_scan_token(FULL)) + private boolean jj_3R_140(){ + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_145(){ - if (jj_3R_136()) + private boolean jj_3R_122(){ + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_102(){ + private boolean jj_3R_51(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_122()){ + if (jj_3R_66()){ jj_scanpos = xsp; - if (jj_3R_123()){ + if (jj_3R_67()){ jj_scanpos = xsp; - if (jj_3R_124()){ + if (jj_3R_68()){ jj_scanpos = xsp; - if (jj_3R_125()){ + if (jj_3R_69()){ jj_scanpos = xsp; - if (jj_3R_126()){ + if (jj_3_8()){ jj_scanpos = xsp; - if (jj_3R_127()) - return true; + if (jj_3R_70()){ + jj_scanpos = xsp; + if (jj_3R_71()){ + jj_scanpos = xsp; + if (jj_3_11()){ + jj_scanpos = xsp; + if (jj_3R_72()) + return true; + } + } + } } } } @@ -5449,123 +5431,100 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_151(){ - if (jj_3R_42()) + private boolean jj_3R_145(){ + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_143(){ - if (jj_3R_136()) + private boolean jj_3R_121(){ + if (jj_3R_23()) return true; return false; } - private boolean jj_3R_112(){ - if (jj_scan_token(LEFT_PAR)) + private boolean jj_3R_149(){ + if (jj_3R_59()) return true; - if (jj_3R_101()) + return false; + } + + private boolean jj_3R_136(){ + if (jj_3R_29()) return true; - if (jj_scan_token(RIGHT_PAR)) + return false; + } + + private boolean jj_3R_115(){ + if (jj_scan_token(FULL)) return true; return false; } - private boolean jj_3R_148(){ - if (jj_3R_21()) + private boolean jj_3R_83(){ + if (jj_scan_token(LEFT_PAR)) + return true; + if (jj_3R_112()) + return true; + if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_111(){ - if (jj_3R_129()) + private boolean jj_3R_144(){ + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_149(){ - if (jj_3R_136()) + private boolean jj_3R_82(){ + if (jj_3R_127()) return true; return false; } - private boolean jj_3R_71(){ + private boolean jj_3R_78(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_115()){ + if (jj_3R_121()){ jj_scanpos = xsp; - if (jj_3R_116()){ + if (jj_3R_122()){ jj_scanpos = xsp; - if (jj_3R_117()) + if (jj_3R_123()) return true; } } return false; } - private boolean jj_3R_110(){ - if (jj_3R_21()) - return true; - return false; - } - - private boolean jj_3R_134(){ - if (jj_3R_27()) - return true; - return false; - } - - private boolean jj_3R_109(){ - if (jj_3R_128()) + private boolean jj_3R_81(){ + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_147(){ - if (jj_3R_136()) + private boolean jj_3R_80(){ + if (jj_3R_126()) return true; return false; } - private boolean jj_3R_108(){ + private boolean jj_3R_118(){ if (jj_scan_token(FULL)) return true; return false; } - private boolean jj_3R_69(){ - Token xsp; - xsp = jj_scanpos; - if (jj_3R_109()){ - jj_scanpos = xsp; - if (jj_3R_110()){ - jj_scanpos = xsp; - if (jj_3R_111()){ - jj_scanpos = xsp; - if (jj_3R_112()) - return true; - } - } - } - return false; - } - - private boolean jj_3R_31(){ - if (jj_3R_44()) - return true; - return false; - } - - private boolean jj_3R_100(){ + private boolean jj_3R_111(){ if (jj_scan_token(DISTANCE)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_147()){ + if (jj_3R_144()){ jj_scanpos = xsp; - if (jj_3R_148()) + if (jj_3R_145()) return true; } if (jj_scan_token(COMMA)) @@ -5581,16 +5540,16 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_99(){ + private boolean jj_3R_110(){ if (jj_scan_token(COORD2)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_145()){ + if (jj_3R_142()){ jj_scanpos = xsp; - if (jj_3R_146()) + if (jj_3R_143()) return true; } if (jj_scan_token(RIGHT_PAR)) @@ -5598,16 +5557,16 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_98(){ + private boolean jj_3R_109(){ if (jj_scan_token(COORD1)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_143()){ + if (jj_3R_140()){ jj_scanpos = xsp; - if (jj_3R_144()) + if (jj_3R_141()) return true; } if (jj_scan_token(RIGHT_PAR)) @@ -5615,36 +5574,42 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_97(){ + private boolean jj_3R_108(){ if (jj_scan_token(AREA)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_113()) + if (jj_3R_119()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_104(){ - if (jj_scan_token(RIGHT)) - return true; - return false; - } - - private boolean jj_3R_153(){ + private boolean jj_3R_62(){ Token xsp; xsp = jj_scanpos; - if (jj_scan_token(8)){ + if (jj_3R_80()){ jj_scanpos = xsp; - if (jj_scan_token(9)) - return true; + if (jj_3R_81()){ + jj_scanpos = xsp; + if (jj_3R_82()){ + jj_scanpos = xsp; + if (jj_3R_83()) + return true; + } + } } return false; } - private boolean jj_3R_96(){ + private boolean jj_3R_33(){ + if (jj_3R_53()) + return true; + return false; + } + + private boolean jj_3R_107(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(59)){ @@ -5654,21 +5619,38 @@ public class ADQLParser implements ADQLParserConstants { } if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_113()) + if (jj_3R_119()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_113()) + if (jj_3R_119()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } + private boolean jj_3R_114(){ + if (jj_scan_token(RIGHT)) + return true; + return false; + } + private boolean jj_3R_152(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_153()) + if (jj_scan_token(8)){ + jj_scanpos = xsp; + if (jj_scan_token(9)) + return true; + } + return false; + } + + private boolean jj_3R_151(){ + Token xsp; + xsp = jj_scanpos; + if (jj_3R_152()) jj_scanpos = xsp; if (jj_scan_token(UNSIGNED_INTEGER)) return true; @@ -5686,7 +5668,7 @@ public class ADQLParser implements ADQLParserConstants { private Token jj_scanpos, jj_lastpos; private int jj_la; private int jj_gen; - final private int[] jj_la1 = new int[98]; + final private int[] jj_la1 = new int[97]; static private int[] jj_la1_0; static private int[] jj_la1_1; static private int[] jj_la1_2; @@ -5699,22 +5681,22 @@ public class ADQLParser implements ADQLParserConstants { } private static void jj_la1_init_0(){ - jj_la1_0 = new int[]{0x41,0x0,0x0,0x0,0x0,0x80000,0x100000,0x20,0x0,0x0,0x400000,0x400000,0x400,0x304,0x20,0x20,0x20,0x0,0x10,0x10,0x10,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,}; + jj_la1_0 = new int[]{0x41,0x0,0x0,0x0,0x0,0x80000,0x100000,0x20,0x0,0x0,0x400000,0x400000,0x400,0x304,0x20,0x20,0x20,0x0,0x10,0x10,0x10,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,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,0x800,0x1000,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0xc000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f0000,0x0,0x7e00000,0xf81f0000,0x0,0x0,0x0,0x0,0x0,0x0,0x1f0000,0x0,0x0,0x0,0x7e00000,0x8,0x6,0x6,0x8,0x0,0x8,0x8,0x0,0x108,0x200,0xffff0000,0x0,0x8,0x8,0x0,0x0,0x0,0xffff0000,0xf0000,0x0,0x1f0000,0x18000000,0x1000000,0x1000000,0x1000000,0x1000000,0xf8000000,0x0,0x7e00000,0xf8000000,0xf81f0000,0x0,0x0,0x0,0x0,0x0,0xffff0000,}; + jj_la1_1 = new int[]{0x0,0x1,0x800,0x1000,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0xc000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f0000,0x0,0x0,0x0,0x7e00000,0x8,0x6,0x6,0x8,0x0,0x8,0x8,0x0,0x108,0x200,0xffff0000,0x0,0x8,0x8,0x0,0x0,0x0,0xffff0000,0xf0000,0x0,0x1f0000,0x18000000,0x1000000,0x1000000,0x1000000,0x1000000,0xf8000000,0x0,0x7e00000,0xf8000000,0xf81f0000,0x0,0x0,0x0,0x0,0x0,0xffff0000,}; } private static void jj_la1_init_2(){ - jj_la1_2 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x0,0x80000000,0x0,0x91ffffff,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x80000000,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x0,0x0,0x80000000,0x90000000,0x0,0x81fffffe,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x1,0x90000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x91ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x91ffffff,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x80000000,0x80000000,0x2,0x0,0x0,0x1fffffe,0x81fffffe,0x0,0x0,0x1fffc,0x1fe0000,0x0,0x91ffffff,}; + jj_la1_2 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x0,0x80000000,0x0,0x91ffffff,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x80000000,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x0,0x0,0x80000000,0x90000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x1,0x90000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x91ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x91ffffff,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x80000000,0x80000000,0x2,0x0,0x0,0x1fffffe,0x81fffffe,0x0,0x0,0x1fffc,0x1fe0000,0x0,0x91ffffff,}; } private static void jj_la1_init_3(){ - jj_la1_3 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1d,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x18,0x0,0x0,0x1d,0x1,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x1d,}; + jj_la1_3 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1d,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x18,0x0,0x0,0x1d,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x1d,}; } - final private JJCalls[] jj_2_rtns = new JJCalls[16]; + final private JJCalls[] jj_2_rtns = new JJCalls[18]; private boolean jj_rescan = false; private int jj_gc = 0; @@ -5734,7 +5716,7 @@ public class ADQLParser implements ADQLParserConstants { token = new Token(); jj_ntk = -1; jj_gen = 0; - for(int i = 0; i < 98; i++) + for(int i = 0; i < 97; i++) jj_la1[i] = -1; for(int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -5756,7 +5738,7 @@ public class ADQLParser implements ADQLParserConstants { token = new Token(); jj_ntk = -1; jj_gen = 0; - for(int i = 0; i < 98; i++) + for(int i = 0; i < 97; i++) jj_la1[i] = -1; for(int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -5769,7 +5751,7 @@ public class ADQLParser implements ADQLParserConstants { token = new Token(); jj_ntk = -1; jj_gen = 0; - for(int i = 0; i < 98; i++) + for(int i = 0; i < 97; i++) jj_la1[i] = -1; for(int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -5782,7 +5764,7 @@ public class ADQLParser implements ADQLParserConstants { token = new Token(); jj_ntk = -1; jj_gen = 0; - for(int i = 0; i < 98; i++) + for(int i = 0; i < 97; i++) jj_la1[i] = -1; for(int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -5794,7 +5776,7 @@ public class ADQLParser implements ADQLParserConstants { token = new Token(); jj_ntk = -1; jj_gen = 0; - for(int i = 0; i < 98; i++) + for(int i = 0; i < 97; i++) jj_la1[i] = -1; for(int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -5806,7 +5788,7 @@ public class ADQLParser implements ADQLParserConstants { token = new Token(); jj_ntk = -1; jj_gen = 0; - for(int i = 0; i < 98; i++) + for(int i = 0; i < 97; i++) jj_la1[i] = -1; for(int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -5945,7 +5927,7 @@ public class ADQLParser implements ADQLParserConstants { la1tokens[jj_kind] = true; jj_kind = -1; } - for(int i = 0; i < 98; i++){ + for(int i = 0; i < 97; i++){ if (jj_la1[i] == jj_gen){ for(int j = 0; j < 32; j++){ if ((jj_la1_0[i] & (1 << j)) != 0){ @@ -6041,7 +6023,7 @@ public class ADQLParser implements ADQLParserConstants { private void jj_rescan_token(){ jj_rescan = true; - for(int i = 0; i < 16; i++){ + for(int i = 0; i < 18; i++){ try{ JJCalls p = jj_2_rtns[i]; do{ @@ -6097,6 +6079,12 @@ public class ADQLParser implements ADQLParserConstants { case 15: jj_3_16(); break; + case 16: + jj_3_17(); + break; + case 17: + jj_3_18(); + break; } } p = p.next; diff --git a/src/adql/parser/ParseException.java b/src/adql/parser/ParseException.java index 2751dcd..230d7ce 100644 --- a/src/adql/parser/ParseException.java +++ b/src/adql/parser/ParseException.java @@ -3,7 +3,17 @@ * * Modified by Grégory Mantelet (CDS), on March 2017 * Modifications: - * - several small modifications. + * - addition of a getPosition() function in order to get the exact location + * of the error in the original ADQL query + * - generate the error message at creation instead of doing that at each + * call of getMessage() + * - use of StringBuffer to build the error message + * - small other alterations of the generated error message + * + * Modified by Grégory Mantelet (ARI), on Sept. 2017 + * Modifications: + * - addition of a HINT in the error message when an ADQL reserved + * word is at the origin of the error (see initialise(...)) * * /!\ DO NOT RE-GENERATE THIS FILE /!\ * In case of re-generation, replace it by ParseException.java.backup (but maybe @@ -95,6 +105,22 @@ public class ParseException extends Exception { /** Line in the ADQL query where the exception occurs. */ protected TextPosition position = null; + /** Regular expression listing all ADQL reserved words. + * + * <p><i>Note 1: + * This list is built NOT from the list given in the ADQL-2.0 standard, + * but from the collation of all words potentially used in an ADQL query + * (including standard function names). + * </i></p> + * + * <p><i>Note 2: + * This regular expression is only used to display an appropriate hint + * to the user in the error message if a such word is at the origin of + * the error. (see {@link #initialise(Token, int[][], String[])} for more + * details). + * </i></p> */ + private final static String ADQL_RESERVED_WORDS_REGEX = "(ABS|ACOS|AREA|ASIN|ATAN|ATAN2|BOX|CEILING|CENTROID|CIRCLE|CONTAINS|COORD1|COORD2|COORDSYS|COS|DEGREES|DISTANCE|EXP|FLOOR|INTERSECTS|LOG|LOG10|MOD|PI|POINT|POLYGON|POWER|RADIANS|REGION|RAND|ROUND|SIN|SQRT|TOP|TAN|TRUNCATE|SELECT|TOP|DISTINCT|ALL|AS|COUNT|AVG|MAX|MIN|SUM|FROM|JOIN|CROSS|INNER|OUTER|LEFT|RIGHT|FULL|NATURAL|USING|ON|WHERE|IS|NOT|AND|OR|EXISTS|IN|LIKE|NULL|BETWEEN|ORDER|ASC|DESC|GROUP|BY|HAVING)"; + /** * Gets the position in the ADQL query of the token which generates this exception. * @@ -130,17 +156,18 @@ public class ParseException extends Exception { StringBuffer msg = new StringBuffer(); msg.append(" Encountered \""); Token tok = currentToken.next; + StringBuffer tokenName = new StringBuffer(); for(int i = 0; i < maxSize; i++){ if (i != 0) - msg.append(' '); + tokenName.append(' '); if (tok.kind == 0){ - msg.append(tokenImage[0]); + tokenName.append(tokenImage[0]); break; } - msg.append(add_escapes(tok.image)); + tokenName.append(add_escapes(tok.image)); tok = tok.next; } - msg.append("\"."); + msg.append(tokenName.toString()).append("\"."); // Append the expected tokens list: if (expectedTokenSequences.length == 1){ @@ -150,6 +177,11 @@ public class ParseException extends Exception { } msg.append(expected); + // Append a hint about reserved words if it is one: + String word = tokenName.toString().trim(); + if (word.toUpperCase().matches(ADQL_RESERVED_WORDS_REGEX)) + msg.append(System.getProperty("line.separator", "\n")).append("(HINT: \"").append(word).append("\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)"); + return msg.toString(); /*String eol = System.getProperty("line.separator", "\n"); StringBuffer expected = new StringBuffer(); diff --git a/src/adql/parser/ParseException.java.backup b/src/adql/parser/ParseException.java.backup index 2751dcd..230d7ce 100644 --- a/src/adql/parser/ParseException.java.backup +++ b/src/adql/parser/ParseException.java.backup @@ -3,7 +3,17 @@ * * Modified by Grégory Mantelet (CDS), on March 2017 * Modifications: - * - several small modifications. + * - addition of a getPosition() function in order to get the exact location + * of the error in the original ADQL query + * - generate the error message at creation instead of doing that at each + * call of getMessage() + * - use of StringBuffer to build the error message + * - small other alterations of the generated error message + * + * Modified by Grégory Mantelet (ARI), on Sept. 2017 + * Modifications: + * - addition of a HINT in the error message when an ADQL reserved + * word is at the origin of the error (see initialise(...)) * * /!\ DO NOT RE-GENERATE THIS FILE /!\ * In case of re-generation, replace it by ParseException.java.backup (but maybe @@ -95,6 +105,22 @@ public class ParseException extends Exception { /** Line in the ADQL query where the exception occurs. */ protected TextPosition position = null; + /** Regular expression listing all ADQL reserved words. + * + * <p><i>Note 1: + * This list is built NOT from the list given in the ADQL-2.0 standard, + * but from the collation of all words potentially used in an ADQL query + * (including standard function names). + * </i></p> + * + * <p><i>Note 2: + * This regular expression is only used to display an appropriate hint + * to the user in the error message if a such word is at the origin of + * the error. (see {@link #initialise(Token, int[][], String[])} for more + * details). + * </i></p> */ + private final static String ADQL_RESERVED_WORDS_REGEX = "(ABS|ACOS|AREA|ASIN|ATAN|ATAN2|BOX|CEILING|CENTROID|CIRCLE|CONTAINS|COORD1|COORD2|COORDSYS|COS|DEGREES|DISTANCE|EXP|FLOOR|INTERSECTS|LOG|LOG10|MOD|PI|POINT|POLYGON|POWER|RADIANS|REGION|RAND|ROUND|SIN|SQRT|TOP|TAN|TRUNCATE|SELECT|TOP|DISTINCT|ALL|AS|COUNT|AVG|MAX|MIN|SUM|FROM|JOIN|CROSS|INNER|OUTER|LEFT|RIGHT|FULL|NATURAL|USING|ON|WHERE|IS|NOT|AND|OR|EXISTS|IN|LIKE|NULL|BETWEEN|ORDER|ASC|DESC|GROUP|BY|HAVING)"; + /** * Gets the position in the ADQL query of the token which generates this exception. * @@ -130,17 +156,18 @@ public class ParseException extends Exception { StringBuffer msg = new StringBuffer(); msg.append(" Encountered \""); Token tok = currentToken.next; + StringBuffer tokenName = new StringBuffer(); for(int i = 0; i < maxSize; i++){ if (i != 0) - msg.append(' '); + tokenName.append(' '); if (tok.kind == 0){ - msg.append(tokenImage[0]); + tokenName.append(tokenImage[0]); break; } - msg.append(add_escapes(tok.image)); + tokenName.append(add_escapes(tok.image)); tok = tok.next; } - msg.append("\"."); + msg.append(tokenName.toString()).append("\"."); // Append the expected tokens list: if (expectedTokenSequences.length == 1){ @@ -150,6 +177,11 @@ public class ParseException extends Exception { } msg.append(expected); + // Append a hint about reserved words if it is one: + String word = tokenName.toString().trim(); + if (word.toUpperCase().matches(ADQL_RESERVED_WORDS_REGEX)) + msg.append(System.getProperty("line.separator", "\n")).append("(HINT: \"").append(word).append("\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)"); + return msg.toString(); /*String eol = System.getProperty("line.separator", "\n"); StringBuffer expected = new StringBuffer(); diff --git a/src/adql/parser/adqlGrammar.jj b/src/adql/parser/adqlGrammar.jj index 7f67e4e..8eb9fcc 100644 --- a/src/adql/parser/adqlGrammar.jj +++ b/src/adql/parser/adqlGrammar.jj @@ -1192,10 +1192,21 @@ ADQLOperand ValueExpression(): {ADQLOperand valueExpr = null; Token left, right; | LOOKAHEAD(<COORDSYS> | (StringFactor() <CONCAT>)) valueExpr=StringExpression() | LOOKAHEAD(<LEFT_PAR>) left=<LEFT_PAR> valueExpr=ValueExpression() right=<RIGHT_PAR> { valueExpr = queryFactory.createWrappedOperand(valueExpr); ((WrappedOperand)valueExpr).setPosition(new TextPosition(left, right)); } | LOOKAHEAD(<REGULAR_IDENTIFIER> <LEFT_PAR>) valueExpr=UserDefinedFunction() - | valueExpr=GeometryValueFunction() + | LOOKAHEAD(2) valueExpr=GeometryValueFunction() | LOOKAHEAD(Column()) valueExpr=Column() | LOOKAHEAD(String()) valueExpr=StringFactor() - | valueExpr=Factor()) + | LOOKAHEAD(3) valueExpr=Factor() + + /* At this position in this switch, all possibilities (including + * Column()) have already been tested and failed. + * + * So, this final choice actually aims to throw an error set with the + * current token and with an error message implying that a column name + * was expected (which is generally the case in an ADQL query). + * + * Note: This choice will generally be reached if an unexpected ADQL + * word is ending the query. */ + | valueExpr=Column() ) {return valueExpr;} }catch(Exception ex){ throw generateParseException(ex); diff --git a/test/adql/parser/TestADQLParser.java b/test/adql/parser/TestADQLParser.java index 679ed01..bea813b 100644 --- a/test/adql/parser/TestADQLParser.java +++ b/test/adql/parser/TestADQLParser.java @@ -206,4 +206,82 @@ public class TestADQLParser { } } + @Test + public void testADQLReservedWord(){ + ADQLParser parser = new ADQLParser(); + + final String hintAbs = "\n(HINT: \"abs\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)"; + final String hintPoint = "\n(HINT: \"point\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)"; + final String hintExists = "\n(HINT: \"exists\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)"; + final String hintLike = "\n(HINT: \"LIKE\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)"; + + /* TEST AS A COLUMN/TABLE/SCHEMA NAME... */ + // ...with a numeric function name (but no param): + try{ + parser.parseQuery("select abs from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintAbs)); + } + // ...with a geometric function name (but no param): + try{ + parser.parseQuery("select point from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintPoint)); + } + // ...with an ADQL function name (but no param): + try{ + parser.parseQuery("select exists from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintExists)); + } + // ...with an ADQL syntax item: + try{ + parser.parseQuery("select LIKE from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintLike)); + } + + /* TEST AS AN ALIAS... */ + // ...with a numeric function name (but no param): + try{ + parser.parseQuery("select aCol AS abs from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintAbs)); + } + // ...with a geometric function name (but no param): + try{ + parser.parseQuery("select aCol AS point from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintPoint)); + } + // ...with an ADQL function name (but no param): + try{ + parser.parseQuery("select aCol AS exists from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintExists)); + } + // ...with an ADQL syntax item: + try{ + parser.parseQuery("select aCol AS LIKE from aTable"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintLike)); + } + + /* TEST AT THE END OF THE QUERY (AND IN A WHERE) */ + try{ + parser.parseQuery("select aCol from aTable WHERE toto = abs"); + }catch(Throwable t){ + assertEquals(ParseException.class, t.getClass()); + assertTrue(t.getMessage().endsWith(hintAbs)); + } + } + } -- GitLab