From 8b1c7efdc5e013a4962014a289d4fe65110320aa Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Mon, 8 Jun 2015 20:14:06 +0200 Subject: [PATCH] [ADQL] Fix merge side-effects (e.g. '' were not translated any more as a single ' ; NullPointerExceptions when building positions) + transform the test main class for positions into a JUnit test case + Fix some position mistakes. (note: a tabulation character seems to be interpreted by JavaCC as 8 characters) --- src/adql/parser/ADQLParser.java | 1735 ++++++----------- src/adql/parser/adqlGrammar.jj | 52 +- test/adql/TestADQLObjectPosition.java | 143 ++ test/adql/TestGetPositionInAllADQLObject.java | 27 - 4 files changed, 764 insertions(+), 1193 deletions(-) create mode 100644 test/adql/TestADQLObjectPosition.java delete mode 100644 test/adql/TestGetPositionInAllADQLObject.java diff --git a/src/adql/parser/ADQLParser.java b/src/adql/parser/ADQLParser.java index 9a57a12..a2b45c9 100644 --- a/src/adql/parser/ADQLParser.java +++ b/src/adql/parser/ADQLParser.java @@ -927,7 +927,7 @@ public class ADQLParser implements ADQLParserConstants { order = OrderItem(); orderBy.add(order); } - orderBy.setPosition(new TextPosition(start.beginLine, start.beginColumn, order.getPosition().endLine, order.getPosition().endColumn)); + orderBy.setPosition(new TextPosition(start, token)); }finally{ trace_return("OrderBy"); } @@ -1512,12 +1512,14 @@ public class ADQLParser implements ADQLParserConstants { final public StringConstant String() throws ParseException{ trace_call("String"); try{ - Token t; + Token t, start = null; String str = ""; StringConstant cst; label_8: while(true){ t = jj_consume_token(STRING_LITERAL); - str += t.image; + str += t.image.substring(1, t.image.length() - 1).replaceAll("''", "'"); + if (start == null) + start = t; switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ case STRING_LITERAL: ; @@ -1528,9 +1530,8 @@ public class ADQLParser implements ADQLParserConstants { } } try{ - str = (str != null) ? str.substring(1, str.length() - 1) : str; cst = queryFactory.createStringConstant(str); - cst.setPosition(new TextPosition(t)); + cst.setPosition(new TextPosition(start, t)); { if (true) return cst; @@ -1751,6 +1752,7 @@ public class ADQLParser implements ADQLParserConstants { StringConstant expr; ADQLColumn column; ADQLOperand op; + Token left, right; try{ switch((jj_ntk == -1) ? jj_ntk() : jj_ntk){ case STRING_LITERAL: @@ -1771,12 +1773,14 @@ public class ADQLParser implements ADQLParserConstants { } break; case LEFT_PAR: - jj_consume_token(LEFT_PAR); + left = jj_consume_token(LEFT_PAR); op = StringExpression(); - jj_consume_token(RIGHT_PAR); + right = jj_consume_token(RIGHT_PAR); + WrappedOperand wop = queryFactory.createWrappedOperand(op); + wop.setPosition(new TextPosition(left, right)); { if (true) - return queryFactory.createWrappedOperand(op); + return wop; } break; default: @@ -1800,16 +1804,18 @@ public class ADQLParser implements ADQLParserConstants { trace_call("ValueExpression"); try{ ADQLOperand valueExpr = null; + Token left, right; 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); + left = jj_consume_token(LEFT_PAR); valueExpr = ValueExpression(); - jj_consume_token(RIGHT_PAR); + right = jj_consume_token(RIGHT_PAR); valueExpr = queryFactory.createWrappedOperand(valueExpr); + ((WrappedOperand)valueExpr).setPosition(new TextPosition(left, right)); }else if (jj_2_7(2147483647)){ valueExpr = UserDefinedFunction(); }else{ @@ -2014,7 +2020,7 @@ public class ADQLParser implements ADQLParserConstants { jj_consume_token(PLUS); break; case MINUS: - jj_consume_token(MINUS); + minusSign = jj_consume_token(MINUS); negative = true; break; default: @@ -2052,9 +2058,13 @@ public class ADQLParser implements ADQLParserConstants { } if (negative){ try{ + TextPosition position = op.getPosition(); op = queryFactory.createNegativeOperand(op); NegativeOperand negativeOp = (NegativeOperand)op; - negativeOp.setPosition(new TextPosition(minusSign.beginLine, minusSign.beginColumn, negativeOp.getPosition().endLine, negativeOp.getPosition().endColumn)); + if (minusSign != null) + negativeOp.setPosition(new TextPosition(minusSign.beginLine, minusSign.beginColumn, position.endLine, position.endColumn)); + else + negativeOp.setPosition(position); }catch(Exception ex){ { if (true) @@ -3801,55 +3811,51 @@ public class ADQLParser implements ADQLParserConstants { } } - 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)) + private boolean jj_3R_116(){ + if (jj_3R_22()) return true; return false; } - private boolean jj_3R_137(){ - if (jj_scan_token(CENTROID)) - return true; - if (jj_scan_token(LEFT_PAR)) + private boolean jj_3R_151(){ + if (jj_3R_21()) return true; - if (jj_3R_122()) + return false; + } + + private boolean jj_3R_104(){ + if (jj_scan_token(FULL)) return true; - if (jj_scan_token(RIGHT_PAR)) + return false; + } + + private boolean jj_3R_146(){ + if (jj_3R_137()) return true; return false; } - private boolean jj_3R_125(){ - if (jj_3R_21()) + private boolean jj_3R_44(){ + if (jj_scan_token(SELECT)) return true; return false; } - private boolean jj_3R_46(){ + private boolean jj_3R_101(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_62()){ + if (jj_3R_123()){ jj_scanpos = xsp; - if (jj_3R_63()){ + if (jj_3R_124()){ jj_scanpos = xsp; - if (jj_3R_64()){ + if (jj_3R_125()){ jj_scanpos = xsp; - if (jj_3R_65()){ + if (jj_3R_126()){ jj_scanpos = xsp; - if (jj_3R_66()){ + if (jj_3R_127()){ jj_scanpos = xsp; - if (jj_3R_67()){ - jj_scanpos = xsp; - if (jj_3R_68()){ - jj_scanpos = xsp; - if (jj_3R_69()) - return true; - } - } + if (jj_3R_128()) + return true; } } } @@ -3858,217 +3864,108 @@ public class ADQLParser implements ADQLParserConstants { 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_124(){ - if (jj_3R_22()) - return true; - return false; - } - - private boolean jj_3R_147(){ - if (jj_scan_token(QUANTIFIER)) - return true; - return false; - } - - private boolean jj_3R_112(){ - if (jj_scan_token(FULL)) + private boolean jj_3R_152(){ + if (jj_3R_42()) 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()) + private boolean jj_3R_144(){ + if (jj_3R_137()) return true; - while(true){ - xsp = jj_scanpos; - if (jj_3R_150()){ - jj_scanpos = xsp; - break; - } - } return false; } - private boolean jj_3R_136(){ - if (jj_scan_token(BOX)) - return true; + private boolean jj_3R_113(){ 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()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_182(){ + private boolean jj_3R_149(){ if (jj_3R_21()) 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_16(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_31()) - return true; - if (jj_scan_token(RIGHT_PAR)) + private boolean jj_3R_112(){ + if (jj_3R_130()) return true; return false; } - private boolean jj_3R_120(){ - if (jj_3R_143()) + private boolean jj_3R_150(){ + if (jj_3R_137()) return true; return false; } - private boolean jj_3R_76(){ + private boolean jj_3R_70(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_124()){ + if (jj_3R_116()){ jj_scanpos = xsp; - if (jj_3R_125()){ + if (jj_3R_117()){ jj_scanpos = xsp; - if (jj_3R_126()) + if (jj_3R_118()) return true; } } return false; } - private boolean jj_3R_119(){ + private boolean jj_3R_111(){ if (jj_3R_21()) return true; return false; } - private boolean jj_3R_177(){ - if (jj_3R_158()) - return true; - return false; - } - - private boolean jj_3R_118(){ - if (jj_3R_142()) - 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_183(){ - if (jj_3R_46()) + private boolean jj_3R_135(){ + if (jj_3R_27()) return true; return false; } - private boolean jj_3R_175(){ - if (jj_3R_158()) + private boolean jj_3R_110(){ + if (jj_3R_129()) return true; return false; } - private boolean jj_3R_180(){ - if (jj_3R_21()) + private boolean jj_3R_16(){ + if (jj_scan_token(LEFT_PAR)) return true; - return false; - } - - private boolean jj_3R_181(){ - if (jj_3R_158()) + if (jj_3R_31()) return true; return false; } - private boolean jj_3R_169(){ - if (jj_3R_27()) + private boolean jj_3R_148(){ + if (jj_3R_137()) return true; return false; } - private boolean jj_3R_115(){ + private boolean jj_3R_107(){ if (jj_scan_token(FULL)) return true; return false; } - private boolean jj_3R_133(){ - if (jj_3R_155()) - return true; - return false; - } - - private boolean jj_3R_74(){ + private boolean jj_3R_68(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_118()){ + if (jj_3R_110()){ jj_scanpos = xsp; - if (jj_3R_119()){ + if (jj_3R_111()){ jj_scanpos = xsp; - if (jj_3R_120()){ + if (jj_3R_112()){ jj_scanpos = xsp; - if (jj_3R_121()) + if (jj_3R_113()) return true; } } @@ -4076,54 +3973,24 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_132(){ - if (jj_3R_154()) - return true; - return false; - } - - private boolean jj_3R_179(){ - if (jj_3R_158()) - 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_111(){ - if (jj_scan_token(RIGHT)) - return true; - return false; - } - - private boolean jj_3R_105(){ + private boolean jj_3R_99(){ if (jj_scan_token(DISTANCE)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_179()){ + if (jj_3R_148()){ jj_scanpos = xsp; - if (jj_3R_180()) + if (jj_3R_149()) return true; } if (jj_scan_token(COMMA)) return true; xsp = jj_scanpos; - if (jj_3R_181()){ + if (jj_3R_150()){ jj_scanpos = xsp; - if (jj_3R_182()) + if (jj_3R_151()) return true; } if (jj_scan_token(RIGHT_PAR)) @@ -4131,16 +3998,16 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_104(){ + private boolean jj_3R_98(){ if (jj_scan_token(COORD2)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_177()){ + if (jj_3R_146()){ jj_scanpos = xsp; - if (jj_3R_178()) + if (jj_3R_147()) return true; } if (jj_scan_token(RIGHT_PAR)) @@ -4148,37 +4015,16 @@ public class ADQLParser implements ADQLParserConstants { 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_103(){ + private boolean jj_3R_97(){ if (jj_scan_token(COORD1)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_175()){ + if (jj_3R_144()){ jj_scanpos = xsp; - if (jj_3R_176()) + if (jj_3R_145()) return true; } if (jj_scan_token(RIGHT_PAR)) @@ -4186,40 +4032,19 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_102(){ + private boolean jj_3R_96(){ if (jj_scan_token(AREA)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_122()) + if (jj_3R_114()) return true; if (jj_scan_token(RIGHT_PAR)) 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_101(){ + private boolean jj_3R_95(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(58)){ @@ -4229,43 +4054,62 @@ public class ADQLParser implements ADQLParserConstants { } if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_122()) + if (jj_3R_114()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_122()) + if (jj_3R_114()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_114(){ + private boolean jj_3R_103(){ if (jj_scan_token(RIGHT)) return true; return false; } - private boolean jj_3R_201(){ - if (jj_scan_token(COMMA)) + private boolean jj_3R_154(){ + 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_31(){ + if (jj_3R_44()) return true; - if (jj_3R_14()) + return false; + } + + private boolean jj_3R_153(){ + Token xsp; + xsp = jj_scanpos; + if (jj_3R_154()) + jj_scanpos = xsp; + if (jj_scan_token(UNSIGNED_INTEGER)) return true; return false; } - private boolean jj_3R_59(){ + private boolean jj_3R_55(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_101()){ + if (jj_3R_95()){ jj_scanpos = xsp; - if (jj_3R_102()){ + if (jj_3R_96()){ jj_scanpos = xsp; - if (jj_3R_103()){ + if (jj_3R_97()){ jj_scanpos = xsp; - if (jj_3R_104()){ + if (jj_3R_98()){ jj_scanpos = xsp; - if (jj_3R_105()) + if (jj_3R_99()) return true; } } @@ -4274,25 +4118,23 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_157(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_46()) + private boolean jj_3R_106(){ + if (jj_scan_token(RIGHT)) return true; return false; } - private boolean jj_3R_170(){ - if (jj_3R_108()) + private boolean jj_3R_136(){ + if (jj_3R_100()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; return false; } - private boolean jj_3R_160(){ + private boolean jj_3R_140(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(47)){ @@ -4311,14 +4153,34 @@ public class ADQLParser implements ADQLParserConstants { xsp = jj_scanpos; if (jj_scan_token(19)) jj_scanpos = xsp; - if (jj_3R_46()) + if (jj_3R_42()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_142(){ + private boolean jj_3R_139(){ + 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_152()) + return true; + } + if (jj_scan_token(RIGHT_PAR)) + return true; + return false; + } + + private boolean jj_3R_129(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(99)){ @@ -4332,80 +4194,48 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_110(){ + private boolean jj_3R_102(){ if (jj_scan_token(LEFT)) return true; return false; } - private boolean jj_3R_70(){ + private boolean jj_3R_64(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_110()){ + if (jj_3R_102()){ jj_scanpos = xsp; - if (jj_3R_111()){ + if (jj_3R_103()){ jj_scanpos = xsp; - if (jj_3R_112()) + if (jj_3R_104()) return true; } } - xsp = jj_scanpos; - if (jj_scan_token(25)) - jj_scanpos = xsp; return false; } - private boolean jj_3R_159(){ - if (jj_scan_token(COUNT)) - return true; - if (jj_scan_token(LEFT_PAR)) - return true; + private boolean jj_3R_130(){ Token xsp; xsp = jj_scanpos; - if (jj_scan_token(19)) - jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_scan_token(10)){ + if (jj_3R_139()){ jj_scanpos = xsp; - if (jj_3R_183()) + if (jj_3R_140()) return true; } - if (jj_scan_token(RIGHT_PAR)) - return true; return false; } - private boolean jj_3R_49(){ + private boolean jj_3R_45(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(24)){ jj_scanpos = xsp; - if (jj_3R_70()) + if (jj_3R_64()) 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_37(){ if (jj_scan_token(STRING_LITERAL)) return true; @@ -4426,20 +4256,20 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_113(){ + private boolean jj_3R_105(){ if (jj_scan_token(LEFT)) return true; return false; } - private boolean jj_3R_71(){ + private boolean jj_3R_65(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_113()){ + if (jj_3R_105()){ jj_scanpos = xsp; - if (jj_3R_114()){ + if (jj_3R_106()){ jj_scanpos = xsp; - if (jj_3R_115()) + if (jj_3R_107()) return true; } } @@ -4449,31 +4279,12 @@ public class ADQLParser implements ADQLParserConstants { 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_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_50(){ + private boolean jj_3R_46(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(24)){ jj_scanpos = xsp; - if (jj_3R_71()) + if (jj_3R_65()) return true; } return false; @@ -4482,18 +4293,12 @@ public class ADQLParser implements ADQLParserConstants { private boolean jj_3R_33(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_50()) + if (jj_3R_46()) jj_scanpos = xsp; if (jj_scan_token(JOIN)) return true; - if (jj_3R_51()) + if (jj_3R_47()) return true; - xsp = jj_scanpos; - if (jj_3R_199()){ - jj_scanpos = xsp; - if (jj_3R_200()) - return true; - } return false; } @@ -4502,30 +4307,10 @@ public class ADQLParser implements ADQLParserConstants { return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_49()) + if (jj_3R_45()) jj_scanpos = xsp; if (jj_scan_token(JOIN)) return true; - if (jj_3R_51()) - 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; } @@ -4535,19 +4320,15 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_107(){ + private boolean jj_3R_26(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(35)) jj_scanpos = xsp; - if (jj_scan_token(IN)) + if (jj_scan_token(BETWEEN)) + return true; + if (jj_3R_42()) return true; - xsp = jj_scanpos; - if (jj_3_16()){ - jj_scanpos = xsp; - if (jj_3R_134()) - return true; - } return false; } @@ -4562,88 +4343,108 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_198(){ + private boolean jj_3_13(){ + if (jj_3R_26()) + return true; + return false; + } + + private boolean jj_3R_109(){ + if (jj_scan_token(LEFT_PAR)) + return true; + return false; + } + + private boolean jj_3_3(){ if (jj_3R_17()) return true; return false; } - private boolean jj_3R_192(){ + private boolean jj_3R_47(){ + if (jj_3R_66()) + return true; + return false; + } + + private boolean jj_3_15(){ + if (jj_3R_27()) + return true; Token xsp; xsp = jj_scanpos; - if (jj_scan_token(22)) + if (jj_scan_token(35)) jj_scanpos = xsp; - if (jj_3R_14()) + if (jj_scan_token(LIKE)) return true; return false; } - private boolean jj_3R_193(){ - if (jj_3R_72()) + private boolean jj_3_14(){ + if (jj_3R_21()) return true; - Token xsp; - if (jj_3R_198()) + if (jj_scan_token(IS)) return true; - while(true){ - xsp = jj_scanpos; - if (jj_3R_198()){ - jj_scanpos = xsp; - break; - } - } return false; } - private boolean jj_3R_117(){ - if (jj_scan_token(LEFT_PAR)) - return true; - if (jj_3R_193()) + private boolean jj_3_2(){ + if (jj_3R_16()) return true; - if (jj_scan_token(RIGHT_PAR)) + return false; + } + + private boolean jj_3R_108(){ + if (jj_3R_71()) return true; return false; } - private boolean jj_3_3(){ - if (jj_3R_17()) + private boolean jj_3R_133(){ + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_42()) return true; return false; } - private boolean jj_3R_26(){ + private boolean jj_3R_66(){ Token xsp; xsp = jj_scanpos; - if (jj_scan_token(35)) + if (jj_3R_108()){ 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()) + if (jj_3_2()){ + jj_scanpos = xsp; + if (jj_3R_109()) + return true; + } + } + return false; + } + + private boolean jj_3R_25(){ + if (jj_3R_42()) return true; return false; } - private boolean jj_3R_190(){ + private boolean jj_3_12(){ Token xsp; xsp = jj_scanpos; - if (jj_scan_token(45)){ + if (jj_scan_token(41)){ jj_scanpos = xsp; - if (jj_scan_token(46)) + if (jj_3R_25()) return true; } return false; } - private boolean jj_3R_51(){ - if (jj_3R_72()) + private boolean jj_3R_115(){ + if (jj_3R_42()) return true; Token xsp; while(true){ xsp = jj_scanpos; - if (jj_3_3()){ + if (jj_3R_133()){ jj_scanpos = xsp; break; } @@ -4651,407 +4452,138 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_61(){ - if (jj_3R_107()) + private boolean jj_3R_52(){ + if (jj_scan_token(DOT)) + return true; + if (jj_3R_71()) return true; return false; } - private boolean jj_3_13(){ - if (jj_3R_26()) + private boolean jj_3R_143(){ + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_153()) return true; return false; } - private boolean jj_3R_60(){ - if (jj_3R_106()) + private boolean jj_3R_21(){ + if (jj_3R_36()) 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()) + private boolean jj_3R_142(){ + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_153()) return true; return false; } - private boolean jj_3_15(){ - if (jj_3R_27()) + private boolean jj_3R_36(){ + if (jj_3R_14()) return true; Token xsp; xsp = jj_scanpos; - if (jj_scan_token(35)) + if (jj_3R_52()) jj_scanpos = xsp; - if (jj_scan_token(LIKE)) - return true; return false; } - private boolean jj_3_2(){ - if (jj_3R_16()) + private boolean jj_3R_120(){ + if (jj_scan_token(DOT)) 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_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_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_3_14(){ - if (jj_3R_21()) - return true; - if (jj_scan_token(IS)) - 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_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_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_42(){ - if (jj_scan_token(EXISTS)) - return true; - if (jj_3R_16()) - return true; - return false; - } - - private boolean jj_3R_146(){ - if (jj_scan_token(COMMA)) + private boolean jj_3R_119(){ + if (jj_scan_token(DOT)) return true; - if (jj_3R_46()) + if (jj_3R_14()) 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_189(){ - if (jj_3R_36()) + private boolean jj_3R_132(){ + if (jj_3R_101()) 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_3_12(){ - if (jj_3R_25()) + private boolean jj_3R_24(){ + if (jj_scan_token(REGULAR_IDENTIFIER)) return true; - 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_188(){ - if (jj_3R_36()) - 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_164(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_188()){ + if (jj_3R_115()) 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_21(){ - if (jj_3R_36()) - return true; - return false; - } - - private boolean jj_3R_123(){ - if (jj_3R_46()) + if (jj_scan_token(RIGHT_PAR)) return true; - Token xsp; - while(true){ - xsp = jj_scanpos; - if (jj_3R_146()){ - jj_scanpos = xsp; - break; - } - } return false; } - private boolean jj_3R_196(){ - if (jj_scan_token(NOT)) + private boolean jj_3R_71(){ + if (jj_3R_14()) return true; - return false; - } - - private boolean jj_3R_187(){ Token xsp; xsp = jj_scanpos; - if (jj_scan_token(33)){ + if (jj_3R_119()) jj_scanpos = xsp; - if (jj_scan_token(34)) - return true; - } xsp = jj_scanpos; - if (jj_3R_196()) + if (jj_3R_120()) jj_scanpos = xsp; - if (jj_3R_186()) - 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_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_173(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_191()) + private boolean jj_3R_29(){ + if (jj_scan_token(DELIMITED_IDENTIFIER)) return true; return false; } - private boolean jj_3R_127(){ - if (jj_scan_token(DOT)) - return true; - if (jj_3R_14()) + private boolean jj_3R_141(){ + if (jj_3R_100()) return true; return false; } - private boolean jj_3R_185(){ - if (jj_scan_token(NOT)) + private boolean jj_3R_28(){ + if (jj_scan_token(REGULAR_IDENTIFIER)) return true; return false; } - private boolean jj_3R_77(){ - if (jj_3R_14()) + private boolean jj_3R_94(){ + if (jj_scan_token(TAN)) 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)) + if (jj_scan_token(LEFT_PAR)) return true; - return false; - } - - private boolean jj_3R_28(){ - if (jj_scan_token(REGULAR_IDENTIFIER)) + if (jj_3R_100()) return true; - return false; - } - - private boolean jj_3R_145(){ - if (jj_3R_109()) + if (jj_scan_token(RIGHT_PAR)) 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()) + private boolean jj_3R_131(){ + if (jj_3R_21()) return true; - while(true){ - xsp = jj_scanpos; - if (jj_3R_187()){ - jj_scanpos = xsp; - break; - } - } return false; } - private boolean jj_3R_24(){ - if (jj_scan_token(REGULAR_IDENTIFIER)) + private boolean jj_3R_93(){ + if (jj_scan_token(SIN)) return true; if (jj_scan_token(LEFT_PAR)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_123()) - jj_scanpos = xsp; + if (jj_3R_100()) + return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; @@ -5068,217 +4600,143 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_172(){ - if (jj_3R_108()) - 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_3R_144(){ - if (jj_3R_21()) - 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_122(){ + private boolean jj_3R_114(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_144()){ + if (jj_3R_131()){ jj_scanpos = xsp; - if (jj_3R_145()) + if (jj_3R_132()) return true; } 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_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_3R_55(){ - if (jj_3R_76()) - return true; - return false; - } - - private boolean jj_3R_98(){ + private boolean jj_3R_92(){ if (jj_scan_token(COT)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3_11(){ - if (jj_3R_24()) - return true; - return false; - } - - private boolean jj_3R_97(){ + private boolean jj_3R_91(){ if (jj_scan_token(COS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_96(){ + private boolean jj_3R_90(){ if (jj_scan_token(ATAN2)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_54(){ - if (jj_3R_75()) + private boolean jj_3R_51(){ + if (jj_3R_70()) return true; return false; } - private boolean jj_3R_95(){ + private boolean jj_3R_89(){ if (jj_scan_token(ATAN)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) 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; - } - } + private boolean jj_3_11(){ + if (jj_3R_24()) + return true; return false; } - private boolean jj_3R_94(){ + private boolean jj_3R_88(){ if (jj_scan_token(ASIN)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; 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_53(){ - if (jj_3R_74()) + private boolean jj_3R_50(){ + if (jj_3R_69()) return true; return false; } - private boolean jj_3R_93(){ + private boolean jj_3R_87(){ if (jj_scan_token(ACOS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_58(){ + private boolean jj_3R_35(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_93()){ + if (jj_3R_50()){ jj_scanpos = xsp; - if (jj_3R_94()){ + if (jj_3_11()){ jj_scanpos = xsp; - if (jj_3R_95()){ + if (jj_3R_51()) + return true; + } + } + return false; + } + + private boolean jj_3R_54(){ + Token xsp; + xsp = jj_scanpos; + if (jj_3R_87()){ + jj_scanpos = xsp; + if (jj_3R_88()){ + jj_scanpos = xsp; + if (jj_3R_89()){ jj_scanpos = xsp; - if (jj_3R_96()){ + if (jj_3R_90()){ jj_scanpos = xsp; - if (jj_3R_97()){ + if (jj_3R_91()){ jj_scanpos = xsp; - if (jj_3R_98()){ + if (jj_3R_92()){ jj_scanpos = xsp; - if (jj_3R_99()){ + if (jj_3R_93()){ jj_scanpos = xsp; - if (jj_3R_100()) + if (jj_3R_94()) return true; } } @@ -5290,117 +4748,99 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_165(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_164()) + private boolean jj_3R_49(){ + if (jj_3R_68()) 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_92(){ + private boolean jj_3R_86(){ if (jj_scan_token(TRUNCATE)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_174()) + if (jj_3R_143()) jj_scanpos = xsp; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_91(){ + private boolean jj_3R_85(){ if (jj_scan_token(SQRT)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_90(){ + private boolean jj_3R_84(){ if (jj_scan_token(ROUND)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_173()) + if (jj_3R_142()) jj_scanpos = xsp; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_89(){ + private boolean jj_3R_83(){ if (jj_scan_token(RAND)) return true; if (jj_scan_token(LEFT_PAR)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_172()) + if (jj_3R_141()) jj_scanpos = xsp; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_88(){ + private boolean jj_3R_82(){ if (jj_scan_token(RADIANS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_87(){ + private boolean jj_3R_81(){ if (jj_scan_token(POWER)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_86(){ + private boolean jj_3R_80(){ if (jj_scan_token(PI)) return true; if (jj_scan_token(LEFT_PAR)) @@ -5410,132 +4850,108 @@ public class ADQLParser implements ADQLParserConstants { 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_85(){ + private boolean jj_3R_79(){ if (jj_scan_token(MOD)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_84(){ + private boolean jj_3R_78(){ if (jj_scan_token(LOG10)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; 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_83(){ + private boolean jj_3R_77(){ if (jj_scan_token(LOG)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_82(){ + private boolean jj_3R_76(){ if (jj_scan_token(FLOOR)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_81(){ + private boolean jj_3R_75(){ if (jj_scan_token(EXP)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) 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_151(){ - if (jj_scan_token(COMMA)) + private boolean jj_3R_43(){ + if (jj_scan_token(CONCAT)) return true; - if (jj_3R_51()) + if (jj_3R_35()) return true; return false; } - private boolean jj_3R_80(){ + private boolean jj_3R_74(){ if (jj_scan_token(DEGREES)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_79(){ + private boolean jj_3R_73(){ if (jj_scan_token(CEILING)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_78(){ + private boolean jj_3R_72(){ if (jj_scan_token(ABS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; @@ -5548,29 +4964,7 @@ public class ADQLParser implements ADQLParserConstants { 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_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()){ + if (jj_3R_43()){ jj_scanpos = xsp; break; } @@ -5578,38 +4972,38 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_57(){ + private boolean jj_3R_53(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_78()){ + if (jj_3R_72()){ jj_scanpos = xsp; - if (jj_3R_79()){ + if (jj_3R_73()){ jj_scanpos = xsp; - if (jj_3R_80()){ + if (jj_3R_74()){ jj_scanpos = xsp; - if (jj_3R_81()){ + if (jj_3R_75()){ jj_scanpos = xsp; - if (jj_3R_82()){ + if (jj_3R_76()){ jj_scanpos = xsp; - if (jj_3R_83()){ + if (jj_3R_77()){ jj_scanpos = xsp; - if (jj_3R_84()){ + if (jj_3R_78()){ jj_scanpos = xsp; - if (jj_3R_85()){ + if (jj_3R_79()){ jj_scanpos = xsp; - if (jj_3R_86()){ + if (jj_3R_80()){ jj_scanpos = xsp; - if (jj_3R_87()){ + if (jj_3R_81()){ jj_scanpos = xsp; - if (jj_3R_88()){ + if (jj_3R_82()){ jj_scanpos = xsp; - if (jj_3R_89()){ + if (jj_3R_83()){ jj_scanpos = xsp; - if (jj_3R_90()){ + if (jj_3R_84()){ jj_scanpos = xsp; - if (jj_3R_91()){ + if (jj_3R_85()){ jj_scanpos = xsp; - if (jj_3R_92()) + if (jj_3R_86()) return true; } } @@ -5628,10 +5022,8 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_30(){ - if (jj_3R_14()) - return true; - if (jj_scan_token(DOT)) + private boolean jj_3R_67(){ + if (jj_scan_token(MINUS)) return true; return false; } @@ -5642,37 +5034,20 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3_10(){ - if (jj_3R_23()) - return true; - return false; - } - private boolean jj_3R_40(){ - if (jj_3R_59()) + if (jj_3R_55()) 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_39(){ - if (jj_3R_58()) + if (jj_3R_54()) return true; return false; } private boolean jj_3R_38(){ - if (jj_3R_57()) + if (jj_3R_53()) return true; return false; } @@ -5694,29 +5069,32 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_162(){ - if (jj_3R_46()) + private boolean jj_3_10(){ + if (jj_3R_23()) return true; + return false; + } + + private boolean jj_3R_48(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_184()) + if (jj_scan_token(8)){ jj_scanpos = xsp; + if (jj_3R_67()) + return true; + } return false; } - private boolean jj_3R_15(){ + private boolean jj_3R_30(){ 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_168(){ + private boolean jj_3R_134(){ Token xsp; xsp = jj_scanpos; if (jj_scan_token(10)){ @@ -5724,7 +5102,7 @@ public class ADQLParser implements ADQLParserConstants { if (jj_scan_token(11)) return true; } - if (jj_3R_135()) + if (jj_3R_121()) return true; return false; } @@ -5732,38 +5110,57 @@ public class ADQLParser implements ADQLParserConstants { private boolean jj_3R_34(){ Token xsp; xsp = jj_scanpos; - if (jj_3R_52()) + if (jj_3R_48()) jj_scanpos = xsp; xsp = jj_scanpos; if (jj_3_10()){ jj_scanpos = xsp; - if (jj_3R_53()) + if (jj_3R_49()) return true; } return false; } - private boolean jj_3R_75(){ + 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_69(){ if (jj_scan_token(COORDSYS)) return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_122()) + if (jj_3R_114()) return true; 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()) + private boolean jj_3R_147(){ + if (jj_3R_21()) + return true; + return false; + } + + private boolean jj_3R_145(){ + if (jj_3R_21()) + return true; + return false; + } + + private boolean jj_3R_138(){ + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_136()) return true; return false; } @@ -5787,8 +5184,15 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_178(){ - if (jj_3R_21()) + private boolean jj_3R_122(){ + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(8)){ + jj_scanpos = xsp; + if (jj_scan_token(9)) + return true; + } + if (jj_3R_100()) return true; return false; } @@ -5801,40 +5205,38 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_176(){ - if (jj_3R_21()) + private boolean jj_3R_137(){ + if (jj_scan_token(POINT)) + return true; + if (jj_scan_token(LEFT_PAR)) + return true; + if (jj_3R_135()) return true; - return false; - } - - private boolean jj_3R_171(){ if (jj_scan_token(COMMA)) return true; - if (jj_3R_170()) + if (jj_3R_136()) + return true; + if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_135(){ + private boolean jj_3R_121(){ if (jj_3R_34()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_168()) + if (jj_3R_134()) jj_scanpos = xsp; return false; } - private boolean jj_3R_158(){ - if (jj_scan_token(POINT)) + private boolean jj_3R_128(){ + if (jj_scan_token(REGION)) 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()) + if (jj_3R_27()) return true; if (jj_scan_token(RIGHT_PAR)) return true; @@ -5847,44 +5249,12 @@ public class ADQLParser implements ADQLParserConstants { 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_3_8(){ if (jj_3R_21()) 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_3_7(){ if (jj_scan_token(REGULAR_IDENTIFIER)) return true; @@ -5910,6 +5280,52 @@ public class ADQLParser implements ADQLParserConstants { 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_127(){ + if (jj_scan_token(POLYGON)) + return true; + if (jj_scan_token(LEFT_PAR)) + return true; + if (jj_3R_135()) + return true; + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_136()) + return true; + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_136()) + return true; + if (jj_scan_token(COMMA)) + return true; + if (jj_3R_136()) + 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_3_4(){ Token xsp; xsp = jj_scanpos; @@ -5932,148 +5348,175 @@ public class ADQLParser implements ADQLParserConstants { return false; } - private boolean jj_3R_69(){ + private boolean jj_3R_63(){ if (jj_3R_34()) 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; - } - } + private boolean jj_3R_126(){ + if (jj_3R_137()) + return true; return false; } - private boolean jj_3R_68(){ + private boolean jj_3R_62(){ if (jj_3R_35()) return true; return false; } - private boolean jj_3R_67(){ + private boolean jj_3R_61(){ if (jj_3R_21()) return true; return false; } - private boolean jj_3R_108(){ - if (jj_3R_135()) + private boolean jj_3R_100(){ + if (jj_3R_121()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_156()) + if (jj_3R_122()) jj_scanpos = xsp; return false; } - private boolean jj_3R_66(){ - if (jj_3R_109()) + private boolean jj_3R_60(){ + if (jj_3R_101()) return true; return false; } - private boolean jj_3R_140(){ - if (jj_scan_token(POLYGON)) + private boolean jj_3R_59(){ + if (jj_3R_24()) return true; + return false; + } + + private boolean jj_3R_58(){ if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_169()) + if (jj_3R_42()) return true; - if (jj_scan_token(COMMA)) + 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_125(){ + if (jj_scan_token(CIRCLE)) return true; - if (jj_3R_170()) + if (jj_scan_token(LEFT_PAR)) + return true; + if (jj_3R_135()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_170()) + if (jj_3R_136()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_170()) + if (jj_3R_100()) 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_65(){ - if (jj_3R_24()) + private boolean jj_3R_56(){ + if (jj_3R_100()) return true; return false; } - private boolean jj_3R_64(){ + private boolean jj_3R_124(){ + if (jj_scan_token(CENTROID)) + return true; if (jj_scan_token(LEFT_PAR)) return true; - if (jj_3R_46()) + if (jj_3R_114()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_63(){ + private boolean jj_3R_118(){ + if (jj_scan_token(LEFT_PAR)) + return true; if (jj_3R_27()) return true; - return false; - } - - private boolean jj_3R_139(){ - if (jj_3R_158()) + if (jj_scan_token(RIGHT_PAR)) return true; return false; } - private boolean jj_3R_150(){ - if (jj_scan_token(COMMA)) - return true; - if (jj_3R_149()) + private boolean jj_3R_123(){ + if (jj_scan_token(BOX)) return true; - return false; - } - - private boolean jj_3R_62(){ - if (jj_3R_108()) + if (jj_scan_token(LEFT_PAR)) return true; - return false; - } - - private boolean jj_3R_138(){ - if (jj_scan_token(CIRCLE)) + if (jj_3R_135()) return true; - if (jj_scan_token(LEFT_PAR)) + if (jj_scan_token(COMMA)) return true; - if (jj_3R_169()) + if (jj_3R_136()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_170()) + if (jj_3R_100()) return true; if (jj_scan_token(COMMA)) return true; - if (jj_3R_108()) + if (jj_3R_100()) return true; if (jj_scan_token(RIGHT_PAR)) return true; return false; } + private boolean jj_3R_117(){ + if (jj_3R_21()) + return true; + return false; + } + + private boolean jj_3R_42(){ + Token xsp; + xsp = jj_scanpos; + if (jj_3R_56()){ + jj_scanpos = xsp; + if (jj_3R_57()){ + jj_scanpos = xsp; + if (jj_3R_58()){ + jj_scanpos = xsp; + if (jj_3R_59()){ + jj_scanpos = xsp; + if (jj_3R_60()){ + jj_scanpos = xsp; + if (jj_3R_61()){ + jj_scanpos = xsp; + if (jj_3R_62()){ + jj_scanpos = xsp; + if (jj_3R_63()) + return true; + } + } + } + } + } + } + } + return false; + } + /** Generated Token Manager. */ public ADQLParserTokenManager token_source; SimpleCharStream jj_input_stream; diff --git a/src/adql/parser/adqlGrammar.jj b/src/adql/parser/adqlGrammar.jj index ddd6b25..35e4352 100644 --- a/src/adql/parser/adqlGrammar.jj +++ b/src/adql/parser/adqlGrammar.jj @@ -854,7 +854,7 @@ void Having(): {ClauseConstraints having = query.getHaving(); Token start;} { void OrderBy(): {ClauseADQL<ADQLOrder> orderBy = query.getOrderBy(); ADQLOrder order = null; Token start;} { start=<ORDER_BY> order=OrderItem() {orderBy.add(order);} ( <COMMA> order=OrderItem() {orderBy.add(order);} )* - { orderBy.setPosition(new TextPosition(start.beginLine, start.beginColumn, order.getPosition().endLine, order.getPosition().endColumn)); } + { orderBy.setPosition(new TextPosition(start, token)); } } /* *************************** */ @@ -1034,13 +1034,18 @@ ADQLJoin JoinSpecification(FromContent leftTable): { boolean natural = false; Jo /* ****** */ /* STRING */ /* ****** */ -StringConstant String(): {Token t; String str=""; StringConstant cst;} { - (t=<STRING_LITERAL> {str += t.image;})+ +StringConstant String(): {Token t, start=null; String str=""; StringConstant cst;} { + (t=<STRING_LITERAL> + { + str += t.image.substring(1, t.image.length()-1).replaceAll("''", "'"); + if (start == null) + start = t; + } + )+ { try{ - str = (str!=null)?str.substring(1,str.length()-1):str; cst = queryFactory.createStringConstant(str); - cst.setPosition(new TextPosition(t)); + cst.setPosition(new TextPosition(start, t)); return cst; }catch(Exception ex){ throw generateParseException(ex); @@ -1107,30 +1112,30 @@ ADQLOperand NumericValueExpressionPrimary(): {String expr; ADQLColumn column; AD // set_function_specification | op=SqlFunction() {return op;} // LEFT_PAR value_expression RIGHT_PAR - | (left=<LEFT_PAR> op=NumericExpression() right=<RIGHT_PAR>) { WrappedOperand wop = queryFactory.createWrappedOperand(op); wop.setPosition(new TextPosition(left, right)); return wop;}) + | (left=<LEFT_PAR> op=NumericExpression() right=<RIGHT_PAR>) { WrappedOperand wop = queryFactory.createWrappedOperand(op); wop.setPosition(new TextPosition(left, right)); return wop; }) }catch(Exception ex){ throw generateParseException(ex); } } -ADQLOperand StringValueExpressionPrimary(): {StringConstant expr; ADQLColumn column; ADQLOperand op;} { +ADQLOperand StringValueExpressionPrimary(): {StringConstant expr; ADQLColumn column; ADQLOperand op; Token left, right;} { try{ (// string expr=String() {return expr;} // column_reference | column=Column() {column.setExpectedType('S'); return column;} // LEFT_PAR value_expression RIGHT_PAR - | (<LEFT_PAR> (op=StringExpression()) <RIGHT_PAR>) {return queryFactory.createWrappedOperand(op);}) + | (left=<LEFT_PAR> (op=StringExpression()) right=<RIGHT_PAR>) { WrappedOperand wop = queryFactory.createWrappedOperand(op); wop.setPosition(new TextPosition(left, right)); return wop; }) }catch(Exception ex){ throw generateParseException(ex); } } -ADQLOperand ValueExpression(): {ADQLOperand valueExpr = null; } { +ADQLOperand ValueExpression(): {ADQLOperand valueExpr = null; Token left, right; } { try{ (LOOKAHEAD((<PLUS>|<MINUS>) | (Factor() (<PLUS>|<MINUS>|<ASTERISK>|<DIVIDE>))) valueExpr=NumericExpression() | LOOKAHEAD(<COORDSYS> | (StringFactor() <CONCAT>)) valueExpr=StringExpression() - | LOOKAHEAD(<LEFT_PAR>) <LEFT_PAR> valueExpr=ValueExpression() <RIGHT_PAR> { valueExpr = queryFactory.createWrappedOperand(valueExpr); } + | 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(Column()) valueExpr=Column() @@ -1178,16 +1183,20 @@ ADQLOperand NumericTerm(): {Token sign=null; ADQLOperand leftOp, rightOp=null;} ADQLOperand Factor(): {boolean negative = false; Token minusSign = null; ADQLOperand op;} { ( - (<PLUS> | (<MINUS> {negative = true;}))? + (<PLUS> | (minusSign=<MINUS> {negative = true;}))? (LOOKAHEAD(2) op=NumericFunction() | op=NumericValueExpressionPrimary()) ) { if (negative){ try{ + TextPosition position = op.getPosition(); op = queryFactory.createNegativeOperand(op); NegativeOperand negativeOp = (NegativeOperand)op; - negativeOp.setPosition(new TextPosition(minusSign.beginLine, minusSign.beginColumn, negativeOp.getPosition().endLine, negativeOp.getPosition().endColumn)); + if (minusSign != null) + negativeOp.setPosition(new TextPosition(minusSign.beginLine, minusSign.beginColumn, position.endLine, position.endColumn)); + else + negativeOp.setPosition(position); }catch(Exception ex){ throw generateParseException(ex); } @@ -1290,7 +1299,7 @@ ClauseConstraints ConditionsList(ClauseConstraints clause): {ADQLConstraint cons } ADQLConstraint Constraint(): {ADQLConstraint constraint = null; Token start, end;} { - (LOOKAHEAD(Predicate()) constraint=Predicate() + (LOOKAHEAD(<EXISTS> | ValueExpression()) constraint=Predicate() | ( start=<LEFT_PAR> { @@ -1310,12 +1319,14 @@ ADQLConstraint Constraint(): {ADQLConstraint constraint = null; Token start, en ADQLConstraint Predicate(): {ADQLQuery q=null; ADQLColumn column=null; ADQLOperand strExpr1=null, strExpr2=null; ADQLOperand op; Token start, notToken = null, end; ADQLConstraint constraint = null;} { try{ // exists_predicate - ((start=<EXISTS> q=SubQueryExpression()) - { - Exists e = queryFactory.createExists(q); - e.setPosition(new TextPosition(start.beginLine, start.beginColumn, q.getPosition().endLine, q.getPosition().endColumn)); - return e; - } + ( + (start=<EXISTS> q=SubQueryExpression() + { + Exists e = queryFactory.createExists(q); + e.setPosition(new TextPosition(start.beginLine, start.beginColumn, q.getPosition().endLine, q.getPosition().endColumn)); + return e; + } + ) // null_predicate | LOOKAHEAD(Column() <IS>)(column=Column() <IS> [notToken=<NOT>] end=<NULL> { @@ -1340,7 +1351,8 @@ ADQLConstraint Predicate(): {ADQLQuery q=null; ADQLColumn column=null; ADQLOpera // in_predicate | constraint=InEnd(op) ) - )) + ) + ) }catch(Exception ex){ throw generateParseException(ex); } diff --git a/test/adql/TestADQLObjectPosition.java b/test/adql/TestADQLObjectPosition.java new file mode 100644 index 0000000..7c1b8d4 --- /dev/null +++ b/test/adql/TestADQLObjectPosition.java @@ -0,0 +1,143 @@ +package adql; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.junit.Before; +import org.junit.Test; + +import adql.parser.ADQLParser; +import adql.parser.ParseException; +import adql.query.ADQLObject; +import adql.query.ADQLQuery; +import adql.query.TextPosition; +import adql.query.constraint.Comparison; +import adql.query.from.ADQLJoin; +import adql.query.from.ADQLTable; +import adql.query.operand.ADQLColumn; +import adql.query.operand.ADQLOperand; +import adql.query.operand.function.ADQLFunction; +import adql.search.SimpleSearchHandler; + +public class TestADQLObjectPosition { + + private ADQLParser parser = new ADQLParser(); + + @Before + public void setUp(){ + + } + + @Test + public void testPositionInAllClauses(){ + try{ + ADQLQuery query = parser.parseQuery("SELECT truc, bidule.machin, toto(truc, chose) AS \"super\" FROM foo JOIN bidule USING(id) WHERE truc > 12.5 AND bidule.machin < 5 GROUP BY chose HAVING try > 0 ORDER BY chouetteAlors"); + + Iterator<ADQLObject> results = query.search(new SimpleSearchHandler(true){ + @Override + protected boolean match(ADQLObject obj){ + return obj.getPosition() == null; + } + }); + if (results.hasNext()){ + System.err.println("OBJECT WITH NO DEFINED POSITION:"); + while(results.hasNext()) + System.err.println(" * " + results.next().toADQL()); + fail("At least one item of the generated ADQL tree does not have a position information! (see System.err for more details)"); + } + }catch(ParseException pe){ + pe.printStackTrace(); + fail("No error should have occured here: the ADQL query is syntactically correct!"); + } + } + + private void assertEquality(final TextPosition expected, final TextPosition realPos){ + assertEquals(expected.beginLine, realPos.beginLine); + assertEquals(expected.beginColumn, realPos.beginColumn); + assertEquals(expected.endLine, realPos.endLine); + assertEquals(expected.endColumn, realPos.endColumn); + } + + @Test + public void testPositionAccuracy(){ + try{ + ADQLQuery query = parser.parseQuery("SELECT TOP 1000 oid FROM foo JOIN bar USING(oid)\nWHERE foo || toto = 'truc'\n AND 2 > 1+0 GROUP BY oid HAVING COUNT(oid) > 10\n\tORDER BY 1 DESC"); + // Test SELECT + assertEquality(new TextPosition(1, 1, 1, 20), query.getSelect().getPosition()); + // Test ADQLColumn (here: "oid") + assertEquality(new TextPosition(1, 17, 1, 20), query.getSelect().get(0).getPosition()); + // Test FROM & ADQLJoin + /* NB: The clause FROM is the only one which is not a list but a single item of type FromContent (JOIN or table). + * That's why, it is not possible to get its exact starting position ('FROM') ; the starting position is + * the one of the first table of the clause FROM. */ + assertEquality(new TextPosition(1, 26, 1, 49), query.getFrom().getPosition()); + // Test ADQLTable + ArrayList<ADQLTable> tables = query.getFrom().getTables(); + assertEquality(new TextPosition(1, 26, 1, 29), tables.get(0).getPosition()); + assertEquality(new TextPosition(1, 35, 1, 38), tables.get(1).getPosition()); + // Test the join condition: + Iterator<ADQLColumn> itCol = ((ADQLJoin)query.getFrom()).getJoinedColumns(); + assertEquality(new TextPosition(1, 45, 1, 48), itCol.next().getPosition()); + // Test WHERE + assertEquality(new TextPosition(2, 1, 3, 18), query.getWhere().getPosition()); + // Test COMPARISON = CONSTRAINT + Comparison comp = (Comparison)(query.getWhere().get(0)); + assertEquality(new TextPosition(2, 7, 2, 27), comp.getPosition()); + // Test left operand = concatenation: + ADQLOperand operand = comp.getLeftOperand(); + assertEquality(new TextPosition(2, 7, 2, 18), operand.getPosition()); + Iterator<ADQLObject> itObj = operand.adqlIterator(); + // foo + assertEquality(new TextPosition(2, 7, 2, 10), itObj.next().getPosition()); + // toto + assertEquality(new TextPosition(2, 14, 2, 18), itObj.next().getPosition()); + // Test right operand = string: + operand = comp.getRightOperand(); + assertEquality(new TextPosition(2, 21, 2, 27), operand.getPosition()); + // Test COMPARISON > CONSTRAINT: + comp = (Comparison)(query.getWhere().get(1)); + assertEquality(new TextPosition(3, 11, 3, 18), comp.getPosition()); + // Test left operand = numeric: + operand = comp.getLeftOperand(); + assertEquality(new TextPosition(3, 11, 3, 12), operand.getPosition()); + // Test right operand = operation: + operand = comp.getRightOperand(); + assertEquality(new TextPosition(3, 15, 3, 18), operand.getPosition()); + itObj = operand.adqlIterator(); + // 1 + assertEquality(new TextPosition(3, 15, 3, 16), itObj.next().getPosition()); + // 0 + assertEquality(new TextPosition(3, 17, 3, 18), itObj.next().getPosition()); + // Test GROUP BY + assertEquality(new TextPosition(3, 19, 3, 31), query.getGroupBy().getPosition()); + // oid + assertEquality(new TextPosition(3, 28, 3, 31), query.getGroupBy().get(0).getPosition()); + // Test HAVING + assertEquality(new TextPosition(3, 32, 3, 54), query.getHaving().getPosition()); + // Test COMPARISON > CONSTRAINT: + comp = (Comparison)(query.getHaving().get(0)); + assertEquality(new TextPosition(3, 39, 3, 54), comp.getPosition()); + // Test left operand = COUNT function: + operand = comp.getLeftOperand(); + assertEquality(new TextPosition(3, 39, 3, 49), operand.getPosition()); + // Test parameter = ADQLColumn oid: + assertEquality(new TextPosition(3, 45, 3, 48), ((ADQLFunction)operand).getParameter(0).getPosition()); + // Test right operand = operation: + operand = comp.getRightOperand(); + assertEquality(new TextPosition(3, 52, 3, 54), operand.getPosition()); + // Test ORDER BY + assertEquality(new TextPosition(4, 9, 4, 24), query.getOrderBy().getPosition()); + // Test column index: + assertEquality(new TextPosition(4, 18, 4, 19), query.getOrderBy().get(0).getPosition()); + + }catch(ParseException pe){ + System.err.println("ERROR IN THE ADQL QUERY AT " + pe.getPosition()); + pe.printStackTrace(); + fail("No error should have occured here: the ADQL query is syntactically correct!"); + } + } + +} diff --git a/test/adql/TestGetPositionInAllADQLObject.java b/test/adql/TestGetPositionInAllADQLObject.java deleted file mode 100644 index 5fd4fc5..0000000 --- a/test/adql/TestGetPositionInAllADQLObject.java +++ /dev/null @@ -1,27 +0,0 @@ -package adql; - -import java.util.Iterator; - -import adql.parser.ADQLParser; -import adql.query.ADQLObject; -import adql.query.ADQLQuery; -import adql.search.SimpleSearchHandler; - -public class TestGetPositionInAllADQLObject { - - public static void main(String[] args) throws Throwable{ - ADQLParser parser = new ADQLParser(); - ADQLQuery query = parser.parseQuery("SELECT truc, bidule.machin FROM foo JOIN bidule USING(id) WHERE truc > 12.5 AND bidule.machin < 5 GROUP BY chose HAVING try > 0 ORDER BY chouetteAlors"); - - System.out.println("\nOBJECT WITH NO DEFINED POSITION:"); - Iterator<ADQLObject> results = query.search(new SimpleSearchHandler(true){ - @Override - protected boolean match(ADQLObject obj){ - return /*(obj instanceof ADQLList<?> && ((ADQLList<?>)obj).size() > 0) &&*/obj.getPosition() == null; - } - }); - while(results.hasNext()) - System.out.println(" * " + results.next().toADQL()); - } - -} -- GitLab