Coverage Report - org.apache.ojb.odmg.oql.OQLParser
 
Classes in this File Line Coverage Branch Coverage Complexity
OQLParser
N/A
N/A
4.739
 
 1  
 // $ANTLR 2.7.5 (20050128): "oql-ojb.g" -> "OQLParser.java"$
 2  
 
 3  
 /* Copyright 2003-2005 The Apache Software Foundation
 4  
  *
 5  
  * Licensed under the Apache License, Version 2.0 (the "License");
 6  
  * you may not use this file except in compliance with the License.
 7  
  * You may obtain a copy of the License at
 8  
  *
 9  
  *     http://www.apache.org/licenses/LICENSE-2.0
 10  
  *
 11  
  * Unless required by applicable law or agreed to in writing, software
 12  
  * distributed under the License is distributed on an "AS IS" BASIS,
 13  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  
  * See the License for the specific language governing permissions and
 15  
  * limitations under the License.
 16  
  */
 17  
 
 18  
 package org.apache.ojb.odmg.oql;
 19  
 
 20  
 
 21  
 import antlr.TokenBuffer;
 22  
 import antlr.TokenStreamException;
 23  
 import antlr.TokenStreamIOException;
 24  
 import antlr.ANTLRException;
 25  
 import antlr.LLkParser;
 26  
 import antlr.Token;
 27  
 import antlr.TokenStream;
 28  
 import antlr.RecognitionException;
 29  
 import antlr.NoViableAltException;
 30  
 import antlr.MismatchedTokenException;
 31  
 import antlr.SemanticException;
 32  
 import antlr.ParserSharedInputState;
 33  
 import antlr.collections.impl.BitSet;
 34  
 
 35  
 import java.util.ArrayList;
 36  
 import java.util.Collection;
 37  
 import java.util.Vector;
 38  
 
 39  
 import org.apache.ojb.broker.metadata.ClassDescriptor;
 40  
 import org.apache.ojb.broker.metadata.MetadataManager;
 41  
 import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
 42  
 import org.apache.ojb.broker.util.ClassHelper;
 43  
 import org.apache.ojb.broker.query.Criteria;
 44  
 import org.apache.ojb.broker.query.Query;
 45  
 import org.apache.ojb.broker.query.QueryByCriteria;
 46  
 import org.apache.ojb.broker.query.QueryFactory;
 47  
 
 48  
 public class OQLParser extends antlr.LLkParser       implements OQLLexerTokenTypes
 49  
  {
 50  
 
 51  
 protected OQLParser(TokenBuffer tokenBuf, int k) {
 52  
   super(tokenBuf,k);
 53  
   tokenNames = _tokenNames;
 54  
 }
 55  
 
 56  
 public OQLParser(TokenBuffer tokenBuf) {
 57  
   this(tokenBuf,3);
 58  
 }
 59  
 
 60  
 protected OQLParser(TokenStream lexer, int k) {
 61  
   super(lexer,k);
 62  
   tokenNames = _tokenNames;
 63  
 }
 64  
 
 65  
 public OQLParser(TokenStream lexer) {
 66  
   this(lexer,3);
 67  
 }
 68  
 
 69  
 public OQLParser(ParserSharedInputState state) {
 70  
   super(state,3);
 71  
   tokenNames = _tokenNames;
 72  
 }
 73  
 
 74  
         public final Query  buildQuery() throws RecognitionException, TokenStreamException {
 75  
                 Query query = null;
 76  
                 
 77  
                 
 78  
                 try {      // for error handling
 79  
                         query=selectQuery();
 80  
                         {
 81  
                         if ((LA(1)==TOK_SEMIC)) {
 82  
                                 match(TOK_SEMIC);
 83  
                         }
 84  
                         else if ((LA(1)==EOF)) {
 85  
                         }
 86  
                         else {
 87  
                                 throw new NoViableAltException(LT(1), getFilename());
 88  
                         }
 89  
                         
 90  
                         }
 91  
                 }
 92  
                 catch (RecognitionException ex) {
 93  
                         reportError(ex);
 94  
                         recover(ex,_tokenSet_0);
 95  
                 }
 96  
                 return query;
 97  
         }
 98  
         
 99  
         public final QueryByCriteria  selectQuery() throws RecognitionException, TokenStreamException {
 100  
                 QueryByCriteria query = null;
 101  
                 
 102  
                 
 103  
                 try {      // for error handling
 104  
                         
 105  
                         Class clazz = null;
 106  
                         Criteria criteria = new Criteria();
 107  
                         String[] projectionAttrs;
 108  
                         boolean distinct = false;
 109  
                         
 110  
                         match(LITERAL_select);
 111  
                         {
 112  
                         if ((LA(1)==LITERAL_distinct)) {
 113  
                                 match(LITERAL_distinct);
 114  
                                 
 115  
                                 distinct = true;
 116  
                                 
 117  
                         }
 118  
                         else if ((LA(1)==TOK_STAR||LA(1)==Identifier)) {
 119  
                         }
 120  
                         else {
 121  
                                 throw new NoViableAltException(LT(1), getFilename());
 122  
                         }
 123  
                         
 124  
                         }
 125  
                         projectionAttrs=projectionAttributes();
 126  
                         match(LITERAL_from);
 127  
                         clazz=fromClause();
 128  
                         {
 129  
                         if ((LA(1)==LITERAL_where)) {
 130  
                                 match(LITERAL_where);
 131  
                                 whereClause(criteria);
 132  
                         }
 133  
                         else if ((_tokenSet_1.member(LA(1)))) {
 134  
                         }
 135  
                         else {
 136  
                                 throw new NoViableAltException(LT(1), getFilename());
 137  
                         }
 138  
                         
 139  
                         }
 140  
                         
 141  
                         if (clazz != null)
 142  
                         {
 143  
                         if (projectionAttrs[0].indexOf('.') < 0)
 144  
                         {
 145  
                         query = QueryFactory.newQuery(clazz, criteria, distinct);
 146  
                         }
 147  
                         else
 148  
                         {
 149  
                         ClassDescriptor cld = MetadataManager.getInstance().getRepository().getDescriptorFor(clazz);
 150  
                         for (int i = 0; i < projectionAttrs.length; i++)
 151  
                         {
 152  
                         projectionAttrs[i] = projectionAttrs[i].substring(projectionAttrs[i].indexOf('.') + 1);
 153  
                         }
 154  
                         
 155  
                         ArrayList descs = cld.getAttributeDescriptorsForPath(projectionAttrs[0]);
 156  
                         int pathLen = descs.size();
 157  
                         
 158  
                         if ((pathLen > 0) && (descs.get(pathLen - 1) instanceof ObjectReferenceDescriptor))
 159  
                         {
 160  
                         ObjectReferenceDescriptor ord =
 161  
                         ((ObjectReferenceDescriptor) descs.get(pathLen - 1));
 162  
                         query = QueryFactory.newQuery(clazz, criteria, distinct);
 163  
                         query.setObjectProjectionAttribute(projectionAttrs[0],
 164  
                         ord.getItemClass());
 165  
                         }
 166  
                         else
 167  
                         {
 168  
                         query = QueryFactory.newReportQuery(clazz, projectionAttrs, criteria, distinct);
 169  
                         }
 170  
                         }
 171  
                         }
 172  
                         
 173  
                         {
 174  
                         if ((LA(1)==LITERAL_order)) {
 175  
                                 match(LITERAL_order);
 176  
                                 match(LITERAL_by);
 177  
                                 orderClause(query);
 178  
                         }
 179  
                         else if ((_tokenSet_2.member(LA(1)))) {
 180  
                         }
 181  
                         else {
 182  
                                 throw new NoViableAltException(LT(1), getFilename());
 183  
                         }
 184  
                         
 185  
                         }
 186  
                         {
 187  
                         if ((LA(1)==LITERAL_group)) {
 188  
                                 match(LITERAL_group);
 189  
                                 match(LITERAL_by);
 190  
                                 groupClause(query);
 191  
                         }
 192  
                         else if ((_tokenSet_3.member(LA(1)))) {
 193  
                         }
 194  
                         else {
 195  
                                 throw new NoViableAltException(LT(1), getFilename());
 196  
                         }
 197  
                         
 198  
                         }
 199  
                         {
 200  
                         if ((LA(1)==LITERAL_prefetch)) {
 201  
                                 match(LITERAL_prefetch);
 202  
                                 prefetchClause(query);
 203  
                         }
 204  
                         else if ((LA(1)==EOF||LA(1)==TOK_RPAREN||LA(1)==TOK_SEMIC)) {
 205  
                         }
 206  
                         else {
 207  
                                 throw new NoViableAltException(LT(1), getFilename());
 208  
                         }
 209  
                         
 210  
                         }
 211  
                 }
 212  
                 catch (RecognitionException ex) {
 213  
                         reportError(ex);
 214  
                         recover(ex,_tokenSet_4);
 215  
                 }
 216  
                 return query;
 217  
         }
 218  
         
 219  
         public final String[]  projectionAttributes() throws RecognitionException, TokenStreamException {
 220  
                 String[] projectionAttrs = null;
 221  
                 
 222  
                 Token  id = null;
 223  
                 Token  id1 = null;
 224  
                 
 225  
                 try {      // for error handling
 226  
                         
 227  
                         String first = null;
 228  
                         ArrayList list = null;
 229  
                         
 230  
                         {
 231  
                         if ((LA(1)==Identifier)) {
 232  
                                 id = LT(1);
 233  
                                 match(Identifier);
 234  
                                 {
 235  
                                 
 236  
                                 first = id.getText();
 237  
                                 
 238  
                                 }
 239  
                                 {
 240  
                                 _loop80:
 241  
                                 do {
 242  
                                         if ((LA(1)==TOK_COMMA)) {
 243  
                                                 match(TOK_COMMA);
 244  
                                                 id1 = LT(1);
 245  
                                                 match(Identifier);
 246  
                                                 {
 247  
                                                 
 248  
                                                 if (list == null)
 249  
                                                 {
 250  
                                                 list = new ArrayList();
 251  
                                                 list.add(first);
 252  
                                                 }
 253  
                                                 list.add(id1.getText());
 254  
                                                 
 255  
                                                 }
 256  
                                         }
 257  
                                         else {
 258  
                                                 break _loop80;
 259  
                                         }
 260  
                                         
 261  
                                 } while (true);
 262  
                                 }
 263  
                         }
 264  
                         else if ((LA(1)==TOK_STAR)) {
 265  
                                 match(TOK_STAR);
 266  
                         }
 267  
                         else {
 268  
                                 throw new NoViableAltException(LT(1), getFilename());
 269  
                         }
 270  
                         
 271  
                         }
 272  
                         
 273  
                         if (list == null)
 274  
                         {
 275  
                         projectionAttrs = new String[] {first};
 276  
                         }
 277  
                         else
 278  
                         {
 279  
                         projectionAttrs = (String[]) list.toArray(new String[list.size()]);
 280  
                         }
 281  
                         
 282  
                         
 283  
                 }
 284  
                 catch (RecognitionException ex) {
 285  
                         reportError(ex);
 286  
                         recover(ex,_tokenSet_5);
 287  
                 }
 288  
                 return projectionAttrs;
 289  
         }
 290  
         
 291  
         public final Class  fromClause() throws RecognitionException, TokenStreamException {
 292  
                 Class clazz = null;
 293  
                 
 294  
                 Token  id = null;
 295  
                 
 296  
                 try {      // for error handling
 297  
                         id = LT(1);
 298  
                         match(Identifier);
 299  
                         
 300  
                         try {
 301  
                         clazz = ClassHelper.getClass(id.getText());
 302  
                         } catch (Exception e) {
 303  
                         }
 304  
                         
 305  
                 }
 306  
                 catch (RecognitionException ex) {
 307  
                         reportError(ex);
 308  
                         recover(ex,_tokenSet_6);
 309  
                 }
 310  
                 return clazz;
 311  
         }
 312  
         
 313  
         public final void whereClause(
 314  
                 Criteria criteria
 315  
         ) throws RecognitionException, TokenStreamException {
 316  
                 
 317  
                 
 318  
                 try {      // for error handling
 319  
                         orExpr(criteria);
 320  
                 }
 321  
                 catch (RecognitionException ex) {
 322  
                         reportError(ex);
 323  
                         recover(ex,_tokenSet_7);
 324  
                 }
 325  
         }
 326  
         
 327  
         public final void orderClause(
 328  
                 QueryByCriteria query
 329  
         ) throws RecognitionException, TokenStreamException {
 330  
                 
 331  
                 
 332  
                 try {      // for error handling
 333  
                         sortCriterion(query);
 334  
                         {
 335  
                         _loop83:
 336  
                         do {
 337  
                                 if ((LA(1)==TOK_COMMA)) {
 338  
                                         match(TOK_COMMA);
 339  
                                         sortCriterion(query);
 340  
                                 }
 341  
                                 else {
 342  
                                         break _loop83;
 343  
                                 }
 344  
                                 
 345  
                         } while (true);
 346  
                         }
 347  
                 }
 348  
                 catch (RecognitionException ex) {
 349  
                         reportError(ex);
 350  
                         recover(ex,_tokenSet_2);
 351  
                 }
 352  
         }
 353  
         
 354  
         public final void groupClause(
 355  
                 QueryByCriteria query
 356  
         ) throws RecognitionException, TokenStreamException {
 357  
                 
 358  
                 
 359  
                 try {      // for error handling
 360  
                         groupCriterion(query);
 361  
                         {
 362  
                         _loop89:
 363  
                         do {
 364  
                                 if ((LA(1)==TOK_COMMA)) {
 365  
                                         match(TOK_COMMA);
 366  
                                         groupCriterion(query);
 367  
                                 }
 368  
                                 else {
 369  
                                         break _loop89;
 370  
                                 }
 371  
                                 
 372  
                         } while (true);
 373  
                         }
 374  
                 }
 375  
                 catch (RecognitionException ex) {
 376  
                         reportError(ex);
 377  
                         recover(ex,_tokenSet_3);
 378  
                 }
 379  
         }
 380  
         
 381  
         public final void prefetchClause(
 382  
                 QueryByCriteria query
 383  
         ) throws RecognitionException, TokenStreamException {
 384  
                 
 385  
                 
 386  
                 try {      // for error handling
 387  
                         prefetchCriterion(query);
 388  
                         {
 389  
                         _loop93:
 390  
                         do {
 391  
                                 if ((LA(1)==TOK_COMMA)) {
 392  
                                         match(TOK_COMMA);
 393  
                                         prefetchCriterion(query);
 394  
                                 }
 395  
                                 else {
 396  
                                         break _loop93;
 397  
                                 }
 398  
                                 
 399  
                         } while (true);
 400  
                         }
 401  
                 }
 402  
                 catch (RecognitionException ex) {
 403  
                         reportError(ex);
 404  
                         recover(ex,_tokenSet_4);
 405  
                 }
 406  
         }
 407  
         
 408  
         public final Query  existsQuery() throws RecognitionException, TokenStreamException {
 409  
                 Query query = null;
 410  
                 
 411  
                 
 412  
                 try {      // for error handling
 413  
                         
 414  
                         Class clazz = null;
 415  
                         Criteria criteria = new Criteria();
 416  
                         
 417  
                         match(LITERAL_exists);
 418  
                         projectionAttributes();
 419  
                         match(LITERAL_in);
 420  
                         clazz=fromClause();
 421  
                         {
 422  
                         if ((LA(1)==TOK_COLON)) {
 423  
                                 match(TOK_COLON);
 424  
                                 whereClause(criteria);
 425  
                         }
 426  
                         else if ((_tokenSet_7.member(LA(1)))) {
 427  
                         }
 428  
                         else {
 429  
                                 throw new NoViableAltException(LT(1), getFilename());
 430  
                         }
 431  
                         
 432  
                         }
 433  
                         
 434  
                         if (clazz != null) {
 435  
                         query = QueryFactory.newQuery(clazz, criteria);
 436  
                         }
 437  
                                         
 438  
                 }
 439  
                 catch (RecognitionException ex) {
 440  
                         reportError(ex);
 441  
                         recover(ex,_tokenSet_7);
 442  
                 }
 443  
                 return query;
 444  
         }
 445  
         
 446  
         public final void orExpr(
 447  
                 Criteria criteria
 448  
         ) throws RecognitionException, TokenStreamException {
 449  
                 
 450  
                 
 451  
                 try {      // for error handling
 452  
                         andExpr(criteria);
 453  
                         {
 454  
                         _loop97:
 455  
                         do {
 456  
                                 if ((LA(1)==LITERAL_or) && (_tokenSet_8.member(LA(2))) && (_tokenSet_9.member(LA(3)))) {
 457  
                                         match(LITERAL_or);
 458  
                                         Criteria orCriteria = new Criteria();
 459  
                                         andExpr(orCriteria);
 460  
                                         criteria.addOrCriteria(orCriteria);
 461  
                                 }
 462  
                                 else {
 463  
                                         break _loop97;
 464  
                                 }
 465  
                                 
 466  
                         } while (true);
 467  
                         }
 468  
                 }
 469  
                 catch (RecognitionException ex) {
 470  
                         reportError(ex);
 471  
                         recover(ex,_tokenSet_7);
 472  
                 }
 473  
         }
 474  
         
 475  
         public final void sortCriterion(
 476  
                 QueryByCriteria query
 477  
         ) throws RecognitionException, TokenStreamException {
 478  
                 
 479  
                 Token  id = null;
 480  
                 
 481  
                 try {      // for error handling
 482  
                         boolean descending = false;
 483  
                         id = LT(1);
 484  
                         match(Identifier);
 485  
                         {
 486  
                         if ((LA(1)==LITERAL_asc||LA(1)==LITERAL_desc)) {
 487  
                                 {
 488  
                                 if ((LA(1)==LITERAL_asc)) {
 489  
                                         match(LITERAL_asc);
 490  
                                         descending = false;
 491  
                                 }
 492  
                                 else if ((LA(1)==LITERAL_desc)) {
 493  
                                         match(LITERAL_desc);
 494  
                                         descending = true;
 495  
                                 }
 496  
                                 else {
 497  
                                         throw new NoViableAltException(LT(1), getFilename());
 498  
                                 }
 499  
                                 
 500  
                                 }
 501  
                         }
 502  
                         else if ((_tokenSet_10.member(LA(1)))) {
 503  
                         }
 504  
                         else {
 505  
                                 throw new NoViableAltException(LT(1), getFilename());
 506  
                         }
 507  
                         
 508  
                         }
 509  
                         
 510  
                         if (descending) {
 511  
                         query.addOrderByDescending(id.getText());
 512  
                         } else {
 513  
                         query.addOrderByAscending(id.getText());
 514  
                         }
 515  
                         
 516  
                 }
 517  
                 catch (RecognitionException ex) {
 518  
                         reportError(ex);
 519  
                         recover(ex,_tokenSet_10);
 520  
                 }
 521  
         }
 522  
         
 523  
         public final void groupCriterion(
 524  
                 QueryByCriteria query
 525  
         ) throws RecognitionException, TokenStreamException {
 526  
                 
 527  
                 Token  id = null;
 528  
                 
 529  
                 try {      // for error handling
 530  
                         id = LT(1);
 531  
                         match(Identifier);
 532  
                         
 533  
                         query.addGroupBy(id.getText());
 534  
                         
 535  
                 }
 536  
                 catch (RecognitionException ex) {
 537  
                         reportError(ex);
 538  
                         recover(ex,_tokenSet_11);
 539  
                 }
 540  
         }
 541  
         
 542  
         public final void prefetchCriterion(
 543  
                 QueryByCriteria query
 544  
         ) throws RecognitionException, TokenStreamException {
 545  
                 
 546  
                 Token  id = null;
 547  
                 
 548  
                 try {      // for error handling
 549  
                         id = LT(1);
 550  
                         match(Identifier);
 551  
                         
 552  
                         query.addPrefetchedRelationship(id.getText());
 553  
                         
 554  
                 }
 555  
                 catch (RecognitionException ex) {
 556  
                         reportError(ex);
 557  
                         recover(ex,_tokenSet_12);
 558  
                 }
 559  
         }
 560  
         
 561  
         public final void andExpr(
 562  
                 Criteria criteria
 563  
         ) throws RecognitionException, TokenStreamException {
 564  
                 
 565  
                 
 566  
                 try {      // for error handling
 567  
                         quantifierExpr(criteria);
 568  
                         {
 569  
                         _loop100:
 570  
                         do {
 571  
                                 if ((LA(1)==LITERAL_and) && (_tokenSet_8.member(LA(2))) && (_tokenSet_9.member(LA(3)))) {
 572  
                                         match(LITERAL_and);
 573  
                                         Criteria andCriteria = new Criteria();
 574  
                                         quantifierExpr(andCriteria);
 575  
                                         criteria.addAndCriteria(andCriteria);
 576  
                                 }
 577  
                                 else {
 578  
                                         break _loop100;
 579  
                                 }
 580  
                                 
 581  
                         } while (true);
 582  
                         }
 583  
                 }
 584  
                 catch (RecognitionException ex) {
 585  
                         reportError(ex);
 586  
                         recover(ex,_tokenSet_7);
 587  
                 }
 588  
         }
 589  
         
 590  
         public final void quantifierExpr(
 591  
                 Criteria criteria
 592  
         ) throws RecognitionException, TokenStreamException {
 593  
                 
 594  
                 
 595  
                 try {      // for error handling
 596  
                         switch ( LA(1)) {
 597  
                         case TOK_LPAREN:
 598  
                         {
 599  
                                 match(TOK_LPAREN);
 600  
                                 orExpr(criteria);
 601  
                                 match(TOK_RPAREN);
 602  
                                 break;
 603  
                         }
 604  
                         case LITERAL_is_undefined:
 605  
                         case LITERAL_is_defined:
 606  
                         {
 607  
                                 undefinedExpr(criteria);
 608  
                                 break;
 609  
                         }
 610  
                         case LITERAL_exists:
 611  
                         case LITERAL_not:
 612  
                         {
 613  
                                 existsExpr(criteria);
 614  
                                 break;
 615  
                         }
 616  
                         default:
 617  
                                 if ((LA(1)==Identifier) && (_tokenSet_13.member(LA(2)))) {
 618  
                                         equalityExpr(criteria);
 619  
                                 }
 620  
                                 else if ((LA(1)==Identifier) && (LA(2)==LITERAL_not||LA(2)==LITERAL_like) && (_tokenSet_14.member(LA(3)))) {
 621  
                                         likeExpr(criteria);
 622  
                                 }
 623  
                                 else if ((LA(1)==Identifier) && (LA(2)==LITERAL_not||LA(2)==LITERAL_between) && (_tokenSet_15.member(LA(3)))) {
 624  
                                         betweenExpr(criteria);
 625  
                                 }
 626  
                                 else if ((LA(1)==Identifier) && (LA(2)==LITERAL_in||LA(2)==LITERAL_not) && (LA(3)==TOK_LPAREN||LA(3)==LITERAL_in||LA(3)==LITERAL_list)) {
 627  
                                         inExpr(criteria);
 628  
                                 }
 629  
                         else {
 630  
                                 throw new NoViableAltException(LT(1), getFilename());
 631  
                         }
 632  
                         }
 633  
                 }
 634  
                 catch (RecognitionException ex) {
 635  
                         reportError(ex);
 636  
                         recover(ex,_tokenSet_7);
 637  
                 }
 638  
         }
 639  
         
 640  
         public final void equalityExpr(
 641  
                 Criteria criteria
 642  
         ) throws RecognitionException, TokenStreamException {
 643  
                 
 644  
                 Token  id = null;
 645  
                 
 646  
                 try {      // for error handling
 647  
                         
 648  
                                 Object value = null;
 649  
                         
 650  
                         id = LT(1);
 651  
                         match(Identifier);
 652  
                         {
 653  
                         {
 654  
                         switch ( LA(1)) {
 655  
                         case TOK_EQ:
 656  
                         {
 657  
                                 match(TOK_EQ);
 658  
                                 {
 659  
                                 if ((LA(1)==LITERAL_nil)) {
 660  
                                         match(LITERAL_nil);
 661  
                                         criteria.addIsNull(id.getText());
 662  
                                 }
 663  
                                 else if ((_tokenSet_16.member(LA(1)))) {
 664  
                                         value=literal();
 665  
                                         criteria.addEqualTo(id.getText(), value);
 666  
                                 }
 667  
                                 else {
 668  
                                         throw new NoViableAltException(LT(1), getFilename());
 669  
                                 }
 670  
                                 
 671  
                                 }
 672  
                                 break;
 673  
                         }
 674  
                         case TOK_NE:
 675  
                         {
 676  
                                 match(TOK_NE);
 677  
                                 {
 678  
                                 if ((LA(1)==LITERAL_nil)) {
 679  
                                         match(LITERAL_nil);
 680  
                                         criteria.addNotNull(id.getText());
 681  
                                 }
 682  
                                 else if ((_tokenSet_16.member(LA(1)))) {
 683  
                                         value=literal();
 684  
                                         criteria.addNotEqualTo(id.getText(), value);
 685  
                                 }
 686  
                                 else {
 687  
                                         throw new NoViableAltException(LT(1), getFilename());
 688  
                                 }
 689  
                                 
 690  
                                 }
 691  
                                 break;
 692  
                         }
 693  
                         case TOK_NE2:
 694  
                         {
 695  
                                 match(TOK_NE2);
 696  
                                 {
 697  
                                 if ((LA(1)==LITERAL_nil)) {
 698  
                                         match(LITERAL_nil);
 699  
                                         criteria.addNotNull(id.getText());
 700  
                                 }
 701  
                                 else if ((_tokenSet_16.member(LA(1)))) {
 702  
                                         value=literal();
 703  
                                         criteria.addNotEqualTo(id.getText(), value);
 704  
                                 }
 705  
                                 else {
 706  
                                         throw new NoViableAltException(LT(1), getFilename());
 707  
                                 }
 708  
                                 
 709  
                                 }
 710  
                                 break;
 711  
                         }
 712  
                         case TOK_LT:
 713  
                         {
 714  
                                 match(TOK_LT);
 715  
                                 value=literal();
 716  
                                 criteria.addLessThan(id.getText(), value);
 717  
                                 break;
 718  
                         }
 719  
                         case TOK_GT:
 720  
                         {
 721  
                                 match(TOK_GT);
 722  
                                 value=literal();
 723  
                                 criteria.addGreaterThan(id.getText(), value);
 724  
                                 break;
 725  
                         }
 726  
                         case TOK_LE:
 727  
                         {
 728  
                                 match(TOK_LE);
 729  
                                 value=literal();
 730  
                                 criteria.addLessOrEqualThan(id.getText(), value);
 731  
                                 break;
 732  
                         }
 733  
                         case TOK_GE:
 734  
                         {
 735  
                                 match(TOK_GE);
 736  
                                 value=literal();
 737  
                                 criteria.addGreaterOrEqualThan(id.getText(), value);
 738  
                                 break;
 739  
                         }
 740  
                         default:
 741  
                         {
 742  
                                 throw new NoViableAltException(LT(1), getFilename());
 743  
                         }
 744  
                         }
 745  
                         }
 746  
                         }
 747  
                 }
 748  
                 catch (RecognitionException ex) {
 749  
                         reportError(ex);
 750  
                         recover(ex,_tokenSet_7);
 751  
                 }
 752  
         }
 753  
         
 754  
         public final void likeExpr(
 755  
                 Criteria criteria
 756  
         ) throws RecognitionException, TokenStreamException {
 757  
                 
 758  
                 Token  id = null;
 759  
                 
 760  
                 try {      // for error handling
 761  
                         
 762  
                         boolean negative = false;
 763  
                         Object value = null;
 764  
                         
 765  
                         id = LT(1);
 766  
                         match(Identifier);
 767  
                         {
 768  
                         if ((LA(1)==LITERAL_not)) {
 769  
                                 match(LITERAL_not);
 770  
                                 negative = true;
 771  
                         }
 772  
                         else if ((LA(1)==LITERAL_like)) {
 773  
                         }
 774  
                         else {
 775  
                                 throw new NoViableAltException(LT(1), getFilename());
 776  
                         }
 777  
                         
 778  
                         }
 779  
                         match(LITERAL_like);
 780  
                         value=literal();
 781  
                         
 782  
                         if (negative) {
 783  
                         criteria.addNotLike(id.getText(), value);
 784  
                         } else {
 785  
                         criteria.addLike(id.getText(), value);
 786  
                         }
 787  
                         
 788  
                 }
 789  
                 catch (RecognitionException ex) {
 790  
                         reportError(ex);
 791  
                         recover(ex,_tokenSet_7);
 792  
                 }
 793  
         }
 794  
         
 795  
         public final void undefinedExpr(
 796  
                 Criteria criteria
 797  
         ) throws RecognitionException, TokenStreamException {
 798  
                 
 799  
                 Token  id = null;
 800  
                 
 801  
                 try {      // for error handling
 802  
                         boolean negative = false;
 803  
                         {
 804  
                         if ((LA(1)==LITERAL_is_undefined)) {
 805  
                                 match(LITERAL_is_undefined);
 806  
                                 negative = false;
 807  
                         }
 808  
                         else if ((LA(1)==LITERAL_is_defined)) {
 809  
                                 match(LITERAL_is_defined);
 810  
                                 negative = true;
 811  
                         }
 812  
                         else {
 813  
                                 throw new NoViableAltException(LT(1), getFilename());
 814  
                         }
 815  
                         
 816  
                         }
 817  
                         match(TOK_LPAREN);
 818  
                         id = LT(1);
 819  
                         match(Identifier);
 820  
                         match(TOK_RPAREN);
 821  
                         
 822  
                         if (negative) {
 823  
                         criteria.addNotNull(id.getText());
 824  
                         } else {
 825  
                         criteria.addIsNull(id.getText());
 826  
                         }
 827  
                         
 828  
                 }
 829  
                 catch (RecognitionException ex) {
 830  
                         reportError(ex);
 831  
                         recover(ex,_tokenSet_7);
 832  
                 }
 833  
         }
 834  
         
 835  
         public final void betweenExpr(
 836  
                 Criteria criteria
 837  
         ) throws RecognitionException, TokenStreamException {
 838  
                 
 839  
                 Token  id = null;
 840  
                 
 841  
                 try {      // for error handling
 842  
                         
 843  
                         boolean negative = false;
 844  
                         Object lower = null;
 845  
                         Object upper = null;
 846  
                         
 847  
                         id = LT(1);
 848  
                         match(Identifier);
 849  
                         {
 850  
                         if ((LA(1)==LITERAL_not)) {
 851  
                                 match(LITERAL_not);
 852  
                                 negative = true;
 853  
                         }
 854  
                         else if ((LA(1)==LITERAL_between)) {
 855  
                         }
 856  
                         else {
 857  
                                 throw new NoViableAltException(LT(1), getFilename());
 858  
                         }
 859  
                         
 860  
                         }
 861  
                         match(LITERAL_between);
 862  
                         lower=literal();
 863  
                         match(LITERAL_and);
 864  
                         upper=literal();
 865  
                         
 866  
                         if (negative) {
 867  
                         criteria.addNotBetween(id.getText(), lower, upper);
 868  
                         } else {
 869  
                         criteria.addBetween(id.getText(), lower, upper);
 870  
                         }
 871  
                         
 872  
                 }
 873  
                 catch (RecognitionException ex) {
 874  
                         reportError(ex);
 875  
                         recover(ex,_tokenSet_7);
 876  
                 }
 877  
         }
 878  
         
 879  
         public final void inExpr(
 880  
                 Criteria criteria
 881  
         ) throws RecognitionException, TokenStreamException {
 882  
                 
 883  
                 Token  id = null;
 884  
                 
 885  
                 try {      // for error handling
 886  
                         
 887  
                                  boolean negative = false;
 888  
                                  Collection coll;
 889  
                         
 890  
                         id = LT(1);
 891  
                         match(Identifier);
 892  
                         {
 893  
                         if ((LA(1)==LITERAL_not)) {
 894  
                                 match(LITERAL_not);
 895  
                                 negative = true;
 896  
                         }
 897  
                         else if ((LA(1)==LITERAL_in)) {
 898  
                         }
 899  
                         else {
 900  
                                 throw new NoViableAltException(LT(1), getFilename());
 901  
                         }
 902  
                         
 903  
                         }
 904  
                         match(LITERAL_in);
 905  
                         {
 906  
                         if ((LA(1)==LITERAL_list)) {
 907  
                                 match(LITERAL_list);
 908  
                         }
 909  
                         else if ((LA(1)==TOK_LPAREN)) {
 910  
                         }
 911  
                         else {
 912  
                                 throw new NoViableAltException(LT(1), getFilename());
 913  
                         }
 914  
                         
 915  
                         }
 916  
                         coll=argList();
 917  
                         
 918  
                         if (negative) {
 919  
                         criteria.addNotIn(id.getText(), coll);
 920  
                         } else {
 921  
                         criteria.addIn(id.getText(), coll);
 922  
                         }
 923  
                         
 924  
                 }
 925  
                 catch (RecognitionException ex) {
 926  
                         reportError(ex);
 927  
                         recover(ex,_tokenSet_7);
 928  
                 }
 929  
         }
 930  
         
 931  
         public final void existsExpr(
 932  
                 Criteria criteria
 933  
         ) throws RecognitionException, TokenStreamException {
 934  
                 
 935  
                 
 936  
                 try {      // for error handling
 937  
                         
 938  
                         Query subQuery = null;
 939  
                         boolean negative = false;
 940  
                         
 941  
                         {
 942  
                         if ((LA(1)==LITERAL_not)) {
 943  
                                 match(LITERAL_not);
 944  
                                 negative = true;
 945  
                         }
 946  
                         else if ((LA(1)==LITERAL_exists)) {
 947  
                         }
 948  
                         else {
 949  
                                 throw new NoViableAltException(LT(1), getFilename());
 950  
                         }
 951  
                         
 952  
                         }
 953  
                         {
 954  
                         if ((LA(1)==LITERAL_exists) && (LA(2)==TOK_LPAREN)) {
 955  
                                 match(LITERAL_exists);
 956  
                                 match(TOK_LPAREN);
 957  
                                 subQuery=selectQuery();
 958  
                                 match(TOK_RPAREN);
 959  
                         }
 960  
                         else if ((LA(1)==LITERAL_exists) && (LA(2)==TOK_STAR||LA(2)==Identifier)) {
 961  
                                 subQuery=existsQuery();
 962  
                         }
 963  
                         else {
 964  
                                 throw new NoViableAltException(LT(1), getFilename());
 965  
                         }
 966  
                         
 967  
                         }
 968  
                         
 969  
                         if (negative) {
 970  
                         criteria.addNotExists(subQuery);
 971  
                         } else {
 972  
                         criteria.addExists(subQuery);
 973  
                         }
 974  
                         
 975  
                 }
 976  
                 catch (RecognitionException ex) {
 977  
                         reportError(ex);
 978  
                         recover(ex,_tokenSet_7);
 979  
                 }
 980  
         }
 981  
         
 982  
         public final Object  literal() throws RecognitionException, TokenStreamException {
 983  
                 Object value = null;
 984  
                 
 985  
                 Token  tokInt = null;
 986  
                 Token  tokADbl = null;
 987  
                 Token  tokEDbl = null;
 988  
                 Token  tokChar = null;
 989  
                 Token  tokStr = null;
 990  
                 Token  tokDate = null;
 991  
                 Token  tokTime = null;
 992  
                 Token  tokTs = null;
 993  
                 
 994  
                 try {      // for error handling
 995  
                         switch ( LA(1)) {
 996  
                         case TOK_DOLLAR:
 997  
                         {
 998  
                                 match(TOK_DOLLAR);
 999  
                                 match(TOK_UNSIGNED_INTEGER);
 1000  
                                 value = null;
 1001  
                                 break;
 1002  
                         }
 1003  
                         case LITERAL_true:
 1004  
                         {
 1005  
                                 match(LITERAL_true);
 1006  
                                 value = Boolean.TRUE;
 1007  
                                 break;
 1008  
                         }
 1009  
                         case LITERAL_false:
 1010  
                         {
 1011  
                                 match(LITERAL_false);
 1012  
                                 value = Boolean.FALSE;
 1013  
                                 break;
 1014  
                         }
 1015  
                         case TOK_UNSIGNED_INTEGER:
 1016  
                         {
 1017  
                                 tokInt = LT(1);
 1018  
                                 match(TOK_UNSIGNED_INTEGER);
 1019  
                                 
 1020  
                                         try
 1021  
                                         {
 1022  
                                                 value = Integer.valueOf(tokInt.getText());
 1023  
                                         }
 1024  
                                         catch (NumberFormatException ignored)
 1025  
                                         {
 1026  
                                                 value = Long.valueOf(tokInt.getText());
 1027  
                                         }
 1028  
                                 
 1029  
                                 break;
 1030  
                         }
 1031  
                         case TOK_APPROXIMATE_NUMERIC_LITERAL:
 1032  
                         {
 1033  
                                 tokADbl = LT(1);
 1034  
                                 match(TOK_APPROXIMATE_NUMERIC_LITERAL);
 1035  
                                 value = Double.valueOf(tokADbl.getText());
 1036  
                                 break;
 1037  
                         }
 1038  
                         case TOK_EXACT_NUMERIC_LITERAL:
 1039  
                         {
 1040  
                                 tokEDbl = LT(1);
 1041  
                                 match(TOK_EXACT_NUMERIC_LITERAL);
 1042  
                                 value = Double.valueOf(tokEDbl.getText());
 1043  
                                 break;
 1044  
                         }
 1045  
                         case CharLiteral:
 1046  
                         {
 1047  
                                 tokChar = LT(1);
 1048  
                                 match(CharLiteral);
 1049  
                                 value = new Character(tokChar.getText().charAt(0));
 1050  
                                 break;
 1051  
                         }
 1052  
                         case StringLiteral:
 1053  
                         {
 1054  
                                 tokStr = LT(1);
 1055  
                                 match(StringLiteral);
 1056  
                                 value = tokStr.getText();
 1057  
                                 break;
 1058  
                         }
 1059  
                         case LITERAL_date:
 1060  
                         {
 1061  
                                 match(LITERAL_date);
 1062  
                                 tokDate = LT(1);
 1063  
                                 match(StringLiteral);
 1064  
                                 value = java.sql.Date.valueOf(tokDate.getText());
 1065  
                                 break;
 1066  
                         }
 1067  
                         case LITERAL_time:
 1068  
                         {
 1069  
                                 match(LITERAL_time);
 1070  
                                 tokTime = LT(1);
 1071  
                                 match(StringLiteral);
 1072  
                                 value = java.sql.Time.valueOf(tokTime.getText());
 1073  
                                 break;
 1074  
                         }
 1075  
                         case LITERAL_timestamp:
 1076  
                         {
 1077  
                                 match(LITERAL_timestamp);
 1078  
                                 tokTs = LT(1);
 1079  
                                 match(StringLiteral);
 1080  
                                 value = java.sql.Timestamp.valueOf(tokTs.getText());
 1081  
                                 break;
 1082  
                         }
 1083  
                         default:
 1084  
                         {
 1085  
                                 throw new NoViableAltException(LT(1), getFilename());
 1086  
                         }
 1087  
                         }
 1088  
                 }
 1089  
                 catch (RecognitionException ex) {
 1090  
                         reportError(ex);
 1091  
                         recover(ex,_tokenSet_17);
 1092  
                 }
 1093  
                 return value;
 1094  
         }
 1095  
         
 1096  
         public final Collection  argList() throws RecognitionException, TokenStreamException {
 1097  
                 Collection coll = null;
 1098  
                 
 1099  
                 
 1100  
                 try {      // for error handling
 1101  
                         
 1102  
                                         Collection temp = new Vector();
 1103  
                                     Object val;
 1104  
                                 
 1105  
                         match(TOK_LPAREN);
 1106  
                         {
 1107  
                         if ((_tokenSet_16.member(LA(1)))) {
 1108  
                                 val=literal();
 1109  
                                 if (val != null) {temp.add(val);}
 1110  
                                 {
 1111  
                                 _loop124:
 1112  
                                 do {
 1113  
                                         if ((LA(1)==TOK_COMMA)) {
 1114  
                                                 match(TOK_COMMA);
 1115  
                                                 val=literal();
 1116  
                                                 if (val != null) {temp.add(val);}
 1117  
                                         }
 1118  
                                         else {
 1119  
                                                 break _loop124;
 1120  
                                         }
 1121  
                                         
 1122  
                                 } while (true);
 1123  
                                 }
 1124  
                         }
 1125  
                         else if ((LA(1)==TOK_RPAREN)) {
 1126  
                         }
 1127  
                         else {
 1128  
                                 throw new NoViableAltException(LT(1), getFilename());
 1129  
                         }
 1130  
                         
 1131  
                         }
 1132  
                         match(TOK_RPAREN);
 1133  
                         
 1134  
                                         if (!temp.isEmpty()) {coll = temp;}
 1135  
                                         
 1136  
                 }
 1137  
                 catch (RecognitionException ex) {
 1138  
                         reportError(ex);
 1139  
                         recover(ex,_tokenSet_7);
 1140  
                 }
 1141  
                 return coll;
 1142  
         }
 1143  
         
 1144  
         
 1145  
         public static final String[] _tokenNames = {
 1146  
                 "<0>",
 1147  
                 "EOF",
 1148  
                 "<2>",
 1149  
                 "NULL_TREE_LOOKAHEAD",
 1150  
                 "right parenthesis",
 1151  
                 "left parenthesis",
 1152  
                 "comma",
 1153  
                 "semicolon",
 1154  
                 "TOK_COLON",
 1155  
                 "dot",
 1156  
                 "dot",
 1157  
                 "operator",
 1158  
                 "comparison operator",
 1159  
                 "operator",
 1160  
                 "operator",
 1161  
                 "operator",
 1162  
                 "operator",
 1163  
                 "comparison operator",
 1164  
                 "comparison operator",
 1165  
                 "comparison operator",
 1166  
                 "comparison operator",
 1167  
                 "comparison operator",
 1168  
                 "comparison operator",
 1169  
                 "left bracket",
 1170  
                 "right bracket",
 1171  
                 "TOK_DOLLAR",
 1172  
                 "NameFirstCharacter",
 1173  
                 "NameCharacter",
 1174  
                 "Identifier",
 1175  
                 "TOK_UNSIGNED_INTEGER",
 1176  
                 "TOK_APPROXIMATE_NUMERIC_LITERAL",
 1177  
                 "numeric value",
 1178  
                 "character string",
 1179  
                 "character string",
 1180  
                 "WhiteSpace",
 1181  
                 "NewLine",
 1182  
                 "CommentLine",
 1183  
                 "MultiLineComment",
 1184  
                 "\"select\"",
 1185  
                 "\"distinct\"",
 1186  
                 "\"from\"",
 1187  
                 "\"where\"",
 1188  
                 "\"order\"",
 1189  
                 "\"by\"",
 1190  
                 "\"group\"",
 1191  
                 "\"prefetch\"",
 1192  
                 "\"exists\"",
 1193  
                 "\"in\"",
 1194  
                 "\"asc\"",
 1195  
                 "\"desc\"",
 1196  
                 "\"or\"",
 1197  
                 "\"and\"",
 1198  
                 "\"nil\"",
 1199  
                 "\"not\"",
 1200  
                 "\"list\"",
 1201  
                 "\"between\"",
 1202  
                 "\"is_undefined\"",
 1203  
                 "\"is_defined\"",
 1204  
                 "\"like\"",
 1205  
                 "\"true\"",
 1206  
                 "\"false\"",
 1207  
                 "\"date\"",
 1208  
                 "\"time\"",
 1209  
                 "\"timestamp\""
 1210  
         };
 1211  
         
 1212  
         private static final long[] mk_tokenSet_0() {
 1213  
                 long[] data = { 2L, 0L};
 1214  
                 return data;
 1215  
         }
 1216  
         public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
 1217  
         private static final long[] mk_tokenSet_1() {
 1218  
                 long[] data = { 57174604644498L, 0L};
 1219  
                 return data;
 1220  
         }
 1221  
         public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
 1222  
         private static final long[] mk_tokenSet_2() {
 1223  
                 long[] data = { 52776558133394L, 0L};
 1224  
                 return data;
 1225  
         }
 1226  
         public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());
 1227  
         private static final long[] mk_tokenSet_3() {
 1228  
                 long[] data = { 35184372088978L, 0L};
 1229  
                 return data;
 1230  
         }
 1231  
         public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3());
 1232  
         private static final long[] mk_tokenSet_4() {
 1233  
                 long[] data = { 146L, 0L};
 1234  
                 return data;
 1235  
         }
 1236  
         public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4());
 1237  
         private static final long[] mk_tokenSet_5() {
 1238  
                 long[] data = { 141836999983104L, 0L};
 1239  
                 return data;
 1240  
         }
 1241  
         public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5());
 1242  
         private static final long[] mk_tokenSet_6() {
 1243  
                 long[] data = { 3437073348428178L, 0L};
 1244  
                 return data;
 1245  
         }
 1246  
         public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6());
 1247  
         private static final long[] mk_tokenSet_7() {
 1248  
                 long[] data = { 3434874325172370L, 0L};
 1249  
                 return data;
 1250  
         }
 1251  
         public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7());
 1252  
         private static final long[] mk_tokenSet_8() {
 1253  
                 long[] data = { 225250350381137952L, 0L};
 1254  
                 return data;
 1255  
         }
 1256  
         public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8());
 1257  
         private static final long[] mk_tokenSet_9() {
 1258  
                 long[] data = { 549650261048496160L, 0L};
 1259  
                 return data;
 1260  
         }
 1261  
         public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9());
 1262  
         private static final long[] mk_tokenSet_10() {
 1263  
                 long[] data = { 52776558133458L, 0L};
 1264  
                 return data;
 1265  
         }
 1266  
         public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10());
 1267  
         private static final long[] mk_tokenSet_11() {
 1268  
                 long[] data = { 35184372089042L, 0L};
 1269  
                 return data;
 1270  
         }
 1271  
         public static final BitSet _tokenSet_11 = new BitSet(mk_tokenSet_11());
 1272  
         private static final long[] mk_tokenSet_12() {
 1273  
                 long[] data = { 210L, 0L};
 1274  
                 return data;
 1275  
         }
 1276  
         public static final BitSet _tokenSet_12 = new BitSet(mk_tokenSet_12());
 1277  
         private static final long[] mk_tokenSet_13() {
 1278  
                 long[] data = { 8261632L, 0L};
 1279  
                 return data;
 1280  
         }
 1281  
         public static final BitSet _tokenSet_13 = new BitSet(mk_tokenSet_13());
 1282  
         private static final long[] mk_tokenSet_14() {
 1283  
                 long[] data = { -288230359475159040L, 0L};
 1284  
                 return data;
 1285  
         }
 1286  
         public static final BitSet _tokenSet_14 = new BitSet(mk_tokenSet_14());
 1287  
         private static final long[] mk_tokenSet_15() {
 1288  
                 long[] data = { -540431938607906816L, 0L};
 1289  
                 return data;
 1290  
         }
 1291  
         public static final BitSet _tokenSet_15 = new BitSet(mk_tokenSet_15());
 1292  
         private static final long[] mk_tokenSet_16() {
 1293  
                 long[] data = { -576460735626870784L, 0L};
 1294  
                 return data;
 1295  
         }
 1296  
         public static final BitSet _tokenSet_16 = new BitSet(mk_tokenSet_16());
 1297  
         private static final long[] mk_tokenSet_17() {
 1298  
                 long[] data = { 3434874325172434L, 0L};
 1299  
                 return data;
 1300  
         }
 1301  
         public static final BitSet _tokenSet_17 = new BitSet(mk_tokenSet_17());
 1302  
         
 1303  
         }