All Downloads are FREE. Search and download functionalities are using the official Maven repository.

oenix.phoenix-core.3.2.0.source-code.PhoenixSQLParser Maven / Gradle / Ivy

There is a newer version: 5.2.1
Show newest version
// $ANTLR 3.5 PhoenixSQL.g 2014-10-28 16:30:18

/**
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.phoenix.parse;

///CLOVER:OFF
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import org.apache.hadoop.hbase.util.Pair;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collections;
import java.util.Stack;
import java.sql.SQLException;
import org.apache.phoenix.expression.function.CountAggregateFunction;
import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.IllegalDataException;
import org.apache.phoenix.schema.PDataType;
import org.apache.phoenix.schema.PIndexState;
import org.apache.phoenix.schema.PTableType;

import org.apache.phoenix.schema.stats.StatisticsCollectionScope;

import org.apache.phoenix.util.SchemaUtil;
import org.apache.phoenix.parse.LikeParseNode.LikeType;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
@SuppressWarnings("all")
public class PhoenixSQLParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"", "", "", "", "ADD", "ALL", "ALTER", "AND", 
		"ANY", "ARRAY", "AS", "ASC", "ASTERISK", "AT", "BETWEEN", "BIND_NAME", 
		"BY", "CACHE", "CASCADE", "CASE", "CAST", "CHAR", "CHAR_ESC", "COLON", 
		"COLUMN", "COLUMNS", "COMMA", "COMMENT_AND_HINT_END", "COMMENT_START", 
		"CONCAT", "CONSTRAINT", "CREATE", "CURRENT", "CYCLE", "DBL_QUOTE_CHAR", 
		"DECIMAL", "DELETE", "DERIVE", "DESC", "DIGIT", "DISABLE", "DISTINCT", 
		"DIVIDE", "DOT", "DOUBLE", "DOUBLE_EQ", "DOUBLE_QUOTE", "DROP", "ELSE", 
		"END", "EOL", "EQ", "EXISTS", "EXPLAIN", "FALSE", "FIELDCHAR", "FIRST", 
		"FOR", "FROM", "FULL", "GROUP", "GT", "HAVING", "HINT_START", "IF", "ILIKE", 
		"IN", "INCLUDE", "INCREMENT", "INDEX", "INNER", "INTO", "IS", "JOIN", 
		"KEY", "LAST", "LCURLY", "LEFT", "LETTER", "LIKE", "LIMIT", "LONG", "LPAREN", 
		"LSQUARE", "LT", "MAXVALUE", "MINUS", "MINVALUE", "ML_COMMENT", "ML_HINT", 
		"NAME", "NEXT", "NOEQ1", "NOEQ2", "NOT", "NULL", "NULLS", "NUMBER", "ON", 
		"OR", "ORDER", "OTHER", "OUTER", "OUTER_JOIN", "PERCENT", "PLUS", "POSINTEGER", 
		"PRIMARY", "QUESTION", "RCURLY", "REBUILD", "RIGHT", "RPAREN", "RSQUARE", 
		"SELECT", "SEMICOLON", "SEQUENCE", "SET", "SL_COMMENT", "SL_COMMENT1", 
		"SL_COMMENT2", "SOME", "SPLIT", "START", "STATISTICS", "STRING_LITERAL", 
		"TABLE", "TABLES", "THEN", "TILDE", "TRUE", "UNUSABLE", "UPDATE", "UPSERT", 
		"USABLE", "VALUE", "VALUES", "VIEW", "WHEN", "WHERE", "WITH", "WITHIN", 
		"WS"
	};
	public static final int EOF=-1;
	public static final int ADD=4;
	public static final int ALL=5;
	public static final int ALTER=6;
	public static final int AND=7;
	public static final int ANY=8;
	public static final int ARRAY=9;
	public static final int AS=10;
	public static final int ASC=11;
	public static final int ASTERISK=12;
	public static final int AT=13;
	public static final int BETWEEN=14;
	public static final int BIND_NAME=15;
	public static final int BY=16;
	public static final int CACHE=17;
	public static final int CASCADE=18;
	public static final int CASE=19;
	public static final int CAST=20;
	public static final int CHAR=21;
	public static final int CHAR_ESC=22;
	public static final int COLON=23;
	public static final int COLUMN=24;
	public static final int COLUMNS=25;
	public static final int COMMA=26;
	public static final int COMMENT_AND_HINT_END=27;
	public static final int COMMENT_START=28;
	public static final int CONCAT=29;
	public static final int CONSTRAINT=30;
	public static final int CREATE=31;
	public static final int CURRENT=32;
	public static final int CYCLE=33;
	public static final int DBL_QUOTE_CHAR=34;
	public static final int DECIMAL=35;
	public static final int DELETE=36;
	public static final int DERIVE=37;
	public static final int DESC=38;
	public static final int DIGIT=39;
	public static final int DISABLE=40;
	public static final int DISTINCT=41;
	public static final int DIVIDE=42;
	public static final int DOT=43;
	public static final int DOUBLE=44;
	public static final int DOUBLE_EQ=45;
	public static final int DOUBLE_QUOTE=46;
	public static final int DROP=47;
	public static final int ELSE=48;
	public static final int END=49;
	public static final int EOL=50;
	public static final int EQ=51;
	public static final int EXISTS=52;
	public static final int EXPLAIN=53;
	public static final int FALSE=54;
	public static final int FIELDCHAR=55;
	public static final int FIRST=56;
	public static final int FOR=57;
	public static final int FROM=58;
	public static final int FULL=59;
	public static final int GROUP=60;
	public static final int GT=61;
	public static final int HAVING=62;
	public static final int HINT_START=63;
	public static final int IF=64;
	public static final int ILIKE=65;
	public static final int IN=66;
	public static final int INCLUDE=67;
	public static final int INCREMENT=68;
	public static final int INDEX=69;
	public static final int INNER=70;
	public static final int INTO=71;
	public static final int IS=72;
	public static final int JOIN=73;
	public static final int KEY=74;
	public static final int LAST=75;
	public static final int LCURLY=76;
	public static final int LEFT=77;
	public static final int LETTER=78;
	public static final int LIKE=79;
	public static final int LIMIT=80;
	public static final int LONG=81;
	public static final int LPAREN=82;
	public static final int LSQUARE=83;
	public static final int LT=84;
	public static final int MAXVALUE=85;
	public static final int MINUS=86;
	public static final int MINVALUE=87;
	public static final int ML_COMMENT=88;
	public static final int ML_HINT=89;
	public static final int NAME=90;
	public static final int NEXT=91;
	public static final int NOEQ1=92;
	public static final int NOEQ2=93;
	public static final int NOT=94;
	public static final int NULL=95;
	public static final int NULLS=96;
	public static final int NUMBER=97;
	public static final int ON=98;
	public static final int OR=99;
	public static final int ORDER=100;
	public static final int OTHER=101;
	public static final int OUTER=102;
	public static final int OUTER_JOIN=103;
	public static final int PERCENT=104;
	public static final int PLUS=105;
	public static final int POSINTEGER=106;
	public static final int PRIMARY=107;
	public static final int QUESTION=108;
	public static final int RCURLY=109;
	public static final int REBUILD=110;
	public static final int RIGHT=111;
	public static final int RPAREN=112;
	public static final int RSQUARE=113;
	public static final int SELECT=114;
	public static final int SEMICOLON=115;
	public static final int SEQUENCE=116;
	public static final int SET=117;
	public static final int SL_COMMENT=118;
	public static final int SL_COMMENT1=119;
	public static final int SL_COMMENT2=120;
	public static final int SOME=121;
	public static final int SPLIT=122;
	public static final int START=123;
	public static final int STATISTICS=124;
	public static final int STRING_LITERAL=125;
	public static final int TABLE=126;
	public static final int TABLES=127;
	public static final int THEN=128;
	public static final int TILDE=129;
	public static final int TRUE=130;
	public static final int UNUSABLE=131;
	public static final int UPDATE=132;
	public static final int UPSERT=133;
	public static final int USABLE=134;
	public static final int VALUE=135;
	public static final int VALUES=136;
	public static final int VIEW=137;
	public static final int WHEN=138;
	public static final int WHERE=139;
	public static final int WITH=140;
	public static final int WITHIN=141;
	public static final int WS=142;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public PhoenixSQLParser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public PhoenixSQLParser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	@Override public String[] getTokenNames() { return PhoenixSQLParser.tokenNames; }
	@Override public String getGrammarFileName() { return "PhoenixSQL.g"; }


	    
	    /**
	     * used to turn '?' binds into : binds.
	     */
	    private int anonBindNum;
	    private ParseNodeFactory factory;
	    private ParseContext.Stack contextStack = new ParseContext.Stack();

	    public void setParseNodeFactory(ParseNodeFactory factory) {
	        this.factory = factory;
	    }
	    
	    public boolean isCountFunction(String field) {
	        return CountAggregateFunction.NORMALIZED_NAME.equals(SchemaUtil.normalizeIdentifier(field));
	    }
	     
	    public int line(Token t) {
	        return t.getLine();
	    }

	    public int column(Token t) {
	        return t.getCharPositionInLine() + 1;
	    }
	    
	    private void throwRecognitionException(Token t) throws RecognitionException {
	        RecognitionException e = new RecognitionException();
	        e.token = t;
	        e.line = t.getLine();
	        e.charPositionInLine = t.getCharPositionInLine();
	        e.input = input;
	        throw e;
	    }
	    
	    public int getBindCount() {
	        return anonBindNum;
	    }
	    
	    public void resetBindCount() {
	        anonBindNum = 0;
	    }
	    
	    public String nextBind() {
	        return Integer.toString(++anonBindNum);
	    }
	    
	    public void updateBind(String namedBind){
	         int nBind = Integer.parseInt(namedBind);
	         if (nBind > anonBindNum) {
	             anonBindNum = nBind;
	         }
	    }

	    protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow)
	        throws RecognitionException {
	        RecognitionException e = null;
	        // if next token is what we are looking for then "delete" this token
	        if (mismatchIsUnwantedToken(input, ttype)) {
	            e = new UnwantedTokenException(ttype, input);
	        } else if (mismatchIsMissingToken(input, follow)) {
	            Object inserted = getMissingSymbol(input, e, ttype, follow);
	            e = new MissingTokenException(ttype, input, inserted);
	        } else {
	            e = new MismatchedTokenException(ttype, input);
	        }
	        throw e;
	    }

	    public Object recoverFromMismatchedSet(IntStream input, RecognitionException e, BitSet follow)
	        throws RecognitionException
	    {
	        throw e;
	    }
	    
	    @Override
	    public String getErrorMessage(RecognitionException e, String[] tokenNames) {
	        if (e instanceof MismatchedTokenException) {
	            MismatchedTokenException mte = (MismatchedTokenException)e;
	            String txt = mte.token.getText();
	            String p = mte.token.getType() == -1 ? "EOF" : PARAPHRASE[mte.token.getType()];
	            String expecting = (mte.expecting < PARAPHRASE.length && mte.expecting >= 0) ? PARAPHRASE[mte.expecting] : null;
	            if (expecting == null) {
	                return "unexpected token (" + line(mte.token) + "," + column(mte.token) + "): " + (txt != null ? txt : p);
	            } else {
	                return "expecting " + expecting +
	                    ", found '" + (txt != null ? txt : p) + "'";
	            }
	        } else if (e instanceof NoViableAltException) {
	            //NoViableAltException nvae = (NoViableAltException)e;
	            return "unexpected token: (" + line(e.token) + "," + column(e.token) + ")" + getTokenErrorDisplay(e.token);
	        }
	        return super.getErrorMessage(e, tokenNames);
	     }

	    public String getTokenErrorDisplay(int t) {
	        String ret = PARAPHRASE[t];
	        if (ret == null) ret = "";
	        return ret;
	    }


	    private String[] PARAPHRASE = new String[getTokenNames().length];
	    {
	        PARAPHRASE[NAME] = "a field or entity name";
	        PARAPHRASE[NUMBER] = "a number";
	        PARAPHRASE[EQ] = "an equals sign";
	        PARAPHRASE[LT] = "a left angle bracket";
	        PARAPHRASE[GT] = "a right angle bracket";
	        PARAPHRASE[COMMA] = "a comma";
	        PARAPHRASE[LPAREN] = "a left parentheses";
	        PARAPHRASE[RPAREN] = "a right parentheses";
	        PARAPHRASE[SEMICOLON] = "a semi-colon";
	        PARAPHRASE[COLON] = "a colon";
	        PARAPHRASE[LSQUARE] = "left square bracket";
	        PARAPHRASE[RSQUARE] = "right square bracket";
	        PARAPHRASE[LCURLY] = "left curly bracket";
	        PARAPHRASE[RCURLY] = "right curly bracket";
	        PARAPHRASE[AT] = "at";
	        PARAPHRASE[MINUS] = "a subtraction";
	        PARAPHRASE[TILDE] = "a tilde";
	        PARAPHRASE[PLUS] = "an addition";
	        PARAPHRASE[ASTERISK] = "an asterisk";
	        PARAPHRASE[DIVIDE] = "a division";
	        PARAPHRASE[FIELDCHAR] = "a field character";
	        PARAPHRASE[LETTER] = "an ansi letter";
	        PARAPHRASE[POSINTEGER] = "a positive integer";
	        PARAPHRASE[DIGIT] = "a number from 0 to 9";
	    }



	// $ANTLR start "nextStatement"
	// PhoenixSQL.g:330:1: nextStatement returns [BindableStatement ret] : (s= oneStatement SEMICOLON | EOF );
	public final BindableStatement nextStatement() throws RecognitionException {
		BindableStatement ret = null;


		BindableStatement s =null;

		try {
			// PhoenixSQL.g:331:5: (s= oneStatement SEMICOLON | EOF )
			int alt1=2;
			int LA1_0 = input.LA(1);
			if ( (LA1_0==ALTER||LA1_0==CREATE||LA1_0==DELETE||LA1_0==DROP||LA1_0==EXPLAIN||LA1_0==SELECT||(LA1_0 >= UPDATE && LA1_0 <= UPSERT)) ) {
				alt1=1;
			}
			else if ( (LA1_0==EOF) ) {
				alt1=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 1, 0, input);
				throw nvae;
			}

			switch (alt1) {
				case 1 :
					// PhoenixSQL.g:331:8: s= oneStatement SEMICOLON
					{
					pushFollow(FOLLOW_oneStatement_in_nextStatement876);
					s=oneStatement();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = s;}
					match(input,SEMICOLON,FOLLOW_SEMICOLON_in_nextStatement880); if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:332:8: EOF
					{
					match(input,EOF,FOLLOW_EOF_in_nextStatement889); if (state.failed) return ret;
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "nextStatement"



	// $ANTLR start "statement"
	// PhoenixSQL.g:336:1: statement returns [BindableStatement ret] : s= oneStatement EOF ;
	public final BindableStatement statement() throws RecognitionException {
		BindableStatement ret = null;


		BindableStatement s =null;

		try {
			// PhoenixSQL.g:337:5: (s= oneStatement EOF )
			// PhoenixSQL.g:337:9: s= oneStatement EOF
			{
			pushFollow(FOLLOW_oneStatement_in_statement915);
			s=oneStatement();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret = s;}
			match(input,EOF,FOLLOW_EOF_in_statement919); if (state.failed) return ret;
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "statement"



	// $ANTLR start "query"
	// PhoenixSQL.g:341:1: query returns [SelectStatement ret] : SELECT s= hinted_select_node EOF ;
	public final SelectStatement query() throws RecognitionException {
		SelectStatement ret = null;


		SelectStatement s =null;

		try {
			// PhoenixSQL.g:342:5: ( SELECT s= hinted_select_node EOF )
			// PhoenixSQL.g:342:9: SELECT s= hinted_select_node EOF
			{
			match(input,SELECT,FOLLOW_SELECT_in_query943); if (state.failed) return ret;
			pushFollow(FOLLOW_hinted_select_node_in_query947);
			s=hinted_select_node();
			state._fsp--;
			if (state.failed) return ret;
			match(input,EOF,FOLLOW_EOF_in_query949); if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret =s;}
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "query"



	// $ANTLR start "oneStatement"
	// PhoenixSQL.g:346:1: oneStatement returns [BindableStatement ret] : ( SELECT s= hinted_select_node |ns= non_select_node ) ;
	public final BindableStatement oneStatement() throws RecognitionException {
		BindableStatement ret = null;


		SelectStatement s =null;
		BindableStatement ns =null;

		try {
			// PhoenixSQL.g:347:5: ( ( SELECT s= hinted_select_node |ns= non_select_node ) )
			// PhoenixSQL.g:347:9: ( SELECT s= hinted_select_node |ns= non_select_node )
			{
			// PhoenixSQL.g:347:9: ( SELECT s= hinted_select_node |ns= non_select_node )
			int alt2=2;
			int LA2_0 = input.LA(1);
			if ( (LA2_0==SELECT) ) {
				alt2=1;
			}
			else if ( (LA2_0==ALTER||LA2_0==CREATE||LA2_0==DELETE||LA2_0==DROP||LA2_0==EXPLAIN||(LA2_0 >= UPDATE && LA2_0 <= UPSERT)) ) {
				alt2=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 2, 0, input);
				throw nvae;
			}

			switch (alt2) {
				case 1 :
					// PhoenixSQL.g:347:10: SELECT s= hinted_select_node
					{
					match(input,SELECT,FOLLOW_SELECT_in_oneStatement976); if (state.failed) return ret;
					pushFollow(FOLLOW_hinted_select_node_in_oneStatement980);
					s=hinted_select_node();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret =s;}
					}
					break;
				case 2 :
					// PhoenixSQL.g:348:10: ns= non_select_node
					{
					pushFollow(FOLLOW_non_select_node_in_oneStatement996);
					ns=non_select_node();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret =ns;}
					}
					break;

			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "oneStatement"



	// $ANTLR start "non_select_node"
	// PhoenixSQL.g:352:1: non_select_node returns [BindableStatement ret] : (s= upsert_node |s= delete_node |s= create_table_node |s= create_view_node |s= create_index_node |s= drop_table_node |s= drop_index_node |s= alter_index_node |s= alter_table_node |s= create_sequence_node |s= drop_sequence_node |s= update_statistics_node |s= explain_node ) ;
	public final BindableStatement non_select_node() throws RecognitionException {
		BindableStatement ret = null;


		BindableStatement s =null;

		 contextStack.push(new ParseContext()); 
		try {
			// PhoenixSQL.g:354:5: ( (s= upsert_node |s= delete_node |s= create_table_node |s= create_view_node |s= create_index_node |s= drop_table_node |s= drop_index_node |s= alter_index_node |s= alter_table_node |s= create_sequence_node |s= drop_sequence_node |s= update_statistics_node |s= explain_node ) )
			// PhoenixSQL.g:354:8: (s= upsert_node |s= delete_node |s= create_table_node |s= create_view_node |s= create_index_node |s= drop_table_node |s= drop_index_node |s= alter_index_node |s= alter_table_node |s= create_sequence_node |s= drop_sequence_node |s= update_statistics_node |s= explain_node )
			{
			// PhoenixSQL.g:354:8: (s= upsert_node |s= delete_node |s= create_table_node |s= create_view_node |s= create_index_node |s= drop_table_node |s= drop_index_node |s= alter_index_node |s= alter_table_node |s= create_sequence_node |s= drop_sequence_node |s= update_statistics_node |s= explain_node )
			int alt3=13;
			switch ( input.LA(1) ) {
			case UPSERT:
				{
				alt3=1;
				}
				break;
			case DELETE:
				{
				alt3=2;
				}
				break;
			case CREATE:
				{
				switch ( input.LA(2) ) {
				case TABLE:
					{
					alt3=3;
					}
					break;
				case VIEW:
					{
					alt3=4;
					}
					break;
				case INDEX:
					{
					alt3=5;
					}
					break;
				case SEQUENCE:
					{
					alt3=10;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 3, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case DROP:
				{
				switch ( input.LA(2) ) {
				case INDEX:
					{
					alt3=7;
					}
					break;
				case SEQUENCE:
					{
					alt3=11;
					}
					break;
				case TABLE:
				case VIEW:
					{
					alt3=6;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 3, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case ALTER:
				{
				int LA3_5 = input.LA(2);
				if ( (LA3_5==INDEX) ) {
					alt3=8;
				}
				else if ( (LA3_5==TABLE||LA3_5==VIEW) ) {
					alt3=9;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 3, 5, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case UPDATE:
				{
				alt3=12;
				}
				break;
			case EXPLAIN:
				{
				alt3=13;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 3, 0, input);
				throw nvae;
			}
			switch (alt3) {
				case 1 :
					// PhoenixSQL.g:354:9: s= upsert_node
					{
					pushFollow(FOLLOW_upsert_node_in_non_select_node1037);
					s=upsert_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:355:9: s= delete_node
					{
					pushFollow(FOLLOW_delete_node_in_non_select_node1049);
					s=delete_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 3 :
					// PhoenixSQL.g:356:9: s= create_table_node
					{
					pushFollow(FOLLOW_create_table_node_in_non_select_node1061);
					s=create_table_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 4 :
					// PhoenixSQL.g:357:9: s= create_view_node
					{
					pushFollow(FOLLOW_create_view_node_in_non_select_node1073);
					s=create_view_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 5 :
					// PhoenixSQL.g:358:9: s= create_index_node
					{
					pushFollow(FOLLOW_create_index_node_in_non_select_node1085);
					s=create_index_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 6 :
					// PhoenixSQL.g:359:9: s= drop_table_node
					{
					pushFollow(FOLLOW_drop_table_node_in_non_select_node1097);
					s=drop_table_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 7 :
					// PhoenixSQL.g:360:9: s= drop_index_node
					{
					pushFollow(FOLLOW_drop_index_node_in_non_select_node1109);
					s=drop_index_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 8 :
					// PhoenixSQL.g:361:9: s= alter_index_node
					{
					pushFollow(FOLLOW_alter_index_node_in_non_select_node1121);
					s=alter_index_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 9 :
					// PhoenixSQL.g:362:9: s= alter_table_node
					{
					pushFollow(FOLLOW_alter_table_node_in_non_select_node1133);
					s=alter_table_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 10 :
					// PhoenixSQL.g:363:7: s= create_sequence_node
					{
					pushFollow(FOLLOW_create_sequence_node_in_non_select_node1143);
					s=create_sequence_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 11 :
					// PhoenixSQL.g:364:7: s= drop_sequence_node
					{
					pushFollow(FOLLOW_drop_sequence_node_in_non_select_node1153);
					s=drop_sequence_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 12 :
					// PhoenixSQL.g:365:9: s= update_statistics_node
					{
					pushFollow(FOLLOW_update_statistics_node_in_non_select_node1165);
					s=update_statistics_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;
				case 13 :
					// PhoenixSQL.g:366:9: s= explain_node
					{
					pushFollow(FOLLOW_explain_node_in_non_select_node1177);
					s=explain_node();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) { contextStack.pop();  ret = s; }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "non_select_node"



	// $ANTLR start "explain_node"
	// PhoenixSQL.g:369:1: explain_node returns [BindableStatement ret] : EXPLAIN q= oneStatement ;
	public final BindableStatement explain_node() throws RecognitionException {
		BindableStatement ret = null;


		BindableStatement q =null;

		try {
			// PhoenixSQL.g:370:5: ( EXPLAIN q= oneStatement )
			// PhoenixSQL.g:370:9: EXPLAIN q= oneStatement
			{
			match(input,EXPLAIN,FOLLOW_EXPLAIN_in_explain_node1207); if (state.failed) return ret;
			pushFollow(FOLLOW_oneStatement_in_explain_node1211);
			q=oneStatement();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret =factory.explain(q);}
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "explain_node"



	// $ANTLR start "create_table_node"
	// PhoenixSQL.g:374:1: create_table_node returns [CreateTableStatement ret] : CREATE TABLE ( IF NOT ex= EXISTS )? t= from_table_name ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN ) (p= fam_properties )? ( SPLIT ON s= value_expression_list )? ;
	public final CreateTableStatement create_table_node() throws RecognitionException {
		CreateTableStatement ret = null;


		Token ex=null;
		TableName t =null;
		List c =null;
		PrimaryKeyConstraint pk =null;
		ListMultimap> p =null;
		List s =null;

		try {
			// PhoenixSQL.g:375:5: ( CREATE TABLE ( IF NOT ex= EXISTS )? t= from_table_name ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN ) (p= fam_properties )? ( SPLIT ON s= value_expression_list )? )
			// PhoenixSQL.g:375:9: CREATE TABLE ( IF NOT ex= EXISTS )? t= from_table_name ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN ) (p= fam_properties )? ( SPLIT ON s= value_expression_list )?
			{
			match(input,CREATE,FOLLOW_CREATE_in_create_table_node1237); if (state.failed) return ret;
			match(input,TABLE,FOLLOW_TABLE_in_create_table_node1239); if (state.failed) return ret;
			// PhoenixSQL.g:375:22: ( IF NOT ex= EXISTS )?
			int alt4=2;
			int LA4_0 = input.LA(1);
			if ( (LA4_0==IF) ) {
				alt4=1;
			}
			switch (alt4) {
				case 1 :
					// PhoenixSQL.g:375:23: IF NOT ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_create_table_node1242); if (state.failed) return ret;
					match(input,NOT,FOLLOW_NOT_in_create_table_node1244); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_create_table_node1248); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_from_table_name_in_create_table_node1254);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:376:9: ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN )
			// PhoenixSQL.g:376:10: LPAREN c= column_defs (pk= pk_constraint )? RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_create_table_node1266); if (state.failed) return ret;
			pushFollow(FOLLOW_column_defs_in_create_table_node1270);
			c=column_defs();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:376:31: (pk= pk_constraint )?
			int alt5=2;
			int LA5_0 = input.LA(1);
			if ( (LA5_0==COMMA||LA5_0==CONSTRAINT) ) {
				alt5=1;
			}
			switch (alt5) {
				case 1 :
					// PhoenixSQL.g:376:32: pk= pk_constraint
					{
					pushFollow(FOLLOW_pk_constraint_in_create_table_node1275);
					pk=pk_constraint();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_create_table_node1279); if (state.failed) return ret;
			}

			// PhoenixSQL.g:377:9: (p= fam_properties )?
			int alt6=2;
			int LA6_0 = input.LA(1);
			if ( (LA6_0==NAME) ) {
				alt6=1;
			}
			switch (alt6) {
				case 1 :
					// PhoenixSQL.g:377:10: p= fam_properties
					{
					pushFollow(FOLLOW_fam_properties_in_create_table_node1293);
					p=fam_properties();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:378:9: ( SPLIT ON s= value_expression_list )?
			int alt7=2;
			int LA7_0 = input.LA(1);
			if ( (LA7_0==SPLIT) ) {
				alt7=1;
			}
			switch (alt7) {
				case 1 :
					// PhoenixSQL.g:378:10: SPLIT ON s= value_expression_list
					{
					match(input,SPLIT,FOLLOW_SPLIT_in_create_table_node1306); if (state.failed) return ret;
					match(input,ON,FOLLOW_ON_in_create_table_node1308); if (state.failed) return ret;
					pushFollow(FOLLOW_value_expression_list_in_create_table_node1312);
					s=value_expression_list();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.createTable(t, p, c, pk, s, PTableType.TABLE, ex!=null, null, null, getBindCount()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "create_table_node"



	// $ANTLR start "create_view_node"
	// PhoenixSQL.g:383:1: create_view_node returns [CreateTableStatement ret] : CREATE VIEW ( IF NOT ex= EXISTS )? t= from_table_name ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN )? ( AS SELECT ASTERISK FROM bt= from_table_name ( WHERE w= expression )? )? (p= fam_properties )? ;
	public final CreateTableStatement create_view_node() throws RecognitionException {
		CreateTableStatement ret = null;


		Token ex=null;
		TableName t =null;
		List c =null;
		PrimaryKeyConstraint pk =null;
		TableName bt =null;
		ParseNode w =null;
		ListMultimap> p =null;

		try {
			// PhoenixSQL.g:384:5: ( CREATE VIEW ( IF NOT ex= EXISTS )? t= from_table_name ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN )? ( AS SELECT ASTERISK FROM bt= from_table_name ( WHERE w= expression )? )? (p= fam_properties )? )
			// PhoenixSQL.g:384:9: CREATE VIEW ( IF NOT ex= EXISTS )? t= from_table_name ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN )? ( AS SELECT ASTERISK FROM bt= from_table_name ( WHERE w= expression )? )? (p= fam_properties )?
			{
			match(input,CREATE,FOLLOW_CREATE_in_create_view_node1348); if (state.failed) return ret;
			match(input,VIEW,FOLLOW_VIEW_in_create_view_node1350); if (state.failed) return ret;
			// PhoenixSQL.g:384:21: ( IF NOT ex= EXISTS )?
			int alt8=2;
			int LA8_0 = input.LA(1);
			if ( (LA8_0==IF) ) {
				alt8=1;
			}
			switch (alt8) {
				case 1 :
					// PhoenixSQL.g:384:22: IF NOT ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_create_view_node1353); if (state.failed) return ret;
					match(input,NOT,FOLLOW_NOT_in_create_view_node1355); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_create_view_node1359); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_from_table_name_in_create_view_node1365);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:385:9: ( LPAREN c= column_defs (pk= pk_constraint )? RPAREN )?
			int alt10=2;
			int LA10_0 = input.LA(1);
			if ( (LA10_0==LPAREN) ) {
				alt10=1;
			}
			switch (alt10) {
				case 1 :
					// PhoenixSQL.g:385:10: LPAREN c= column_defs (pk= pk_constraint )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_create_view_node1377); if (state.failed) return ret;
					pushFollow(FOLLOW_column_defs_in_create_view_node1381);
					c=column_defs();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:385:31: (pk= pk_constraint )?
					int alt9=2;
					int LA9_0 = input.LA(1);
					if ( (LA9_0==COMMA||LA9_0==CONSTRAINT) ) {
						alt9=1;
					}
					switch (alt9) {
						case 1 :
							// PhoenixSQL.g:385:32: pk= pk_constraint
							{
							pushFollow(FOLLOW_pk_constraint_in_create_view_node1386);
							pk=pk_constraint();
							state._fsp--;
							if (state.failed) return ret;
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_create_view_node1390); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:386:9: ( AS SELECT ASTERISK FROM bt= from_table_name ( WHERE w= expression )? )?
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==AS) ) {
				alt12=1;
			}
			switch (alt12) {
				case 1 :
					// PhoenixSQL.g:386:11: AS SELECT ASTERISK FROM bt= from_table_name ( WHERE w= expression )?
					{
					match(input,AS,FOLLOW_AS_in_create_view_node1404); if (state.failed) return ret;
					match(input,SELECT,FOLLOW_SELECT_in_create_view_node1406); if (state.failed) return ret;
					match(input,ASTERISK,FOLLOW_ASTERISK_in_create_view_node1408); if (state.failed) return ret;
					match(input,FROM,FOLLOW_FROM_in_create_view_node1420); if (state.failed) return ret;
					pushFollow(FOLLOW_from_table_name_in_create_view_node1424);
					bt=from_table_name();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:388:11: ( WHERE w= expression )?
					int alt11=2;
					int LA11_0 = input.LA(1);
					if ( (LA11_0==WHERE) ) {
						alt11=1;
					}
					switch (alt11) {
						case 1 :
							// PhoenixSQL.g:388:12: WHERE w= expression
							{
							match(input,WHERE,FOLLOW_WHERE_in_create_view_node1437); if (state.failed) return ret;
							pushFollow(FOLLOW_expression_in_create_view_node1441);
							w=expression();
							state._fsp--;
							if (state.failed) return ret;
							}
							break;

					}

					}
					break;

			}

			// PhoenixSQL.g:389:9: (p= fam_properties )?
			int alt13=2;
			int LA13_0 = input.LA(1);
			if ( (LA13_0==NAME) ) {
				alt13=1;
			}
			switch (alt13) {
				case 1 :
					// PhoenixSQL.g:389:10: p= fam_properties
					{
					pushFollow(FOLLOW_fam_properties_in_create_view_node1459);
					p=fam_properties();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) { ret = factory.createTable(t, p, c, pk, null, PTableType.VIEW, ex!=null, bt==null ? t : bt, w, getBindCount()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "create_view_node"



	// $ANTLR start "create_index_node"
	// PhoenixSQL.g:394:1: create_index_node returns [CreateIndexStatement ret] : CREATE INDEX ( IF NOT ex= EXISTS )? i= index_name ON t= from_table_name ( LPAREN pk= index_pk_constraint RPAREN ) ( INCLUDE ( LPAREN icrefs= column_names RPAREN ) )? (p= fam_properties )? ( SPLIT ON v= value_expression_list )? ;
	public final CreateIndexStatement create_index_node() throws RecognitionException {
		CreateIndexStatement ret = null;


		Token ex=null;
		NamedNode i =null;
		TableName t =null;
		PrimaryKeyConstraint pk =null;
		List icrefs =null;
		ListMultimap> p =null;
		List v =null;

		try {
			// PhoenixSQL.g:395:5: ( CREATE INDEX ( IF NOT ex= EXISTS )? i= index_name ON t= from_table_name ( LPAREN pk= index_pk_constraint RPAREN ) ( INCLUDE ( LPAREN icrefs= column_names RPAREN ) )? (p= fam_properties )? ( SPLIT ON v= value_expression_list )? )
			// PhoenixSQL.g:395:9: CREATE INDEX ( IF NOT ex= EXISTS )? i= index_name ON t= from_table_name ( LPAREN pk= index_pk_constraint RPAREN ) ( INCLUDE ( LPAREN icrefs= column_names RPAREN ) )? (p= fam_properties )? ( SPLIT ON v= value_expression_list )?
			{
			match(input,CREATE,FOLLOW_CREATE_in_create_index_node1495); if (state.failed) return ret;
			match(input,INDEX,FOLLOW_INDEX_in_create_index_node1497); if (state.failed) return ret;
			// PhoenixSQL.g:395:22: ( IF NOT ex= EXISTS )?
			int alt14=2;
			int LA14_0 = input.LA(1);
			if ( (LA14_0==IF) ) {
				alt14=1;
			}
			switch (alt14) {
				case 1 :
					// PhoenixSQL.g:395:23: IF NOT ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_create_index_node1500); if (state.failed) return ret;
					match(input,NOT,FOLLOW_NOT_in_create_index_node1502); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_create_index_node1506); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_index_name_in_create_index_node1512);
			i=index_name();
			state._fsp--;
			if (state.failed) return ret;
			match(input,ON,FOLLOW_ON_in_create_index_node1514); if (state.failed) return ret;
			pushFollow(FOLLOW_from_table_name_in_create_index_node1518);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:396:9: ( LPAREN pk= index_pk_constraint RPAREN )
			// PhoenixSQL.g:396:10: LPAREN pk= index_pk_constraint RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_create_index_node1529); if (state.failed) return ret;
			pushFollow(FOLLOW_index_pk_constraint_in_create_index_node1533);
			pk=index_pk_constraint();
			state._fsp--;
			if (state.failed) return ret;
			match(input,RPAREN,FOLLOW_RPAREN_in_create_index_node1535); if (state.failed) return ret;
			}

			// PhoenixSQL.g:397:9: ( INCLUDE ( LPAREN icrefs= column_names RPAREN ) )?
			int alt15=2;
			int LA15_0 = input.LA(1);
			if ( (LA15_0==INCLUDE) ) {
				alt15=1;
			}
			switch (alt15) {
				case 1 :
					// PhoenixSQL.g:397:10: INCLUDE ( LPAREN icrefs= column_names RPAREN )
					{
					match(input,INCLUDE,FOLLOW_INCLUDE_in_create_index_node1547); if (state.failed) return ret;
					// PhoenixSQL.g:397:18: ( LPAREN icrefs= column_names RPAREN )
					// PhoenixSQL.g:397:19: LPAREN icrefs= column_names RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_create_index_node1550); if (state.failed) return ret;
					pushFollow(FOLLOW_column_names_in_create_index_node1554);
					icrefs=column_names();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_create_index_node1556); if (state.failed) return ret;
					}

					}
					break;

			}

			// PhoenixSQL.g:398:9: (p= fam_properties )?
			int alt16=2;
			int LA16_0 = input.LA(1);
			if ( (LA16_0==NAME) ) {
				alt16=1;
			}
			switch (alt16) {
				case 1 :
					// PhoenixSQL.g:398:10: p= fam_properties
					{
					pushFollow(FOLLOW_fam_properties_in_create_index_node1572);
					p=fam_properties();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:399:9: ( SPLIT ON v= value_expression_list )?
			int alt17=2;
			int LA17_0 = input.LA(1);
			if ( (LA17_0==SPLIT) ) {
				alt17=1;
			}
			switch (alt17) {
				case 1 :
					// PhoenixSQL.g:399:10: SPLIT ON v= value_expression_list
					{
					match(input,SPLIT,FOLLOW_SPLIT_in_create_index_node1585); if (state.failed) return ret;
					match(input,ON,FOLLOW_ON_in_create_index_node1587); if (state.failed) return ret;
					pushFollow(FOLLOW_value_expression_list_in_create_index_node1591);
					v=value_expression_list();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.createIndex(i, factory.namedTable(null,t), pk, icrefs, v, p, ex!=null, getBindCount()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "create_index_node"



	// $ANTLR start "create_sequence_node"
	// PhoenixSQL.g:404:1: create_sequence_node returns [CreateSequenceStatement ret] : CREATE SEQUENCE ( IF NOT ex= EXISTS )? t= from_table_name ( START ( WITH )? s= value_expression )? ( INCREMENT ( BY )? i= value_expression )? ( MINVALUE min= value_expression )? ( MAXVALUE max= value_expression )? (cyc= CYCLE )? ( CACHE c= int_literal_or_bind )? ;
	public final CreateSequenceStatement create_sequence_node() throws RecognitionException {
		CreateSequenceStatement ret = null;


		Token ex=null;
		Token cyc=null;
		TableName t =null;
		ParseNode s =null;
		ParseNode i =null;
		ParseNode min =null;
		ParseNode max =null;
		ParseNode c =null;

		try {
			// PhoenixSQL.g:405:5: ( CREATE SEQUENCE ( IF NOT ex= EXISTS )? t= from_table_name ( START ( WITH )? s= value_expression )? ( INCREMENT ( BY )? i= value_expression )? ( MINVALUE min= value_expression )? ( MAXVALUE max= value_expression )? (cyc= CYCLE )? ( CACHE c= int_literal_or_bind )? )
			// PhoenixSQL.g:405:9: CREATE SEQUENCE ( IF NOT ex= EXISTS )? t= from_table_name ( START ( WITH )? s= value_expression )? ( INCREMENT ( BY )? i= value_expression )? ( MINVALUE min= value_expression )? ( MAXVALUE max= value_expression )? (cyc= CYCLE )? ( CACHE c= int_literal_or_bind )?
			{
			match(input,CREATE,FOLLOW_CREATE_in_create_sequence_node1627); if (state.failed) return ret;
			match(input,SEQUENCE,FOLLOW_SEQUENCE_in_create_sequence_node1629); if (state.failed) return ret;
			// PhoenixSQL.g:405:26: ( IF NOT ex= EXISTS )?
			int alt18=2;
			int LA18_0 = input.LA(1);
			if ( (LA18_0==IF) ) {
				alt18=1;
			}
			switch (alt18) {
				case 1 :
					// PhoenixSQL.g:405:27: IF NOT ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_create_sequence_node1633); if (state.failed) return ret;
					match(input,NOT,FOLLOW_NOT_in_create_sequence_node1635); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_create_sequence_node1639); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_from_table_name_in_create_sequence_node1645);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:406:9: ( START ( WITH )? s= value_expression )?
			int alt20=2;
			int LA20_0 = input.LA(1);
			if ( (LA20_0==START) ) {
				alt20=1;
			}
			switch (alt20) {
				case 1 :
					// PhoenixSQL.g:406:10: START ( WITH )? s= value_expression
					{
					match(input,START,FOLLOW_START_in_create_sequence_node1656); if (state.failed) return ret;
					// PhoenixSQL.g:406:16: ( WITH )?
					int alt19=2;
					int LA19_0 = input.LA(1);
					if ( (LA19_0==WITH) ) {
						alt19=1;
					}
					switch (alt19) {
						case 1 :
							// PhoenixSQL.g:406:16: WITH
							{
							match(input,WITH,FOLLOW_WITH_in_create_sequence_node1658); if (state.failed) return ret;
							}
							break;

					}

					pushFollow(FOLLOW_value_expression_in_create_sequence_node1663);
					s=value_expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:407:9: ( INCREMENT ( BY )? i= value_expression )?
			int alt22=2;
			int LA22_0 = input.LA(1);
			if ( (LA22_0==INCREMENT) ) {
				alt22=1;
			}
			switch (alt22) {
				case 1 :
					// PhoenixSQL.g:407:10: INCREMENT ( BY )? i= value_expression
					{
					match(input,INCREMENT,FOLLOW_INCREMENT_in_create_sequence_node1676); if (state.failed) return ret;
					// PhoenixSQL.g:407:20: ( BY )?
					int alt21=2;
					int LA21_0 = input.LA(1);
					if ( (LA21_0==BY) ) {
						alt21=1;
					}
					switch (alt21) {
						case 1 :
							// PhoenixSQL.g:407:20: BY
							{
							match(input,BY,FOLLOW_BY_in_create_sequence_node1678); if (state.failed) return ret;
							}
							break;

					}

					pushFollow(FOLLOW_value_expression_in_create_sequence_node1683);
					i=value_expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:408:9: ( MINVALUE min= value_expression )?
			int alt23=2;
			int LA23_0 = input.LA(1);
			if ( (LA23_0==MINVALUE) ) {
				alt23=1;
			}
			switch (alt23) {
				case 1 :
					// PhoenixSQL.g:408:10: MINVALUE min= value_expression
					{
					match(input,MINVALUE,FOLLOW_MINVALUE_in_create_sequence_node1696); if (state.failed) return ret;
					pushFollow(FOLLOW_value_expression_in_create_sequence_node1700);
					min=value_expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:409:9: ( MAXVALUE max= value_expression )?
			int alt24=2;
			int LA24_0 = input.LA(1);
			if ( (LA24_0==MAXVALUE) ) {
				alt24=1;
			}
			switch (alt24) {
				case 1 :
					// PhoenixSQL.g:409:10: MAXVALUE max= value_expression
					{
					match(input,MAXVALUE,FOLLOW_MAXVALUE_in_create_sequence_node1713); if (state.failed) return ret;
					pushFollow(FOLLOW_value_expression_in_create_sequence_node1717);
					max=value_expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:410:9: (cyc= CYCLE )?
			int alt25=2;
			int LA25_0 = input.LA(1);
			if ( (LA25_0==CYCLE) ) {
				alt25=1;
			}
			switch (alt25) {
				case 1 :
					// PhoenixSQL.g:410:10: cyc= CYCLE
					{
					cyc=(Token)match(input,CYCLE,FOLLOW_CYCLE_in_create_sequence_node1732); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:411:9: ( CACHE c= int_literal_or_bind )?
			int alt26=2;
			int LA26_0 = input.LA(1);
			if ( (LA26_0==CACHE) ) {
				alt26=1;
			}
			switch (alt26) {
				case 1 :
					// PhoenixSQL.g:411:10: CACHE c= int_literal_or_bind
					{
					match(input,CACHE,FOLLOW_CACHE_in_create_sequence_node1746); if (state.failed) return ret;
					pushFollow(FOLLOW_int_literal_or_bind_in_create_sequence_node1750);
					c=int_literal_or_bind();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) { ret = factory.createSequence(t, s, i, c, min, max, cyc!=null, ex!=null, getBindCount()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "create_sequence_node"



	// $ANTLR start "int_literal_or_bind"
	// PhoenixSQL.g:415:1: int_literal_or_bind returns [ParseNode ret] : (n= int_literal |b= bind_expression );
	public final ParseNode int_literal_or_bind() throws RecognitionException {
		ParseNode ret = null;


		LiteralParseNode n =null;
		BindParseNode b =null;

		try {
			// PhoenixSQL.g:416:5: (n= int_literal |b= bind_expression )
			int alt27=2;
			int LA27_0 = input.LA(1);
			if ( (LA27_0==NUMBER) ) {
				alt27=1;
			}
			else if ( (LA27_0==BIND_NAME||LA27_0==QUESTION) ) {
				alt27=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 27, 0, input);
				throw nvae;
			}

			switch (alt27) {
				case 1 :
					// PhoenixSQL.g:416:7: n= int_literal
					{
					pushFollow(FOLLOW_int_literal_in_int_literal_or_bind1781);
					n=int_literal();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = n; }
					}
					break;
				case 2 :
					// PhoenixSQL.g:417:7: b= bind_expression
					{
					pushFollow(FOLLOW_bind_expression_in_int_literal_or_bind1793);
					b=bind_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = b; }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "int_literal_or_bind"



	// $ANTLR start "drop_sequence_node"
	// PhoenixSQL.g:421:1: drop_sequence_node returns [DropSequenceStatement ret] : DROP SEQUENCE ( IF ex= EXISTS )? t= from_table_name ;
	public final DropSequenceStatement drop_sequence_node() throws RecognitionException {
		DropSequenceStatement ret = null;


		Token ex=null;
		TableName t =null;

		try {
			// PhoenixSQL.g:422:5: ( DROP SEQUENCE ( IF ex= EXISTS )? t= from_table_name )
			// PhoenixSQL.g:422:9: DROP SEQUENCE ( IF ex= EXISTS )? t= from_table_name
			{
			match(input,DROP,FOLLOW_DROP_in_drop_sequence_node1819); if (state.failed) return ret;
			match(input,SEQUENCE,FOLLOW_SEQUENCE_in_drop_sequence_node1821); if (state.failed) return ret;
			// PhoenixSQL.g:422:24: ( IF ex= EXISTS )?
			int alt28=2;
			int LA28_0 = input.LA(1);
			if ( (LA28_0==IF) ) {
				alt28=1;
			}
			switch (alt28) {
				case 1 :
					// PhoenixSQL.g:422:25: IF ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_drop_sequence_node1825); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_drop_sequence_node1829); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_from_table_name_in_drop_sequence_node1835);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = factory.dropSequence(t, ex!=null, getBindCount()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "drop_sequence_node"



	// $ANTLR start "pk_constraint"
	// PhoenixSQL.g:426:1: pk_constraint returns [PrimaryKeyConstraint ret] : ( COMMA )? CONSTRAINT n= identifier PRIMARY KEY LPAREN cols= col_name_with_sort_order_list RPAREN ;
	public final PrimaryKeyConstraint pk_constraint() throws RecognitionException {
		PrimaryKeyConstraint ret = null;


		String n =null;
		List> cols =null;

		try {
			// PhoenixSQL.g:427:5: ( ( COMMA )? CONSTRAINT n= identifier PRIMARY KEY LPAREN cols= col_name_with_sort_order_list RPAREN )
			// PhoenixSQL.g:427:9: ( COMMA )? CONSTRAINT n= identifier PRIMARY KEY LPAREN cols= col_name_with_sort_order_list RPAREN
			{
			// PhoenixSQL.g:427:9: ( COMMA )?
			int alt29=2;
			int LA29_0 = input.LA(1);
			if ( (LA29_0==COMMA) ) {
				alt29=1;
			}
			switch (alt29) {
				case 1 :
					// PhoenixSQL.g:427:9: COMMA
					{
					match(input,COMMA,FOLLOW_COMMA_in_pk_constraint1864); if (state.failed) return ret;
					}
					break;

			}

			match(input,CONSTRAINT,FOLLOW_CONSTRAINT_in_pk_constraint1867); if (state.failed) return ret;
			pushFollow(FOLLOW_identifier_in_pk_constraint1871);
			n=identifier();
			state._fsp--;
			if (state.failed) return ret;
			match(input,PRIMARY,FOLLOW_PRIMARY_in_pk_constraint1873); if (state.failed) return ret;
			match(input,KEY,FOLLOW_KEY_in_pk_constraint1875); if (state.failed) return ret;
			match(input,LPAREN,FOLLOW_LPAREN_in_pk_constraint1877); if (state.failed) return ret;
			pushFollow(FOLLOW_col_name_with_sort_order_list_in_pk_constraint1881);
			cols=col_name_with_sort_order_list();
			state._fsp--;
			if (state.failed) return ret;
			match(input,RPAREN,FOLLOW_RPAREN_in_pk_constraint1883); if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = factory.primaryKey(n,cols); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "pk_constraint"



	// $ANTLR start "col_name_with_sort_order_list"
	// PhoenixSQL.g:430:1: col_name_with_sort_order_list returns [List> ret] : p= col_name_with_sort_order ( COMMA p= col_name_with_sort_order )* ;
	public final List> col_name_with_sort_order_list() throws RecognitionException {
		List> ret = null;


		Pair p =null;

		ret = new ArrayList>(); 
		try {
			// PhoenixSQL.g:432:5: (p= col_name_with_sort_order ( COMMA p= col_name_with_sort_order )* )
			// PhoenixSQL.g:432:9: p= col_name_with_sort_order ( COMMA p= col_name_with_sort_order )*
			{
			pushFollow(FOLLOW_col_name_with_sort_order_in_col_name_with_sort_order_list1914);
			p=col_name_with_sort_order();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(p);}
			// PhoenixSQL.g:432:52: ( COMMA p= col_name_with_sort_order )*
			loop30:
			while (true) {
				int alt30=2;
				int LA30_0 = input.LA(1);
				if ( (LA30_0==COMMA) ) {
					alt30=1;
				}

				switch (alt30) {
				case 1 :
					// PhoenixSQL.g:432:53: COMMA p= col_name_with_sort_order
					{
					match(input,COMMA,FOLLOW_COMMA_in_col_name_with_sort_order_list1920); if (state.failed) return ret;
					pushFollow(FOLLOW_col_name_with_sort_order_in_col_name_with_sort_order_list1926);
					p=col_name_with_sort_order();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(p);}
					}
					break;

				default :
					break loop30;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "col_name_with_sort_order_list"



	// $ANTLR start "col_name_with_sort_order"
	// PhoenixSQL.g:435:1: col_name_with_sort_order returns [Pair ret] : f= identifier (order= ASC |order= DESC )? ;
	public final Pair col_name_with_sort_order() throws RecognitionException {
		Pair ret = null;


		Token order=null;
		String f =null;

		try {
			// PhoenixSQL.g:436:5: (f= identifier (order= ASC |order= DESC )? )
			// PhoenixSQL.g:436:9: f= identifier (order= ASC |order= DESC )?
			{
			pushFollow(FOLLOW_identifier_in_col_name_with_sort_order1952);
			f=identifier();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:436:22: (order= ASC |order= DESC )?
			int alt31=3;
			int LA31_0 = input.LA(1);
			if ( (LA31_0==ASC) ) {
				alt31=1;
			}
			else if ( (LA31_0==DESC) ) {
				alt31=2;
			}
			switch (alt31) {
				case 1 :
					// PhoenixSQL.g:436:23: order= ASC
					{
					order=(Token)match(input,ASC,FOLLOW_ASC_in_col_name_with_sort_order1957); if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:436:33: order= DESC
					{
					order=(Token)match(input,DESC,FOLLOW_DESC_in_col_name_with_sort_order1961); if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = Pair.newPair(factory.columnName(f), order == null ? SortOrder.getDefault() : SortOrder.fromDDLValue(order.getText()));}
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "col_name_with_sort_order"



	// $ANTLR start "index_pk_constraint"
	// PhoenixSQL.g:439:1: index_pk_constraint returns [PrimaryKeyConstraint ret] : cols= col_def_name_with_sort_order_list ;
	public final PrimaryKeyConstraint index_pk_constraint() throws RecognitionException {
		PrimaryKeyConstraint ret = null;


		List> cols =null;

		try {
			// PhoenixSQL.g:440:5: (cols= col_def_name_with_sort_order_list )
			// PhoenixSQL.g:440:9: cols= col_def_name_with_sort_order_list
			{
			pushFollow(FOLLOW_col_def_name_with_sort_order_list_in_index_pk_constraint1988);
			cols=col_def_name_with_sort_order_list();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret = factory.primaryKey(null, cols); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "index_pk_constraint"



	// $ANTLR start "col_def_name_with_sort_order_list"
	// PhoenixSQL.g:443:1: col_def_name_with_sort_order_list returns [List> ret] : p= col_def_name_with_sort_order ( COMMA p= col_def_name_with_sort_order )* ;
	public final List> col_def_name_with_sort_order_list() throws RecognitionException {
		List> ret = null;


		Pair p =null;

		ret = new ArrayList>(); 
		try {
			// PhoenixSQL.g:445:5: (p= col_def_name_with_sort_order ( COMMA p= col_def_name_with_sort_order )* )
			// PhoenixSQL.g:445:9: p= col_def_name_with_sort_order ( COMMA p= col_def_name_with_sort_order )*
			{
			pushFollow(FOLLOW_col_def_name_with_sort_order_in_col_def_name_with_sort_order_list2019);
			p=col_def_name_with_sort_order();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(p);}
			// PhoenixSQL.g:445:56: ( COMMA p= col_def_name_with_sort_order )*
			loop32:
			while (true) {
				int alt32=2;
				int LA32_0 = input.LA(1);
				if ( (LA32_0==COMMA) ) {
					alt32=1;
				}

				switch (alt32) {
				case 1 :
					// PhoenixSQL.g:445:57: COMMA p= col_def_name_with_sort_order
					{
					match(input,COMMA,FOLLOW_COMMA_in_col_def_name_with_sort_order_list2025); if (state.failed) return ret;
					pushFollow(FOLLOW_col_def_name_with_sort_order_in_col_def_name_with_sort_order_list2031);
					p=col_def_name_with_sort_order();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(p);}
					}
					break;

				default :
					break loop32;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "col_def_name_with_sort_order_list"



	// $ANTLR start "col_def_name_with_sort_order"
	// PhoenixSQL.g:448:1: col_def_name_with_sort_order returns [Pair ret] : c= column_name (order= ASC |order= DESC )? ;
	public final Pair col_def_name_with_sort_order() throws RecognitionException {
		Pair ret = null;


		Token order=null;
		ColumnName c =null;

		try {
			// PhoenixSQL.g:449:5: (c= column_name (order= ASC |order= DESC )? )
			// PhoenixSQL.g:449:9: c= column_name (order= ASC |order= DESC )?
			{
			pushFollow(FOLLOW_column_name_in_col_def_name_with_sort_order2057);
			c=column_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:449:23: (order= ASC |order= DESC )?
			int alt33=3;
			int LA33_0 = input.LA(1);
			if ( (LA33_0==ASC) ) {
				alt33=1;
			}
			else if ( (LA33_0==DESC) ) {
				alt33=2;
			}
			switch (alt33) {
				case 1 :
					// PhoenixSQL.g:449:24: order= ASC
					{
					order=(Token)match(input,ASC,FOLLOW_ASC_in_col_def_name_with_sort_order2062); if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:449:34: order= DESC
					{
					order=(Token)match(input,DESC,FOLLOW_DESC_in_col_def_name_with_sort_order2066); if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = Pair.newPair(c, order == null ? SortOrder.getDefault() : SortOrder.fromDDLValue(order.getText()));}
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "col_def_name_with_sort_order"



	// $ANTLR start "fam_properties"
	// PhoenixSQL.g:452:1: fam_properties returns [ListMultimap> ret] : p= fam_prop_name EQ v= prop_value ( COMMA p= fam_prop_name EQ v= prop_value )* ;
	public final ListMultimap> fam_properties() throws RecognitionException {
		ListMultimap> ret = null;


		PropertyName p =null;
		Object v =null;

		ret = ArrayListMultimap.>create(); 
		try {
			// PhoenixSQL.g:454:5: (p= fam_prop_name EQ v= prop_value ( COMMA p= fam_prop_name EQ v= prop_value )* )
			// PhoenixSQL.g:454:8: p= fam_prop_name EQ v= prop_value ( COMMA p= fam_prop_name EQ v= prop_value )*
			{
			pushFollow(FOLLOW_fam_prop_name_in_fam_properties2094);
			p=fam_prop_name();
			state._fsp--;
			if (state.failed) return ret;
			match(input,EQ,FOLLOW_EQ_in_fam_properties2096); if (state.failed) return ret;
			pushFollow(FOLLOW_prop_value_in_fam_properties2100);
			v=prop_value();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.put(p.getFamilyName(),new Pair(p.getPropertyName(),v));}
			// PhoenixSQL.g:454:119: ( COMMA p= fam_prop_name EQ v= prop_value )*
			loop34:
			while (true) {
				int alt34=2;
				int LA34_0 = input.LA(1);
				if ( (LA34_0==COMMA) ) {
					alt34=1;
				}

				switch (alt34) {
				case 1 :
					// PhoenixSQL.g:454:120: COMMA p= fam_prop_name EQ v= prop_value
					{
					match(input,COMMA,FOLLOW_COMMA_in_fam_properties2106); if (state.failed) return ret;
					pushFollow(FOLLOW_fam_prop_name_in_fam_properties2110);
					p=fam_prop_name();
					state._fsp--;
					if (state.failed) return ret;
					match(input,EQ,FOLLOW_EQ_in_fam_properties2112); if (state.failed) return ret;
					pushFollow(FOLLOW_prop_value_in_fam_properties2116);
					v=prop_value();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.put(p.getFamilyName(),new Pair(p.getPropertyName(),v));}
					}
					break;

				default :
					break loop34;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "fam_properties"



	// $ANTLR start "fam_prop_name"
	// PhoenixSQL.g:457:1: fam_prop_name returns [PropertyName ret] : (propName= identifier |familyName= identifier DOT propName= identifier );
	public final PropertyName fam_prop_name() throws RecognitionException {
		PropertyName ret = null;


		String propName =null;
		String familyName =null;

		try {
			// PhoenixSQL.g:458:5: (propName= identifier |familyName= identifier DOT propName= identifier )
			int alt35=2;
			int LA35_0 = input.LA(1);
			if ( (LA35_0==NAME) ) {
				int LA35_1 = input.LA(2);
				if ( (LA35_1==EQ) ) {
					alt35=1;
				}
				else if ( (LA35_1==DOT) ) {
					alt35=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 35, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 35, 0, input);
				throw nvae;
			}

			switch (alt35) {
				case 1 :
					// PhoenixSQL.g:458:9: propName= identifier
					{
					pushFollow(FOLLOW_identifier_in_fam_prop_name2146);
					propName=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.propertyName(propName); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:459:9: familyName= identifier DOT propName= identifier
					{
					pushFollow(FOLLOW_identifier_in_fam_prop_name2160);
					familyName=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_fam_prop_name2162); if (state.failed) return ret;
					pushFollow(FOLLOW_identifier_in_fam_prop_name2166);
					propName=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.propertyName(familyName, propName); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "fam_prop_name"



	// $ANTLR start "prop_value"
	// PhoenixSQL.g:462:1: prop_value returns [Object ret] : l= literal ;
	public final Object prop_value() throws RecognitionException {
		Object ret = null;


		LiteralParseNode l =null;

		try {
			// PhoenixSQL.g:463:5: (l= literal )
			// PhoenixSQL.g:463:9: l= literal
			{
			pushFollow(FOLLOW_literal_in_prop_value2197);
			l=literal();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = l.getValue(); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "prop_value"



	// $ANTLR start "column_name"
	// PhoenixSQL.g:466:1: column_name returns [ColumnName ret] : (field= identifier |family= identifier DOT field= identifier );
	public final ColumnName column_name() throws RecognitionException {
		ColumnName ret = null;


		String field =null;
		String family =null;

		try {
			// PhoenixSQL.g:467:5: (field= identifier |family= identifier DOT field= identifier )
			int alt36=2;
			int LA36_0 = input.LA(1);
			if ( (LA36_0==NAME) ) {
				int LA36_1 = input.LA(2);
				if ( (LA36_1==EOF||LA36_1==ASC||LA36_1==COMMA||LA36_1==DESC||LA36_1==NAME||LA36_1==RPAREN||LA36_1==SEMICOLON) ) {
					alt36=1;
				}
				else if ( (LA36_1==DOT) ) {
					alt36=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 36, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 36, 0, input);
				throw nvae;
			}

			switch (alt36) {
				case 1 :
					// PhoenixSQL.g:467:9: field= identifier
					{
					pushFollow(FOLLOW_identifier_in_column_name2228);
					field=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.columnName(field); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:468:9: family= identifier DOT field= identifier
					{
					pushFollow(FOLLOW_identifier_in_column_name2242);
					family=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_column_name2244); if (state.failed) return ret;
					pushFollow(FOLLOW_identifier_in_column_name2248);
					field=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.columnName(family, field); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "column_name"



	// $ANTLR start "column_names"
	// PhoenixSQL.g:471:1: column_names returns [List ret] : v= column_name ( COMMA v= column_name )* ;
	public final List column_names() throws RecognitionException {
		List ret = null;


		ColumnName v =null;

		ret = new ArrayList(); 
		try {
			// PhoenixSQL.g:473:5: (v= column_name ( COMMA v= column_name )* )
			// PhoenixSQL.g:473:8: v= column_name ( COMMA v= column_name )*
			{
			pushFollow(FOLLOW_column_name_in_column_names2280);
			v=column_name();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(v);}
			// PhoenixSQL.g:473:40: ( COMMA v= column_name )*
			loop37:
			while (true) {
				int alt37=2;
				int LA37_0 = input.LA(1);
				if ( (LA37_0==COMMA) ) {
					alt37=1;
				}

				switch (alt37) {
				case 1 :
					// PhoenixSQL.g:473:41: COMMA v= column_name
					{
					match(input,COMMA,FOLLOW_COMMA_in_column_names2286); if (state.failed) return ret;
					pushFollow(FOLLOW_column_name_in_column_names2292);
					v=column_name();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(v);}
					}
					break;

				default :
					break loop37;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "column_names"



	// $ANTLR start "drop_table_node"
	// PhoenixSQL.g:478:1: drop_table_node returns [DropTableStatement ret] : DROP (v= VIEW | TABLE ) ( IF ex= EXISTS )? t= from_table_name (c= CASCADE )? ;
	public final DropTableStatement drop_table_node() throws RecognitionException {
		DropTableStatement ret = null;


		Token v=null;
		Token ex=null;
		Token c=null;
		TableName t =null;

		try {
			// PhoenixSQL.g:479:5: ( DROP (v= VIEW | TABLE ) ( IF ex= EXISTS )? t= from_table_name (c= CASCADE )? )
			// PhoenixSQL.g:479:9: DROP (v= VIEW | TABLE ) ( IF ex= EXISTS )? t= from_table_name (c= CASCADE )?
			{
			match(input,DROP,FOLLOW_DROP_in_drop_table_node2319); if (state.failed) return ret;
			// PhoenixSQL.g:479:14: (v= VIEW | TABLE )
			int alt38=2;
			int LA38_0 = input.LA(1);
			if ( (LA38_0==VIEW) ) {
				alt38=1;
			}
			else if ( (LA38_0==TABLE) ) {
				alt38=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 38, 0, input);
				throw nvae;
			}

			switch (alt38) {
				case 1 :
					// PhoenixSQL.g:479:15: v= VIEW
					{
					v=(Token)match(input,VIEW,FOLLOW_VIEW_in_drop_table_node2324); if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:479:24: TABLE
					{
					match(input,TABLE,FOLLOW_TABLE_in_drop_table_node2328); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:479:31: ( IF ex= EXISTS )?
			int alt39=2;
			int LA39_0 = input.LA(1);
			if ( (LA39_0==IF) ) {
				alt39=1;
			}
			switch (alt39) {
				case 1 :
					// PhoenixSQL.g:479:32: IF ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_drop_table_node2332); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_drop_table_node2336); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_from_table_name_in_drop_table_node2342);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:479:65: (c= CASCADE )?
			int alt40=2;
			int LA40_0 = input.LA(1);
			if ( (LA40_0==CASCADE) ) {
				alt40=1;
			}
			switch (alt40) {
				case 1 :
					// PhoenixSQL.g:479:66: c= CASCADE
					{
					c=(Token)match(input,CASCADE,FOLLOW_CASCADE_in_drop_table_node2347); if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.dropTable(t, v==null ? (QueryConstants.SYSTEM_SCHEMA_NAME.equals(t.getSchemaName()) ? PTableType.SYSTEM : PTableType.TABLE) : PTableType.VIEW, ex!=null, c!=null); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "drop_table_node"



	// $ANTLR start "drop_index_node"
	// PhoenixSQL.g:484:1: drop_index_node returns [DropIndexStatement ret] : DROP INDEX ( IF ex= EXISTS )? i= index_name ON t= from_table_name ;
	public final DropIndexStatement drop_index_node() throws RecognitionException {
		DropIndexStatement ret = null;


		Token ex=null;
		NamedNode i =null;
		TableName t =null;

		try {
			// PhoenixSQL.g:485:5: ( DROP INDEX ( IF ex= EXISTS )? i= index_name ON t= from_table_name )
			// PhoenixSQL.g:485:7: DROP INDEX ( IF ex= EXISTS )? i= index_name ON t= from_table_name
			{
			match(input,DROP,FOLLOW_DROP_in_drop_index_node2381); if (state.failed) return ret;
			match(input,INDEX,FOLLOW_INDEX_in_drop_index_node2383); if (state.failed) return ret;
			// PhoenixSQL.g:485:18: ( IF ex= EXISTS )?
			int alt41=2;
			int LA41_0 = input.LA(1);
			if ( (LA41_0==IF) ) {
				alt41=1;
			}
			switch (alt41) {
				case 1 :
					// PhoenixSQL.g:485:19: IF ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_drop_index_node2386); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_drop_index_node2390); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_index_name_in_drop_index_node2396);
			i=index_name();
			state._fsp--;
			if (state.failed) return ret;
			match(input,ON,FOLLOW_ON_in_drop_index_node2398); if (state.failed) return ret;
			pushFollow(FOLLOW_from_table_name_in_drop_index_node2402);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret = factory.dropIndex(i, t, ex!=null); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "drop_index_node"



	// $ANTLR start "alter_index_node"
	// PhoenixSQL.g:490:1: alter_index_node returns [AlterIndexStatement ret] : ALTER INDEX ( IF ex= EXISTS )? i= index_name ON t= from_table_name s= ( USABLE | UNUSABLE | REBUILD | DISABLE ) ;
	public final AlterIndexStatement alter_index_node() throws RecognitionException {
		AlterIndexStatement ret = null;


		Token ex=null;
		Token s=null;
		NamedNode i =null;
		TableName t =null;

		try {
			// PhoenixSQL.g:491:5: ( ALTER INDEX ( IF ex= EXISTS )? i= index_name ON t= from_table_name s= ( USABLE | UNUSABLE | REBUILD | DISABLE ) )
			// PhoenixSQL.g:491:7: ALTER INDEX ( IF ex= EXISTS )? i= index_name ON t= from_table_name s= ( USABLE | UNUSABLE | REBUILD | DISABLE )
			{
			match(input,ALTER,FOLLOW_ALTER_in_alter_index_node2432); if (state.failed) return ret;
			match(input,INDEX,FOLLOW_INDEX_in_alter_index_node2434); if (state.failed) return ret;
			// PhoenixSQL.g:491:19: ( IF ex= EXISTS )?
			int alt42=2;
			int LA42_0 = input.LA(1);
			if ( (LA42_0==IF) ) {
				alt42=1;
			}
			switch (alt42) {
				case 1 :
					// PhoenixSQL.g:491:20: IF ex= EXISTS
					{
					match(input,IF,FOLLOW_IF_in_alter_index_node2437); if (state.failed) return ret;
					ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_alter_index_node2441); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_index_name_in_alter_index_node2447);
			i=index_name();
			state._fsp--;
			if (state.failed) return ret;
			match(input,ON,FOLLOW_ON_in_alter_index_node2449); if (state.failed) return ret;
			pushFollow(FOLLOW_from_table_name_in_alter_index_node2453);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			s=input.LT(1);
			if ( input.LA(1)==DISABLE||input.LA(1)==REBUILD||input.LA(1)==UNUSABLE||input.LA(1)==USABLE ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			if ( state.backtracking==0 ) {ret = factory.alterIndex(factory.namedTable(null,factory.table(t.getSchemaName(),i.getName())), t.getTableName(), ex!=null, PIndexState.valueOf(SchemaUtil.normalizeIdentifier(s.getText()))); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "alter_index_node"



	// $ANTLR start "alter_table_node"
	// PhoenixSQL.g:496:1: alter_table_node returns [AlterTableStatement ret] : ALTER ( TABLE |v= VIEW ) t= from_table_name ( ( DROP COLUMN ( IF ex= EXISTS )? c= column_names ) | ( ADD ( IF NOT ex= EXISTS )? (d= column_defs ) (p= properties )? ) | ( SET (p= properties ) ) ) ;
	public final AlterTableStatement alter_table_node() throws RecognitionException {
		AlterTableStatement ret = null;


		Token v=null;
		Token ex=null;
		TableName t =null;
		List c =null;
		List d =null;
		Map p =null;

		try {
			// PhoenixSQL.g:497:5: ( ALTER ( TABLE |v= VIEW ) t= from_table_name ( ( DROP COLUMN ( IF ex= EXISTS )? c= column_names ) | ( ADD ( IF NOT ex= EXISTS )? (d= column_defs ) (p= properties )? ) | ( SET (p= properties ) ) ) )
			// PhoenixSQL.g:497:9: ALTER ( TABLE |v= VIEW ) t= from_table_name ( ( DROP COLUMN ( IF ex= EXISTS )? c= column_names ) | ( ADD ( IF NOT ex= EXISTS )? (d= column_defs ) (p= properties )? ) | ( SET (p= properties ) ) )
			{
			match(input,ALTER,FOLLOW_ALTER_in_alter_table_node2503); if (state.failed) return ret;
			// PhoenixSQL.g:497:15: ( TABLE |v= VIEW )
			int alt43=2;
			int LA43_0 = input.LA(1);
			if ( (LA43_0==TABLE) ) {
				alt43=1;
			}
			else if ( (LA43_0==VIEW) ) {
				alt43=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 43, 0, input);
				throw nvae;
			}

			switch (alt43) {
				case 1 :
					// PhoenixSQL.g:497:16: TABLE
					{
					match(input,TABLE,FOLLOW_TABLE_in_alter_table_node2506); if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:497:24: v= VIEW
					{
					v=(Token)match(input,VIEW,FOLLOW_VIEW_in_alter_table_node2512); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_from_table_name_in_alter_table_node2517);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:498:9: ( ( DROP COLUMN ( IF ex= EXISTS )? c= column_names ) | ( ADD ( IF NOT ex= EXISTS )? (d= column_defs ) (p= properties )? ) | ( SET (p= properties ) ) )
			int alt47=3;
			switch ( input.LA(1) ) {
			case DROP:
				{
				alt47=1;
				}
				break;
			case ADD:
				{
				alt47=2;
				}
				break;
			case SET:
				{
				alt47=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 47, 0, input);
				throw nvae;
			}
			switch (alt47) {
				case 1 :
					// PhoenixSQL.g:498:11: ( DROP COLUMN ( IF ex= EXISTS )? c= column_names )
					{
					// PhoenixSQL.g:498:11: ( DROP COLUMN ( IF ex= EXISTS )? c= column_names )
					// PhoenixSQL.g:498:12: DROP COLUMN ( IF ex= EXISTS )? c= column_names
					{
					match(input,DROP,FOLLOW_DROP_in_alter_table_node2530); if (state.failed) return ret;
					match(input,COLUMN,FOLLOW_COLUMN_in_alter_table_node2532); if (state.failed) return ret;
					// PhoenixSQL.g:498:24: ( IF ex= EXISTS )?
					int alt44=2;
					int LA44_0 = input.LA(1);
					if ( (LA44_0==IF) ) {
						alt44=1;
					}
					switch (alt44) {
						case 1 :
							// PhoenixSQL.g:498:25: IF ex= EXISTS
							{
							match(input,IF,FOLLOW_IF_in_alter_table_node2535); if (state.failed) return ret;
							ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_alter_table_node2539); if (state.failed) return ret;
							}
							break;

					}

					pushFollow(FOLLOW_column_names_in_alter_table_node2545);
					c=column_names();
					state._fsp--;
					if (state.failed) return ret;
					}

					}
					break;
				case 2 :
					// PhoenixSQL.g:498:58: ( ADD ( IF NOT ex= EXISTS )? (d= column_defs ) (p= properties )? )
					{
					// PhoenixSQL.g:498:58: ( ADD ( IF NOT ex= EXISTS )? (d= column_defs ) (p= properties )? )
					// PhoenixSQL.g:498:59: ADD ( IF NOT ex= EXISTS )? (d= column_defs ) (p= properties )?
					{
					match(input,ADD,FOLLOW_ADD_in_alter_table_node2551); if (state.failed) return ret;
					// PhoenixSQL.g:498:63: ( IF NOT ex= EXISTS )?
					int alt45=2;
					int LA45_0 = input.LA(1);
					if ( (LA45_0==IF) ) {
						alt45=1;
					}
					switch (alt45) {
						case 1 :
							// PhoenixSQL.g:498:64: IF NOT ex= EXISTS
							{
							match(input,IF,FOLLOW_IF_in_alter_table_node2554); if (state.failed) return ret;
							match(input,NOT,FOLLOW_NOT_in_alter_table_node2556); if (state.failed) return ret;
							ex=(Token)match(input,EXISTS,FOLLOW_EXISTS_in_alter_table_node2560); if (state.failed) return ret;
							}
							break;

					}

					// PhoenixSQL.g:498:83: (d= column_defs )
					// PhoenixSQL.g:498:84: d= column_defs
					{
					pushFollow(FOLLOW_column_defs_in_alter_table_node2567);
					d=column_defs();
					state._fsp--;
					if (state.failed) return ret;
					}

					// PhoenixSQL.g:498:99: (p= properties )?
					int alt46=2;
					int LA46_0 = input.LA(1);
					if ( (LA46_0==NAME) ) {
						alt46=1;
					}
					switch (alt46) {
						case 1 :
							// PhoenixSQL.g:498:100: p= properties
							{
							pushFollow(FOLLOW_properties_in_alter_table_node2573);
							p=properties();
							state._fsp--;
							if (state.failed) return ret;
							}
							break;

					}

					}

					}
					break;
				case 3 :
					// PhoenixSQL.g:498:118: ( SET (p= properties ) )
					{
					// PhoenixSQL.g:498:118: ( SET (p= properties ) )
					// PhoenixSQL.g:498:119: SET (p= properties )
					{
					match(input,SET,FOLLOW_SET_in_alter_table_node2581); if (state.failed) return ret;
					// PhoenixSQL.g:498:123: (p= properties )
					// PhoenixSQL.g:498:124: p= properties
					{
					pushFollow(FOLLOW_properties_in_alter_table_node2586);
					p=properties();
					state._fsp--;
					if (state.failed) return ret;
					}

					}

					}
					break;

			}

			if ( state.backtracking==0 ) { PTableType tt = v==null ? (QueryConstants.SYSTEM_SCHEMA_NAME.equals(t.getSchemaName()) ? PTableType.SYSTEM : PTableType.TABLE) : PTableType.VIEW; ret = ( c == null ? factory.addColumn(factory.namedTable(null,t), tt, d, ex!=null, p) : factory.dropColumn(factory.namedTable(null,t), tt, c, ex!=null) ); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "alter_table_node"



	// $ANTLR start "update_statistics_node"
	// PhoenixSQL.g:502:1: update_statistics_node returns [UpdateStatisticsStatement ret] : UPDATE STATISTICS t= from_table_name (s= INDEX |s= ALL |s= COLUMNS )? ;
	public final UpdateStatisticsStatement update_statistics_node() throws RecognitionException {
		UpdateStatisticsStatement ret = null;


		Token s=null;
		TableName t =null;

		try {
			// PhoenixSQL.g:503:2: ( UPDATE STATISTICS t= from_table_name (s= INDEX |s= ALL |s= COLUMNS )? )
			// PhoenixSQL.g:503:6: UPDATE STATISTICS t= from_table_name (s= INDEX |s= ALL |s= COLUMNS )?
			{
			match(input,UPDATE,FOLLOW_UPDATE_in_update_statistics_node2620); if (state.failed) return ret;
			match(input,STATISTICS,FOLLOW_STATISTICS_in_update_statistics_node2622); if (state.failed) return ret;
			pushFollow(FOLLOW_from_table_name_in_update_statistics_node2626);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:503:42: (s= INDEX |s= ALL |s= COLUMNS )?
			int alt48=4;
			switch ( input.LA(1) ) {
				case INDEX:
					{
					alt48=1;
					}
					break;
				case ALL:
					{
					alt48=2;
					}
					break;
				case COLUMNS:
					{
					alt48=3;
					}
					break;
			}
			switch (alt48) {
				case 1 :
					// PhoenixSQL.g:503:43: s= INDEX
					{
					s=(Token)match(input,INDEX,FOLLOW_INDEX_in_update_statistics_node2631); if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:503:53: s= ALL
					{
					s=(Token)match(input,ALL,FOLLOW_ALL_in_update_statistics_node2637); if (state.failed) return ret;
					}
					break;
				case 3 :
					// PhoenixSQL.g:503:61: s= COLUMNS
					{
					s=(Token)match(input,COLUMNS,FOLLOW_COLUMNS_in_update_statistics_node2643); if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.updateStatistics(factory.namedTable(null, t), s == null ? StatisticsCollectionScope.getDefault() : StatisticsCollectionScope.valueOf(SchemaUtil.normalizeIdentifier(s.getText())));}
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "update_statistics_node"



	// $ANTLR start "prop_name"
	// PhoenixSQL.g:507:1: prop_name returns [String ret] : p= identifier ;
	public final String prop_name() throws RecognitionException {
		String ret = null;


		String p =null;

		try {
			// PhoenixSQL.g:508:5: (p= identifier )
			// PhoenixSQL.g:508:9: p= identifier
			{
			pushFollow(FOLLOW_identifier_in_prop_name2671);
			p=identifier();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret = SchemaUtil.normalizeIdentifier(p); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "prop_name"



	// $ANTLR start "properties"
	// PhoenixSQL.g:511:1: properties returns [Map ret] : k= prop_name EQ v= prop_value ( COMMA k= prop_name EQ v= prop_value )* ;
	public final Map properties() throws RecognitionException {
		Map ret = null;


		String k =null;
		Object v =null;

		ret = new HashMap(); 
		try {
			// PhoenixSQL.g:513:5: (k= prop_name EQ v= prop_value ( COMMA k= prop_name EQ v= prop_value )* )
			// PhoenixSQL.g:513:8: k= prop_name EQ v= prop_value ( COMMA k= prop_name EQ v= prop_value )*
			{
			pushFollow(FOLLOW_prop_name_in_properties2705);
			k=prop_name();
			state._fsp--;
			if (state.failed) return ret;
			match(input,EQ,FOLLOW_EQ_in_properties2707); if (state.failed) return ret;
			pushFollow(FOLLOW_prop_value_in_properties2711);
			v=prop_value();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.put(k,v);}
			// PhoenixSQL.g:513:54: ( COMMA k= prop_name EQ v= prop_value )*
			loop49:
			while (true) {
				int alt49=2;
				int LA49_0 = input.LA(1);
				if ( (LA49_0==COMMA) ) {
					alt49=1;
				}

				switch (alt49) {
				case 1 :
					// PhoenixSQL.g:513:55: COMMA k= prop_name EQ v= prop_value
					{
					match(input,COMMA,FOLLOW_COMMA_in_properties2717); if (state.failed) return ret;
					pushFollow(FOLLOW_prop_name_in_properties2721);
					k=prop_name();
					state._fsp--;
					if (state.failed) return ret;
					match(input,EQ,FOLLOW_EQ_in_properties2723); if (state.failed) return ret;
					pushFollow(FOLLOW_prop_value_in_properties2727);
					v=prop_value();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.put(k,v);}
					}
					break;

				default :
					break loop49;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "properties"



	// $ANTLR start "column_defs"
	// PhoenixSQL.g:516:1: column_defs returns [List ret] : v= column_def ( COMMA v= column_def )* ;
	public final List column_defs() throws RecognitionException {
		List ret = null;


		ColumnDef v =null;

		ret = new ArrayList(); 
		try {
			// PhoenixSQL.g:518:5: (v= column_def ( COMMA v= column_def )* )
			// PhoenixSQL.g:518:8: v= column_def ( COMMA v= column_def )*
			{
			pushFollow(FOLLOW_column_def_in_column_defs2762);
			v=column_def();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(v);}
			// PhoenixSQL.g:518:39: ( COMMA v= column_def )*
			loop50:
			while (true) {
				int alt50=2;
				int LA50_0 = input.LA(1);
				if ( (LA50_0==COMMA) ) {
					int LA50_1 = input.LA(2);
					if ( (LA50_1==NAME) ) {
						alt50=1;
					}

				}

				switch (alt50) {
				case 1 :
					// PhoenixSQL.g:518:40: COMMA v= column_def
					{
					match(input,COMMA,FOLLOW_COMMA_in_column_defs2768); if (state.failed) return ret;
					pushFollow(FOLLOW_column_def_in_column_defs2774);
					v=column_def();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(v);}
					}
					break;

				default :
					break loop50;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "column_defs"



	// $ANTLR start "column_def"
	// PhoenixSQL.g:521:1: column_def returns [ColumnDef ret] : c= column_name dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? ( (nn= NOT )? n= NULL )? (pk= PRIMARY KEY (order= ASC |order= DESC )? )? ;
	public final ColumnDef column_def() throws RecognitionException {
		ColumnDef ret = null;


		Token l=null;
		Token s=null;
		Token ar=null;
		Token lsq=null;
		Token a=null;
		Token nn=null;
		Token n=null;
		Token pk=null;
		Token order=null;
		ColumnName c =null;
		String dt =null;

		try {
			// PhoenixSQL.g:522:5: (c= column_name dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? ( (nn= NOT )? n= NULL )? (pk= PRIMARY KEY (order= ASC |order= DESC )? )? )
			// PhoenixSQL.g:522:9: c= column_name dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? ( (nn= NOT )? n= NULL )? (pk= PRIMARY KEY (order= ASC |order= DESC )? )?
			{
			pushFollow(FOLLOW_column_name_in_column_def2800);
			c=column_name();
			state._fsp--;
			if (state.failed) return ret;
			pushFollow(FOLLOW_identifier_in_column_def2804);
			dt=identifier();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:522:37: ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )?
			int alt52=2;
			int LA52_0 = input.LA(1);
			if ( (LA52_0==LPAREN) ) {
				alt52=1;
			}
			switch (alt52) {
				case 1 :
					// PhoenixSQL.g:522:38: LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_column_def2807); if (state.failed) return ret;
					l=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_column_def2811); if (state.failed) return ret;
					// PhoenixSQL.g:522:54: ( COMMA s= NUMBER )?
					int alt51=2;
					int LA51_0 = input.LA(1);
					if ( (LA51_0==COMMA) ) {
						alt51=1;
					}
					switch (alt51) {
						case 1 :
							// PhoenixSQL.g:522:55: COMMA s= NUMBER
							{
							match(input,COMMA,FOLLOW_COMMA_in_column_def2814); if (state.failed) return ret;
							s=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_column_def2818); if (state.failed) return ret;
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_column_def2822); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:522:83: (ar= ARRAY )?
			int alt53=2;
			int LA53_0 = input.LA(1);
			if ( (LA53_0==ARRAY) ) {
				alt53=1;
			}
			switch (alt53) {
				case 1 :
					// PhoenixSQL.g:522:83: ar= ARRAY
					{
					ar=(Token)match(input,ARRAY,FOLLOW_ARRAY_in_column_def2828); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:522:91: (lsq= LSQUARE (a= NUMBER )? RSQUARE )?
			int alt55=2;
			int LA55_0 = input.LA(1);
			if ( (LA55_0==LSQUARE) ) {
				alt55=1;
			}
			switch (alt55) {
				case 1 :
					// PhoenixSQL.g:522:92: lsq= LSQUARE (a= NUMBER )? RSQUARE
					{
					lsq=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_column_def2834); if (state.failed) return ret;
					// PhoenixSQL.g:522:104: (a= NUMBER )?
					int alt54=2;
					int LA54_0 = input.LA(1);
					if ( (LA54_0==NUMBER) ) {
						alt54=1;
					}
					switch (alt54) {
						case 1 :
							// PhoenixSQL.g:522:105: a= NUMBER
							{
							a=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_column_def2839); if (state.failed) return ret;
							}
							break;

					}

					match(input,RSQUARE,FOLLOW_RSQUARE_in_column_def2843); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:522:126: ( (nn= NOT )? n= NULL )?
			int alt57=2;
			int LA57_0 = input.LA(1);
			if ( ((LA57_0 >= NOT && LA57_0 <= NULL)) ) {
				alt57=1;
			}
			switch (alt57) {
				case 1 :
					// PhoenixSQL.g:522:127: (nn= NOT )? n= NULL
					{
					// PhoenixSQL.g:522:129: (nn= NOT )?
					int alt56=2;
					int LA56_0 = input.LA(1);
					if ( (LA56_0==NOT) ) {
						alt56=1;
					}
					switch (alt56) {
						case 1 :
							// PhoenixSQL.g:522:129: nn= NOT
							{
							nn=(Token)match(input,NOT,FOLLOW_NOT_in_column_def2850); if (state.failed) return ret;
							}
							break;

					}

					n=(Token)match(input,NULL,FOLLOW_NULL_in_column_def2855); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:522:144: (pk= PRIMARY KEY (order= ASC |order= DESC )? )?
			int alt59=2;
			int LA59_0 = input.LA(1);
			if ( (LA59_0==PRIMARY) ) {
				alt59=1;
			}
			switch (alt59) {
				case 1 :
					// PhoenixSQL.g:522:145: pk= PRIMARY KEY (order= ASC |order= DESC )?
					{
					pk=(Token)match(input,PRIMARY,FOLLOW_PRIMARY_in_column_def2862); if (state.failed) return ret;
					match(input,KEY,FOLLOW_KEY_in_column_def2864); if (state.failed) return ret;
					// PhoenixSQL.g:522:160: (order= ASC |order= DESC )?
					int alt58=3;
					int LA58_0 = input.LA(1);
					if ( (LA58_0==ASC) ) {
						alt58=1;
					}
					else if ( (LA58_0==DESC) ) {
						alt58=2;
					}
					switch (alt58) {
						case 1 :
							// PhoenixSQL.g:522:161: order= ASC
							{
							order=(Token)match(input,ASC,FOLLOW_ASC_in_column_def2869); if (state.failed) return ret;
							}
							break;
						case 2 :
							// PhoenixSQL.g:522:171: order= DESC
							{
							order=(Token)match(input,DESC,FOLLOW_DESC_in_column_def2873); if (state.failed) return ret;
							}
							break;

					}

					}
					break;

			}

			if ( state.backtracking==0 ) { ret = factory.columnDef(c, dt, ar != null || lsq != null, a == null ? null :  Integer.parseInt( a.getText() ), nn!=null ? Boolean.FALSE : n!=null ? Boolean.TRUE : null, 
			            l == null ? null : Integer.parseInt( l.getText() ),
			            s == null ? null : Integer.parseInt( s.getText() ),
			            pk != null, 
			            order == null ? SortOrder.getDefault() : SortOrder.fromDDLValue(order.getText()) ); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "column_def"



	// $ANTLR start "dyn_column_defs"
	// PhoenixSQL.g:530:1: dyn_column_defs returns [List ret] : v= dyn_column_def ( COMMA v= dyn_column_def )* ;
	public final List dyn_column_defs() throws RecognitionException {
		List ret = null;


		ColumnDef v =null;

		ret = new ArrayList(); 
		try {
			// PhoenixSQL.g:532:5: (v= dyn_column_def ( COMMA v= dyn_column_def )* )
			// PhoenixSQL.g:532:8: v= dyn_column_def ( COMMA v= dyn_column_def )*
			{
			pushFollow(FOLLOW_dyn_column_def_in_dyn_column_defs2917);
			v=dyn_column_def();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(v);}
			// PhoenixSQL.g:532:43: ( COMMA v= dyn_column_def )*
			loop60:
			while (true) {
				int alt60=2;
				int LA60_0 = input.LA(1);
				if ( (LA60_0==COMMA) ) {
					alt60=1;
				}

				switch (alt60) {
				case 1 :
					// PhoenixSQL.g:532:44: COMMA v= dyn_column_def
					{
					match(input,COMMA,FOLLOW_COMMA_in_dyn_column_defs2923); if (state.failed) return ret;
					pushFollow(FOLLOW_dyn_column_def_in_dyn_column_defs2929);
					v=dyn_column_def();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(v);}
					}
					break;

				default :
					break loop60;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "dyn_column_defs"



	// $ANTLR start "dyn_column_def"
	// PhoenixSQL.g:535:1: dyn_column_def returns [ColumnDef ret] : c= column_name dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? ;
	public final ColumnDef dyn_column_def() throws RecognitionException {
		ColumnDef ret = null;


		Token l=null;
		Token s=null;
		Token ar=null;
		Token lsq=null;
		Token a=null;
		ColumnName c =null;
		String dt =null;

		try {
			// PhoenixSQL.g:536:5: (c= column_name dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? )
			// PhoenixSQL.g:536:9: c= column_name dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )?
			{
			pushFollow(FOLLOW_column_name_in_dyn_column_def2955);
			c=column_name();
			state._fsp--;
			if (state.failed) return ret;
			pushFollow(FOLLOW_identifier_in_dyn_column_def2959);
			dt=identifier();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:536:37: ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )?
			int alt62=2;
			int LA62_0 = input.LA(1);
			if ( (LA62_0==LPAREN) ) {
				alt62=1;
			}
			switch (alt62) {
				case 1 :
					// PhoenixSQL.g:536:38: LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_dyn_column_def2962); if (state.failed) return ret;
					l=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_dyn_column_def2966); if (state.failed) return ret;
					// PhoenixSQL.g:536:54: ( COMMA s= NUMBER )?
					int alt61=2;
					int LA61_0 = input.LA(1);
					if ( (LA61_0==COMMA) ) {
						alt61=1;
					}
					switch (alt61) {
						case 1 :
							// PhoenixSQL.g:536:55: COMMA s= NUMBER
							{
							match(input,COMMA,FOLLOW_COMMA_in_dyn_column_def2969); if (state.failed) return ret;
							s=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_dyn_column_def2973); if (state.failed) return ret;
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_dyn_column_def2977); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:536:83: (ar= ARRAY )?
			int alt63=2;
			int LA63_0 = input.LA(1);
			if ( (LA63_0==ARRAY) ) {
				alt63=1;
			}
			switch (alt63) {
				case 1 :
					// PhoenixSQL.g:536:83: ar= ARRAY
					{
					ar=(Token)match(input,ARRAY,FOLLOW_ARRAY_in_dyn_column_def2983); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:536:91: (lsq= LSQUARE (a= NUMBER )? RSQUARE )?
			int alt65=2;
			int LA65_0 = input.LA(1);
			if ( (LA65_0==LSQUARE) ) {
				alt65=1;
			}
			switch (alt65) {
				case 1 :
					// PhoenixSQL.g:536:92: lsq= LSQUARE (a= NUMBER )? RSQUARE
					{
					lsq=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_dyn_column_def2989); if (state.failed) return ret;
					// PhoenixSQL.g:536:104: (a= NUMBER )?
					int alt64=2;
					int LA64_0 = input.LA(1);
					if ( (LA64_0==NUMBER) ) {
						alt64=1;
					}
					switch (alt64) {
						case 1 :
							// PhoenixSQL.g:536:105: a= NUMBER
							{
							a=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_dyn_column_def2994); if (state.failed) return ret;
							}
							break;

					}

					match(input,RSQUARE,FOLLOW_RSQUARE_in_dyn_column_def2998); if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.columnDef(c, dt, ar != null || lsq != null, a == null ? null :  Integer.parseInt( a.getText() ), Boolean.TRUE,
			            l == null ? null : Integer.parseInt( l.getText() ),
			            s == null ? null : Integer.parseInt( s.getText() ),
			            false, 
			            SortOrder.getDefault()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "dyn_column_def"



	// $ANTLR start "dyn_column_name_or_def"
	// PhoenixSQL.g:544:1: dyn_column_name_or_def returns [ColumnDef ret] : c= column_name (dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? )? ;
	public final ColumnDef dyn_column_name_or_def() throws RecognitionException {
		ColumnDef ret = null;


		Token l=null;
		Token s=null;
		Token ar=null;
		Token lsq=null;
		Token a=null;
		ColumnName c =null;
		String dt =null;

		try {
			// PhoenixSQL.g:545:5: (c= column_name (dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? )? )
			// PhoenixSQL.g:545:9: c= column_name (dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? )?
			{
			pushFollow(FOLLOW_column_name_in_dyn_column_name_or_def3035);
			c=column_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:545:23: (dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )? )?
			int alt71=2;
			int LA71_0 = input.LA(1);
			if ( (LA71_0==NAME) ) {
				alt71=1;
			}
			switch (alt71) {
				case 1 :
					// PhoenixSQL.g:545:24: dt= identifier ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )? (ar= ARRAY )? (lsq= LSQUARE (a= NUMBER )? RSQUARE )?
					{
					pushFollow(FOLLOW_identifier_in_dyn_column_name_or_def3040);
					dt=identifier();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:545:38: ( LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN )?
					int alt67=2;
					int LA67_0 = input.LA(1);
					if ( (LA67_0==LPAREN) ) {
						alt67=1;
					}
					switch (alt67) {
						case 1 :
							// PhoenixSQL.g:545:39: LPAREN l= NUMBER ( COMMA s= NUMBER )? RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_dyn_column_name_or_def3043); if (state.failed) return ret;
							l=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_dyn_column_name_or_def3047); if (state.failed) return ret;
							// PhoenixSQL.g:545:55: ( COMMA s= NUMBER )?
							int alt66=2;
							int LA66_0 = input.LA(1);
							if ( (LA66_0==COMMA) ) {
								alt66=1;
							}
							switch (alt66) {
								case 1 :
									// PhoenixSQL.g:545:56: COMMA s= NUMBER
									{
									match(input,COMMA,FOLLOW_COMMA_in_dyn_column_name_or_def3050); if (state.failed) return ret;
									s=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_dyn_column_name_or_def3054); if (state.failed) return ret;
									}
									break;

							}

							match(input,RPAREN,FOLLOW_RPAREN_in_dyn_column_name_or_def3058); if (state.failed) return ret;
							}
							break;

					}

					// PhoenixSQL.g:545:84: (ar= ARRAY )?
					int alt68=2;
					int LA68_0 = input.LA(1);
					if ( (LA68_0==ARRAY) ) {
						alt68=1;
					}
					switch (alt68) {
						case 1 :
							// PhoenixSQL.g:545:84: ar= ARRAY
							{
							ar=(Token)match(input,ARRAY,FOLLOW_ARRAY_in_dyn_column_name_or_def3064); if (state.failed) return ret;
							}
							break;

					}

					// PhoenixSQL.g:545:92: (lsq= LSQUARE (a= NUMBER )? RSQUARE )?
					int alt70=2;
					int LA70_0 = input.LA(1);
					if ( (LA70_0==LSQUARE) ) {
						alt70=1;
					}
					switch (alt70) {
						case 1 :
							// PhoenixSQL.g:545:93: lsq= LSQUARE (a= NUMBER )? RSQUARE
							{
							lsq=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_dyn_column_name_or_def3070); if (state.failed) return ret;
							// PhoenixSQL.g:545:105: (a= NUMBER )?
							int alt69=2;
							int LA69_0 = input.LA(1);
							if ( (LA69_0==NUMBER) ) {
								alt69=1;
							}
							switch (alt69) {
								case 1 :
									// PhoenixSQL.g:545:106: a= NUMBER
									{
									a=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_dyn_column_name_or_def3075); if (state.failed) return ret;
									}
									break;

							}

							match(input,RSQUARE,FOLLOW_RSQUARE_in_dyn_column_name_or_def3079); if (state.failed) return ret;
							}
							break;

					}

					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.columnDef(c, dt, ar != null || lsq != null, a == null ? null :  Integer.parseInt( a.getText() ), Boolean.TRUE,
			            l == null ? null : Integer.parseInt( l.getText() ),
			            s == null ? null : Integer.parseInt( s.getText() ),
			            false, 
			            SortOrder.getDefault()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "dyn_column_name_or_def"



	// $ANTLR start "select_expression"
	// PhoenixSQL.g:553:1: select_expression returns [SelectStatement ret] : SELECT s= select_node ;
	public final SelectStatement select_expression() throws RecognitionException {
		SelectStatement ret = null;


		SelectStatement s =null;

		try {
			// PhoenixSQL.g:554:5: ( SELECT s= select_node )
			// PhoenixSQL.g:554:8: SELECT s= select_node
			{
			match(input,SELECT,FOLLOW_SELECT_in_select_expression3117); if (state.failed) return ret;
			pushFollow(FOLLOW_select_node_in_select_expression3121);
			s=select_node();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret = s;}
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "select_expression"



	// $ANTLR start "subquery_expression"
	// PhoenixSQL.g:557:1: subquery_expression returns [ParseNode ret] : s= select_expression ;
	public final ParseNode subquery_expression() throws RecognitionException {
		ParseNode ret = null;


		SelectStatement s =null;

		try {
			// PhoenixSQL.g:558:5: (s= select_expression )
			// PhoenixSQL.g:558:8: s= select_expression
			{
			pushFollow(FOLLOW_select_expression_in_subquery_expression3151);
			s=select_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret = factory.subquery(s, false);}
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "subquery_expression"



	// $ANTLR start "select_node"
	// PhoenixSQL.g:562:1: select_node returns [SelectStatement ret] : (d= DISTINCT | ALL )? sel= select_list FROM from= parseFrom ( WHERE where= expression )? ( GROUP BY group= group_by )? ( HAVING having= expression )? ( ORDER BY order= order_by )? ( LIMIT l= limit )? ;
	public final SelectStatement select_node() throws RecognitionException {
		SelectStatement ret = null;


		Token d=null;
		List sel =null;
		List from =null;
		ParseNode where =null;
		List group =null;
		ParseNode having =null;
		List order =null;
		LimitNode l =null;

		 contextStack.push(new ParseContext()); 
		try {
			// PhoenixSQL.g:564:5: ( (d= DISTINCT | ALL )? sel= select_list FROM from= parseFrom ( WHERE where= expression )? ( GROUP BY group= group_by )? ( HAVING having= expression )? ( ORDER BY order= order_by )? ( LIMIT l= limit )? )
			// PhoenixSQL.g:564:9: (d= DISTINCT | ALL )? sel= select_list FROM from= parseFrom ( WHERE where= expression )? ( GROUP BY group= group_by )? ( HAVING having= expression )? ( ORDER BY order= order_by )? ( LIMIT l= limit )?
			{
			// PhoenixSQL.g:564:9: (d= DISTINCT | ALL )?
			int alt72=3;
			int LA72_0 = input.LA(1);
			if ( (LA72_0==DISTINCT) ) {
				alt72=1;
			}
			else if ( (LA72_0==ALL) ) {
				alt72=2;
			}
			switch (alt72) {
				case 1 :
					// PhoenixSQL.g:564:10: d= DISTINCT
					{
					d=(Token)match(input,DISTINCT,FOLLOW_DISTINCT_in_select_node3188); if (state.failed) return ret;
					}
					break;
				case 2 :
					// PhoenixSQL.g:564:23: ALL
					{
					match(input,ALL,FOLLOW_ALL_in_select_node3192); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_select_list_in_select_node3198);
			sel=select_list();
			state._fsp--;
			if (state.failed) return ret;
			match(input,FROM,FOLLOW_FROM_in_select_node3208); if (state.failed) return ret;
			pushFollow(FOLLOW_parseFrom_in_select_node3212);
			from=parseFrom();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:566:9: ( WHERE where= expression )?
			int alt73=2;
			int LA73_0 = input.LA(1);
			if ( (LA73_0==WHERE) ) {
				alt73=1;
			}
			switch (alt73) {
				case 1 :
					// PhoenixSQL.g:566:10: WHERE where= expression
					{
					match(input,WHERE,FOLLOW_WHERE_in_select_node3223); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_select_node3227);
					where=expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:567:9: ( GROUP BY group= group_by )?
			int alt74=2;
			int LA74_0 = input.LA(1);
			if ( (LA74_0==GROUP) ) {
				alt74=1;
			}
			switch (alt74) {
				case 1 :
					// PhoenixSQL.g:567:10: GROUP BY group= group_by
					{
					match(input,GROUP,FOLLOW_GROUP_in_select_node3240); if (state.failed) return ret;
					match(input,BY,FOLLOW_BY_in_select_node3242); if (state.failed) return ret;
					pushFollow(FOLLOW_group_by_in_select_node3246);
					group=group_by();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:568:9: ( HAVING having= expression )?
			int alt75=2;
			int LA75_0 = input.LA(1);
			if ( (LA75_0==HAVING) ) {
				alt75=1;
			}
			switch (alt75) {
				case 1 :
					// PhoenixSQL.g:568:10: HAVING having= expression
					{
					match(input,HAVING,FOLLOW_HAVING_in_select_node3259); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_select_node3263);
					having=expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:569:9: ( ORDER BY order= order_by )?
			int alt76=2;
			int LA76_0 = input.LA(1);
			if ( (LA76_0==ORDER) ) {
				alt76=1;
			}
			switch (alt76) {
				case 1 :
					// PhoenixSQL.g:569:10: ORDER BY order= order_by
					{
					match(input,ORDER,FOLLOW_ORDER_in_select_node3276); if (state.failed) return ret;
					match(input,BY,FOLLOW_BY_in_select_node3278); if (state.failed) return ret;
					pushFollow(FOLLOW_order_by_in_select_node3282);
					order=order_by();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:570:9: ( LIMIT l= limit )?
			int alt77=2;
			int LA77_0 = input.LA(1);
			if ( (LA77_0==LIMIT) ) {
				alt77=1;
			}
			switch (alt77) {
				case 1 :
					// PhoenixSQL.g:570:10: LIMIT l= limit
					{
					match(input,LIMIT,FOLLOW_LIMIT_in_select_node3295); if (state.failed) return ret;
					pushFollow(FOLLOW_limit_in_select_node3299);
					l=limit();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) { ParseContext context = contextStack.pop(); ret = factory.select(from, null, d!=null, sel, where, group, having, order, l, getBindCount(), context.isAggregate(), context.hasSequences()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "select_node"



	// $ANTLR start "hinted_select_node"
	// PhoenixSQL.g:575:1: hinted_select_node returns [SelectStatement ret] : (hint= hintClause )? s= select_node ;
	public final SelectStatement hinted_select_node() throws RecognitionException {
		SelectStatement ret = null;


		HintNode hint =null;
		SelectStatement s =null;

		try {
			// PhoenixSQL.g:576:5: ( (hint= hintClause )? s= select_node )
			// PhoenixSQL.g:576:9: (hint= hintClause )? s= select_node
			{
			// PhoenixSQL.g:576:9: (hint= hintClause )?
			int alt78=2;
			int LA78_0 = input.LA(1);
			if ( (LA78_0==ML_HINT) ) {
				alt78=1;
			}
			switch (alt78) {
				case 1 :
					// PhoenixSQL.g:576:10: hint= hintClause
					{
					pushFollow(FOLLOW_hintClause_in_hinted_select_node3338);
					hint=hintClause();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_select_node_in_hinted_select_node3353);
			s=select_node();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = factory.select(s, hint); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "hinted_select_node"



	// $ANTLR start "upsert_node"
	// PhoenixSQL.g:582:1: upsert_node returns [UpsertStatement ret] : UPSERT (hint= hintClause )? INTO t= from_table_name ( LPAREN p= upsert_column_refs RPAREN )? ( ( VALUES LPAREN v= one_or_more_expressions RPAREN ) |s= select_expression ) ;
	public final UpsertStatement upsert_node() throws RecognitionException {
		UpsertStatement ret = null;


		HintNode hint =null;
		TableName t =null;
		Pair,List> p =null;
		List v =null;
		SelectStatement s =null;

		try {
			// PhoenixSQL.g:583:5: ( UPSERT (hint= hintClause )? INTO t= from_table_name ( LPAREN p= upsert_column_refs RPAREN )? ( ( VALUES LPAREN v= one_or_more_expressions RPAREN ) |s= select_expression ) )
			// PhoenixSQL.g:583:9: UPSERT (hint= hintClause )? INTO t= from_table_name ( LPAREN p= upsert_column_refs RPAREN )? ( ( VALUES LPAREN v= one_or_more_expressions RPAREN ) |s= select_expression )
			{
			match(input,UPSERT,FOLLOW_UPSERT_in_upsert_node3387); if (state.failed) return ret;
			// PhoenixSQL.g:583:16: (hint= hintClause )?
			int alt79=2;
			int LA79_0 = input.LA(1);
			if ( (LA79_0==ML_HINT) ) {
				alt79=1;
			}
			switch (alt79) {
				case 1 :
					// PhoenixSQL.g:583:17: hint= hintClause
					{
					pushFollow(FOLLOW_hintClause_in_upsert_node3392);
					hint=hintClause();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			match(input,INTO,FOLLOW_INTO_in_upsert_node3396); if (state.failed) return ret;
			pushFollow(FOLLOW_from_table_name_in_upsert_node3400);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:584:9: ( LPAREN p= upsert_column_refs RPAREN )?
			int alt80=2;
			int LA80_0 = input.LA(1);
			if ( (LA80_0==LPAREN) ) {
				alt80=1;
			}
			switch (alt80) {
				case 1 :
					// PhoenixSQL.g:584:10: LPAREN p= upsert_column_refs RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_upsert_node3411); if (state.failed) return ret;
					pushFollow(FOLLOW_upsert_column_refs_in_upsert_node3415);
					p=upsert_column_refs();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_upsert_node3417); if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:585:9: ( ( VALUES LPAREN v= one_or_more_expressions RPAREN ) |s= select_expression )
			int alt81=2;
			int LA81_0 = input.LA(1);
			if ( (LA81_0==VALUES) ) {
				alt81=1;
			}
			else if ( (LA81_0==SELECT) ) {
				alt81=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 81, 0, input);
				throw nvae;
			}

			switch (alt81) {
				case 1 :
					// PhoenixSQL.g:585:10: ( VALUES LPAREN v= one_or_more_expressions RPAREN )
					{
					// PhoenixSQL.g:585:10: ( VALUES LPAREN v= one_or_more_expressions RPAREN )
					// PhoenixSQL.g:585:11: VALUES LPAREN v= one_or_more_expressions RPAREN
					{
					match(input,VALUES,FOLLOW_VALUES_in_upsert_node3431); if (state.failed) return ret;
					match(input,LPAREN,FOLLOW_LPAREN_in_upsert_node3433); if (state.failed) return ret;
					pushFollow(FOLLOW_one_or_more_expressions_in_upsert_node3437);
					v=one_or_more_expressions();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_upsert_node3439); if (state.failed) return ret;
					}

					}
					break;
				case 2 :
					// PhoenixSQL.g:585:61: s= select_expression
					{
					pushFollow(FOLLOW_select_expression_in_upsert_node3446);
					s=select_expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.upsert(factory.namedTable(null,t,p == null ? null : p.getFirst()), hint, p == null ? null : p.getSecond(), v, s, getBindCount()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "upsert_node"



	// $ANTLR start "upsert_column_refs"
	// PhoenixSQL.g:589:1: upsert_column_refs returns [Pair,List> ret] : d= dyn_column_name_or_def ( COMMA d= dyn_column_name_or_def )* ;
	public final Pair,List> upsert_column_refs() throws RecognitionException {
		Pair,List> ret = null;


		ColumnDef d =null;

		ret = new Pair,List>(new ArrayList(), new ArrayList()); 
		try {
			// PhoenixSQL.g:591:5: (d= dyn_column_name_or_def ( COMMA d= dyn_column_name_or_def )* )
			// PhoenixSQL.g:591:8: d= dyn_column_name_or_def ( COMMA d= dyn_column_name_or_def )*
			{
			pushFollow(FOLLOW_dyn_column_name_or_def_in_upsert_column_refs3485);
			d=dyn_column_name_or_def();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { if (d.getDataType()!=null) { ret.getFirst().add(d); } ret.getSecond().add(d.getColumnDefName()); }
			// PhoenixSQL.g:592:8: ( COMMA d= dyn_column_name_or_def )*
			loop82:
			while (true) {
				int alt82=2;
				int LA82_0 = input.LA(1);
				if ( (LA82_0==COMMA) ) {
					alt82=1;
				}

				switch (alt82) {
				case 1 :
					// PhoenixSQL.g:592:9: COMMA d= dyn_column_name_or_def
					{
					match(input,COMMA,FOLLOW_COMMA_in_upsert_column_refs3498); if (state.failed) return ret;
					pushFollow(FOLLOW_dyn_column_name_or_def_in_upsert_column_refs3502);
					d=dyn_column_name_or_def();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { if (d.getDataType()!=null) { ret.getFirst().add(d); } ret.getSecond().add(d.getColumnDefName()); }
					}
					break;

				default :
					break loop82;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "upsert_column_refs"



	// $ANTLR start "delete_node"
	// PhoenixSQL.g:596:1: delete_node returns [DeleteStatement ret] : DELETE (hint= hintClause )? FROM t= from_table_name ( WHERE v= expression )? ( ORDER BY order= order_by )? ( LIMIT l= limit )? ;
	public final DeleteStatement delete_node() throws RecognitionException {
		DeleteStatement ret = null;


		HintNode hint =null;
		TableName t =null;
		ParseNode v =null;
		List order =null;
		LimitNode l =null;

		try {
			// PhoenixSQL.g:597:5: ( DELETE (hint= hintClause )? FROM t= from_table_name ( WHERE v= expression )? ( ORDER BY order= order_by )? ( LIMIT l= limit )? )
			// PhoenixSQL.g:597:9: DELETE (hint= hintClause )? FROM t= from_table_name ( WHERE v= expression )? ( ORDER BY order= order_by )? ( LIMIT l= limit )?
			{
			match(input,DELETE,FOLLOW_DELETE_in_delete_node3528); if (state.failed) return ret;
			// PhoenixSQL.g:597:16: (hint= hintClause )?
			int alt83=2;
			int LA83_0 = input.LA(1);
			if ( (LA83_0==ML_HINT) ) {
				alt83=1;
			}
			switch (alt83) {
				case 1 :
					// PhoenixSQL.g:597:17: hint= hintClause
					{
					pushFollow(FOLLOW_hintClause_in_delete_node3533);
					hint=hintClause();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			match(input,FROM,FOLLOW_FROM_in_delete_node3537); if (state.failed) return ret;
			pushFollow(FOLLOW_from_table_name_in_delete_node3541);
			t=from_table_name();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:598:9: ( WHERE v= expression )?
			int alt84=2;
			int LA84_0 = input.LA(1);
			if ( (LA84_0==WHERE) ) {
				alt84=1;
			}
			switch (alt84) {
				case 1 :
					// PhoenixSQL.g:598:10: WHERE v= expression
					{
					match(input,WHERE,FOLLOW_WHERE_in_delete_node3552); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_delete_node3556);
					v=expression();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:599:9: ( ORDER BY order= order_by )?
			int alt85=2;
			int LA85_0 = input.LA(1);
			if ( (LA85_0==ORDER) ) {
				alt85=1;
			}
			switch (alt85) {
				case 1 :
					// PhoenixSQL.g:599:10: ORDER BY order= order_by
					{
					match(input,ORDER,FOLLOW_ORDER_in_delete_node3569); if (state.failed) return ret;
					match(input,BY,FOLLOW_BY_in_delete_node3571); if (state.failed) return ret;
					pushFollow(FOLLOW_order_by_in_delete_node3575);
					order=order_by();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			// PhoenixSQL.g:600:9: ( LIMIT l= limit )?
			int alt86=2;
			int LA86_0 = input.LA(1);
			if ( (LA86_0==LIMIT) ) {
				alt86=1;
			}
			switch (alt86) {
				case 1 :
					// PhoenixSQL.g:600:10: LIMIT l= limit
					{
					match(input,LIMIT,FOLLOW_LIMIT_in_delete_node3588); if (state.failed) return ret;
					pushFollow(FOLLOW_limit_in_delete_node3592);
					l=limit();
					state._fsp--;
					if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) {ret = factory.delete(factory.namedTable(null,t), hint, v, order, l, getBindCount()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "delete_node"



	// $ANTLR start "limit"
	// PhoenixSQL.g:604:1: limit returns [LimitNode ret] : (b= bind_expression |l= int_literal );
	public final LimitNode limit() throws RecognitionException {
		LimitNode ret = null;


		BindParseNode b =null;
		LiteralParseNode l =null;

		try {
			// PhoenixSQL.g:605:5: (b= bind_expression |l= int_literal )
			int alt87=2;
			int LA87_0 = input.LA(1);
			if ( (LA87_0==BIND_NAME||LA87_0==QUESTION) ) {
				alt87=1;
			}
			else if ( (LA87_0==NUMBER) ) {
				alt87=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 87, 0, input);
				throw nvae;
			}

			switch (alt87) {
				case 1 :
					// PhoenixSQL.g:605:7: b= bind_expression
					{
					pushFollow(FOLLOW_bind_expression_in_limit3627);
					b=bind_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.limit(b); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:606:7: l= int_literal
					{
					pushFollow(FOLLOW_int_literal_in_limit3639);
					l=int_literal();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.limit(l); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "limit"



	// $ANTLR start "hintClause"
	// PhoenixSQL.g:609:1: hintClause returns [HintNode ret] : c= ML_HINT ;
	public final HintNode hintClause() throws RecognitionException {
		HintNode ret = null;


		Token c=null;

		try {
			// PhoenixSQL.g:610:5: (c= ML_HINT )
			// PhoenixSQL.g:610:8: c= ML_HINT
			{
			c=(Token)match(input,ML_HINT,FOLLOW_ML_HINT_in_hintClause3669); if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = factory.hint(c.getText()); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "hintClause"



	// $ANTLR start "select_list"
	// PhoenixSQL.g:614:1: select_list returns [List ret] : (n= selectable ( COMMA n= selectable )* | ASTERISK );
	public final List select_list() throws RecognitionException {
		List ret = null;


		AliasedNode n =null;

		ret = new ArrayList();
		try {
			// PhoenixSQL.g:616:5: (n= selectable ( COMMA n= selectable )* | ASTERISK )
			int alt89=2;
			int LA89_0 = input.LA(1);
			if ( (LA89_0==ARRAY||LA89_0==BIND_NAME||(LA89_0 >= CASE && LA89_0 <= CAST)||LA89_0==CURRENT||LA89_0==DECIMAL||LA89_0==DOUBLE||LA89_0==EXISTS||LA89_0==FALSE||(LA89_0 >= LONG && LA89_0 <= LPAREN)||LA89_0==MINUS||(LA89_0 >= NAME && LA89_0 <= NEXT)||(LA89_0 >= NOT && LA89_0 <= NULL)||LA89_0==NUMBER||LA89_0==QUESTION||LA89_0==STRING_LITERAL||LA89_0==TRUE) ) {
				alt89=1;
			}
			else if ( (LA89_0==ASTERISK) ) {
				alt89=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 89, 0, input);
				throw nvae;
			}

			switch (alt89) {
				case 1 :
					// PhoenixSQL.g:616:9: n= selectable ( COMMA n= selectable )*
					{
					pushFollow(FOLLOW_selectable_in_select_list3701);
					n=selectable();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(n);}
					// PhoenixSQL.g:616:36: ( COMMA n= selectable )*
					loop88:
					while (true) {
						int alt88=2;
						int LA88_0 = input.LA(1);
						if ( (LA88_0==COMMA) ) {
							alt88=1;
						}

						switch (alt88) {
						case 1 :
							// PhoenixSQL.g:616:37: COMMA n= selectable
							{
							match(input,COMMA,FOLLOW_COMMA_in_select_list3706); if (state.failed) return ret;
							pushFollow(FOLLOW_selectable_in_select_list3710);
							n=selectable();
							state._fsp--;
							if (state.failed) return ret;
							if ( state.backtracking==0 ) {ret.add(n);}
							}
							break;

						default :
							break loop88;
						}
					}

					}
					break;
				case 2 :
					// PhoenixSQL.g:617:7: ASTERISK
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_select_list3722); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = Collections.singletonList(factory.aliasedNode(null, factory.wildcard()));}
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "select_list"



	// $ANTLR start "selectable"
	// PhoenixSQL.g:621:1: selectable returns [AliasedNode ret] : (field= expression (a= parseAlias )? |familyName= identifier DOT ASTERISK |s= identifier DOT t= identifier DOT ASTERISK );
	public final AliasedNode selectable() throws RecognitionException {
		AliasedNode ret = null;


		ParseNode field =null;
		String a =null;
		String familyName =null;
		String s =null;
		String t =null;

		try {
			// PhoenixSQL.g:622:5: (field= expression (a= parseAlias )? |familyName= identifier DOT ASTERISK |s= identifier DOT t= identifier DOT ASTERISK )
			int alt91=3;
			int LA91_0 = input.LA(1);
			if ( (LA91_0==ARRAY||LA91_0==BIND_NAME||(LA91_0 >= CASE && LA91_0 <= CAST)||LA91_0==CURRENT||LA91_0==DECIMAL||LA91_0==DOUBLE||LA91_0==EXISTS||LA91_0==FALSE||(LA91_0 >= LONG && LA91_0 <= LPAREN)||LA91_0==MINUS||LA91_0==NEXT||(LA91_0 >= NOT && LA91_0 <= NULL)||LA91_0==NUMBER||LA91_0==QUESTION||LA91_0==STRING_LITERAL||LA91_0==TRUE) ) {
				alt91=1;
			}
			else if ( (LA91_0==NAME) ) {
				int LA91_2 = input.LA(2);
				if ( (LA91_2==AND||LA91_2==AS||LA91_2==ASTERISK||LA91_2==BETWEEN||LA91_2==COMMA||LA91_2==CONCAT||LA91_2==DIVIDE||LA91_2==EQ||LA91_2==FROM||LA91_2==GT||(LA91_2 >= ILIKE && LA91_2 <= IN)||LA91_2==IS||LA91_2==LIKE||(LA91_2 >= LPAREN && LA91_2 <= LT)||LA91_2==MINUS||LA91_2==NAME||(LA91_2 >= NOEQ1 && LA91_2 <= NOT)||LA91_2==OR||(LA91_2 >= PERCENT && LA91_2 <= PLUS)) ) {
					alt91=1;
				}
				else if ( (LA91_2==DOT) ) {
					int LA91_3 = input.LA(3);
					if ( (LA91_3==ASTERISK) ) {
						alt91=2;
					}
					else if ( (LA91_3==NAME) ) {
						int LA91_5 = input.LA(4);
						if ( (LA91_5==AND||LA91_5==AS||LA91_5==ASTERISK||LA91_5==BETWEEN||LA91_5==COMMA||LA91_5==CONCAT||LA91_5==DIVIDE||LA91_5==EQ||LA91_5==FROM||LA91_5==GT||(LA91_5 >= ILIKE && LA91_5 <= IN)||LA91_5==IS||LA91_5==LIKE||(LA91_5 >= LSQUARE && LA91_5 <= LT)||LA91_5==MINUS||LA91_5==NAME||(LA91_5 >= NOEQ1 && LA91_5 <= NOT)||LA91_5==OR||(LA91_5 >= PERCENT && LA91_5 <= PLUS)) ) {
							alt91=1;
						}
						else if ( (LA91_5==DOT) ) {
							int LA91_6 = input.LA(5);
							if ( (LA91_6==ASTERISK) ) {
								alt91=3;
							}
							else if ( (LA91_6==NAME) ) {
								alt91=1;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return ret;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 91, 6, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 91, 5, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 91, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 91, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 91, 0, input);
				throw nvae;
			}

			switch (alt91) {
				case 1 :
					// PhoenixSQL.g:622:9: field= expression (a= parseAlias )?
					{
					pushFollow(FOLLOW_expression_in_selectable3751);
					field=expression();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:622:26: (a= parseAlias )?
					int alt90=2;
					int LA90_0 = input.LA(1);
					if ( (LA90_0==AS||LA90_0==NAME) ) {
						alt90=1;
					}
					switch (alt90) {
						case 1 :
							// PhoenixSQL.g:622:27: a= parseAlias
							{
							pushFollow(FOLLOW_parseAlias_in_selectable3756);
							a=parseAlias();
							state._fsp--;
							if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = factory.aliasedNode(a, field); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:623:8: familyName= identifier DOT ASTERISK
					{
					pushFollow(FOLLOW_identifier_in_selectable3771);
					familyName=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_selectable3773); if (state.failed) return ret;
					match(input,ASTERISK,FOLLOW_ASTERISK_in_selectable3775); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.aliasedNode(null, factory.family(familyName));}
					}
					break;
				case 3 :
					// PhoenixSQL.g:624:9: s= identifier DOT t= identifier DOT ASTERISK
					{
					pushFollow(FOLLOW_identifier_in_selectable3790);
					s=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_selectable3792); if (state.failed) return ret;
					pushFollow(FOLLOW_identifier_in_selectable3796);
					t=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_selectable3798); if (state.failed) return ret;
					match(input,ASTERISK,FOLLOW_ASTERISK_in_selectable3800); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.aliasedNode(null, factory.tableWildcard(factory.table(s, t))); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "selectable"



	// $ANTLR start "group_by"
	// PhoenixSQL.g:629:1: group_by returns [List ret] : expr= expression ( COMMA expr= expression )* ;
	public final List group_by() throws RecognitionException {
		List ret = null;


		ParseNode expr =null;

		ret = new ArrayList();
		try {
			// PhoenixSQL.g:631:5: (expr= expression ( COMMA expr= expression )* )
			// PhoenixSQL.g:631:9: expr= expression ( COMMA expr= expression )*
			{
			pushFollow(FOLLOW_expression_in_group_by3833);
			expr=expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret.add(expr); }
			// PhoenixSQL.g:632:9: ( COMMA expr= expression )*
			loop92:
			while (true) {
				int alt92=2;
				int LA92_0 = input.LA(1);
				if ( (LA92_0==COMMA) ) {
					alt92=1;
				}

				switch (alt92) {
				case 1 :
					// PhoenixSQL.g:632:10: COMMA expr= expression
					{
					match(input,COMMA,FOLLOW_COMMA_in_group_by3846); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_group_by3852);
					expr=expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(expr); }
					}
					break;

				default :
					break loop92;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "group_by"



	// $ANTLR start "order_by"
	// PhoenixSQL.g:636:1: order_by returns [List ret] : field= parseOrderByField ( COMMA field= parseOrderByField )* ;
	public final List order_by() throws RecognitionException {
		List ret = null;


		OrderByNode field =null;

		ret = new ArrayList();
		try {
			// PhoenixSQL.g:638:5: (field= parseOrderByField ( COMMA field= parseOrderByField )* )
			// PhoenixSQL.g:638:9: field= parseOrderByField ( COMMA field= parseOrderByField )*
			{
			pushFollow(FOLLOW_parseOrderByField_in_order_by3886);
			field=parseOrderByField();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret.add(field); }
			// PhoenixSQL.g:639:9: ( COMMA field= parseOrderByField )*
			loop93:
			while (true) {
				int alt93=2;
				int LA93_0 = input.LA(1);
				if ( (LA93_0==COMMA) ) {
					alt93=1;
				}

				switch (alt93) {
				case 1 :
					// PhoenixSQL.g:639:10: COMMA field= parseOrderByField
					{
					match(input,COMMA,FOLLOW_COMMA_in_order_by3899); if (state.failed) return ret;
					pushFollow(FOLLOW_parseOrderByField_in_order_by3905);
					field=parseOrderByField();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(field); }
					}
					break;

				default :
					break loop93;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "order_by"



	// $ANTLR start "parseOrderByField"
	// PhoenixSQL.g:643:1: parseOrderByField returns [OrderByNode ret] : (expr= expression ) ( ASC | DESC )? ( NULLS ( FIRST | LAST ) )? ;
	public final OrderByNode parseOrderByField() throws RecognitionException {
		OrderByNode ret = null;


		ParseNode expr =null;

		boolean isAscending = true; boolean nullsLast = false;
		try {
			// PhoenixSQL.g:645:5: ( (expr= expression ) ( ASC | DESC )? ( NULLS ( FIRST | LAST ) )? )
			// PhoenixSQL.g:645:9: (expr= expression ) ( ASC | DESC )? ( NULLS ( FIRST | LAST ) )?
			{
			// PhoenixSQL.g:645:9: (expr= expression )
			// PhoenixSQL.g:645:10: expr= expression
			{
			pushFollow(FOLLOW_expression_in_parseOrderByField3942);
			expr=expression();
			state._fsp--;
			if (state.failed) return ret;
			}

			// PhoenixSQL.g:646:9: ( ASC | DESC )?
			int alt94=3;
			int LA94_0 = input.LA(1);
			if ( (LA94_0==ASC) ) {
				alt94=1;
			}
			else if ( (LA94_0==DESC) ) {
				alt94=2;
			}
			switch (alt94) {
				case 1 :
					// PhoenixSQL.g:646:10: ASC
					{
					match(input,ASC,FOLLOW_ASC_in_parseOrderByField3954); if (state.failed) return ret;
					if ( state.backtracking==0 ) {isAscending = true;}
					}
					break;
				case 2 :
					// PhoenixSQL.g:646:38: DESC
					{
					match(input,DESC,FOLLOW_DESC_in_parseOrderByField3960); if (state.failed) return ret;
					if ( state.backtracking==0 ) {isAscending = false;}
					}
					break;

			}

			// PhoenixSQL.g:647:9: ( NULLS ( FIRST | LAST ) )?
			int alt96=2;
			int LA96_0 = input.LA(1);
			if ( (LA96_0==NULLS) ) {
				alt96=1;
			}
			switch (alt96) {
				case 1 :
					// PhoenixSQL.g:647:10: NULLS ( FIRST | LAST )
					{
					match(input,NULLS,FOLLOW_NULLS_in_parseOrderByField3975); if (state.failed) return ret;
					// PhoenixSQL.g:647:16: ( FIRST | LAST )
					int alt95=2;
					int LA95_0 = input.LA(1);
					if ( (LA95_0==FIRST) ) {
						alt95=1;
					}
					else if ( (LA95_0==LAST) ) {
						alt95=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						NoViableAltException nvae =
							new NoViableAltException("", 95, 0, input);
						throw nvae;
					}

					switch (alt95) {
						case 1 :
							// PhoenixSQL.g:647:17: FIRST
							{
							match(input,FIRST,FOLLOW_FIRST_in_parseOrderByField3978); if (state.failed) return ret;
							if ( state.backtracking==0 ) {nullsLast = false;}
							}
							break;
						case 2 :
							// PhoenixSQL.g:647:46: LAST
							{
							match(input,LAST,FOLLOW_LAST_in_parseOrderByField3984); if (state.failed) return ret;
							if ( state.backtracking==0 ) {nullsLast = true;}
							}
							break;

					}

					}
					break;

			}

			if ( state.backtracking==0 ) { ret = factory.orderBy(expr, nullsLast, isAscending); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "parseOrderByField"



	// $ANTLR start "parseFrom"
	// PhoenixSQL.g:651:1: parseFrom returns [List ret] : t= table_ref ( COMMA s= table_ref )* ;
	public final List parseFrom() throws RecognitionException {
		List ret = null;


		TableNode t =null;
		TableNode s =null;

		ret = new ArrayList(4); 
		try {
			// PhoenixSQL.g:653:5: (t= table_ref ( COMMA s= table_ref )* )
			// PhoenixSQL.g:653:9: t= table_ref ( COMMA s= table_ref )*
			{
			pushFollow(FOLLOW_table_ref_in_parseFrom4028);
			t=table_ref();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(t);}
			// PhoenixSQL.g:653:36: ( COMMA s= table_ref )*
			loop97:
			while (true) {
				int alt97=2;
				int LA97_0 = input.LA(1);
				if ( (LA97_0==COMMA) ) {
					alt97=1;
				}

				switch (alt97) {
				case 1 :
					// PhoenixSQL.g:653:37: COMMA s= table_ref
					{
					match(input,COMMA,FOLLOW_COMMA_in_parseFrom4033); if (state.failed) return ret;
					pushFollow(FOLLOW_table_ref_in_parseFrom4037);
					s=table_ref();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret.add(s); }
					}
					break;

				default :
					break loop97;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "parseFrom"



	// $ANTLR start "table_ref"
	// PhoenixSQL.g:656:1: table_ref returns [TableNode ret] : t= single_table_ref p= join_parts ;
	public final TableNode table_ref() throws RecognitionException {
		TableNode ret = null;


		TableNode t =null;
		List p =null;

		try {
			// PhoenixSQL.g:657:5: (t= single_table_ref p= join_parts )
			// PhoenixSQL.g:657:7: t= single_table_ref p= join_parts
			{
			pushFollow(FOLLOW_single_table_ref_in_table_ref4064);
			t=single_table_ref();
			state._fsp--;
			if (state.failed) return ret;
			pushFollow(FOLLOW_join_parts_in_table_ref4068);
			p=join_parts();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = factory.table(t, p); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "table_ref"



	// $ANTLR start "single_table_ref"
	// PhoenixSQL.g:660:1: single_table_ref returns [TableNode ret] : (n= bind_name ( ( AS )? alias= identifier )? |t= from_table_name ( ( AS )? alias= identifier )? ( LPAREN cdefs= dyn_column_defs RPAREN )? | LPAREN SELECT s= hinted_select_node RPAREN ( ( AS )? alias= identifier )? );
	public final TableNode single_table_ref() throws RecognitionException {
		TableNode ret = null;


		String n =null;
		String alias =null;
		TableName t =null;
		List cdefs =null;
		SelectStatement s =null;

		try {
			// PhoenixSQL.g:661:5: (n= bind_name ( ( AS )? alias= identifier )? |t= from_table_name ( ( AS )? alias= identifier )? ( LPAREN cdefs= dyn_column_defs RPAREN )? | LPAREN SELECT s= hinted_select_node RPAREN ( ( AS )? alias= identifier )? )
			int alt105=3;
			switch ( input.LA(1) ) {
			case BIND_NAME:
			case QUESTION:
				{
				alt105=1;
				}
				break;
			case NAME:
				{
				alt105=2;
				}
				break;
			case LPAREN:
				{
				alt105=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 105, 0, input);
				throw nvae;
			}
			switch (alt105) {
				case 1 :
					// PhoenixSQL.g:661:9: n= bind_name ( ( AS )? alias= identifier )?
					{
					pushFollow(FOLLOW_bind_name_in_single_table_ref4095);
					n=bind_name();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:661:21: ( ( AS )? alias= identifier )?
					int alt99=2;
					int LA99_0 = input.LA(1);
					if ( (LA99_0==AS||LA99_0==NAME) ) {
						alt99=1;
					}
					switch (alt99) {
						case 1 :
							// PhoenixSQL.g:661:22: ( AS )? alias= identifier
							{
							// PhoenixSQL.g:661:22: ( AS )?
							int alt98=2;
							int LA98_0 = input.LA(1);
							if ( (LA98_0==AS) ) {
								alt98=1;
							}
							switch (alt98) {
								case 1 :
									// PhoenixSQL.g:661:23: AS
									{
									match(input,AS,FOLLOW_AS_in_single_table_ref4099); if (state.failed) return ret;
									}
									break;

							}

							pushFollow(FOLLOW_identifier_in_single_table_ref4105);
							alias=identifier();
							state._fsp--;
							if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = factory.bindTable(alias, factory.table(null,n)); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:662:9: t= from_table_name ( ( AS )? alias= identifier )? ( LPAREN cdefs= dyn_column_defs RPAREN )?
					{
					pushFollow(FOLLOW_from_table_name_in_single_table_ref4122);
					t=from_table_name();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:662:27: ( ( AS )? alias= identifier )?
					int alt101=2;
					int LA101_0 = input.LA(1);
					if ( (LA101_0==AS||LA101_0==NAME) ) {
						alt101=1;
					}
					switch (alt101) {
						case 1 :
							// PhoenixSQL.g:662:28: ( AS )? alias= identifier
							{
							// PhoenixSQL.g:662:28: ( AS )?
							int alt100=2;
							int LA100_0 = input.LA(1);
							if ( (LA100_0==AS) ) {
								alt100=1;
							}
							switch (alt100) {
								case 1 :
									// PhoenixSQL.g:662:29: AS
									{
									match(input,AS,FOLLOW_AS_in_single_table_ref4126); if (state.failed) return ret;
									}
									break;

							}

							pushFollow(FOLLOW_identifier_in_single_table_ref4132);
							alias=identifier();
							state._fsp--;
							if (state.failed) return ret;
							}
							break;

					}

					// PhoenixSQL.g:662:53: ( LPAREN cdefs= dyn_column_defs RPAREN )?
					int alt102=2;
					int LA102_0 = input.LA(1);
					if ( (LA102_0==LPAREN) ) {
						alt102=1;
					}
					switch (alt102) {
						case 1 :
							// PhoenixSQL.g:662:54: LPAREN cdefs= dyn_column_defs RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_single_table_ref4137); if (state.failed) return ret;
							pushFollow(FOLLOW_dyn_column_defs_in_single_table_ref4141);
							cdefs=dyn_column_defs();
							state._fsp--;
							if (state.failed) return ret;
							match(input,RPAREN,FOLLOW_RPAREN_in_single_table_ref4143); if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = factory.namedTable(alias,t,cdefs); }
					}
					break;
				case 3 :
					// PhoenixSQL.g:663:9: LPAREN SELECT s= hinted_select_node RPAREN ( ( AS )? alias= identifier )?
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_single_table_ref4157); if (state.failed) return ret;
					match(input,SELECT,FOLLOW_SELECT_in_single_table_ref4159); if (state.failed) return ret;
					pushFollow(FOLLOW_hinted_select_node_in_single_table_ref4163);
					s=hinted_select_node();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_single_table_ref4165); if (state.failed) return ret;
					// PhoenixSQL.g:663:51: ( ( AS )? alias= identifier )?
					int alt104=2;
					int LA104_0 = input.LA(1);
					if ( (LA104_0==AS||LA104_0==NAME) ) {
						alt104=1;
					}
					switch (alt104) {
						case 1 :
							// PhoenixSQL.g:663:52: ( AS )? alias= identifier
							{
							// PhoenixSQL.g:663:52: ( AS )?
							int alt103=2;
							int LA103_0 = input.LA(1);
							if ( (LA103_0==AS) ) {
								alt103=1;
							}
							switch (alt103) {
								case 1 :
									// PhoenixSQL.g:663:53: AS
									{
									match(input,AS,FOLLOW_AS_in_single_table_ref4169); if (state.failed) return ret;
									}
									break;

							}

							pushFollow(FOLLOW_identifier_in_single_table_ref4175);
							alias=identifier();
							state._fsp--;
							if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = factory.derivedTable(alias, s); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "single_table_ref"



	// $ANTLR start "join_parts"
	// PhoenixSQL.g:666:1: join_parts returns [List ret] : (p= join_part )* ;
	public final List join_parts() throws RecognitionException {
		List ret = null;


		JoinPartNode p =null;

		ret = new ArrayList(4); 
		try {
			// PhoenixSQL.g:668:2: ( (p= join_part )* )
			// PhoenixSQL.g:668:4: (p= join_part )*
			{
			// PhoenixSQL.g:668:4: (p= join_part )*
			loop106:
			while (true) {
				int alt106=2;
				int LA106_0 = input.LA(1);
				if ( (LA106_0==FULL||LA106_0==INNER||LA106_0==JOIN||LA106_0==LEFT||LA106_0==RIGHT) ) {
					alt106=1;
				}

				switch (alt106) {
				case 1 :
					// PhoenixSQL.g:668:5: p= join_part
					{
					pushFollow(FOLLOW_join_part_in_join_parts4204);
					p=join_part();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret.add(p); }
					}
					break;

				default :
					break loop106;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "join_parts"



	// $ANTLR start "join_part"
	// PhoenixSQL.g:671:1: join_part returns [JoinPartNode ret] : (j= join_type JOIN r= single_table_ref ON e= expression |j= join_type JOIN LPAREN r= table_ref RPAREN ON e= expression );
	public final JoinPartNode join_part() throws RecognitionException {
		JoinPartNode ret = null;


		JoinTableNode.JoinType j =null;
		TableNode r =null;
		ParseNode e =null;

		try {
			// PhoenixSQL.g:672:2: (j= join_type JOIN r= single_table_ref ON e= expression |j= join_type JOIN LPAREN r= table_ref RPAREN ON e= expression )
			int alt107=2;
			switch ( input.LA(1) ) {
			case INNER:
				{
				int LA107_1 = input.LA(2);
				if ( (LA107_1==JOIN) ) {
					int LA107_2 = input.LA(3);
					if ( (LA107_2==LPAREN) ) {
						int LA107_6 = input.LA(4);
						if ( (LA107_6==SELECT) ) {
							alt107=1;
						}
						else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
							alt107=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 107, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
						alt107=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 107, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case JOIN:
				{
				int LA107_2 = input.LA(2);
				if ( (LA107_2==LPAREN) ) {
					int LA107_6 = input.LA(3);
					if ( (LA107_6==SELECT) ) {
						alt107=1;
					}
					else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
						alt107=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 6, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
					alt107=1;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 107, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case LEFT:
				{
				int LA107_3 = input.LA(2);
				if ( (LA107_3==OUTER) ) {
					int LA107_8 = input.LA(3);
					if ( (LA107_8==JOIN) ) {
						int LA107_2 = input.LA(4);
						if ( (LA107_2==LPAREN) ) {
							int LA107_6 = input.LA(5);
							if ( (LA107_6==SELECT) ) {
								alt107=1;
							}
							else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
								alt107=2;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return ret;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 107, 6, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
							alt107=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 107, 2, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 8, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA107_3==JOIN) ) {
					int LA107_2 = input.LA(3);
					if ( (LA107_2==LPAREN) ) {
						int LA107_6 = input.LA(4);
						if ( (LA107_6==SELECT) ) {
							alt107=1;
						}
						else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
							alt107=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 107, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
						alt107=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 107, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case RIGHT:
				{
				int LA107_4 = input.LA(2);
				if ( (LA107_4==OUTER) ) {
					int LA107_9 = input.LA(3);
					if ( (LA107_9==JOIN) ) {
						int LA107_2 = input.LA(4);
						if ( (LA107_2==LPAREN) ) {
							int LA107_6 = input.LA(5);
							if ( (LA107_6==SELECT) ) {
								alt107=1;
							}
							else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
								alt107=2;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return ret;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 107, 6, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
							alt107=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 107, 2, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 9, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA107_4==JOIN) ) {
					int LA107_2 = input.LA(3);
					if ( (LA107_2==LPAREN) ) {
						int LA107_6 = input.LA(4);
						if ( (LA107_6==SELECT) ) {
							alt107=1;
						}
						else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
							alt107=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 107, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
						alt107=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 107, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case FULL:
				{
				int LA107_5 = input.LA(2);
				if ( (LA107_5==OUTER) ) {
					int LA107_10 = input.LA(3);
					if ( (LA107_10==JOIN) ) {
						int LA107_2 = input.LA(4);
						if ( (LA107_2==LPAREN) ) {
							int LA107_6 = input.LA(5);
							if ( (LA107_6==SELECT) ) {
								alt107=1;
							}
							else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
								alt107=2;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return ret;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 107, 6, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
							alt107=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 107, 2, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 10, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA107_5==JOIN) ) {
					int LA107_2 = input.LA(3);
					if ( (LA107_2==LPAREN) ) {
						int LA107_6 = input.LA(4);
						if ( (LA107_6==SELECT) ) {
							alt107=1;
						}
						else if ( (LA107_6==BIND_NAME||LA107_6==LPAREN||LA107_6==NAME||LA107_6==QUESTION) ) {
							alt107=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 107, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA107_2==BIND_NAME||LA107_2==NAME||LA107_2==QUESTION) ) {
						alt107=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 107, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 107, 5, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 107, 0, input);
				throw nvae;
			}
			switch (alt107) {
				case 1 :
					// PhoenixSQL.g:672:4: j= join_type JOIN r= single_table_ref ON e= expression
					{
					pushFollow(FOLLOW_join_type_in_join_part4225);
					j=join_type();
					state._fsp--;
					if (state.failed) return ret;
					match(input,JOIN,FOLLOW_JOIN_in_join_part4227); if (state.failed) return ret;
					pushFollow(FOLLOW_single_table_ref_in_join_part4231);
					r=single_table_ref();
					state._fsp--;
					if (state.failed) return ret;
					match(input,ON,FOLLOW_ON_in_join_part4233); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_join_part4237);
					e=expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.joinPart(j, e, r); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:673:4: j= join_type JOIN LPAREN r= table_ref RPAREN ON e= expression
					{
					pushFollow(FOLLOW_join_type_in_join_part4246);
					j=join_type();
					state._fsp--;
					if (state.failed) return ret;
					match(input,JOIN,FOLLOW_JOIN_in_join_part4248); if (state.failed) return ret;
					match(input,LPAREN,FOLLOW_LPAREN_in_join_part4250); if (state.failed) return ret;
					pushFollow(FOLLOW_table_ref_in_join_part4254);
					r=table_ref();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_join_part4256); if (state.failed) return ret;
					match(input,ON,FOLLOW_ON_in_join_part4258); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_join_part4262);
					e=expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.joinPart(j, e, r); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "join_part"



	// $ANTLR start "join_type"
	// PhoenixSQL.g:676:1: join_type returns [JoinTableNode.JoinType ret] : ( ( INNER )? | LEFT ( OUTER )? | RIGHT ( OUTER )? | FULL ( OUTER )? );
	public final JoinTableNode.JoinType join_type() throws RecognitionException {
		JoinTableNode.JoinType ret = null;


		try {
			// PhoenixSQL.g:677:5: ( ( INNER )? | LEFT ( OUTER )? | RIGHT ( OUTER )? | FULL ( OUTER )? )
			int alt112=4;
			switch ( input.LA(1) ) {
			case INNER:
			case JOIN:
				{
				alt112=1;
				}
				break;
			case LEFT:
				{
				alt112=2;
				}
				break;
			case RIGHT:
				{
				alt112=3;
				}
				break;
			case FULL:
				{
				alt112=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 112, 0, input);
				throw nvae;
			}
			switch (alt112) {
				case 1 :
					// PhoenixSQL.g:677:9: ( INNER )?
					{
					// PhoenixSQL.g:677:9: ( INNER )?
					int alt108=2;
					int LA108_0 = input.LA(1);
					if ( (LA108_0==INNER) ) {
						alt108=1;
					}
					switch (alt108) {
						case 1 :
							// PhoenixSQL.g:677:9: INNER
							{
							match(input,INNER,FOLLOW_INNER_in_join_type4284); if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = JoinTableNode.JoinType.Inner; }
					}
					break;
				case 2 :
					// PhoenixSQL.g:678:9: LEFT ( OUTER )?
					{
					match(input,LEFT,FOLLOW_LEFT_in_join_type4299); if (state.failed) return ret;
					// PhoenixSQL.g:678:14: ( OUTER )?
					int alt109=2;
					int LA109_0 = input.LA(1);
					if ( (LA109_0==OUTER) ) {
						alt109=1;
					}
					switch (alt109) {
						case 1 :
							// PhoenixSQL.g:678:14: OUTER
							{
							match(input,OUTER,FOLLOW_OUTER_in_join_type4301); if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = JoinTableNode.JoinType.Left; }
					}
					break;
				case 3 :
					// PhoenixSQL.g:679:9: RIGHT ( OUTER )?
					{
					match(input,RIGHT,FOLLOW_RIGHT_in_join_type4316); if (state.failed) return ret;
					// PhoenixSQL.g:679:15: ( OUTER )?
					int alt110=2;
					int LA110_0 = input.LA(1);
					if ( (LA110_0==OUTER) ) {
						alt110=1;
					}
					switch (alt110) {
						case 1 :
							// PhoenixSQL.g:679:15: OUTER
							{
							match(input,OUTER,FOLLOW_OUTER_in_join_type4318); if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = JoinTableNode.JoinType.Right; }
					}
					break;
				case 4 :
					// PhoenixSQL.g:680:9: FULL ( OUTER )?
					{
					match(input,FULL,FOLLOW_FULL_in_join_type4332); if (state.failed) return ret;
					// PhoenixSQL.g:680:15: ( OUTER )?
					int alt111=2;
					int LA111_0 = input.LA(1);
					if ( (LA111_0==OUTER) ) {
						alt111=1;
					}
					switch (alt111) {
						case 1 :
							// PhoenixSQL.g:680:15: OUTER
							{
							match(input,OUTER,FOLLOW_OUTER_in_join_type4335); if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) { ret = JoinTableNode.JoinType.Full; }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "join_type"



	// $ANTLR start "parseAlias"
	// PhoenixSQL.g:683:1: parseAlias returns [String ret] : ( AS )? alias= parseNoReserved ;
	public final String parseAlias() throws RecognitionException {
		String ret = null;


		String alias =null;

		try {
			// PhoenixSQL.g:684:5: ( ( AS )? alias= parseNoReserved )
			// PhoenixSQL.g:684:9: ( AS )? alias= parseNoReserved
			{
			// PhoenixSQL.g:684:9: ( AS )?
			int alt113=2;
			int LA113_0 = input.LA(1);
			if ( (LA113_0==AS) ) {
				alt113=1;
			}
			switch (alt113) {
				case 1 :
					// PhoenixSQL.g:684:9: AS
					{
					match(input,AS,FOLLOW_AS_in_parseAlias4366); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_parseNoReserved_in_parseAlias4371);
			alias=parseNoReserved();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = alias; }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "parseAlias"



	// $ANTLR start "expression"
	// PhoenixSQL.g:688:1: expression returns [ParseNode ret] : e= or_expression ;
	public final ParseNode expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode e =null;

		try {
			// PhoenixSQL.g:689:5: (e= or_expression )
			// PhoenixSQL.g:689:9: e= or_expression
			{
			pushFollow(FOLLOW_or_expression_in_expression4399);
			e=or_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = e; }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "expression"



	// $ANTLR start "or_expression"
	// PhoenixSQL.g:693:1: or_expression returns [ParseNode ret] : i= and_expression ( OR i= and_expression )* ;
	public final ParseNode or_expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode i =null;

		List l = new ArrayList(4); 
		try {
			// PhoenixSQL.g:695:5: (i= and_expression ( OR i= and_expression )* )
			// PhoenixSQL.g:695:9: i= and_expression ( OR i= and_expression )*
			{
			pushFollow(FOLLOW_and_expression_in_or_expression4431);
			i=and_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {l.add(i);}
			// PhoenixSQL.g:695:38: ( OR i= and_expression )*
			loop114:
			while (true) {
				int alt114=2;
				int LA114_0 = input.LA(1);
				if ( (LA114_0==OR) ) {
					alt114=1;
				}

				switch (alt114) {
				case 1 :
					// PhoenixSQL.g:695:39: OR i= and_expression
					{
					match(input,OR,FOLLOW_OR_in_or_expression4436); if (state.failed) return ret;
					pushFollow(FOLLOW_and_expression_in_or_expression4440);
					i=and_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {l.add(i);}
					}
					break;

				default :
					break loop114;
				}
			}

			if ( state.backtracking==0 ) { ret = l.size() == 1 ? l.get(0) : factory.or(l); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "or_expression"



	// $ANTLR start "and_expression"
	// PhoenixSQL.g:699:1: and_expression returns [ParseNode ret] : i= not_expression ( AND i= not_expression )* ;
	public final ParseNode and_expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode i =null;

		List l = new ArrayList(4); 
		try {
			// PhoenixSQL.g:701:5: (i= not_expression ( AND i= not_expression )* )
			// PhoenixSQL.g:701:9: i= not_expression ( AND i= not_expression )*
			{
			pushFollow(FOLLOW_not_expression_in_and_expression4476);
			i=not_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {l.add(i);}
			// PhoenixSQL.g:701:38: ( AND i= not_expression )*
			loop115:
			while (true) {
				int alt115=2;
				int LA115_0 = input.LA(1);
				if ( (LA115_0==AND) ) {
					alt115=1;
				}

				switch (alt115) {
				case 1 :
					// PhoenixSQL.g:701:39: AND i= not_expression
					{
					match(input,AND,FOLLOW_AND_in_and_expression4481); if (state.failed) return ret;
					pushFollow(FOLLOW_not_expression_in_and_expression4485);
					i=not_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {l.add(i);}
					}
					break;

				default :
					break loop115;
				}
			}

			if ( state.backtracking==0 ) { ret = l.size() == 1 ? l.get(0) : factory.and(l); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "and_expression"



	// $ANTLR start "not_expression"
	// PhoenixSQL.g:705:1: not_expression returns [ParseNode ret] : ( ( ( NOT )? boolean_expression )=> (n= NOT )? e= boolean_expression | (n= NOT )? LPAREN e= expression RPAREN );
	public final ParseNode not_expression() throws RecognitionException {
		ParseNode ret = null;


		Token n=null;
		ParseNode e =null;

		try {
			// PhoenixSQL.g:706:5: ( ( ( NOT )? boolean_expression )=> (n= NOT )? e= boolean_expression | (n= NOT )? LPAREN e= expression RPAREN )
			int alt118=2;
			int LA118_0 = input.LA(1);
			if ( (LA118_0==NOT) ) {
				int LA118_1 = input.LA(2);
				if ( (synpred1_PhoenixSQL()) ) {
					alt118=1;
				}
				else if ( (true) ) {
					alt118=2;
				}

			}
			else if ( (LA118_0==MINUS) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==STRING_LITERAL) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==NUMBER) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==LONG) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==DOUBLE) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==DECIMAL) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==NULL) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==TRUE) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==FALSE) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==BIND_NAME) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==QUESTION) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==NAME) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==ARRAY) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==CASE) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==LPAREN) ) {
				int LA118_16 = input.LA(2);
				if ( (synpred1_PhoenixSQL()) ) {
					alt118=1;
				}
				else if ( (true) ) {
					alt118=2;
				}

			}
			else if ( (LA118_0==CAST) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==NEXT) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==CURRENT) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}
			else if ( (LA118_0==EXISTS) && (synpred1_PhoenixSQL())) {
				alt118=1;
			}

			switch (alt118) {
				case 1 :
					// PhoenixSQL.g:706:9: ( ( NOT )? boolean_expression )=> (n= NOT )? e= boolean_expression
					{
					// PhoenixSQL.g:706:40: (n= NOT )?
					int alt116=2;
					int LA116_0 = input.LA(1);
					if ( (LA116_0==NOT) ) {
						alt116=1;
					}
					switch (alt116) {
						case 1 :
							// PhoenixSQL.g:706:40: n= NOT
							{
							n=(Token)match(input,NOT,FOLLOW_NOT_in_not_expression4527); if (state.failed) return ret;
							}
							break;

					}

					pushFollow(FOLLOW_boolean_expression_in_not_expression4532);
					e=boolean_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = n == null ? e : factory.not(e); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:707:9: (n= NOT )? LPAREN e= expression RPAREN
					{
					// PhoenixSQL.g:707:10: (n= NOT )?
					int alt117=2;
					int LA117_0 = input.LA(1);
					if ( (LA117_0==NOT) ) {
						alt117=1;
					}
					switch (alt117) {
						case 1 :
							// PhoenixSQL.g:707:10: n= NOT
							{
							n=(Token)match(input,NOT,FOLLOW_NOT_in_not_expression4546); if (state.failed) return ret;
							}
							break;

					}

					match(input,LPAREN,FOLLOW_LPAREN_in_not_expression4549); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_not_expression4553);
					e=expression();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_not_expression4555); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = n == null ? e : factory.not(e); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "not_expression"



	// $ANTLR start "comparison_op"
	// PhoenixSQL.g:710:1: comparison_op returns [CompareOp ret] : ( EQ | LT | GT | LT EQ | GT EQ | ( NOEQ1 | NOEQ2 ) );
	public final CompareOp comparison_op() throws RecognitionException {
		CompareOp ret = null;


		try {
			// PhoenixSQL.g:711:2: ( EQ | LT | GT | LT EQ | GT EQ | ( NOEQ1 | NOEQ2 ) )
			int alt119=6;
			switch ( input.LA(1) ) {
			case EQ:
				{
				alt119=1;
				}
				break;
			case LT:
				{
				int LA119_2 = input.LA(2);
				if ( (LA119_2==EQ) ) {
					alt119=4;
				}
				else if ( (LA119_2==ALL||(LA119_2 >= ANY && LA119_2 <= ARRAY)||LA119_2==BIND_NAME||(LA119_2 >= CASE && LA119_2 <= CAST)||LA119_2==CURRENT||LA119_2==DECIMAL||LA119_2==DOUBLE||LA119_2==FALSE||(LA119_2 >= LONG && LA119_2 <= LPAREN)||LA119_2==MINUS||(LA119_2 >= NAME && LA119_2 <= NEXT)||LA119_2==NULL||LA119_2==NUMBER||LA119_2==QUESTION||LA119_2==STRING_LITERAL||LA119_2==TRUE) ) {
					alt119=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 119, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case GT:
				{
				int LA119_3 = input.LA(2);
				if ( (LA119_3==EQ) ) {
					alt119=5;
				}
				else if ( (LA119_3==ALL||(LA119_3 >= ANY && LA119_3 <= ARRAY)||LA119_3==BIND_NAME||(LA119_3 >= CASE && LA119_3 <= CAST)||LA119_3==CURRENT||LA119_3==DECIMAL||LA119_3==DOUBLE||LA119_3==FALSE||(LA119_3 >= LONG && LA119_3 <= LPAREN)||LA119_3==MINUS||(LA119_3 >= NAME && LA119_3 <= NEXT)||LA119_3==NULL||LA119_3==NUMBER||LA119_3==QUESTION||LA119_3==STRING_LITERAL||LA119_3==TRUE) ) {
					alt119=3;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 119, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case NOEQ1:
			case NOEQ2:
				{
				alt119=6;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 119, 0, input);
				throw nvae;
			}
			switch (alt119) {
				case 1 :
					// PhoenixSQL.g:711:4: EQ
					{
					match(input,EQ,FOLLOW_EQ_in_comparison_op4575); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = CompareOp.EQUAL; }
					}
					break;
				case 2 :
					// PhoenixSQL.g:712:4: LT
					{
					match(input,LT,FOLLOW_LT_in_comparison_op4582); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = CompareOp.LESS; }
					}
					break;
				case 3 :
					// PhoenixSQL.g:713:4: GT
					{
					match(input,GT,FOLLOW_GT_in_comparison_op4589); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = CompareOp.GREATER; }
					}
					break;
				case 4 :
					// PhoenixSQL.g:714:4: LT EQ
					{
					match(input,LT,FOLLOW_LT_in_comparison_op4596); if (state.failed) return ret;
					match(input,EQ,FOLLOW_EQ_in_comparison_op4598); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = CompareOp.LESS_OR_EQUAL; }
					}
					break;
				case 5 :
					// PhoenixSQL.g:715:4: GT EQ
					{
					match(input,GT,FOLLOW_GT_in_comparison_op4605); if (state.failed) return ret;
					match(input,EQ,FOLLOW_EQ_in_comparison_op4607); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = CompareOp.GREATER_OR_EQUAL; }
					}
					break;
				case 6 :
					// PhoenixSQL.g:716:4: ( NOEQ1 | NOEQ2 )
					{
					if ( (input.LA(1) >= NOEQ1 && input.LA(1) <= NOEQ2) ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					if ( state.backtracking==0 ) { ret = CompareOp.NOT_EQUAL; }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "comparison_op"



	// $ANTLR start "boolean_expression"
	// PhoenixSQL.g:719:1: boolean_expression returns [ParseNode ret] : (l= value_expression ( (op= comparison_op (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) ) ) | ( IS (n= NOT )? NULL ) | ( (n= NOT )? ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) ) ) |) | EXISTS LPAREN s= subquery_expression RPAREN );
	public final ParseNode boolean_expression() throws RecognitionException {
		ParseNode ret = null;


		Token all=null;
		Token any=null;
		Token n=null;
		ParseNode l =null;
		CompareOp op =null;
		ParseNode r =null;
		ParseNode r1 =null;
		ParseNode r2 =null;
		List v =null;
		ParseNode s =null;

		try {
			// PhoenixSQL.g:720:5: (l= value_expression ( (op= comparison_op (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) ) ) | ( IS (n= NOT )? NULL ) | ( (n= NOT )? ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) ) ) |) | EXISTS LPAREN s= subquery_expression RPAREN )
			int alt128=2;
			int LA128_0 = input.LA(1);
			if ( (LA128_0==ARRAY||LA128_0==BIND_NAME||(LA128_0 >= CASE && LA128_0 <= CAST)||LA128_0==CURRENT||LA128_0==DECIMAL||LA128_0==DOUBLE||LA128_0==FALSE||(LA128_0 >= LONG && LA128_0 <= LPAREN)||LA128_0==MINUS||(LA128_0 >= NAME && LA128_0 <= NEXT)||LA128_0==NULL||LA128_0==NUMBER||LA128_0==QUESTION||LA128_0==STRING_LITERAL||LA128_0==TRUE) ) {
				alt128=1;
			}
			else if ( (LA128_0==EXISTS) ) {
				alt128=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 128, 0, input);
				throw nvae;
			}

			switch (alt128) {
				case 1 :
					// PhoenixSQL.g:720:9: l= value_expression ( (op= comparison_op (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) ) ) | ( IS (n= NOT )? NULL ) | ( (n= NOT )? ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) ) ) |)
					{
					pushFollow(FOLLOW_value_expression_in_boolean_expression4645);
					l=value_expression();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:720:28: ( (op= comparison_op (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) ) ) | ( IS (n= NOT )? NULL ) | ( (n= NOT )? ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) ) ) |)
					int alt127=4;
					switch ( input.LA(1) ) {
					case EQ:
					case GT:
					case LT:
					case NOEQ1:
					case NOEQ2:
						{
						alt127=1;
						}
						break;
					case IS:
						{
						alt127=2;
						}
						break;
					case BETWEEN:
					case ILIKE:
					case IN:
					case LIKE:
					case NOT:
						{
						alt127=3;
						}
						break;
					case EOF:
					case AND:
					case AS:
					case ASC:
					case COMMA:
					case DESC:
					case ELSE:
					case END:
					case FROM:
					case FULL:
					case GROUP:
					case HAVING:
					case INNER:
					case JOIN:
					case LEFT:
					case LIMIT:
					case NAME:
					case NULLS:
					case OR:
					case ORDER:
					case RIGHT:
					case RPAREN:
					case RSQUARE:
					case SEMICOLON:
					case THEN:
					case WHEN:
					case WHERE:
						{
						alt127=4;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return ret;}
						NoViableAltException nvae =
							new NoViableAltException("", 127, 0, input);
						throw nvae;
					}
					switch (alt127) {
						case 1 :
							// PhoenixSQL.g:720:29: (op= comparison_op (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) ) )
							{
							// PhoenixSQL.g:720:29: (op= comparison_op (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) ) )
							// PhoenixSQL.g:720:30: op= comparison_op (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) )
							{
							pushFollow(FOLLOW_comparison_op_in_boolean_expression4651);
							op=comparison_op();
							state._fsp--;
							if (state.failed) return ret;
							// PhoenixSQL.g:720:47: (r= value_expression | ( LPAREN r= subquery_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN ) | ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN ) )
							int alt122=4;
							switch ( input.LA(1) ) {
							case ARRAY:
							case BIND_NAME:
							case CASE:
							case CAST:
							case CURRENT:
							case DECIMAL:
							case DOUBLE:
							case FALSE:
							case LONG:
							case MINUS:
							case NAME:
							case NEXT:
							case NULL:
							case NUMBER:
							case QUESTION:
							case STRING_LITERAL:
							case TRUE:
								{
								alt122=1;
								}
								break;
							case LPAREN:
								{
								int LA122_2 = input.LA(2);
								if ( (LA122_2==ARRAY||LA122_2==BIND_NAME||(LA122_2 >= CASE && LA122_2 <= CAST)||LA122_2==CURRENT||LA122_2==DECIMAL||LA122_2==DOUBLE||LA122_2==EXISTS||LA122_2==FALSE||(LA122_2 >= LONG && LA122_2 <= LPAREN)||LA122_2==MINUS||(LA122_2 >= NAME && LA122_2 <= NEXT)||(LA122_2 >= NOT && LA122_2 <= NULL)||LA122_2==NUMBER||LA122_2==QUESTION||LA122_2==STRING_LITERAL||LA122_2==TRUE) ) {
									alt122=1;
								}
								else if ( (LA122_2==SELECT) ) {
									alt122=2;
								}

								else {
									if (state.backtracking>0) {state.failed=true; return ret;}
									int nvaeMark = input.mark();
									try {
										input.consume();
										NoViableAltException nvae =
											new NoViableAltException("", 122, 2, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

								}
								break;
							case ALL:
								{
								int LA122_3 = input.LA(2);
								if ( (LA122_3==LPAREN) ) {
									int LA122_6 = input.LA(3);
									if ( (LA122_6==ARRAY||LA122_6==BIND_NAME||(LA122_6 >= CASE && LA122_6 <= CAST)||LA122_6==CURRENT||LA122_6==DECIMAL||LA122_6==DOUBLE||LA122_6==FALSE||(LA122_6 >= LONG && LA122_6 <= LPAREN)||LA122_6==MINUS||(LA122_6 >= NAME && LA122_6 <= NEXT)||LA122_6==NULL||LA122_6==NUMBER||LA122_6==QUESTION||LA122_6==STRING_LITERAL||LA122_6==TRUE) ) {
										alt122=3;
									}
									else if ( (LA122_6==SELECT) ) {
										alt122=4;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return ret;}
										int nvaeMark = input.mark();
										try {
											for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
												input.consume();
											}
											NoViableAltException nvae =
												new NoViableAltException("", 122, 6, input);
											throw nvae;
										} finally {
											input.rewind(nvaeMark);
										}
									}

								}

								else {
									if (state.backtracking>0) {state.failed=true; return ret;}
									int nvaeMark = input.mark();
									try {
										input.consume();
										NoViableAltException nvae =
											new NoViableAltException("", 122, 3, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

								}
								break;
							case ANY:
								{
								int LA122_4 = input.LA(2);
								if ( (LA122_4==LPAREN) ) {
									int LA122_6 = input.LA(3);
									if ( (LA122_6==ARRAY||LA122_6==BIND_NAME||(LA122_6 >= CASE && LA122_6 <= CAST)||LA122_6==CURRENT||LA122_6==DECIMAL||LA122_6==DOUBLE||LA122_6==FALSE||(LA122_6 >= LONG && LA122_6 <= LPAREN)||LA122_6==MINUS||(LA122_6 >= NAME && LA122_6 <= NEXT)||LA122_6==NULL||LA122_6==NUMBER||LA122_6==QUESTION||LA122_6==STRING_LITERAL||LA122_6==TRUE) ) {
										alt122=3;
									}
									else if ( (LA122_6==SELECT) ) {
										alt122=4;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return ret;}
										int nvaeMark = input.mark();
										try {
											for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
												input.consume();
											}
											NoViableAltException nvae =
												new NoViableAltException("", 122, 6, input);
											throw nvae;
										} finally {
											input.rewind(nvaeMark);
										}
									}

								}

								else {
									if (state.backtracking>0) {state.failed=true; return ret;}
									int nvaeMark = input.mark();
									try {
										input.consume();
										NoViableAltException nvae =
											new NoViableAltException("", 122, 4, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

								}
								break;
							default:
								if (state.backtracking>0) {state.failed=true; return ret;}
								NoViableAltException nvae =
									new NoViableAltException("", 122, 0, input);
								throw nvae;
							}
							switch (alt122) {
								case 1 :
									// PhoenixSQL.g:720:48: r= value_expression
									{
									pushFollow(FOLLOW_value_expression_in_boolean_expression4656);
									r=value_expression();
									state._fsp--;
									if (state.failed) return ret;
									}
									break;
								case 2 :
									// PhoenixSQL.g:720:69: ( LPAREN r= subquery_expression RPAREN )
									{
									// PhoenixSQL.g:720:69: ( LPAREN r= subquery_expression RPAREN )
									// PhoenixSQL.g:720:70: LPAREN r= subquery_expression RPAREN
									{
									match(input,LPAREN,FOLLOW_LPAREN_in_boolean_expression4661); if (state.failed) return ret;
									pushFollow(FOLLOW_subquery_expression_in_boolean_expression4665);
									r=subquery_expression();
									state._fsp--;
									if (state.failed) return ret;
									match(input,RPAREN,FOLLOW_RPAREN_in_boolean_expression4667); if (state.failed) return ret;
									}

									}
									break;
								case 3 :
									// PhoenixSQL.g:720:109: ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN )
									{
									// PhoenixSQL.g:720:109: ( (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN )
									// PhoenixSQL.g:720:110: (all= ALL |any= ANY ) LPAREN r= value_expression RPAREN
									{
									// PhoenixSQL.g:720:110: (all= ALL |any= ANY )
									int alt120=2;
									int LA120_0 = input.LA(1);
									if ( (LA120_0==ALL) ) {
										alt120=1;
									}
									else if ( (LA120_0==ANY) ) {
										alt120=2;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return ret;}
										NoViableAltException nvae =
											new NoViableAltException("", 120, 0, input);
										throw nvae;
									}

									switch (alt120) {
										case 1 :
											// PhoenixSQL.g:720:111: all= ALL
											{
											all=(Token)match(input,ALL,FOLLOW_ALL_in_boolean_expression4676); if (state.failed) return ret;
											}
											break;
										case 2 :
											// PhoenixSQL.g:720:121: any= ANY
											{
											any=(Token)match(input,ANY,FOLLOW_ANY_in_boolean_expression4682); if (state.failed) return ret;
											}
											break;

									}

									match(input,LPAREN,FOLLOW_LPAREN_in_boolean_expression4685); if (state.failed) return ret;
									pushFollow(FOLLOW_value_expression_in_boolean_expression4689);
									r=value_expression();
									state._fsp--;
									if (state.failed) return ret;
									match(input,RPAREN,FOLLOW_RPAREN_in_boolean_expression4691); if (state.failed) return ret;
									}

									}
									break;
								case 4 :
									// PhoenixSQL.g:720:167: ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN )
									{
									// PhoenixSQL.g:720:167: ( (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN )
									// PhoenixSQL.g:720:168: (all= ALL |any= ANY ) LPAREN r= subquery_expression RPAREN
									{
									// PhoenixSQL.g:720:168: (all= ALL |any= ANY )
									int alt121=2;
									int LA121_0 = input.LA(1);
									if ( (LA121_0==ALL) ) {
										alt121=1;
									}
									else if ( (LA121_0==ANY) ) {
										alt121=2;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return ret;}
										NoViableAltException nvae =
											new NoViableAltException("", 121, 0, input);
										throw nvae;
									}

									switch (alt121) {
										case 1 :
											// PhoenixSQL.g:720:169: all= ALL
											{
											all=(Token)match(input,ALL,FOLLOW_ALL_in_boolean_expression4701); if (state.failed) return ret;
											}
											break;
										case 2 :
											// PhoenixSQL.g:720:179: any= ANY
											{
											any=(Token)match(input,ANY,FOLLOW_ANY_in_boolean_expression4707); if (state.failed) return ret;
											}
											break;

									}

									match(input,LPAREN,FOLLOW_LPAREN_in_boolean_expression4710); if (state.failed) return ret;
									pushFollow(FOLLOW_subquery_expression_in_boolean_expression4714);
									r=subquery_expression();
									state._fsp--;
									if (state.failed) return ret;
									match(input,RPAREN,FOLLOW_RPAREN_in_boolean_expression4716); if (state.failed) return ret;
									}

									}
									break;

							}

							if ( state.backtracking==0 ) {ret = all != null ? factory.wrapInAll(op, l, r) : any != null ? factory.wrapInAny(op, l, r) : factory.comparison(op,l,r); }
							}

							}
							break;
						case 2 :
							// PhoenixSQL.g:721:22: ( IS (n= NOT )? NULL )
							{
							// PhoenixSQL.g:721:22: ( IS (n= NOT )? NULL )
							// PhoenixSQL.g:721:23: IS (n= NOT )? NULL
							{
							match(input,IS,FOLLOW_IS_in_boolean_expression4746); if (state.failed) return ret;
							// PhoenixSQL.g:721:27: (n= NOT )?
							int alt123=2;
							int LA123_0 = input.LA(1);
							if ( (LA123_0==NOT) ) {
								alt123=1;
							}
							switch (alt123) {
								case 1 :
									// PhoenixSQL.g:721:27: n= NOT
									{
									n=(Token)match(input,NOT,FOLLOW_NOT_in_boolean_expression4750); if (state.failed) return ret;
									}
									break;

							}

							match(input,NULL,FOLLOW_NULL_in_boolean_expression4753); if (state.failed) return ret;
							if ( state.backtracking==0 ) {ret = factory.isNull(l,n!=null); }
							}

							}
							break;
						case 3 :
							// PhoenixSQL.g:722:22: ( (n= NOT )? ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) ) )
							{
							// PhoenixSQL.g:722:22: ( (n= NOT )? ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) ) )
							// PhoenixSQL.g:722:24: (n= NOT )? ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) )
							{
							// PhoenixSQL.g:722:25: (n= NOT )?
							int alt124=2;
							int LA124_0 = input.LA(1);
							if ( (LA124_0==NOT) ) {
								alt124=1;
							}
							switch (alt124) {
								case 1 :
									// PhoenixSQL.g:722:25: n= NOT
									{
									n=(Token)match(input,NOT,FOLLOW_NOT_in_boolean_expression4784); if (state.failed) return ret;
									}
									break;

							}

							// PhoenixSQL.g:722:31: ( ( LIKE r= value_expression ) | ( ILIKE r= value_expression ) | ( BETWEEN r1= value_expression AND r2= value_expression ) | ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) ) )
							int alt126=4;
							switch ( input.LA(1) ) {
							case LIKE:
								{
								alt126=1;
								}
								break;
							case ILIKE:
								{
								alt126=2;
								}
								break;
							case BETWEEN:
								{
								alt126=3;
								}
								break;
							case IN:
								{
								alt126=4;
								}
								break;
							default:
								if (state.backtracking>0) {state.failed=true; return ret;}
								NoViableAltException nvae =
									new NoViableAltException("", 126, 0, input);
								throw nvae;
							}
							switch (alt126) {
								case 1 :
									// PhoenixSQL.g:722:32: ( LIKE r= value_expression )
									{
									// PhoenixSQL.g:722:32: ( LIKE r= value_expression )
									// PhoenixSQL.g:722:33: LIKE r= value_expression
									{
									match(input,LIKE,FOLLOW_LIKE_in_boolean_expression4789); if (state.failed) return ret;
									pushFollow(FOLLOW_value_expression_in_boolean_expression4793);
									r=value_expression();
									state._fsp--;
									if (state.failed) return ret;
									if ( state.backtracking==0 ) {ret = factory.like(l,r,n!=null,LikeType.CASE_SENSITIVE); }
									}

									}
									break;
								case 2 :
									// PhoenixSQL.g:723:32: ( ILIKE r= value_expression )
									{
									// PhoenixSQL.g:723:32: ( ILIKE r= value_expression )
									// PhoenixSQL.g:723:33: ILIKE r= value_expression
									{
									match(input,ILIKE,FOLLOW_ILIKE_in_boolean_expression4831); if (state.failed) return ret;
									pushFollow(FOLLOW_value_expression_in_boolean_expression4835);
									r=value_expression();
									state._fsp--;
									if (state.failed) return ret;
									if ( state.backtracking==0 ) {ret = factory.like(l,r,n!=null,LikeType.CASE_INSENSITIVE); }
									}

									}
									break;
								case 3 :
									// PhoenixSQL.g:724:32: ( BETWEEN r1= value_expression AND r2= value_expression )
									{
									// PhoenixSQL.g:724:32: ( BETWEEN r1= value_expression AND r2= value_expression )
									// PhoenixSQL.g:724:33: BETWEEN r1= value_expression AND r2= value_expression
									{
									match(input,BETWEEN,FOLLOW_BETWEEN_in_boolean_expression4873); if (state.failed) return ret;
									pushFollow(FOLLOW_value_expression_in_boolean_expression4877);
									r1=value_expression();
									state._fsp--;
									if (state.failed) return ret;
									match(input,AND,FOLLOW_AND_in_boolean_expression4879); if (state.failed) return ret;
									pushFollow(FOLLOW_value_expression_in_boolean_expression4883);
									r2=value_expression();
									state._fsp--;
									if (state.failed) return ret;
									if ( state.backtracking==0 ) {ret = factory.between(l,r1,r2,n!=null); }
									}

									}
									break;
								case 4 :
									// PhoenixSQL.g:725:32: ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) )
									{
									// PhoenixSQL.g:725:32: ( ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) ) )
									// PhoenixSQL.g:725:33: ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) )
									{
									// PhoenixSQL.g:725:33: ( IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) ) )
									// PhoenixSQL.g:725:34: IN ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) )
									{
									match(input,IN,FOLLOW_IN_in_boolean_expression4922); if (state.failed) return ret;
									// PhoenixSQL.g:725:37: ( (r= bind_expression ) | ( LPAREN r= subquery_expression RPAREN ) | ( LPAREN v= one_or_more_expressions RPAREN ) )
									int alt125=3;
									int LA125_0 = input.LA(1);
									if ( (LA125_0==BIND_NAME||LA125_0==QUESTION) ) {
										alt125=1;
									}
									else if ( (LA125_0==LPAREN) ) {
										int LA125_2 = input.LA(2);
										if ( (LA125_2==SELECT) ) {
											alt125=2;
										}
										else if ( (LA125_2==ARRAY||LA125_2==BIND_NAME||(LA125_2 >= CASE && LA125_2 <= CAST)||LA125_2==CURRENT||LA125_2==DECIMAL||LA125_2==DOUBLE||LA125_2==EXISTS||LA125_2==FALSE||(LA125_2 >= LONG && LA125_2 <= LPAREN)||LA125_2==MINUS||(LA125_2 >= NAME && LA125_2 <= NEXT)||(LA125_2 >= NOT && LA125_2 <= NULL)||LA125_2==NUMBER||LA125_2==QUESTION||LA125_2==STRING_LITERAL||LA125_2==TRUE) ) {
											alt125=3;
										}

										else {
											if (state.backtracking>0) {state.failed=true; return ret;}
											int nvaeMark = input.mark();
											try {
												input.consume();
												NoViableAltException nvae =
													new NoViableAltException("", 125, 2, input);
												throw nvae;
											} finally {
												input.rewind(nvaeMark);
											}
										}

									}

									else {
										if (state.backtracking>0) {state.failed=true; return ret;}
										NoViableAltException nvae =
											new NoViableAltException("", 125, 0, input);
										throw nvae;
									}

									switch (alt125) {
										case 1 :
											// PhoenixSQL.g:725:38: (r= bind_expression )
											{
											// PhoenixSQL.g:725:38: (r= bind_expression )
											// PhoenixSQL.g:725:39: r= bind_expression
											{
											pushFollow(FOLLOW_bind_expression_in_boolean_expression4928);
											r=bind_expression();
											state._fsp--;
											if (state.failed) return ret;
											if ( state.backtracking==0 ) {ret = factory.inList(Arrays.asList(l,r),n!=null);}
											}

											}
											break;
										case 2 :
											// PhoenixSQL.g:726:35: ( LPAREN r= subquery_expression RPAREN )
											{
											// PhoenixSQL.g:726:35: ( LPAREN r= subquery_expression RPAREN )
											// PhoenixSQL.g:726:36: LPAREN r= subquery_expression RPAREN
											{
											match(input,LPAREN,FOLLOW_LPAREN_in_boolean_expression4969); if (state.failed) return ret;
											pushFollow(FOLLOW_subquery_expression_in_boolean_expression4973);
											r=subquery_expression();
											state._fsp--;
											if (state.failed) return ret;
											match(input,RPAREN,FOLLOW_RPAREN_in_boolean_expression4975); if (state.failed) return ret;
											if ( state.backtracking==0 ) {ret = factory.in(l,r,n!=null);}
											}

											}
											break;
										case 3 :
											// PhoenixSQL.g:727:35: ( LPAREN v= one_or_more_expressions RPAREN )
											{
											// PhoenixSQL.g:727:35: ( LPAREN v= one_or_more_expressions RPAREN )
											// PhoenixSQL.g:727:36: LPAREN v= one_or_more_expressions RPAREN
											{
											match(input,LPAREN,FOLLOW_LPAREN_in_boolean_expression5016); if (state.failed) return ret;
											pushFollow(FOLLOW_one_or_more_expressions_in_boolean_expression5020);
											v=one_or_more_expressions();
											state._fsp--;
											if (state.failed) return ret;
											match(input,RPAREN,FOLLOW_RPAREN_in_boolean_expression5022); if (state.failed) return ret;
											if ( state.backtracking==0 ) {List il = new ArrayList(v.size() + 1); il.add(l); il.addAll(v); ret = factory.inList(il,n!=null);}
											}

											}
											break;

									}

									}

									}

									}
									break;

							}

							}

							}
							break;
						case 4 :
							// PhoenixSQL.g:730:23: 
							{
							if ( state.backtracking==0 ) { ret = l; }
							}
							break;

					}

					}
					break;
				case 2 :
					// PhoenixSQL.g:731:9: EXISTS LPAREN s= subquery_expression RPAREN
					{
					match(input,EXISTS,FOLLOW_EXISTS_in_boolean_expression5122); if (state.failed) return ret;
					match(input,LPAREN,FOLLOW_LPAREN_in_boolean_expression5124); if (state.failed) return ret;
					pushFollow(FOLLOW_subquery_expression_in_boolean_expression5128);
					s=subquery_expression();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_boolean_expression5130); if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.exists(s,false);}
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "boolean_expression"



	// $ANTLR start "bind_expression"
	// PhoenixSQL.g:734:1: bind_expression returns [BindParseNode ret] : b= bind_name ;
	public final BindParseNode bind_expression() throws RecognitionException {
		BindParseNode ret = null;


		String b =null;

		try {
			// PhoenixSQL.g:735:5: (b= bind_name )
			// PhoenixSQL.g:735:9: b= bind_name
			{
			pushFollow(FOLLOW_bind_name_in_bind_expression5158);
			b=bind_name();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = factory.bind(b); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "bind_expression"



	// $ANTLR start "value_expression"
	// PhoenixSQL.g:738:1: value_expression returns [ParseNode ret] : i= add_expression ;
	public final ParseNode value_expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode i =null;

		try {
			// PhoenixSQL.g:739:5: (i= add_expression )
			// PhoenixSQL.g:739:9: i= add_expression
			{
			pushFollow(FOLLOW_add_expression_in_value_expression5189);
			i=add_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = i; }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "value_expression"



	// $ANTLR start "add_expression"
	// PhoenixSQL.g:742:1: add_expression returns [ParseNode ret] : i= subtract_expression ( PLUS i= subtract_expression )* ;
	public final ParseNode add_expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode i =null;

		List l = new ArrayList(4); 
		try {
			// PhoenixSQL.g:744:5: (i= subtract_expression ( PLUS i= subtract_expression )* )
			// PhoenixSQL.g:744:9: i= subtract_expression ( PLUS i= subtract_expression )*
			{
			pushFollow(FOLLOW_subtract_expression_in_add_expression5220);
			i=subtract_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {l.add(i);}
			// PhoenixSQL.g:744:43: ( PLUS i= subtract_expression )*
			loop129:
			while (true) {
				int alt129=2;
				int LA129_0 = input.LA(1);
				if ( (LA129_0==PLUS) ) {
					alt129=1;
				}

				switch (alt129) {
				case 1 :
					// PhoenixSQL.g:744:44: PLUS i= subtract_expression
					{
					match(input,PLUS,FOLLOW_PLUS_in_add_expression5225); if (state.failed) return ret;
					pushFollow(FOLLOW_subtract_expression_in_add_expression5229);
					i=subtract_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {l.add(i);}
					}
					break;

				default :
					break loop129;
				}
			}

			if ( state.backtracking==0 ) { ret = l.size() == 1 ? l.get(0) : factory.add(l); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "add_expression"



	// $ANTLR start "subtract_expression"
	// PhoenixSQL.g:747:1: subtract_expression returns [ParseNode ret] : i= concat_expression ( MINUS i= concat_expression )* ;
	public final ParseNode subtract_expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode i =null;

		List l = new ArrayList(4); 
		try {
			// PhoenixSQL.g:749:5: (i= concat_expression ( MINUS i= concat_expression )* )
			// PhoenixSQL.g:749:9: i= concat_expression ( MINUS i= concat_expression )*
			{
			pushFollow(FOLLOW_concat_expression_in_subtract_expression5264);
			i=concat_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {l.add(i);}
			// PhoenixSQL.g:749:41: ( MINUS i= concat_expression )*
			loop130:
			while (true) {
				int alt130=2;
				int LA130_0 = input.LA(1);
				if ( (LA130_0==MINUS) ) {
					alt130=1;
				}

				switch (alt130) {
				case 1 :
					// PhoenixSQL.g:749:42: MINUS i= concat_expression
					{
					match(input,MINUS,FOLLOW_MINUS_in_subtract_expression5269); if (state.failed) return ret;
					pushFollow(FOLLOW_concat_expression_in_subtract_expression5273);
					i=concat_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {l.add(i);}
					}
					break;

				default :
					break loop130;
				}
			}

			if ( state.backtracking==0 ) { ret = l.size() == 1 ? l.get(0) : factory.subtract(l); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "subtract_expression"



	// $ANTLR start "concat_expression"
	// PhoenixSQL.g:752:1: concat_expression returns [ParseNode ret] : i= multiply_divide_modulo_expression ( CONCAT i= multiply_divide_modulo_expression )* ;
	public final ParseNode concat_expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode i =null;

		List l = new ArrayList(4); 
		try {
			// PhoenixSQL.g:754:5: (i= multiply_divide_modulo_expression ( CONCAT i= multiply_divide_modulo_expression )* )
			// PhoenixSQL.g:754:9: i= multiply_divide_modulo_expression ( CONCAT i= multiply_divide_modulo_expression )*
			{
			pushFollow(FOLLOW_multiply_divide_modulo_expression_in_concat_expression5308);
			i=multiply_divide_modulo_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {l.add(i);}
			// PhoenixSQL.g:754:57: ( CONCAT i= multiply_divide_modulo_expression )*
			loop131:
			while (true) {
				int alt131=2;
				int LA131_0 = input.LA(1);
				if ( (LA131_0==CONCAT) ) {
					alt131=1;
				}

				switch (alt131) {
				case 1 :
					// PhoenixSQL.g:754:58: CONCAT i= multiply_divide_modulo_expression
					{
					match(input,CONCAT,FOLLOW_CONCAT_in_concat_expression5313); if (state.failed) return ret;
					pushFollow(FOLLOW_multiply_divide_modulo_expression_in_concat_expression5317);
					i=multiply_divide_modulo_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {l.add(i);}
					}
					break;

				default :
					break loop131;
				}
			}

			if ( state.backtracking==0 ) { ret = l.size() == 1 ? l.get(0) : factory.concat(l); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "concat_expression"



	// $ANTLR start "multiply_divide_modulo_expression"
	// PhoenixSQL.g:757:1: multiply_divide_modulo_expression returns [ParseNode ret] : i= negate_expression (op= ( ASTERISK | DIVIDE | PERCENT ) rhs= negate_expression )* ;
	public final ParseNode multiply_divide_modulo_expression() throws RecognitionException {
		ParseNode ret = null;


		Token op=null;
		ParseNode i =null;
		ParseNode rhs =null;

		ParseNode lhs = null; List l;
		try {
			// PhoenixSQL.g:759:5: (i= negate_expression (op= ( ASTERISK | DIVIDE | PERCENT ) rhs= negate_expression )* )
			// PhoenixSQL.g:759:9: i= negate_expression (op= ( ASTERISK | DIVIDE | PERCENT ) rhs= negate_expression )*
			{
			pushFollow(FOLLOW_negate_expression_in_multiply_divide_modulo_expression5352);
			i=negate_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {lhs = i;}
			// PhoenixSQL.g:760:9: (op= ( ASTERISK | DIVIDE | PERCENT ) rhs= negate_expression )*
			loop132:
			while (true) {
				int alt132=2;
				int LA132_0 = input.LA(1);
				if ( (LA132_0==ASTERISK||LA132_0==DIVIDE||LA132_0==PERCENT) ) {
					alt132=1;
				}

				switch (alt132) {
				case 1 :
					// PhoenixSQL.g:760:10: op= ( ASTERISK | DIVIDE | PERCENT ) rhs= negate_expression
					{
					op=input.LT(1);
					if ( input.LA(1)==ASTERISK||input.LA(1)==DIVIDE||input.LA(1)==PERCENT ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_negate_expression_in_multiply_divide_modulo_expression5382);
					rhs=negate_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {
					            l = Arrays.asList(lhs, rhs); 
					            // determine the expression type based on the operator found
					            lhs = op.getType() == ASTERISK ? factory.multiply(l)
					                : op.getType() == DIVIDE   ? factory.divide(l)
					                : factory.modulus(l);
					            }
					}
					break;

				default :
					break loop132;
				}
			}

			if ( state.backtracking==0 ) { ret = lhs; }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "multiply_divide_modulo_expression"



	// $ANTLR start "negate_expression"
	// PhoenixSQL.g:771:1: negate_expression returns [ParseNode ret] : (m= MINUS )? e= array_expression ;
	public final ParseNode negate_expression() throws RecognitionException {
		ParseNode ret = null;


		Token m=null;
		ParseNode e =null;

		try {
			// PhoenixSQL.g:772:5: ( (m= MINUS )? e= array_expression )
			// PhoenixSQL.g:772:9: (m= MINUS )? e= array_expression
			{
			// PhoenixSQL.g:772:10: (m= MINUS )?
			int alt133=2;
			int LA133_0 = input.LA(1);
			if ( (LA133_0==MINUS) ) {
				alt133=1;
			}
			switch (alt133) {
				case 1 :
					// PhoenixSQL.g:772:10: m= MINUS
					{
					m=(Token)match(input,MINUS,FOLLOW_MINUS_in_negate_expression5430); if (state.failed) return ret;
					}
					break;

			}

			pushFollow(FOLLOW_array_expression_in_negate_expression5435);
			e=array_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = m==null ? e : factory.negate(e); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "negate_expression"



	// $ANTLR start "array_expression"
	// PhoenixSQL.g:776:1: array_expression returns [ParseNode ret] : e= term ( LSQUARE s= value_expression RSQUARE )? ;
	public final ParseNode array_expression() throws RecognitionException {
		ParseNode ret = null;


		ParseNode e =null;
		ParseNode s =null;

		try {
			// PhoenixSQL.g:777:5: (e= term ( LSQUARE s= value_expression RSQUARE )? )
			// PhoenixSQL.g:777:9: e= term ( LSQUARE s= value_expression RSQUARE )?
			{
			pushFollow(FOLLOW_term_in_array_expression5463);
			e=term();
			state._fsp--;
			if (state.failed) return ret;
			// PhoenixSQL.g:777:16: ( LSQUARE s= value_expression RSQUARE )?
			int alt134=2;
			int LA134_0 = input.LA(1);
			if ( (LA134_0==LSQUARE) ) {
				alt134=1;
			}
			switch (alt134) {
				case 1 :
					// PhoenixSQL.g:777:17: LSQUARE s= value_expression RSQUARE
					{
					match(input,LSQUARE,FOLLOW_LSQUARE_in_array_expression5466); if (state.failed) return ret;
					pushFollow(FOLLOW_value_expression_in_array_expression5470);
					s=value_expression();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RSQUARE,FOLLOW_RSQUARE_in_array_expression5472); if (state.failed) return ret;
					}
					break;

			}

			if ( state.backtracking==0 ) { if (s == null) { ret = e; } else { ret = factory.arrayElemRef(Arrays.asList(e,s)); } }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "array_expression"



	// $ANTLR start "term"
	// PhoenixSQL.g:780:1: term returns [ParseNode ret] : (e= literal_or_bind |field= identifier |ex= ARRAY LSQUARE v= one_or_more_expressions RSQUARE |tableName= table_name DOT field= identifier |field= identifier LPAREN l= zero_or_more_expressions RPAREN wg= ( WITHIN GROUP LPAREN ORDER BY l2= one_or_more_expressions (a= ASC | DESC ) RPAREN )? |field= identifier LPAREN t= ASTERISK RPAREN |field= identifier LPAREN t= DISTINCT l= zero_or_more_expressions RPAREN |e= case_statement | LPAREN l= one_or_more_expressions RPAREN | CAST LPAREN e= expression AS dt= identifier ( LPAREN length= NUMBER ( COMMA scale= NUMBER )? RPAREN )? ar= ( ARRAY | ( LSQUARE RSQUARE ) )? RPAREN | (n= NEXT | CURRENT ) VALUE FOR s= from_table_name );
	public final ParseNode term() throws RecognitionException {
		ParseNode ret = null;


		Token ex=null;
		Token a=null;
		Token wg=null;
		Token t=null;
		Token length=null;
		Token scale=null;
		Token ar=null;
		Token n=null;
		ParseNode e =null;
		String field =null;
		List v =null;
		TableName tableName =null;
		List l =null;
		List l2 =null;
		String dt =null;
		TableName s =null;

		try {
			// PhoenixSQL.g:781:5: (e= literal_or_bind |field= identifier |ex= ARRAY LSQUARE v= one_or_more_expressions RSQUARE |tableName= table_name DOT field= identifier |field= identifier LPAREN l= zero_or_more_expressions RPAREN wg= ( WITHIN GROUP LPAREN ORDER BY l2= one_or_more_expressions (a= ASC | DESC ) RPAREN )? |field= identifier LPAREN t= ASTERISK RPAREN |field= identifier LPAREN t= DISTINCT l= zero_or_more_expressions RPAREN |e= case_statement | LPAREN l= one_or_more_expressions RPAREN | CAST LPAREN e= expression AS dt= identifier ( LPAREN length= NUMBER ( COMMA scale= NUMBER )? RPAREN )? ar= ( ARRAY | ( LSQUARE RSQUARE ) )? RPAREN | (n= NEXT | CURRENT ) VALUE FOR s= from_table_name )
			int alt141=11;
			switch ( input.LA(1) ) {
			case BIND_NAME:
			case DECIMAL:
			case DOUBLE:
			case FALSE:
			case LONG:
			case NULL:
			case NUMBER:
			case QUESTION:
			case STRING_LITERAL:
			case TRUE:
				{
				alt141=1;
				}
				break;
			case NAME:
				{
				switch ( input.LA(2) ) {
				case EOF:
				case AND:
				case AS:
				case ASC:
				case ASTERISK:
				case BETWEEN:
				case CACHE:
				case COMMA:
				case CONCAT:
				case CYCLE:
				case DESC:
				case DIVIDE:
				case ELSE:
				case END:
				case EQ:
				case FROM:
				case FULL:
				case GROUP:
				case GT:
				case HAVING:
				case ILIKE:
				case IN:
				case INCREMENT:
				case INNER:
				case IS:
				case JOIN:
				case LEFT:
				case LIKE:
				case LIMIT:
				case LSQUARE:
				case LT:
				case MAXVALUE:
				case MINUS:
				case MINVALUE:
				case NAME:
				case NOEQ1:
				case NOEQ2:
				case NOT:
				case NULLS:
				case OR:
				case ORDER:
				case PERCENT:
				case PLUS:
				case RIGHT:
				case RPAREN:
				case RSQUARE:
				case SEMICOLON:
				case THEN:
				case WHEN:
				case WHERE:
					{
					alt141=2;
					}
					break;
				case DOT:
					{
					alt141=4;
					}
					break;
				case LPAREN:
					{
					switch ( input.LA(3) ) {
					case ASTERISK:
						{
						alt141=6;
						}
						break;
					case DISTINCT:
						{
						alt141=7;
						}
						break;
					case ARRAY:
					case BIND_NAME:
					case CASE:
					case CAST:
					case COMMA:
					case CURRENT:
					case DECIMAL:
					case DOUBLE:
					case EXISTS:
					case FALSE:
					case LONG:
					case LPAREN:
					case MINUS:
					case NAME:
					case NEXT:
					case NOT:
					case NULL:
					case NUMBER:
					case QUESTION:
					case RPAREN:
					case STRING_LITERAL:
					case TRUE:
						{
						alt141=5;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 141, 10, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 141, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case ARRAY:
				{
				alt141=3;
				}
				break;
			case CASE:
				{
				alt141=8;
				}
				break;
			case LPAREN:
				{
				alt141=9;
				}
				break;
			case CAST:
				{
				alt141=10;
				}
				break;
			case CURRENT:
			case NEXT:
				{
				alt141=11;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 141, 0, input);
				throw nvae;
			}
			switch (alt141) {
				case 1 :
					// PhoenixSQL.g:781:9: e= literal_or_bind
					{
					pushFollow(FOLLOW_literal_or_bind_in_term5505);
					e=literal_or_bind();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = e; }
					}
					break;
				case 2 :
					// PhoenixSQL.g:782:9: field= identifier
					{
					pushFollow(FOLLOW_identifier_in_term5519);
					field=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.column(null,field,field); }
					}
					break;
				case 3 :
					// PhoenixSQL.g:783:9: ex= ARRAY LSQUARE v= one_or_more_expressions RSQUARE
					{
					ex=(Token)match(input,ARRAY,FOLLOW_ARRAY_in_term5533); if (state.failed) return ret;
					match(input,LSQUARE,FOLLOW_LSQUARE_in_term5535); if (state.failed) return ret;
					pushFollow(FOLLOW_one_or_more_expressions_in_term5539);
					v=one_or_more_expressions();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RSQUARE,FOLLOW_RSQUARE_in_term5541); if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.upsertStmtArrayNode(v);}
					}
					break;
				case 4 :
					// PhoenixSQL.g:784:9: tableName= table_name DOT field= identifier
					{
					pushFollow(FOLLOW_table_name_in_term5555);
					tableName=table_name();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_term5557); if (state.failed) return ret;
					pushFollow(FOLLOW_identifier_in_term5561);
					field=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.column(tableName, field, field); }
					}
					break;
				case 5 :
					// PhoenixSQL.g:785:9: field= identifier LPAREN l= zero_or_more_expressions RPAREN wg= ( WITHIN GROUP LPAREN ORDER BY l2= one_or_more_expressions (a= ASC | DESC ) RPAREN )?
					{
					pushFollow(FOLLOW_identifier_in_term5575);
					field=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,LPAREN,FOLLOW_LPAREN_in_term5577); if (state.failed) return ret;
					pushFollow(FOLLOW_zero_or_more_expressions_in_term5581);
					l=zero_or_more_expressions();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_term5583); if (state.failed) return ret;
					// PhoenixSQL.g:785:70: ( WITHIN GROUP LPAREN ORDER BY l2= one_or_more_expressions (a= ASC | DESC ) RPAREN )?
					int alt136=2;
					int LA136_0 = input.LA(1);
					if ( (LA136_0==WITHIN) ) {
						alt136=1;
					}
					switch (alt136) {
						case 1 :
							// PhoenixSQL.g:785:71: WITHIN GROUP LPAREN ORDER BY l2= one_or_more_expressions (a= ASC | DESC ) RPAREN
							{
							wg=(Token)match(input,WITHIN,FOLLOW_WITHIN_in_term5588); if (state.failed) return ret;
							wg=(Token)match(input,GROUP,FOLLOW_GROUP_in_term5590); if (state.failed) return ret;
							wg=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_term5592); if (state.failed) return ret;
							wg=(Token)match(input,ORDER,FOLLOW_ORDER_in_term5594); if (state.failed) return ret;
							wg=(Token)match(input,BY,FOLLOW_BY_in_term5596); if (state.failed) return ret;
							pushFollow(FOLLOW_one_or_more_expressions_in_term5600);
							l2=one_or_more_expressions();
							state._fsp--;
							if (state.failed) return ret;
							// PhoenixSQL.g:785:127: (a= ASC | DESC )
							int alt135=2;
							int LA135_0 = input.LA(1);
							if ( (LA135_0==ASC) ) {
								alt135=1;
							}
							else if ( (LA135_0==DESC) ) {
								alt135=2;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return ret;}
								NoViableAltException nvae =
									new NoViableAltException("", 135, 0, input);
								throw nvae;
							}

							switch (alt135) {
								case 1 :
									// PhoenixSQL.g:785:128: a= ASC
									{
									a=(Token)match(input,ASC,FOLLOW_ASC_in_term5605); if (state.failed) return ret;
									}
									break;
								case 2 :
									// PhoenixSQL.g:785:136: DESC
									{
									wg=(Token)match(input,DESC,FOLLOW_DESC_in_term5609); if (state.failed) return ret;
									}
									break;

							}

							wg=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_term5612); if (state.failed) return ret;
							}
							break;

					}

					if ( state.backtracking==0 ) {
					            FunctionParseNode f = wg==null ? factory.function(field, l) : factory.function(field,l,l2,a!=null);
					            contextStack.peek().setAggregate(f.isAggregate());
					            ret = f;
					        }
					}
					break;
				case 6 :
					// PhoenixSQL.g:791:9: field= identifier LPAREN t= ASTERISK RPAREN
					{
					pushFollow(FOLLOW_identifier_in_term5637);
					field=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,LPAREN,FOLLOW_LPAREN_in_term5639); if (state.failed) return ret;
					t=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_term5643); if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_term5645); if (state.failed) return ret;
					if ( state.backtracking==0 ) {
					            if (!isCountFunction(field)) {
					                throwRecognitionException(t); 
					            }
					            FunctionParseNode f = factory.function(field, LiteralParseNode.STAR);
					            contextStack.peek().setAggregate(f.isAggregate()); 
					            ret = f;
					        }
					}
					break;
				case 7 :
					// PhoenixSQL.g:800:9: field= identifier LPAREN t= DISTINCT l= zero_or_more_expressions RPAREN
					{
					pushFollow(FOLLOW_identifier_in_term5669);
					field=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,LPAREN,FOLLOW_LPAREN_in_term5671); if (state.failed) return ret;
					t=(Token)match(input,DISTINCT,FOLLOW_DISTINCT_in_term5675); if (state.failed) return ret;
					pushFollow(FOLLOW_zero_or_more_expressions_in_term5679);
					l=zero_or_more_expressions();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_term5681); if (state.failed) return ret;
					if ( state.backtracking==0 ) {
					            FunctionParseNode f = factory.functionDistinct(field, l);
					            contextStack.peek().setAggregate(f.isAggregate());
					            ret = f;
					        }
					}
					break;
				case 8 :
					// PhoenixSQL.g:806:9: e= case_statement
					{
					pushFollow(FOLLOW_case_statement_in_term5704);
					e=case_statement();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = e; }
					}
					break;
				case 9 :
					// PhoenixSQL.g:807:9: LPAREN l= one_or_more_expressions RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_term5716); if (state.failed) return ret;
					pushFollow(FOLLOW_one_or_more_expressions_in_term5720);
					l=one_or_more_expressions();
					state._fsp--;
					if (state.failed) return ret;
					match(input,RPAREN,FOLLOW_RPAREN_in_term5722); if (state.failed) return ret;
					if ( state.backtracking==0 ) { 
					    		if(l.size() == 1) {
					    			ret = l.get(0);
					    		}	
					    		else {
					    			ret = factory.rowValueConstructor(l);
					    		}	 
					    	}
					}
					break;
				case 10 :
					// PhoenixSQL.g:816:9: CAST LPAREN e= expression AS dt= identifier ( LPAREN length= NUMBER ( COMMA scale= NUMBER )? RPAREN )? ar= ( ARRAY | ( LSQUARE RSQUARE ) )? RPAREN
					{
					match(input,CAST,FOLLOW_CAST_in_term5740); if (state.failed) return ret;
					match(input,LPAREN,FOLLOW_LPAREN_in_term5742); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_term5746);
					e=expression();
					state._fsp--;
					if (state.failed) return ret;
					match(input,AS,FOLLOW_AS_in_term5748); if (state.failed) return ret;
					pushFollow(FOLLOW_identifier_in_term5752);
					dt=identifier();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:816:51: ( LPAREN length= NUMBER ( COMMA scale= NUMBER )? RPAREN )?
					int alt138=2;
					int LA138_0 = input.LA(1);
					if ( (LA138_0==LPAREN) ) {
						alt138=1;
					}
					switch (alt138) {
						case 1 :
							// PhoenixSQL.g:816:52: LPAREN length= NUMBER ( COMMA scale= NUMBER )? RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_term5755); if (state.failed) return ret;
							length=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_term5759); if (state.failed) return ret;
							// PhoenixSQL.g:816:73: ( COMMA scale= NUMBER )?
							int alt137=2;
							int LA137_0 = input.LA(1);
							if ( (LA137_0==COMMA) ) {
								alt137=1;
							}
							switch (alt137) {
								case 1 :
									// PhoenixSQL.g:816:74: COMMA scale= NUMBER
									{
									match(input,COMMA,FOLLOW_COMMA_in_term5762); if (state.failed) return ret;
									scale=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_term5766); if (state.failed) return ret;
									}
									break;

							}

							match(input,RPAREN,FOLLOW_RPAREN_in_term5770); if (state.failed) return ret;
							}
							break;

					}

					// PhoenixSQL.g:816:107: ( ARRAY | ( LSQUARE RSQUARE ) )?
					int alt139=3;
					int LA139_0 = input.LA(1);
					if ( (LA139_0==ARRAY) ) {
						alt139=1;
					}
					else if ( (LA139_0==LSQUARE) ) {
						alt139=2;
					}
					switch (alt139) {
						case 1 :
							// PhoenixSQL.g:816:108: ARRAY
							{
							ar=(Token)match(input,ARRAY,FOLLOW_ARRAY_in_term5777); if (state.failed) return ret;
							}
							break;
						case 2 :
							// PhoenixSQL.g:816:116: ( LSQUARE RSQUARE )
							{
							// PhoenixSQL.g:816:116: ( LSQUARE RSQUARE )
							// PhoenixSQL.g:816:117: LSQUARE RSQUARE
							{
							ar=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_term5782); if (state.failed) return ret;
							ar=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_term5784); if (state.failed) return ret;
							}

							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_term5789); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.cast(e, dt,
					                     length == null ? null : Integer.parseInt(length.getText()),
					                     scale == null ? null : Integer.parseInt(scale.getText()),
					                     ar!=null);
					        }
					}
					break;
				case 11 :
					// PhoenixSQL.g:822:9: (n= NEXT | CURRENT ) VALUE FOR s= from_table_name
					{
					// PhoenixSQL.g:822:9: (n= NEXT | CURRENT )
					int alt140=2;
					int LA140_0 = input.LA(1);
					if ( (LA140_0==NEXT) ) {
						alt140=1;
					}
					else if ( (LA140_0==CURRENT) ) {
						alt140=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						NoViableAltException nvae =
							new NoViableAltException("", 140, 0, input);
						throw nvae;
					}

					switch (alt140) {
						case 1 :
							// PhoenixSQL.g:822:10: n= NEXT
							{
							n=(Token)match(input,NEXT,FOLLOW_NEXT_in_term5812); if (state.failed) return ret;
							}
							break;
						case 2 :
							// PhoenixSQL.g:822:19: CURRENT
							{
							match(input,CURRENT,FOLLOW_CURRENT_in_term5816); if (state.failed) return ret;
							}
							break;

					}

					match(input,VALUE,FOLLOW_VALUE_in_term5819); if (state.failed) return ret;
					match(input,FOR,FOLLOW_FOR_in_term5821); if (state.failed) return ret;
					pushFollow(FOLLOW_from_table_name_in_term5825);
					s=from_table_name();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { contextStack.peek().hasSequences(true);
					          ret = n==null ? factory.currentValueFor(s) : factory.nextValueFor(s); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "term"



	// $ANTLR start "one_or_more_expressions"
	// PhoenixSQL.g:827:1: one_or_more_expressions returns [List ret] : e= expression ( COMMA e= expression )* ;
	public final List one_or_more_expressions() throws RecognitionException {
		List ret = null;


		ParseNode e =null;

		ret = new ArrayList(); 
		try {
			// PhoenixSQL.g:829:5: (e= expression ( COMMA e= expression )* )
			// PhoenixSQL.g:829:8: e= expression ( COMMA e= expression )*
			{
			pushFollow(FOLLOW_expression_in_one_or_more_expressions5870);
			e=expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(e);}
			// PhoenixSQL.g:829:39: ( COMMA e= expression )*
			loop142:
			while (true) {
				int alt142=2;
				int LA142_0 = input.LA(1);
				if ( (LA142_0==COMMA) ) {
					alt142=1;
				}

				switch (alt142) {
				case 1 :
					// PhoenixSQL.g:829:40: COMMA e= expression
					{
					match(input,COMMA,FOLLOW_COMMA_in_one_or_more_expressions5876); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_one_or_more_expressions5882);
					e=expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(e);}
					}
					break;

				default :
					break loop142;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "one_or_more_expressions"



	// $ANTLR start "zero_or_more_expressions"
	// PhoenixSQL.g:832:1: zero_or_more_expressions returns [List ret] : (v= expression )? ( COMMA v= expression )* ;
	public final List zero_or_more_expressions() throws RecognitionException {
		List ret = null;


		ParseNode v =null;

		ret = new ArrayList(); 
		try {
			// PhoenixSQL.g:834:5: ( (v= expression )? ( COMMA v= expression )* )
			// PhoenixSQL.g:834:8: (v= expression )? ( COMMA v= expression )*
			{
			// PhoenixSQL.g:834:8: (v= expression )?
			int alt143=2;
			int LA143_0 = input.LA(1);
			if ( (LA143_0==ARRAY||LA143_0==BIND_NAME||(LA143_0 >= CASE && LA143_0 <= CAST)||LA143_0==CURRENT||LA143_0==DECIMAL||LA143_0==DOUBLE||LA143_0==EXISTS||LA143_0==FALSE||(LA143_0 >= LONG && LA143_0 <= LPAREN)||LA143_0==MINUS||(LA143_0 >= NAME && LA143_0 <= NEXT)||(LA143_0 >= NOT && LA143_0 <= NULL)||LA143_0==NUMBER||LA143_0==QUESTION||LA143_0==STRING_LITERAL||LA143_0==TRUE) ) {
				alt143=1;
			}
			switch (alt143) {
				case 1 :
					// PhoenixSQL.g:834:9: v= expression
					{
					pushFollow(FOLLOW_expression_in_zero_or_more_expressions5914);
					v=expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(v);}
					}
					break;

			}

			// PhoenixSQL.g:834:42: ( COMMA v= expression )*
			loop144:
			while (true) {
				int alt144=2;
				int LA144_0 = input.LA(1);
				if ( (LA144_0==COMMA) ) {
					alt144=1;
				}

				switch (alt144) {
				case 1 :
					// PhoenixSQL.g:834:43: COMMA v= expression
					{
					match(input,COMMA,FOLLOW_COMMA_in_zero_or_more_expressions5922); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_zero_or_more_expressions5928);
					v=expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(v);}
					}
					break;

				default :
					break loop144;
				}
			}

			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "zero_or_more_expressions"



	// $ANTLR start "value_expression_list"
	// PhoenixSQL.g:837:1: value_expression_list returns [List ret] : LPAREN e= value_expression ( COMMA e= value_expression )* RPAREN ;
	public final List value_expression_list() throws RecognitionException {
		List ret = null;


		ParseNode e =null;

		ret = new ArrayList(); 
		try {
			// PhoenixSQL.g:839:5: ( LPAREN e= value_expression ( COMMA e= value_expression )* RPAREN )
			// PhoenixSQL.g:839:8: LPAREN e= value_expression ( COMMA e= value_expression )* RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_value_expression_list5955); if (state.failed) return ret;
			pushFollow(FOLLOW_value_expression_in_value_expression_list5961);
			e=value_expression();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret.add(e);}
			// PhoenixSQL.g:839:52: ( COMMA e= value_expression )*
			loop145:
			while (true) {
				int alt145=2;
				int LA145_0 = input.LA(1);
				if ( (LA145_0==COMMA) ) {
					alt145=1;
				}

				switch (alt145) {
				case 1 :
					// PhoenixSQL.g:839:53: COMMA e= value_expression
					{
					match(input,COMMA,FOLLOW_COMMA_in_value_expression_list5967); if (state.failed) return ret;
					pushFollow(FOLLOW_value_expression_in_value_expression_list5973);
					e=value_expression();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret.add(e);}
					}
					break;

				default :
					break loop145;
				}
			}

			match(input,RPAREN,FOLLOW_RPAREN_in_value_expression_list5980); if (state.failed) return ret;
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "value_expression_list"



	// $ANTLR start "index_name"
	// PhoenixSQL.g:842:1: index_name returns [NamedNode ret] : name= identifier ;
	public final NamedNode index_name() throws RecognitionException {
		NamedNode ret = null;


		String name =null;

		try {
			// PhoenixSQL.g:843:5: (name= identifier )
			// PhoenixSQL.g:843:9: name= identifier
			{
			pushFollow(FOLLOW_identifier_in_index_name6001);
			name=identifier();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) {ret = factory.indexName(name); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "index_name"



	// $ANTLR start "table_name"
	// PhoenixSQL.g:847:1: table_name returns [TableName ret] : (t= identifier |s= identifier DOT t= identifier );
	public final TableName table_name() throws RecognitionException {
		TableName ret = null;


		String t =null;
		String s =null;

		try {
			// PhoenixSQL.g:848:5: (t= identifier |s= identifier DOT t= identifier )
			int alt146=2;
			int LA146_0 = input.LA(1);
			if ( (LA146_0==NAME) ) {
				int LA146_1 = input.LA(2);
				if ( (LA146_1==DOT) ) {
					int LA146_2 = input.LA(3);
					if ( (LA146_2==NAME) ) {
						int LA146_3 = input.LA(4);
						if ( (LA146_3==EOF||LA146_3==AND||(LA146_3 >= AS && LA146_3 <= ASTERISK)||LA146_3==BETWEEN||LA146_3==CACHE||LA146_3==COMMA||LA146_3==CONCAT||LA146_3==CYCLE||LA146_3==DESC||LA146_3==DIVIDE||(LA146_3 >= ELSE && LA146_3 <= END)||LA146_3==EQ||(LA146_3 >= FROM && LA146_3 <= HAVING)||(LA146_3 >= ILIKE && LA146_3 <= IN)||LA146_3==INCREMENT||LA146_3==INNER||(LA146_3 >= IS && LA146_3 <= JOIN)||LA146_3==LEFT||(LA146_3 >= LIKE && LA146_3 <= LIMIT)||(LA146_3 >= LSQUARE && LA146_3 <= MINVALUE)||LA146_3==NAME||(LA146_3 >= NOEQ1 && LA146_3 <= NOT)||LA146_3==NULLS||(LA146_3 >= OR && LA146_3 <= ORDER)||(LA146_3 >= PERCENT && LA146_3 <= PLUS)||(LA146_3 >= RIGHT && LA146_3 <= RSQUARE)||LA146_3==SEMICOLON||LA146_3==THEN||(LA146_3 >= WHEN && LA146_3 <= WHERE)) ) {
							alt146=1;
						}
						else if ( (LA146_3==DOT) ) {
							alt146=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return ret;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 146, 3, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return ret;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 146, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 146, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 146, 0, input);
				throw nvae;
			}

			switch (alt146) {
				case 1 :
					// PhoenixSQL.g:848:9: t= identifier
					{
					pushFollow(FOLLOW_identifier_in_table_name6029);
					t=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.table(null, t); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:849:9: s= identifier DOT t= identifier
					{
					pushFollow(FOLLOW_identifier_in_table_name6043);
					s=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_table_name6045); if (state.failed) return ret;
					pushFollow(FOLLOW_identifier_in_table_name6049);
					t=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.table(s, t); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "table_name"



	// $ANTLR start "from_table_name"
	// PhoenixSQL.g:853:1: from_table_name returns [TableName ret] : (t= identifier |s= identifier DOT t= identifier );
	public final TableName from_table_name() throws RecognitionException {
		TableName ret = null;


		String t =null;
		String s =null;

		try {
			// PhoenixSQL.g:854:5: (t= identifier |s= identifier DOT t= identifier )
			int alt147=2;
			int LA147_0 = input.LA(1);
			if ( (LA147_0==NAME) ) {
				int LA147_1 = input.LA(2);
				if ( (LA147_1==EOF||(LA147_1 >= ADD && LA147_1 <= ALL)||LA147_1==AND||(LA147_1 >= AS && LA147_1 <= ASTERISK)||LA147_1==BETWEEN||(LA147_1 >= CACHE && LA147_1 <= CASCADE)||(LA147_1 >= COLUMNS && LA147_1 <= COMMA)||LA147_1==CONCAT||LA147_1==CYCLE||LA147_1==DESC||LA147_1==DISABLE||LA147_1==DIVIDE||(LA147_1 >= DROP && LA147_1 <= END)||LA147_1==EQ||(LA147_1 >= FROM && LA147_1 <= HAVING)||(LA147_1 >= ILIKE && LA147_1 <= IN)||(LA147_1 >= INCREMENT && LA147_1 <= INNER)||(LA147_1 >= IS && LA147_1 <= JOIN)||LA147_1==LEFT||(LA147_1 >= LIKE && LA147_1 <= LIMIT)||(LA147_1 >= LPAREN && LA147_1 <= MINVALUE)||LA147_1==NAME||(LA147_1 >= NOEQ1 && LA147_1 <= NOT)||LA147_1==NULLS||(LA147_1 >= ON && LA147_1 <= ORDER)||(LA147_1 >= PERCENT && LA147_1 <= PLUS)||(LA147_1 >= REBUILD && LA147_1 <= SEMICOLON)||LA147_1==SET||LA147_1==START||LA147_1==THEN||LA147_1==UNUSABLE||LA147_1==USABLE||LA147_1==VALUES||(LA147_1 >= WHEN && LA147_1 <= WHERE)) ) {
					alt147=1;
				}
				else if ( (LA147_1==DOT) ) {
					alt147=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 147, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 147, 0, input);
				throw nvae;
			}

			switch (alt147) {
				case 1 :
					// PhoenixSQL.g:854:9: t= identifier
					{
					pushFollow(FOLLOW_identifier_in_from_table_name6077);
					t=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.table(null, t); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:855:9: s= identifier DOT t= identifier
					{
					pushFollow(FOLLOW_identifier_in_from_table_name6091);
					s=identifier();
					state._fsp--;
					if (state.failed) return ret;
					match(input,DOT,FOLLOW_DOT_in_from_table_name6093); if (state.failed) return ret;
					pushFollow(FOLLOW_identifier_in_from_table_name6097);
					t=identifier();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.table(s, t); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "from_table_name"



	// $ANTLR start "literal_or_bind"
	// PhoenixSQL.g:859:1: literal_or_bind returns [ParseNode ret] : (e= literal |b= bind_name );
	public final ParseNode literal_or_bind() throws RecognitionException {
		ParseNode ret = null;


		LiteralParseNode e =null;
		String b =null;

		try {
			// PhoenixSQL.g:860:5: (e= literal |b= bind_name )
			int alt148=2;
			int LA148_0 = input.LA(1);
			if ( (LA148_0==DECIMAL||LA148_0==DOUBLE||LA148_0==FALSE||LA148_0==LONG||LA148_0==NULL||LA148_0==NUMBER||LA148_0==STRING_LITERAL||LA148_0==TRUE) ) {
				alt148=1;
			}
			else if ( (LA148_0==BIND_NAME||LA148_0==QUESTION) ) {
				alt148=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 148, 0, input);
				throw nvae;
			}

			switch (alt148) {
				case 1 :
					// PhoenixSQL.g:860:9: e= literal
					{
					pushFollow(FOLLOW_literal_in_literal_or_bind6129);
					e=literal();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = e; }
					}
					break;
				case 2 :
					// PhoenixSQL.g:861:9: b= bind_name
					{
					pushFollow(FOLLOW_bind_name_in_literal_or_bind6143);
					b=bind_name();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.bind(b); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "literal_or_bind"



	// $ANTLR start "literal"
	// PhoenixSQL.g:865:1: literal returns [LiteralParseNode ret] : (t= STRING_LITERAL |l= int_literal |l= long_literal |l= double_literal |t= DECIMAL | NULL | TRUE | FALSE );
	public final LiteralParseNode literal() throws RecognitionException {
		LiteralParseNode ret = null;


		Token t=null;
		LiteralParseNode l =null;

		try {
			// PhoenixSQL.g:866:5: (t= STRING_LITERAL |l= int_literal |l= long_literal |l= double_literal |t= DECIMAL | NULL | TRUE | FALSE )
			int alt149=8;
			switch ( input.LA(1) ) {
			case STRING_LITERAL:
				{
				alt149=1;
				}
				break;
			case NUMBER:
				{
				alt149=2;
				}
				break;
			case LONG:
				{
				alt149=3;
				}
				break;
			case DOUBLE:
				{
				alt149=4;
				}
				break;
			case DECIMAL:
				{
				alt149=5;
				}
				break;
			case NULL:
				{
				alt149=6;
				}
				break;
			case TRUE:
				{
				alt149=7;
				}
				break;
			case FALSE:
				{
				alt149=8;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 149, 0, input);
				throw nvae;
			}
			switch (alt149) {
				case 1 :
					// PhoenixSQL.g:866:9: t= STRING_LITERAL
					{
					t=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_literal6175); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = factory.literal(t.getText()); }
					}
					break;
				case 2 :
					// PhoenixSQL.g:867:9: l= int_literal
					{
					pushFollow(FOLLOW_int_literal_in_literal6189);
					l=int_literal();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = l; }
					}
					break;
				case 3 :
					// PhoenixSQL.g:868:9: l= long_literal
					{
					pushFollow(FOLLOW_long_literal_in_literal6203);
					l=long_literal();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = l; }
					}
					break;
				case 4 :
					// PhoenixSQL.g:869:9: l= double_literal
					{
					pushFollow(FOLLOW_double_literal_in_literal6217);
					l=double_literal();
					state._fsp--;
					if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = l; }
					}
					break;
				case 5 :
					// PhoenixSQL.g:870:9: t= DECIMAL
					{
					t=(Token)match(input,DECIMAL,FOLLOW_DECIMAL_in_literal6231); if (state.failed) return ret;
					if ( state.backtracking==0 ) {
					            try {
					                ret = factory.literal(new BigDecimal(t.getText()));
					            } catch (NumberFormatException e) { // Shouldn't happen since we just parsed a decimal
					                throwRecognitionException(t);
					            }
					        }
					}
					break;
				case 6 :
					// PhoenixSQL.g:877:9: NULL
					{
					match(input,NULL,FOLLOW_NULL_in_literal6243); if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.literal(null);}
					}
					break;
				case 7 :
					// PhoenixSQL.g:878:9: TRUE
					{
					match(input,TRUE,FOLLOW_TRUE_in_literal6255); if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.literal(Boolean.TRUE);}
					}
					break;
				case 8 :
					// PhoenixSQL.g:879:9: FALSE
					{
					match(input,FALSE,FOLLOW_FALSE_in_literal6268); if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.literal(Boolean.FALSE);}
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "literal"



	// $ANTLR start "int_literal"
	// PhoenixSQL.g:882:1: int_literal returns [LiteralParseNode ret] : n= NUMBER ;
	public final LiteralParseNode int_literal() throws RecognitionException {
		LiteralParseNode ret = null;


		Token n=null;

		try {
			// PhoenixSQL.g:883:5: (n= NUMBER )
			// PhoenixSQL.g:883:9: n= NUMBER
			{
			n=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_int_literal6299); if (state.failed) return ret;
			if ( state.backtracking==0 ) {
			            try {
			                Long v = Long.valueOf(n.getText());
			                if (v >= Integer.MIN_VALUE && v <= Integer.MAX_VALUE) {
			                    ret = factory.literal(v.intValue());
			                } else {
			                    ret = factory.literal(v);
			                }
			            } catch (NumberFormatException e) { // Shouldn't happen since we just parsed a number
			                throwRecognitionException(n);
			            }
			        }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "int_literal"



	// $ANTLR start "long_literal"
	// PhoenixSQL.g:897:1: long_literal returns [LiteralParseNode ret] : l= LONG ;
	public final LiteralParseNode long_literal() throws RecognitionException {
		LiteralParseNode ret = null;


		Token l=null;

		try {
			// PhoenixSQL.g:898:5: (l= LONG )
			// PhoenixSQL.g:898:9: l= LONG
			{
			l=(Token)match(input,LONG,FOLLOW_LONG_in_long_literal6326); if (state.failed) return ret;
			if ( state.backtracking==0 ) {
			            try {
			                String lt = l.getText();
			                Long v = Long.valueOf(lt.substring(0, lt.length() - 1));
			                ret = factory.literal(v);
			            } catch (NumberFormatException e) { // Shouldn't happen since we just parsed a number
			                throwRecognitionException(l);
			            }
			        }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "long_literal"



	// $ANTLR start "double_literal"
	// PhoenixSQL.g:909:1: double_literal returns [LiteralParseNode ret] : d= DOUBLE ;
	public final LiteralParseNode double_literal() throws RecognitionException {
		LiteralParseNode ret = null;


		Token d=null;

		try {
			// PhoenixSQL.g:910:5: (d= DOUBLE )
			// PhoenixSQL.g:910:9: d= DOUBLE
			{
			d=(Token)match(input,DOUBLE,FOLLOW_DOUBLE_in_double_literal6353); if (state.failed) return ret;
			if ( state.backtracking==0 ) {
			            try {
			                String dt = d.getText();
			                Double v = Double.valueOf(dt.substring(0, dt.length() - 1));
			                ret = factory.literal(v);
			            } catch (NumberFormatException e) { // Shouldn't happen since we just parsed a number
			                throwRecognitionException(d);
			            }
			        }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "double_literal"



	// $ANTLR start "bind_name"
	// PhoenixSQL.g:922:1: bind_name returns [String ret] : (n= BIND_NAME | QUESTION );
	public final String bind_name() throws RecognitionException {
		String ret = null;


		Token n=null;

		try {
			// PhoenixSQL.g:923:5: (n= BIND_NAME | QUESTION )
			int alt150=2;
			int LA150_0 = input.LA(1);
			if ( (LA150_0==BIND_NAME) ) {
				alt150=1;
			}
			else if ( (LA150_0==QUESTION) ) {
				alt150=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 150, 0, input);
				throw nvae;
			}

			switch (alt150) {
				case 1 :
					// PhoenixSQL.g:923:9: n= BIND_NAME
					{
					n=(Token)match(input,BIND_NAME,FOLLOW_BIND_NAME_in_bind_name6381); if (state.failed) return ret;
					if ( state.backtracking==0 ) { String bind = n.getText().substring(1); updateBind(bind); ret = bind; }
					}
					break;
				case 2 :
					// PhoenixSQL.g:924:9: QUESTION
					{
					match(input,QUESTION,FOLLOW_QUESTION_in_bind_name6394); if (state.failed) return ret;
					if ( state.backtracking==0 ) { ret = nextBind(); }
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "bind_name"



	// $ANTLR start "identifier"
	// PhoenixSQL.g:928:1: identifier returns [String ret] : c= parseNoReserved ;
	public final String identifier() throws RecognitionException {
		String ret = null;


		String c =null;

		try {
			// PhoenixSQL.g:929:5: (c= parseNoReserved )
			// PhoenixSQL.g:929:9: c= parseNoReserved
			{
			pushFollow(FOLLOW_parseNoReserved_in_identifier6423);
			c=parseNoReserved();
			state._fsp--;
			if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = c; }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "identifier"



	// $ANTLR start "parseNoReserved"
	// PhoenixSQL.g:932:1: parseNoReserved returns [String ret] : n= NAME ;
	public final String parseNoReserved() throws RecognitionException {
		String ret = null;


		Token n=null;

		try {
			// PhoenixSQL.g:933:5: (n= NAME )
			// PhoenixSQL.g:933:9: n= NAME
			{
			n=(Token)match(input,NAME,FOLLOW_NAME_in_parseNoReserved6450); if (state.failed) return ret;
			if ( state.backtracking==0 ) { ret = n.getText(); }
			}

		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "parseNoReserved"



	// $ANTLR start "case_statement"
	// PhoenixSQL.g:936:1: case_statement returns [ParseNode ret] : ( CASE e1= expression ( WHEN e2= expression THEN t= expression )+ ( ELSE el= expression )? END | CASE ( WHEN c= expression THEN t= expression )+ ( ELSE el= expression )? END );
	public final ParseNode case_statement() throws RecognitionException {
		ParseNode ret = null;


		ParseNode e1 =null;
		ParseNode e2 =null;
		ParseNode t =null;
		ParseNode el =null;
		ParseNode c =null;

		List w = new ArrayList(4);
		try {
			// PhoenixSQL.g:938:5: ( CASE e1= expression ( WHEN e2= expression THEN t= expression )+ ( ELSE el= expression )? END | CASE ( WHEN c= expression THEN t= expression )+ ( ELSE el= expression )? END )
			int alt155=2;
			int LA155_0 = input.LA(1);
			if ( (LA155_0==CASE) ) {
				int LA155_1 = input.LA(2);
				if ( (LA155_1==ARRAY||LA155_1==BIND_NAME||(LA155_1 >= CASE && LA155_1 <= CAST)||LA155_1==CURRENT||LA155_1==DECIMAL||LA155_1==DOUBLE||LA155_1==EXISTS||LA155_1==FALSE||(LA155_1 >= LONG && LA155_1 <= LPAREN)||LA155_1==MINUS||(LA155_1 >= NAME && LA155_1 <= NEXT)||(LA155_1 >= NOT && LA155_1 <= NULL)||LA155_1==NUMBER||LA155_1==QUESTION||LA155_1==STRING_LITERAL||LA155_1==TRUE) ) {
					alt155=1;
				}
				else if ( (LA155_1==WHEN) ) {
					alt155=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return ret;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 155, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return ret;}
				NoViableAltException nvae =
					new NoViableAltException("", 155, 0, input);
				throw nvae;
			}

			switch (alt155) {
				case 1 :
					// PhoenixSQL.g:938:7: CASE e1= expression ( WHEN e2= expression THEN t= expression )+ ( ELSE el= expression )? END
					{
					match(input,CASE,FOLLOW_CASE_in_case_statement6477); if (state.failed) return ret;
					pushFollow(FOLLOW_expression_in_case_statement6481);
					e1=expression();
					state._fsp--;
					if (state.failed) return ret;
					// PhoenixSQL.g:938:26: ( WHEN e2= expression THEN t= expression )+
					int cnt151=0;
					loop151:
					while (true) {
						int alt151=2;
						int LA151_0 = input.LA(1);
						if ( (LA151_0==WHEN) ) {
							alt151=1;
						}

						switch (alt151) {
						case 1 :
							// PhoenixSQL.g:938:27: WHEN e2= expression THEN t= expression
							{
							match(input,WHEN,FOLLOW_WHEN_in_case_statement6484); if (state.failed) return ret;
							pushFollow(FOLLOW_expression_in_case_statement6488);
							e2=expression();
							state._fsp--;
							if (state.failed) return ret;
							match(input,THEN,FOLLOW_THEN_in_case_statement6490); if (state.failed) return ret;
							pushFollow(FOLLOW_expression_in_case_statement6494);
							t=expression();
							state._fsp--;
							if (state.failed) return ret;
							if ( state.backtracking==0 ) {w.add(t);w.add(factory.equal(e1,e2));}
							}
							break;

						default :
							if ( cnt151 >= 1 ) break loop151;
							if (state.backtracking>0) {state.failed=true; return ret;}
							EarlyExitException eee = new EarlyExitException(151, input);
							throw eee;
						}
						cnt151++;
					}

					// PhoenixSQL.g:938:106: ( ELSE el= expression )?
					int alt152=2;
					int LA152_0 = input.LA(1);
					if ( (LA152_0==ELSE) ) {
						alt152=1;
					}
					switch (alt152) {
						case 1 :
							// PhoenixSQL.g:938:107: ELSE el= expression
							{
							match(input,ELSE,FOLLOW_ELSE_in_case_statement6501); if (state.failed) return ret;
							pushFollow(FOLLOW_expression_in_case_statement6505);
							el=expression();
							state._fsp--;
							if (state.failed) return ret;
							if ( state.backtracking==0 ) {w.add(el);}
							}
							break;

					}

					match(input,END,FOLLOW_END_in_case_statement6511); if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.caseWhen(w);}
					}
					break;
				case 2 :
					// PhoenixSQL.g:939:7: CASE ( WHEN c= expression THEN t= expression )+ ( ELSE el= expression )? END
					{
					match(input,CASE,FOLLOW_CASE_in_case_statement6521); if (state.failed) return ret;
					// PhoenixSQL.g:939:12: ( WHEN c= expression THEN t= expression )+
					int cnt153=0;
					loop153:
					while (true) {
						int alt153=2;
						int LA153_0 = input.LA(1);
						if ( (LA153_0==WHEN) ) {
							alt153=1;
						}

						switch (alt153) {
						case 1 :
							// PhoenixSQL.g:939:13: WHEN c= expression THEN t= expression
							{
							match(input,WHEN,FOLLOW_WHEN_in_case_statement6524); if (state.failed) return ret;
							pushFollow(FOLLOW_expression_in_case_statement6528);
							c=expression();
							state._fsp--;
							if (state.failed) return ret;
							match(input,THEN,FOLLOW_THEN_in_case_statement6530); if (state.failed) return ret;
							pushFollow(FOLLOW_expression_in_case_statement6534);
							t=expression();
							state._fsp--;
							if (state.failed) return ret;
							if ( state.backtracking==0 ) {w.add(t);w.add(c);}
							}
							break;

						default :
							if ( cnt153 >= 1 ) break loop153;
							if (state.backtracking>0) {state.failed=true; return ret;}
							EarlyExitException eee = new EarlyExitException(153, input);
							throw eee;
						}
						cnt153++;
					}

					// PhoenixSQL.g:939:72: ( ELSE el= expression )?
					int alt154=2;
					int LA154_0 = input.LA(1);
					if ( (LA154_0==ELSE) ) {
						alt154=1;
					}
					switch (alt154) {
						case 1 :
							// PhoenixSQL.g:939:73: ELSE el= expression
							{
							match(input,ELSE,FOLLOW_ELSE_in_case_statement6541); if (state.failed) return ret;
							pushFollow(FOLLOW_expression_in_case_statement6545);
							el=expression();
							state._fsp--;
							if (state.failed) return ret;
							if ( state.backtracking==0 ) {w.add(el);}
							}
							break;

					}

					match(input,END,FOLLOW_END_in_case_statement6551); if (state.failed) return ret;
					if ( state.backtracking==0 ) {ret = factory.caseWhen(w);}
					}
					break;

			}
		}

		    catch (RecognitionException re) {
		        throw re;
		    }

		finally {
			// do for sure before leaving
		}
		return ret;
	}
	// $ANTLR end "case_statement"

	// $ANTLR start synpred1_PhoenixSQL
	public final void synpred1_PhoenixSQL_fragment() throws RecognitionException {
		// PhoenixSQL.g:706:9: ( ( NOT )? boolean_expression )
		// PhoenixSQL.g:706:10: ( NOT )? boolean_expression
		{
		// PhoenixSQL.g:706:10: ( NOT )?
		int alt156=2;
		int LA156_0 = input.LA(1);
		if ( (LA156_0==NOT) ) {
			alt156=1;
		}
		switch (alt156) {
			case 1 :
				// PhoenixSQL.g:706:10: NOT
				{
				match(input,NOT,FOLLOW_NOT_in_synpred1_PhoenixSQL4516); if (state.failed) return;
				}
				break;

		}

		pushFollow(FOLLOW_boolean_expression_in_synpred1_PhoenixSQL4519);
		boolean_expression();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred1_PhoenixSQL

	// Delegated rules

	public final boolean synpred1_PhoenixSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred1_PhoenixSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}



	public static final BitSet FOLLOW_oneStatement_in_nextStatement876 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_SEMICOLON_in_nextStatement880 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EOF_in_nextStatement889 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_oneStatement_in_statement915 = new BitSet(new long[]{0x0000000000000000L});
	public static final BitSet FOLLOW_EOF_in_statement919 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SELECT_in_query943 = new BitSet(new long[]{0x0050120900189220L,0x20001002CE460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_hinted_select_node_in_query947 = new BitSet(new long[]{0x0000000000000000L});
	public static final BitSet FOLLOW_EOF_in_query949 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SELECT_in_oneStatement976 = new BitSet(new long[]{0x0050120900189220L,0x20001002CE460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_hinted_select_node_in_oneStatement980 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_non_select_node_in_oneStatement996 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_upsert_node_in_non_select_node1037 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_delete_node_in_non_select_node1049 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_create_table_node_in_non_select_node1061 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_create_view_node_in_non_select_node1073 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_create_index_node_in_non_select_node1085 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_drop_table_node_in_non_select_node1097 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_drop_index_node_in_non_select_node1109 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_alter_index_node_in_non_select_node1121 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_alter_table_node_in_non_select_node1133 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_create_sequence_node_in_non_select_node1143 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_drop_sequence_node_in_non_select_node1153 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_update_statistics_node_in_non_select_node1165 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_explain_node_in_non_select_node1177 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EXPLAIN_in_explain_node1207 = new BitSet(new long[]{0x0020801080000040L,0x0004000000000000L,0x0000000000000030L});
	public static final BitSet FOLLOW_oneStatement_in_explain_node1211 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CREATE_in_create_table_node1237 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L});
	public static final BitSet FOLLOW_TABLE_in_create_table_node1239 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_create_table_node1242 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_NOT_in_create_table_node1244 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_create_table_node1248 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_create_table_node1254 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_create_table_node1266 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_column_defs_in_create_table_node1270 = new BitSet(new long[]{0x0000000044000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_pk_constraint_in_create_table_node1275 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_create_table_node1279 = new BitSet(new long[]{0x0000000000000002L,0x0400000004000000L});
	public static final BitSet FOLLOW_fam_properties_in_create_table_node1293 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_SPLIT_in_create_table_node1306 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_ON_in_create_table_node1308 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_value_expression_list_in_create_table_node1312 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CREATE_in_create_view_node1348 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_VIEW_in_create_view_node1350 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_create_view_node1353 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_NOT_in_create_view_node1355 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_create_view_node1359 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_create_view_node1365 = new BitSet(new long[]{0x0000000000000402L,0x0000000004040000L});
	public static final BitSet FOLLOW_LPAREN_in_create_view_node1377 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_column_defs_in_create_view_node1381 = new BitSet(new long[]{0x0000000044000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_pk_constraint_in_create_view_node1386 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_create_view_node1390 = new BitSet(new long[]{0x0000000000000402L,0x0000000004000000L});
	public static final BitSet FOLLOW_AS_in_create_view_node1404 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_SELECT_in_create_view_node1406 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_create_view_node1408 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_FROM_in_create_view_node1420 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_create_view_node1424 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_WHERE_in_create_view_node1437 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_create_view_node1441 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
	public static final BitSet FOLLOW_fam_properties_in_create_view_node1459 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CREATE_in_create_index_node1495 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
	public static final BitSet FOLLOW_INDEX_in_create_index_node1497 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_create_index_node1500 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_NOT_in_create_index_node1502 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_create_index_node1506 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_index_name_in_create_index_node1512 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_ON_in_create_index_node1514 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_create_index_node1518 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_create_index_node1529 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_index_pk_constraint_in_create_index_node1533 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_create_index_node1535 = new BitSet(new long[]{0x0000000000000002L,0x0400000004000008L});
	public static final BitSet FOLLOW_INCLUDE_in_create_index_node1547 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_create_index_node1550 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_column_names_in_create_index_node1554 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_create_index_node1556 = new BitSet(new long[]{0x0000000000000002L,0x0400000004000000L});
	public static final BitSet FOLLOW_fam_properties_in_create_index_node1572 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_SPLIT_in_create_index_node1585 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_ON_in_create_index_node1587 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_value_expression_list_in_create_index_node1591 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CREATE_in_create_sequence_node1627 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
	public static final BitSet FOLLOW_SEQUENCE_in_create_sequence_node1629 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_create_sequence_node1633 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_NOT_in_create_sequence_node1635 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_create_sequence_node1639 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_create_sequence_node1645 = new BitSet(new long[]{0x0000000200020002L,0x0800000000A00010L});
	public static final BitSet FOLLOW_START_in_create_sequence_node1656 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000001004L});
	public static final BitSet FOLLOW_WITH_in_create_sequence_node1658 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_create_sequence_node1663 = new BitSet(new long[]{0x0000000200020002L,0x0000000000A00010L});
	public static final BitSet FOLLOW_INCREMENT_in_create_sequence_node1676 = new BitSet(new long[]{0x0040100900198200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_BY_in_create_sequence_node1678 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_create_sequence_node1683 = new BitSet(new long[]{0x0000000200020002L,0x0000000000A00000L});
	public static final BitSet FOLLOW_MINVALUE_in_create_sequence_node1696 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_create_sequence_node1700 = new BitSet(new long[]{0x0000000200020002L,0x0000000000200000L});
	public static final BitSet FOLLOW_MAXVALUE_in_create_sequence_node1713 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_create_sequence_node1717 = new BitSet(new long[]{0x0000000200020002L});
	public static final BitSet FOLLOW_CYCLE_in_create_sequence_node1732 = new BitSet(new long[]{0x0000000000020002L});
	public static final BitSet FOLLOW_CACHE_in_create_sequence_node1746 = new BitSet(new long[]{0x0000000000008000L,0x0000100200000000L});
	public static final BitSet FOLLOW_int_literal_or_bind_in_create_sequence_node1750 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_in_int_literal_or_bind1781 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_expression_in_int_literal_or_bind1793 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DROP_in_drop_sequence_node1819 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
	public static final BitSet FOLLOW_SEQUENCE_in_drop_sequence_node1821 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_drop_sequence_node1825 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_drop_sequence_node1829 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_drop_sequence_node1835 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_pk_constraint1864 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_CONSTRAINT_in_pk_constraint1867 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_pk_constraint1871 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_PRIMARY_in_pk_constraint1873 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_KEY_in_pk_constraint1875 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_pk_constraint1877 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_col_name_with_sort_order_list_in_pk_constraint1881 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_pk_constraint1883 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_col_name_with_sort_order_in_col_name_with_sort_order_list1914 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_col_name_with_sort_order_list1920 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_col_name_with_sort_order_in_col_name_with_sort_order_list1926 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_identifier_in_col_name_with_sort_order1952 = new BitSet(new long[]{0x0000004000000802L});
	public static final BitSet FOLLOW_ASC_in_col_name_with_sort_order1957 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DESC_in_col_name_with_sort_order1961 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_col_def_name_with_sort_order_list_in_index_pk_constraint1988 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_col_def_name_with_sort_order_in_col_def_name_with_sort_order_list2019 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_col_def_name_with_sort_order_list2025 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_col_def_name_with_sort_order_in_col_def_name_with_sort_order_list2031 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_column_name_in_col_def_name_with_sort_order2057 = new BitSet(new long[]{0x0000004000000802L});
	public static final BitSet FOLLOW_ASC_in_col_def_name_with_sort_order2062 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DESC_in_col_def_name_with_sort_order2066 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_fam_prop_name_in_fam_properties2094 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_EQ_in_fam_properties2096 = new BitSet(new long[]{0x0040100800000000L,0x2000000280020000L,0x0000000000000004L});
	public static final BitSet FOLLOW_prop_value_in_fam_properties2100 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_fam_properties2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_fam_prop_name_in_fam_properties2110 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_EQ_in_fam_properties2112 = new BitSet(new long[]{0x0040100800000000L,0x2000000280020000L,0x0000000000000004L});
	public static final BitSet FOLLOW_prop_value_in_fam_properties2116 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_identifier_in_fam_prop_name2146 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_fam_prop_name2160 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_fam_prop_name2162 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_fam_prop_name2166 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_in_prop_value2197 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_column_name2228 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_column_name2242 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_column_name2244 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_column_name2248 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_column_name_in_column_names2280 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_column_names2286 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_column_name_in_column_names2292 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_DROP_in_drop_table_node2319 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_VIEW_in_drop_table_node2324 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_TABLE_in_drop_table_node2328 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_drop_table_node2332 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_drop_table_node2336 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_drop_table_node2342 = new BitSet(new long[]{0x0000000000040002L});
	public static final BitSet FOLLOW_CASCADE_in_drop_table_node2347 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DROP_in_drop_index_node2381 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
	public static final BitSet FOLLOW_INDEX_in_drop_index_node2383 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_drop_index_node2386 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_drop_index_node2390 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_index_name_in_drop_index_node2396 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_ON_in_drop_index_node2398 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_drop_index_node2402 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALTER_in_alter_index_node2432 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
	public static final BitSet FOLLOW_INDEX_in_alter_index_node2434 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_alter_index_node2437 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_alter_index_node2441 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_index_name_in_alter_index_node2447 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_ON_in_alter_index_node2449 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_alter_index_node2453 = new BitSet(new long[]{0x0000010000000000L,0x0000400000000000L,0x0000000000000048L});
	public static final BitSet FOLLOW_set_in_alter_index_node2457 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALTER_in_alter_table_node2503 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_TABLE_in_alter_table_node2506 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_VIEW_in_alter_table_node2512 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_alter_table_node2517 = new BitSet(new long[]{0x0000800000000010L,0x0020000000000000L});
	public static final BitSet FOLLOW_DROP_in_alter_table_node2530 = new BitSet(new long[]{0x0000000001000000L});
	public static final BitSet FOLLOW_COLUMN_in_alter_table_node2532 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_alter_table_node2535 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_alter_table_node2539 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_column_names_in_alter_table_node2545 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ADD_in_alter_table_node2551 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000001L});
	public static final BitSet FOLLOW_IF_in_alter_table_node2554 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_NOT_in_alter_table_node2556 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_EXISTS_in_alter_table_node2560 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_column_defs_in_alter_table_node2567 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
	public static final BitSet FOLLOW_properties_in_alter_table_node2573 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SET_in_alter_table_node2581 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_properties_in_alter_table_node2586 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UPDATE_in_update_statistics_node2620 = new BitSet(new long[]{0x0000000000000000L,0x1000000000000000L});
	public static final BitSet FOLLOW_STATISTICS_in_update_statistics_node2622 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_update_statistics_node2626 = new BitSet(new long[]{0x0000000002000022L,0x0000000000000020L});
	public static final BitSet FOLLOW_INDEX_in_update_statistics_node2631 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALL_in_update_statistics_node2637 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLUMNS_in_update_statistics_node2643 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_prop_name2671 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_prop_name_in_properties2705 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_EQ_in_properties2707 = new BitSet(new long[]{0x0040100800000000L,0x2000000280020000L,0x0000000000000004L});
	public static final BitSet FOLLOW_prop_value_in_properties2711 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_properties2717 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_prop_name_in_properties2721 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_EQ_in_properties2723 = new BitSet(new long[]{0x0040100800000000L,0x2000000280020000L,0x0000000000000004L});
	public static final BitSet FOLLOW_prop_value_in_properties2727 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_column_def_in_column_defs2762 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_column_defs2768 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_column_def_in_column_defs2774 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_column_name_in_column_def2800 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_column_def2804 = new BitSet(new long[]{0x0000000000000202L,0x00000800C00C0000L});
	public static final BitSet FOLLOW_LPAREN_in_column_def2807 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_column_def2811 = new BitSet(new long[]{0x0000000004000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_COMMA_in_column_def2814 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_column_def2818 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_column_def2822 = new BitSet(new long[]{0x0000000000000202L,0x00000800C0080000L});
	public static final BitSet FOLLOW_ARRAY_in_column_def2828 = new BitSet(new long[]{0x0000000000000002L,0x00000800C0080000L});
	public static final BitSet FOLLOW_LSQUARE_in_column_def2834 = new BitSet(new long[]{0x0000000000000000L,0x0002000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_column_def2839 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_column_def2843 = new BitSet(new long[]{0x0000000000000002L,0x00000800C0000000L});
	public static final BitSet FOLLOW_NOT_in_column_def2850 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_NULL_in_column_def2855 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
	public static final BitSet FOLLOW_PRIMARY_in_column_def2862 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_KEY_in_column_def2864 = new BitSet(new long[]{0x0000004000000802L});
	public static final BitSet FOLLOW_ASC_in_column_def2869 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DESC_in_column_def2873 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_dyn_column_def_in_dyn_column_defs2917 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_dyn_column_defs2923 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_dyn_column_def_in_dyn_column_defs2929 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_column_name_in_dyn_column_def2955 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_dyn_column_def2959 = new BitSet(new long[]{0x0000000000000202L,0x00000000000C0000L});
	public static final BitSet FOLLOW_LPAREN_in_dyn_column_def2962 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_dyn_column_def2966 = new BitSet(new long[]{0x0000000004000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_COMMA_in_dyn_column_def2969 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_dyn_column_def2973 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_dyn_column_def2977 = new BitSet(new long[]{0x0000000000000202L,0x0000000000080000L});
	public static final BitSet FOLLOW_ARRAY_in_dyn_column_def2983 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_LSQUARE_in_dyn_column_def2989 = new BitSet(new long[]{0x0000000000000000L,0x0002000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_dyn_column_def2994 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_dyn_column_def2998 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_column_name_in_dyn_column_name_or_def3035 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_dyn_column_name_or_def3040 = new BitSet(new long[]{0x0000000000000202L,0x00000000000C0000L});
	public static final BitSet FOLLOW_LPAREN_in_dyn_column_name_or_def3043 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_dyn_column_name_or_def3047 = new BitSet(new long[]{0x0000000004000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_COMMA_in_dyn_column_name_or_def3050 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_dyn_column_name_or_def3054 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_dyn_column_name_or_def3058 = new BitSet(new long[]{0x0000000000000202L,0x0000000000080000L});
	public static final BitSet FOLLOW_ARRAY_in_dyn_column_name_or_def3064 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_LSQUARE_in_dyn_column_name_or_def3070 = new BitSet(new long[]{0x0000000000000000L,0x0002000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_dyn_column_name_or_def3075 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_dyn_column_name_or_def3079 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SELECT_in_select_expression3117 = new BitSet(new long[]{0x0050120900189220L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_select_node_in_select_expression3121 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_select_expression_in_subquery_expression3151 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DISTINCT_in_select_node3188 = new BitSet(new long[]{0x0050100900189200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_ALL_in_select_node3192 = new BitSet(new long[]{0x0050100900189200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_select_list_in_select_node3198 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_FROM_in_select_node3208 = new BitSet(new long[]{0x0000000000008000L,0x0000100004040000L});
	public static final BitSet FOLLOW_parseFrom_in_select_node3212 = new BitSet(new long[]{0x5000000000000002L,0x0000001000010000L,0x0000000000000800L});
	public static final BitSet FOLLOW_WHERE_in_select_node3223 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_select_node3227 = new BitSet(new long[]{0x5000000000000002L,0x0000001000010000L});
	public static final BitSet FOLLOW_GROUP_in_select_node3240 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_BY_in_select_node3242 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_group_by_in_select_node3246 = new BitSet(new long[]{0x4000000000000002L,0x0000001000010000L});
	public static final BitSet FOLLOW_HAVING_in_select_node3259 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_select_node3263 = new BitSet(new long[]{0x0000000000000002L,0x0000001000010000L});
	public static final BitSet FOLLOW_ORDER_in_select_node3276 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_BY_in_select_node3278 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_order_by_in_select_node3282 = new BitSet(new long[]{0x0000000000000002L,0x0000000000010000L});
	public static final BitSet FOLLOW_LIMIT_in_select_node3295 = new BitSet(new long[]{0x0000000000008000L,0x0000100200000000L});
	public static final BitSet FOLLOW_limit_in_select_node3299 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_hintClause_in_hinted_select_node3338 = new BitSet(new long[]{0x0050120900189220L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_select_node_in_hinted_select_node3353 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UPSERT_in_upsert_node3387 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000080L});
	public static final BitSet FOLLOW_hintClause_in_upsert_node3392 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_INTO_in_upsert_node3396 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_upsert_node3400 = new BitSet(new long[]{0x0000000000000000L,0x0004000000040000L,0x0000000000000100L});
	public static final BitSet FOLLOW_LPAREN_in_upsert_node3411 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_upsert_column_refs_in_upsert_node3415 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_upsert_node3417 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_VALUES_in_upsert_node3431 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_upsert_node3433 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_one_or_more_expressions_in_upsert_node3437 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_upsert_node3439 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_select_expression_in_upsert_node3446 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_dyn_column_name_or_def_in_upsert_column_refs3485 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_upsert_column_refs3498 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_dyn_column_name_or_def_in_upsert_column_refs3502 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_DELETE_in_delete_node3528 = new BitSet(new long[]{0x0400000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_hintClause_in_delete_node3533 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_FROM_in_delete_node3537 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_delete_node3541 = new BitSet(new long[]{0x0000000000000002L,0x0000001000010000L,0x0000000000000800L});
	public static final BitSet FOLLOW_WHERE_in_delete_node3552 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_delete_node3556 = new BitSet(new long[]{0x0000000000000002L,0x0000001000010000L});
	public static final BitSet FOLLOW_ORDER_in_delete_node3569 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_BY_in_delete_node3571 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_order_by_in_delete_node3575 = new BitSet(new long[]{0x0000000000000002L,0x0000000000010000L});
	public static final BitSet FOLLOW_LIMIT_in_delete_node3588 = new BitSet(new long[]{0x0000000000008000L,0x0000100200000000L});
	public static final BitSet FOLLOW_limit_in_delete_node3592 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_expression_in_limit3627 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_in_limit3639 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ML_HINT_in_hintClause3669 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_selectable_in_select_list3701 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_select_list3706 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_selectable_in_select_list3710 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_ASTERISK_in_select_list3722 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_selectable3751 = new BitSet(new long[]{0x0000000000000402L,0x0000000004000000L});
	public static final BitSet FOLLOW_parseAlias_in_selectable3756 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_selectable3771 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_selectable3773 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_selectable3775 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_selectable3790 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_selectable3792 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_selectable3796 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_selectable3798 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_selectable3800 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_group_by3833 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_group_by3846 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_group_by3852 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_parseOrderByField_in_order_by3886 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_order_by3899 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_parseOrderByField_in_order_by3905 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_expression_in_parseOrderByField3942 = new BitSet(new long[]{0x0000004000000802L,0x0000000100000000L});
	public static final BitSet FOLLOW_ASC_in_parseOrderByField3954 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
	public static final BitSet FOLLOW_DESC_in_parseOrderByField3960 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
	public static final BitSet FOLLOW_NULLS_in_parseOrderByField3975 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_FIRST_in_parseOrderByField3978 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LAST_in_parseOrderByField3984 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_table_ref_in_parseFrom4028 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_parseFrom4033 = new BitSet(new long[]{0x0000000000008000L,0x0000100004040000L});
	public static final BitSet FOLLOW_table_ref_in_parseFrom4037 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_single_table_ref_in_table_ref4064 = new BitSet(new long[]{0x0800000000000000L,0x0000800000002240L});
	public static final BitSet FOLLOW_join_parts_in_table_ref4068 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_name_in_single_table_ref4095 = new BitSet(new long[]{0x0000000000000402L,0x0000000004000000L});
	public static final BitSet FOLLOW_AS_in_single_table_ref4099 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_single_table_ref4105 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_from_table_name_in_single_table_ref4122 = new BitSet(new long[]{0x0000000000000402L,0x0000000004040000L});
	public static final BitSet FOLLOW_AS_in_single_table_ref4126 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_single_table_ref4132 = new BitSet(new long[]{0x0000000000000002L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_single_table_ref4137 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_dyn_column_defs_in_single_table_ref4141 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_single_table_ref4143 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_single_table_ref4157 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_SELECT_in_single_table_ref4159 = new BitSet(new long[]{0x0050120900189220L,0x20001002CE460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_hinted_select_node_in_single_table_ref4163 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_single_table_ref4165 = new BitSet(new long[]{0x0000000000000402L,0x0000000004000000L});
	public static final BitSet FOLLOW_AS_in_single_table_ref4169 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_single_table_ref4175 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_join_part_in_join_parts4204 = new BitSet(new long[]{0x0800000000000002L,0x0000800000002240L});
	public static final BitSet FOLLOW_join_type_in_join_part4225 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_JOIN_in_join_part4227 = new BitSet(new long[]{0x0000000000008000L,0x0000100004040000L});
	public static final BitSet FOLLOW_single_table_ref_in_join_part4231 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_ON_in_join_part4233 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_join_part4237 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_join_type_in_join_part4246 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_JOIN_in_join_part4248 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_join_part4250 = new BitSet(new long[]{0x0000000000008000L,0x0000100004040000L});
	public static final BitSet FOLLOW_table_ref_in_join_part4254 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_join_part4256 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_ON_in_join_part4258 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_join_part4262 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INNER_in_join_type4284 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LEFT_in_join_type4299 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
	public static final BitSet FOLLOW_OUTER_in_join_type4301 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RIGHT_in_join_type4316 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
	public static final BitSet FOLLOW_OUTER_in_join_type4318 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FULL_in_join_type4332 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
	public static final BitSet FOLLOW_OUTER_in_join_type4335 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AS_in_parseAlias4366 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_parseNoReserved_in_parseAlias4371 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_or_expression_in_expression4399 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_and_expression_in_or_expression4431 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_OR_in_or_expression4436 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_and_expression_in_or_expression4440 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_not_expression_in_and_expression4476 = new BitSet(new long[]{0x0000000000000082L});
	public static final BitSet FOLLOW_AND_in_and_expression4481 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_not_expression_in_and_expression4485 = new BitSet(new long[]{0x0000000000000082L});
	public static final BitSet FOLLOW_NOT_in_not_expression4527 = new BitSet(new long[]{0x0050100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_boolean_expression_in_not_expression4532 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOT_in_not_expression4546 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_not_expression4549 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_not_expression4553 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_not_expression4555 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQ_in_comparison_op4575 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LT_in_comparison_op4582 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GT_in_comparison_op4589 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LT_in_comparison_op4596 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_EQ_in_comparison_op4598 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GT_in_comparison_op4605 = new BitSet(new long[]{0x0008000000000000L});
	public static final BitSet FOLLOW_EQ_in_comparison_op4607 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_comparison_op4614 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_value_expression_in_boolean_expression4645 = new BitSet(new long[]{0x2008000000004002L,0x0000000070108106L});
	public static final BitSet FOLLOW_comparison_op_in_boolean_expression4651 = new BitSet(new long[]{0x0040100900188320L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_boolean_expression4656 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_boolean_expression4661 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_subquery_expression_in_boolean_expression4665 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_boolean_expression4667 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALL_in_boolean_expression4676 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_ANY_in_boolean_expression4682 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_boolean_expression4685 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_boolean_expression4689 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_boolean_expression4691 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALL_in_boolean_expression4701 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_ANY_in_boolean_expression4707 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_boolean_expression4710 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_subquery_expression_in_boolean_expression4714 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_boolean_expression4716 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IS_in_boolean_expression4746 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
	public static final BitSet FOLLOW_NOT_in_boolean_expression4750 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_NULL_in_boolean_expression4753 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOT_in_boolean_expression4784 = new BitSet(new long[]{0x0000000000004000L,0x0000000000008006L});
	public static final BitSet FOLLOW_LIKE_in_boolean_expression4789 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_boolean_expression4793 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ILIKE_in_boolean_expression4831 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_boolean_expression4835 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BETWEEN_in_boolean_expression4873 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_boolean_expression4877 = new BitSet(new long[]{0x0000000000000080L});
	public static final BitSet FOLLOW_AND_in_boolean_expression4879 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_boolean_expression4883 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IN_in_boolean_expression4922 = new BitSet(new long[]{0x0000000000008000L,0x0000100000040000L});
	public static final BitSet FOLLOW_bind_expression_in_boolean_expression4928 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_boolean_expression4969 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_subquery_expression_in_boolean_expression4973 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_boolean_expression4975 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_boolean_expression5016 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_one_or_more_expressions_in_boolean_expression5020 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_boolean_expression5022 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EXISTS_in_boolean_expression5122 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_boolean_expression5124 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_subquery_expression_in_boolean_expression5128 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_boolean_expression5130 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_name_in_bind_expression5158 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_add_expression_in_value_expression5189 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_subtract_expression_in_add_expression5220 = new BitSet(new long[]{0x0000000000000002L,0x0000020000000000L});
	public static final BitSet FOLLOW_PLUS_in_add_expression5225 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_subtract_expression_in_add_expression5229 = new BitSet(new long[]{0x0000000000000002L,0x0000020000000000L});
	public static final BitSet FOLLOW_concat_expression_in_subtract_expression5264 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
	public static final BitSet FOLLOW_MINUS_in_subtract_expression5269 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_concat_expression_in_subtract_expression5273 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
	public static final BitSet FOLLOW_multiply_divide_modulo_expression_in_concat_expression5308 = new BitSet(new long[]{0x0000000020000002L});
	public static final BitSet FOLLOW_CONCAT_in_concat_expression5313 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_multiply_divide_modulo_expression_in_concat_expression5317 = new BitSet(new long[]{0x0000000020000002L});
	public static final BitSet FOLLOW_negate_expression_in_multiply_divide_modulo_expression5352 = new BitSet(new long[]{0x0000040000001002L,0x0000010000000000L});
	public static final BitSet FOLLOW_set_in_multiply_divide_modulo_expression5368 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_negate_expression_in_multiply_divide_modulo_expression5382 = new BitSet(new long[]{0x0000040000001002L,0x0000010000000000L});
	public static final BitSet FOLLOW_MINUS_in_negate_expression5430 = new BitSet(new long[]{0x0040100900188200L,0x200010028C060000L,0x0000000000000004L});
	public static final BitSet FOLLOW_array_expression_in_negate_expression5435 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_term_in_array_expression5463 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
	public static final BitSet FOLLOW_LSQUARE_in_array_expression5466 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_array_expression5470 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_array_expression5472 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_or_bind_in_term5505 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_term5519 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ARRAY_in_term5533 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
	public static final BitSet FOLLOW_LSQUARE_in_term5535 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_one_or_more_expressions_in_term5539 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_term5541 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_table_name_in_term5555 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_term5557 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_term5561 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_term5575 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_term5577 = new BitSet(new long[]{0x0050100904188200L,0x20011002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_zero_or_more_expressions_in_term5581 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_term5583 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_WITHIN_in_term5588 = new BitSet(new long[]{0x1000000000000000L});
	public static final BitSet FOLLOW_GROUP_in_term5590 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_term5592 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_ORDER_in_term5594 = new BitSet(new long[]{0x0000000000010000L});
	public static final BitSet FOLLOW_BY_in_term5596 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_one_or_more_expressions_in_term5600 = new BitSet(new long[]{0x0000004000000800L});
	public static final BitSet FOLLOW_ASC_in_term5605 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_DESC_in_term5609 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_term5612 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_term5637 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_term5639 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_term5643 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_term5645 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_term5669 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_term5671 = new BitSet(new long[]{0x0000020000000000L});
	public static final BitSet FOLLOW_DISTINCT_in_term5675 = new BitSet(new long[]{0x0050100904188200L,0x20011002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_zero_or_more_expressions_in_term5679 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_term5681 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_case_statement_in_term5704 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_term5716 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_one_or_more_expressions_in_term5720 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_term5722 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CAST_in_term5740 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LPAREN_in_term5742 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_term5746 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_AS_in_term5748 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_term5752 = new BitSet(new long[]{0x0000000000000200L,0x00010000000C0000L});
	public static final BitSet FOLLOW_LPAREN_in_term5755 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_term5759 = new BitSet(new long[]{0x0000000004000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_COMMA_in_term5762 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_NUMBER_in_term5766 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_term5770 = new BitSet(new long[]{0x0000000000000200L,0x0001000000080000L});
	public static final BitSet FOLLOW_ARRAY_in_term5777 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_LSQUARE_in_term5782 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_term5784 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_term5789 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NEXT_in_term5812 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_CURRENT_in_term5816 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_VALUE_in_term5819 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_FOR_in_term5821 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_from_table_name_in_term5825 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_one_or_more_expressions5870 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_one_or_more_expressions5876 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_one_or_more_expressions5882 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_expression_in_zero_or_more_expressions5914 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_COMMA_in_zero_or_more_expressions5922 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_zero_or_more_expressions5928 = new BitSet(new long[]{0x0000000004000002L});
	public static final BitSet FOLLOW_LPAREN_in_value_expression_list5955 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_value_expression_list5961 = new BitSet(new long[]{0x0000000004000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_COMMA_in_value_expression_list5967 = new BitSet(new long[]{0x0040100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_value_expression_in_value_expression_list5973 = new BitSet(new long[]{0x0000000004000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_value_expression_list5980 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_index_name6001 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_table_name6029 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_table_name6043 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_table_name6045 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_table_name6049 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_from_table_name6077 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifier_in_from_table_name6091 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_DOT_in_from_table_name6093 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_identifier_in_from_table_name6097 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_in_literal_or_bind6129 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_name_in_literal_or_bind6143 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_literal6175 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_in_literal6189 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_long_literal_in_literal6203 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_double_literal_in_literal6217 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DECIMAL_in_literal6231 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NULL_in_literal6243 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRUE_in_literal6255 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FALSE_in_literal6268 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_in_int_literal6299 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LONG_in_long_literal6326 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_in_double_literal6353 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BIND_NAME_in_bind_name6381 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_QUESTION_in_bind_name6394 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parseNoReserved_in_identifier6423 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NAME_in_parseNoReserved6450 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CASE_in_case_statement6477 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_case_statement6481 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_WHEN_in_case_statement6484 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_case_statement6488 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_THEN_in_case_statement6490 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_case_statement6494 = new BitSet(new long[]{0x0003000000000000L,0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_ELSE_in_case_statement6501 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_case_statement6505 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_END_in_case_statement6511 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CASE_in_case_statement6521 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_WHEN_in_case_statement6524 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_case_statement6528 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_THEN_in_case_statement6530 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_case_statement6534 = new BitSet(new long[]{0x0003000000000000L,0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_ELSE_in_case_statement6541 = new BitSet(new long[]{0x0050100900188200L,0x20001002CC460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_expression_in_case_statement6545 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_END_in_case_statement6551 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOT_in_synpred1_PhoenixSQL4516 = new BitSet(new long[]{0x0050100900188200L,0x200010028C460000L,0x0000000000000004L});
	public static final BitSet FOLLOW_boolean_expression_in_synpred1_PhoenixSQL4519 = new BitSet(new long[]{0x0000000000000002L});
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy