Package org.hibernate.sql.ordering.antlr

Source Code of org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser

// $ANTLR 2.7.6 (2005-12-22): "order-by.g" -> "GeneratedOrderByFragmentParser.java"$

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors.  All third-party contributions are
* distributed under license by Red Hat Middleware LLC.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*
*/
package org.hibernate.sql.ordering.antlr;

import antlr.TokenBuffer;
import antlr.TokenStreamException;
import antlr.TokenStreamIOException;
import antlr.ANTLRException;
import antlr.LLkParser;
import antlr.Token;
import antlr.TokenStream;
import antlr.RecognitionException;
import antlr.NoViableAltException;
import antlr.MismatchedTokenException;
import antlr.SemanticException;
import antlr.ParserSharedInputState;
import antlr.collections.impl.BitSet;
import antlr.collections.AST;
import java.util.Hashtable;
import antlr.ASTFactory;
import antlr.ASTPair;
import antlr.collections.impl.ASTArray;

/**
* Antlr grammar for dealing with <tt>order-by</tt> mapping fragments.

* @author Steve Ebersole
*/
public class GeneratedOrderByFragmentParser extends antlr.LLkParser       implements OrderByTemplateTokenTypes
{

    /**
     * Method for logging execution trace information.
     *
     * @param msg The trace message.
     */
    protected void trace(String msg) {
        System.out.println( msg );
    }

    /**
     * Extract a node's text.
     *
     * @param ast The node
     *
     * @return The text.
     */
    protected final String extractText(AST ast) {
        // for some reason, within AST creation blocks "[]" I am somtimes unable to refer to the AST.getText() method
        // using #var (the #var is not interpreted as the rule's output AST).
        return ast.getText();
    }

    /**
     * Process the given node as a quote identifier.  These need to be quoted in the dialect-specific way.
     *
     * @param ident The quoted-identifier node.
     *
     * @return The processed node.
     *
     * @see org.hibernate.dialect.Dialect#quote
     */
    protected AST quotedIdentifier(AST ident) {
        return ident;
    }

    /**
     * Process the given node as a quote string.
     *
     * @param ident The quoted string.  This is used from within function param recognition, and represents a
     * SQL-quoted string.
     *
     * @return The processed node.
     */
    protected AST quotedString(AST ident) {
        return ident;
    }

    /**
     * A check to see if the text of the given node represents a known function name.
     *
     * @param ast The node whose text we want to check.
     *
     * @return True if the node's text is a known function name, false otherwise.
     *
     * @see org.hibernate.dialect.function.SQLFunctionRegistry
     */
    protected boolean isFunctionName(AST ast) {
        return false;
    }

    /**
     * Process the given node as a function.
     *
     * @param The node representing the function invocation (including parameters as subtree components).
     *
     * @return The processed node.
     */
    protected AST resolveFunction(AST ast) {
        return ast;
    }

    /**
     * Process the given node as an IDENT.  May represent either a column reference or a property reference.
     *
     * @param ident The node whose text represents either a column or property reference.
     *
     * @return The processed node.
     */
    protected AST resolveIdent(AST ident) {
        return ident;
    }

    /**
     * Allow post processing of each <tt>sort specification</tt>
     *
     * @param The grammar-built sort specification subtree.
     *
     * @return The processed sort specification subtree.
     */
    protected AST postProcessSortSpecification(AST sortSpec) {
        return sortSpec;
    }


protected GeneratedOrderByFragmentParser(TokenBuffer tokenBuf, int k) {
  super(tokenBuf,k);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

public GeneratedOrderByFragmentParser(TokenBuffer tokenBuf) {
  this(tokenBuf,3);
}

protected GeneratedOrderByFragmentParser(TokenStream lexer, int k) {
  super(lexer,k);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

public GeneratedOrderByFragmentParser(TokenStream lexer) {
  this(lexer,3);
}

public GeneratedOrderByFragmentParser(ParserSharedInputState state) {
  super(state,3);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

/**
* Main recognition rule for this grammar
*/
  public final void orderByFragment() throws RecognitionException, TokenStreamException {
   
    traceIn("orderByFragment");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST orderByFragment_AST = null;
      trace("orderByFragment");
     
      try {      // for error handling
        sortSpecification();
        astFactory.addASTChild(currentAST, returnAST);
        {
        _loop3:
        do {
          if ((LA(1)==COMMA)) {
            match(COMMA);
            sortSpecification();
            astFactory.addASTChild(currentAST, returnAST);
          }
          else {
            break _loop3;
          }
         
        } while (true);
        }
        if ( inputState.guessing==0 ) {
          orderByFragment_AST = (AST)currentAST.root;
         
          orderByFragment_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(ORDER_BY,"order-by")).add(orderByFragment_AST));
         
          currentAST.root = orderByFragment_AST;
          currentAST.child = orderByFragment_AST!=null &&orderByFragment_AST.getFirstChild()!=null ?
            orderByFragment_AST.getFirstChild() : orderByFragment_AST;
          currentAST.advanceChildToEnd();
        }
        orderByFragment_AST = (AST)currentAST.root;
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_0);
        } else {
          throw ex;
        }
      }
      returnAST = orderByFragment_AST;
    } finally { // debugging
      traceOut("orderByFragment");
    }
  }
 
/**
* Reconition rule for what ANSI SQL terms the <tt>sort specification</tt>, which is essentially each thing upon which
* the results should be sorted.
*/
  public final void sortSpecification() throws RecognitionException, TokenStreamException {
   
    traceIn("sortSpecification");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST sortSpecification_AST = null;
      trace("sortSpecification");
     
      try {      // for error handling
        sortKey();
        astFactory.addASTChild(currentAST, returnAST);
        {
        switch ( LA(1)) {
        case COLLATE:
        {
          collationSpecification();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        case EOF:
        case ASCENDING:
        case DESCENDING:
        case COMMA:
        case LITERAL_ascending:
        case LITERAL_descending:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        {
        switch ( LA(1)) {
        case ASCENDING:
        case DESCENDING:
        case LITERAL_ascending:
        case LITERAL_descending:
        {
          orderingSpecification();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        case EOF:
        case COMMA:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        if ( inputState.guessing==0 ) {
          sortSpecification_AST = (AST)currentAST.root;
         
          sortSpecification_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(SORT_SPEC,"{sort specification}")).add(sortSpecification_AST));
          sortSpecification_AST = postProcessSortSpecification( sortSpecification_AST );
         
          currentAST.root = sortSpecification_AST;
          currentAST.child = sortSpecification_AST!=null &&sortSpecification_AST.getFirstChild()!=null ?
            sortSpecification_AST.getFirstChild() : sortSpecification_AST;
          currentAST.advanceChildToEnd();
        }
        sortSpecification_AST = (AST)currentAST.root;
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_1);
        } else {
          throw ex;
        }
      }
      returnAST = sortSpecification_AST;
    } finally { // debugging
      traceOut("sortSpecification");
    }
  }
 
/**
* Reconition rule for what ANSI SQL terms the <tt>sort key</tt> which is the expression (column, function, etc) upon
* which to base the sorting.
*/
  public final void sortKey() throws RecognitionException, TokenStreamException {
   
    traceIn("sortKey");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST sortKey_AST = null;
      AST e_AST = null;
      trace("sortKey");
     
      try {      // for error handling
        expression();
        e_AST = (AST)returnAST;
        if ( inputState.guessing==0 ) {
          sortKey_AST = (AST)currentAST.root;
         
          sortKey_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(SORT_KEY,"sort key")).add(e_AST));
         
          currentAST.root = sortKey_AST;
          currentAST.child = sortKey_AST!=null &&sortKey_AST.getFirstChild()!=null ?
            sortKey_AST.getFirstChild() : sortKey_AST;
          currentAST.advanceChildToEnd();
        }
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_2);
        } else {
          throw ex;
        }
      }
      returnAST = sortKey_AST;
    } finally { // debugging
      traceOut("sortKey");
    }
  }
 
/**
* Reconition rule for what ANSI SQL terms the <tt>collation specification</tt> used to allow specifying that sorting for
* the given {@link #sortSpecification} be treated within a specific character-set.
*/
  public final void collationSpecification() throws RecognitionException, TokenStreamException {
   
    traceIn("collationSpecification");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST collationSpecification_AST = null;
      Token  c = null;
      AST c_AST = null;
      AST cn_AST = null;
      trace("collationSpecification");
     
      try {      // for error handling
        c = LT(1);
        c_AST = astFactory.create(c);
        match(COLLATE);
        collationName();
        cn_AST = (AST)returnAST;
        if ( inputState.guessing==0 ) {
          collationSpecification_AST = (AST)currentAST.root;
         
          collationSpecification_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(COLLATE,extractText(cn_AST))));
         
          currentAST.root = collationSpecification_AST;
          currentAST.child = collationSpecification_AST!=null &&collationSpecification_AST.getFirstChild()!=null ?
            collationSpecification_AST.getFirstChild() : collationSpecification_AST;
          currentAST.advanceChildToEnd();
        }
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_3);
        } else {
          throw ex;
        }
      }
      returnAST = collationSpecification_AST;
    } finally { // debugging
      traceOut("collationSpecification");
    }
  }
 
/**
* Reconition rule for what ANSI SQL terms the <tt>ordering specification</tt>; <tt>ASCENDING</tt> or
* <tt>DESCENDING</tt>.
*/
  public final void orderingSpecification() throws RecognitionException, TokenStreamException {
   
    traceIn("orderingSpecification");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST orderingSpecification_AST = null;
      trace("orderingSpecification");
     
      try {      // for error handling
        switch ( LA(1)) {
        case ASCENDING:
        case LITERAL_ascending:
        {
          {
          switch ( LA(1)) {
          case ASCENDING:
          {
            match(ASCENDING);
            break;
          }
          case LITERAL_ascending:
          {
            match(LITERAL_ascending);
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          if ( inputState.guessing==0 ) {
            orderingSpecification_AST = (AST)currentAST.root;
           
            orderingSpecification_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(ORDER_SPEC,"asc")));
           
            currentAST.root = orderingSpecification_AST;
            currentAST.child = orderingSpecification_AST!=null &&orderingSpecification_AST.getFirstChild()!=null ?
              orderingSpecification_AST.getFirstChild() : orderingSpecification_AST;
            currentAST.advanceChildToEnd();
          }
          break;
        }
        case DESCENDING:
        case LITERAL_descending:
        {
          {
          switch ( LA(1)) {
          case DESCENDING:
          {
            match(DESCENDING);
            break;
          }
          case LITERAL_descending:
          {
            match(LITERAL_descending);
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          if ( inputState.guessing==0 ) {
            orderingSpecification_AST = (AST)currentAST.root;
           
            orderingSpecification_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(ORDER_SPEC,"desc")));
           
            currentAST.root = orderingSpecification_AST;
            currentAST.child = orderingSpecification_AST!=null &&orderingSpecification_AST.getFirstChild()!=null ?
              orderingSpecification_AST.getFirstChild() : orderingSpecification_AST;
            currentAST.advanceChildToEnd();
          }
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_1);
        } else {
          throw ex;
        }
      }
      returnAST = orderingSpecification_AST;
    } finally { // debugging
      traceOut("orderingSpecification");
    }
  }
 
/**
* Reconition rule what this grammar recognizes as valid <tt>sort key</tt>.
*/
  public final void expression() throws RecognitionException, TokenStreamException {
   
    traceIn("expression");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST expression_AST = null;
      Token  qi = null;
      AST qi_AST = null;
      AST f_AST = null;
      AST p_AST = null;
      Token  i = null;
      AST i_AST = null;
      trace("expression");
     
      try {      // for error handling
        if ((LA(1)==HARD_QUOTE)) {
          AST tmp6_AST = null;
          tmp6_AST = astFactory.create(LT(1));
          match(HARD_QUOTE);
          qi = LT(1);
          qi_AST = astFactory.create(qi);
          match(IDENT);
          AST tmp7_AST = null;
          tmp7_AST = astFactory.create(LT(1));
          match(HARD_QUOTE);
          if ( inputState.guessing==0 ) {
            expression_AST = (AST)currentAST.root;
           
            expression_AST = quotedIdentifier( qi_AST );
           
            currentAST.root = expression_AST;
            currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
              expression_AST.getFirstChild() : expression_AST;
            currentAST.advanceChildToEnd();
          }
        }
        else {
          boolean synPredMatched12 = false;
          if (((LA(1)==IDENT) && (LA(2)==DOT||LA(2)==OPEN_PAREN) && (_tokenSet_4.member(LA(3))))) {
            int _m12 = mark();
            synPredMatched12 = true;
            inputState.guessing++;
            try {
              {
              match(IDENT);
              {
              _loop11:
              do {
                if ((LA(1)==DOT)) {
                  match(DOT);
                  match(IDENT);
                }
                else {
                  break _loop11;
                }
               
              } while (true);
              }
              match(OPEN_PAREN);
              }
            }
            catch (RecognitionException pe) {
              synPredMatched12 = false;
            }
            rewind(_m12);
inputState.guessing--;
          }
          if ( synPredMatched12 ) {
            functionCall();
            f_AST = (AST)returnAST;
            if ( inputState.guessing==0 ) {
              expression_AST = (AST)currentAST.root;
             
              expression_AST = f_AST;
             
              currentAST.root = expression_AST;
              currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
                expression_AST.getFirstChild() : expression_AST;
              currentAST.advanceChildToEnd();
            }
          }
          else if ((LA(1)==IDENT) && (LA(2)==DOT) && (LA(3)==IDENT)) {
            simplePropertyPath();
            p_AST = (AST)returnAST;
            if ( inputState.guessing==0 ) {
              expression_AST = (AST)currentAST.root;
             
              expression_AST = resolveIdent( p_AST );
             
              currentAST.root = expression_AST;
              currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
                expression_AST.getFirstChild() : expression_AST;
              currentAST.advanceChildToEnd();
            }
          }
          else if ((LA(1)==IDENT) && (_tokenSet_5.member(LA(2)))) {
            i = LT(1);
            i_AST = astFactory.create(i);
            match(IDENT);
            if ( inputState.guessing==0 ) {
              expression_AST = (AST)currentAST.root;
             
              if ( isFunctionName( i_AST ) ) {
              expression_AST = resolveFunction( i_AST );
              }
              else {
              expression_AST = resolveIdent( i_AST );
              }
             
              currentAST.root = expression_AST;
              currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
                expression_AST.getFirstChild() : expression_AST;
              currentAST.advanceChildToEnd();
            }
          }
          else {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
        }
        catch (RecognitionException ex) {
          if (inputState.guessing==0) {
            reportError(ex);
            recover(ex,_tokenSet_5);
          } else {
            throw ex;
          }
        }
        returnAST = expression_AST;
      } finally { // debugging
        traceOut("expression");
      }
    }
   
/**
* Recognition rule for a function call
*/
  public final void functionCall() throws RecognitionException, TokenStreamException {
   
    traceIn("functionCall");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST functionCall_AST = null;
      AST fn_AST = null;
      AST pl_AST = null;
      trace("functionCall");
     
      try {      // for error handling
        functionName();
        fn_AST = (AST)returnAST;
        AST tmp8_AST = null;
        tmp8_AST = astFactory.create(LT(1));
        match(OPEN_PAREN);
        functionParameterList();
        pl_AST = (AST)returnAST;
        AST tmp9_AST = null;
        tmp9_AST = astFactory.create(LT(1));
        match(CLOSE_PAREN);
        if ( inputState.guessing==0 ) {
          functionCall_AST = (AST)currentAST.root;
         
          functionCall_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(IDENT,extractText(fn_AST))).add(pl_AST));
          functionCall_AST = resolveFunction( functionCall_AST );
         
          currentAST.root = functionCall_AST;
          currentAST.child = functionCall_AST!=null &&functionCall_AST.getFirstChild()!=null ?
            functionCall_AST.getFirstChild() : functionCall_AST;
          currentAST.advanceChildToEnd();
        }
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_5);
        } else {
          throw ex;
        }
      }
      returnAST = functionCall_AST;
    } finally { // debugging
      traceOut("functionCall");
    }
  }
 
/**
* A simple-property-path is an IDENT followed by one or more (DOT IDENT) sequences
*/
  public final void simplePropertyPath() throws RecognitionException, TokenStreamException {
   
    traceIn("simplePropertyPath");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST simplePropertyPath_AST = null;
      Token  i = null;
      AST i_AST = null;
      Token  i2 = null;
      AST i2_AST = null;
     
      trace("simplePropertyPath");
      StringBuffer buffer = new StringBuffer();
     
     
      try {      // for error handling
        i = LT(1);
        i_AST = astFactory.create(i);
        astFactory.addASTChild(currentAST, i_AST);
        match(IDENT);
        if ( inputState.guessing==0 ) {
          buffer.append( i.getText() );
        }
        {
        int _cnt31=0;
        _loop31:
        do {
          if ((LA(1)==DOT)) {
            AST tmp10_AST = null;
            tmp10_AST = astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp10_AST);
            match(DOT);
            i2 = LT(1);
            i2_AST = astFactory.create(i2);
            astFactory.addASTChild(currentAST, i2_AST);
            match(IDENT);
            if ( inputState.guessing==0 ) {
              buffer.append( '.').append( i2.getText() );
            }
          }
          else {
            if ( _cnt31>=1 ) { break _loop31; } else {throw new NoViableAltException(LT(1), getFilename());}
          }
         
          _cnt31++;
        } while (true);
        }
        if ( inputState.guessing==0 ) {
          simplePropertyPath_AST = (AST)currentAST.root;
         
          simplePropertyPath_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(IDENT,buffer.toString())));
         
          currentAST.root = simplePropertyPath_AST;
          currentAST.child = simplePropertyPath_AST!=null &&simplePropertyPath_AST.getFirstChild()!=null ?
            simplePropertyPath_AST.getFirstChild() : simplePropertyPath_AST;
          currentAST.advanceChildToEnd();
        }
        simplePropertyPath_AST = (AST)currentAST.root;
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_5);
        } else {
          throw ex;
        }
      }
      returnAST = simplePropertyPath_AST;
    } finally { // debugging
      traceOut("simplePropertyPath");
    }
  }
 
/**
* Intended for use as a syntactic predicate to determine whether an IDENT represents a known SQL function name.
*/
  public final void functionCallCheck() throws RecognitionException, TokenStreamException {
   
    traceIn("functionCallCheck");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST functionCallCheck_AST = null;
      trace("functionCallCheck");
     
      try {      // for error handling
        AST tmp11_AST = null;
        tmp11_AST = astFactory.create(LT(1));
        match(IDENT);
        {
        _loop15:
        do {
          if ((LA(1)==DOT)) {
            AST tmp12_AST = null;
            tmp12_AST = astFactory.create(LT(1));
            match(DOT);
            AST tmp13_AST = null;
            tmp13_AST = astFactory.create(LT(1));
            match(IDENT);
          }
          else {
            break _loop15;
          }
         
        } while (true);
        }
        AST tmp14_AST = null;
        tmp14_AST = astFactory.create(LT(1));
        match(OPEN_PAREN);
        if (!( true ))
          throw new SemanticException(" true ");
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_0);
        } else {
          throw ex;
        }
      }
      returnAST = functionCallCheck_AST;
    } finally { // debugging
      traceOut("functionCallCheck");
    }
  }
 
/**
* A function-name is an IDENT followed by zero or more (DOT IDENT) sequences
*/
  public final void functionName() throws RecognitionException, TokenStreamException {
   
    traceIn("functionName");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST functionName_AST = null;
      Token  i = null;
      AST i_AST = null;
      Token  i2 = null;
      AST i2_AST = null;
     
      trace("functionName");
      StringBuffer buffer = new StringBuffer();
     
     
      try {      // for error handling
        i = LT(1);
        i_AST = astFactory.create(i);
        astFactory.addASTChild(currentAST, i_AST);
        match(IDENT);
        if ( inputState.guessing==0 ) {
          buffer.append( i.getText() );
        }
        {
        _loop19:
        do {
          if ((LA(1)==DOT)) {
            AST tmp15_AST = null;
            tmp15_AST = astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp15_AST);
            match(DOT);
            i2 = LT(1);
            i2_AST = astFactory.create(i2);
            astFactory.addASTChild(currentAST, i2_AST);
            match(IDENT);
            if ( inputState.guessing==0 ) {
              buffer.append( '.').append( i2.getText() );
            }
          }
          else {
            break _loop19;
          }
         
        } while (true);
        }
        if ( inputState.guessing==0 ) {
          functionName_AST = (AST)currentAST.root;
         
          functionName_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(IDENT,buffer.toString())));
         
          currentAST.root = functionName_AST;
          currentAST.child = functionName_AST!=null &&functionName_AST.getFirstChild()!=null ?
            functionName_AST.getFirstChild() : functionName_AST;
          currentAST.advanceChildToEnd();
        }
        functionName_AST = (AST)currentAST.root;
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_6);
        } else {
          throw ex;
        }
      }
      returnAST = functionName_AST;
    } finally { // debugging
      traceOut("functionName");
    }
  }
 
/**
* Recognition rule used to "wrap" all function parameters into an EXPR_LIST node
*/
  public final void functionParameterList() throws RecognitionException, TokenStreamException {
   
    traceIn("functionParameterList");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST functionParameterList_AST = null;
      trace("functionParameterList");
     
      try {      // for error handling
        functionParameter();
        astFactory.addASTChild(currentAST, returnAST);
        {
        _loop22:
        do {
          if ((LA(1)==COMMA)) {
            match(COMMA);
            functionParameter();
            astFactory.addASTChild(currentAST, returnAST);
          }
          else {
            break _loop22;
          }
         
        } while (true);
        }
        if ( inputState.guessing==0 ) {
          functionParameterList_AST = (AST)currentAST.root;
         
          functionParameterList_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(EXPR_LIST,"{param list}")).add(functionParameterList_AST));
         
          currentAST.root = functionParameterList_AST;
          currentAST.child = functionParameterList_AST!=null &&functionParameterList_AST.getFirstChild()!=null ?
            functionParameterList_AST.getFirstChild() : functionParameterList_AST;
          currentAST.advanceChildToEnd();
        }
        functionParameterList_AST = (AST)currentAST.root;
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_7);
        } else {
          throw ex;
        }
      }
      returnAST = functionParameterList_AST;
    } finally { // debugging
      traceOut("functionParameterList");
    }
  }
 
/**
* Recognized function parameters.
*/
  public final void functionParameter() throws RecognitionException, TokenStreamException {
   
    traceIn("functionParameter");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST functionParameter_AST = null;
      trace("functionParameter");
     
      try {      // for error handling
        switch ( LA(1)) {
        case HARD_QUOTE:
        case IDENT:
        {
          expression();
          astFactory.addASTChild(currentAST, returnAST);
          functionParameter_AST = (AST)currentAST.root;
          break;
        }
        case NUM_DOUBLE:
        {
          AST tmp17_AST = null;
          tmp17_AST = astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp17_AST);
          match(NUM_DOUBLE);
          functionParameter_AST = (AST)currentAST.root;
          break;
        }
        case NUM_FLOAT:
        {
          AST tmp18_AST = null;
          tmp18_AST = astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp18_AST);
          match(NUM_FLOAT);
          functionParameter_AST = (AST)currentAST.root;
          break;
        }
        case NUM_INT:
        {
          AST tmp19_AST = null;
          tmp19_AST = astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp19_AST);
          match(NUM_INT);
          functionParameter_AST = (AST)currentAST.root;
          break;
        }
        case NUM_LONG:
        {
          AST tmp20_AST = null;
          tmp20_AST = astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp20_AST);
          match(NUM_LONG);
          functionParameter_AST = (AST)currentAST.root;
          break;
        }
        case QUOTED_STRING:
        {
          AST tmp21_AST = null;
          tmp21_AST = astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp21_AST);
          match(QUOTED_STRING);
          if ( inputState.guessing==0 ) {
            functionParameter_AST = (AST)currentAST.root;
           
            functionParameter_AST = quotedString( functionParameter_AST );
           
            currentAST.root = functionParameter_AST;
            currentAST.child = functionParameter_AST!=null &&functionParameter_AST.getFirstChild()!=null ?
              functionParameter_AST.getFirstChild() : functionParameter_AST;
            currentAST.advanceChildToEnd();
          }
          functionParameter_AST = (AST)currentAST.root;
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_8);
        } else {
          throw ex;
        }
      }
      returnAST = functionParameter_AST;
    } finally { // debugging
      traceOut("functionParameter");
    }
  }
 
/**
* The collation name wrt {@link #collationSpecification}.  Namely, the character-set.
*/
  public final void collationName() throws RecognitionException, TokenStreamException {
   
    traceIn("collationName");
    try { // debugging
      returnAST = null;
      ASTPair currentAST = new ASTPair();
      AST collationName_AST = null;
      trace("collationSpecification");
     
      try {      // for error handling
        AST tmp22_AST = null;
        tmp22_AST = astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp22_AST);
        match(IDENT);
        collationName_AST = (AST)currentAST.root;
      }
      catch (RecognitionException ex) {
        if (inputState.guessing==0) {
          reportError(ex);
          recover(ex,_tokenSet_3);
        } else {
          throw ex;
        }
      }
      returnAST = collationName_AST;
    } finally { // debugging
      traceOut("collationName");
    }
  }
 
 
  public static final String[] _tokenNames = {
    "<0>",
    "EOF",
    "<2>",
    "NULL_TREE_LOOKAHEAD",
    "ORDER_BY",
    "SORT_SPEC",
    "ORDER_SPEC",
    "SORT_KEY",
    "EXPR_LIST",
    "DOT",
    "IDENT_LIST",
    "COLUMN_REF",
    "\"collate\"",
    "\"asc\"",
    "\"desc\"",
    "COMMA",
    "HARD_QUOTE",
    "IDENT",
    "OPEN_PAREN",
    "CLOSE_PAREN",
    "NUM_DOUBLE",
    "NUM_FLOAT",
    "NUM_INT",
    "NUM_LONG",
    "QUOTED_STRING",
    "\"ascending\"",
    "\"descending\"",
    "ID_START_LETTER",
    "ID_LETTER",
    "ESCqs",
    "HEX_DIGIT",
    "EXPONENT",
    "FLOAT_SUFFIX",
    "WS"
  };
 
  protected void buildTokenTypeASTClassMap() {
    tokenTypeToASTClassMap=null;
  };
 
  private static final long[] mk_tokenSet_0() {
    long[] data = { 2L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
  private static final long[] mk_tokenSet_1() {
    long[] data = { 32770L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
  private static final long[] mk_tokenSet_2() {
    long[] data = { 100724738L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());
  private static final long[] mk_tokenSet_3() {
    long[] data = { 100720642L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3());
  private static final long[] mk_tokenSet_4() {
    long[] data = { 32702464L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4());
  private static final long[] mk_tokenSet_5() {
    long[] data = { 101249026L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5());
  private static final long[] mk_tokenSet_6() {
    long[] data = { 262144L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6());
  private static final long[] mk_tokenSet_7() {
    long[] data = { 524288L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7());
  private static final long[] mk_tokenSet_8() {
    long[] data = { 557056L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8());
 
  }
TOP

Related Classes of org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.