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

org.datayoo.moql.antlr.SelectorParser Maven / Gradle / Ivy

There is a newer version: 1.2.4
Show newest version
// $ANTLR 3.2 Sep 23, 2009 14:05:07 org/datayoo/moql/antlr/Selector.g 2018-11-05 23:41:03

package org.datayoo.moql.antlr;

import java.util.LinkedList;
import org.datayoo.moql.*;
import org.datayoo.moql.metadata.*;
import org.datayoo.moql.util.StringFormater;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
public class SelectorParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "", "", "", "", "A_", "L_", "ALL", "N_", "D_", "AND", "S_", "AS", "C_", "ASCENDING", "B_", "E_", "T_", "W_", "BETWEEN", "Y_", "BY", "H_", "CACHE", "O_", "M_", "P_", "I_", "COMPLEMENTATION", "R_", "DECORATE", "DESCENDING", "DISTINCT", "X_", "EXCEPT", "EXISTS", "F_", "FALSE", "FIFO", "FILO", "FROM", "U_", "FULL", "G_", "GROUP", "V_", "HAVING", "IN", "INNER", "INTERSECT", "IS", "J_", "JOIN", "LEFT", "LFU", "K_", "LIKE", "LRU", "NOT", "NULL", "ON", "OR", "ORDER", "OUTER", "RIGHT", "SELECT", "SYMEXCEPT", "LIMIT", "TRUE", "UNION", "WHERE", "IntegerLiteral", "Identifier", "FloatingPointLiteral", "StringLiteral", "DecimalLiteral", "HexLiteral", "OctalLiteral", "HexDigit", "Exponent", "Escape", "Letter", "Digital", "Q_", "Z_", "WS", "'('", "')'", "','", "'%'", "'.*'", "'='", "'<'", "'<='", "'>'", "'>='", "'<>'", "'!='", "'|'", "'^'", "'&'", "'<<'", "'>>'", "'+'", "'-'", "'*'", "'/'", "'~'", "'['", "']'", "'.'", "'as'"
    };
    public static final int X_=32;
    public static final int JOIN=51;
    public static final int BETWEEN=18;
    public static final int P_=25;
    public static final int H_=21;
    public static final int LFU=53;
    public static final int INNER=47;
    public static final int LEFT=52;
    public static final int IN=46;
    public static final int Y_=19;
    public static final int DISTINCT=31;
    public static final int IS=49;
    public static final int WHERE=69;
    public static final int HexDigit=77;
    public static final int Q_=82;
    public static final int Letter=80;
    public static final int AS=11;
    public static final int StringLiteral=73;
    public static final int I_=26;
    public static final int A_=4;
    public static final int Z_=83;
    public static final int R_=28;
    public static final int GROUP=43;
    public static final int ORDER=61;
    public static final int J_=50;
    public static final int BY=20;
    public static final int DecimalLiteral=74;
    public static final int RIGHT=63;
    public static final int B_=14;
    public static final int S_=10;
    public static final int SELECT=64;
    public static final int ASCENDING=13;
    public static final int K_=54;
    public static final int FloatingPointLiteral=72;
    public static final int HexLiteral=75;
    public static final int C_=12;
    public static final int UNION=68;
    public static final int T__91=91;
    public static final int T__100=100;
    public static final int T__92=92;
    public static final int ALL=6;
    public static final int T__93=93;
    public static final int T__102=102;
    public static final int T__94=94;
    public static final int T__101=101;
    public static final int T__90=90;
    public static final int T_=16;
    public static final int FROM=39;
    public static final int LRU=56;
    public static final int L_=5;
    public static final int Identifier=71;
    public static final int OctalLiteral=76;
    public static final int COMPLEMENTATION=27;
    public static final int T__99=99;
    public static final int DESCENDING=30;
    public static final int D_=8;
    public static final int T__95=95;
    public static final int T__96=96;
    public static final int T__97=97;
    public static final int IntegerLiteral=70;
    public static final int T__98=98;
    public static final int NULL=58;
    public static final int FILO=38;
    public static final int TRUE=67;
    public static final int U_=40;
    public static final int CACHE=22;
    public static final int EXCEPT=33;
    public static final int FULL=41;
    public static final int M_=24;
    public static final int NOT=57;
    public static final int LIKE=55;
    public static final int AND=9;
    public static final int E_=15;
    public static final int HAVING=45;
    public static final int DECORATE=29;
    public static final int Exponent=78;
    public static final int V_=44;
    public static final int Digital=81;
    public static final int LIMIT=66;
    public static final int N_=7;
    public static final int F_=35;
    public static final int OUTER=62;
    public static final int WS=84;
    public static final int EOF=-1;
    public static final int ON=59;
    public static final int Escape=79;
    public static final int T__110=110;
    public static final int OR=60;
    public static final int EXISTS=34;
    public static final int W_=17;
    public static final int FIFO=37;
    public static final int INTERSECT=48;
    public static final int SYMEXCEPT=65;
    public static final int O_=23;
    public static final int T__88=88;
    public static final int T__108=108;
    public static final int G_=42;
    public static final int T__89=89;
    public static final int T__107=107;
    public static final int FALSE=36;
    public static final int T__109=109;
    public static final int T__104=104;
    public static final int T__85=85;
    public static final int T__103=103;
    public static final int T__86=86;
    public static final int T__106=106;
    public static final int T__87=87;
    public static final int T__105=105;

    // delegates
    // delegators


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

    public String[] getTokenNames() { return SelectorParser.tokenNames; }
    public String getGrammarFileName() { return "org/datayoo/moql/antlr/Selector.g"; }



    // $ANTLR start "selector"
    // org/datayoo/moql/antlr/Selector.g:67:1: selector returns [SelectorDefinition selectorDefinition] : queryMetadata= queryExpression ;
    public final SelectorDefinition selector() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        SelectorDefinition queryMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:68:2: (queryMetadata= queryExpression )
            // org/datayoo/moql/antlr/Selector.g:68:4: queryMetadata= queryExpression
            {
            pushFollow(FOLLOW_queryExpression_in_selector704);
            queryMetadata=queryExpression();

            state._fsp--;
            if (state.failed) return selectorDefinition;
            if ( state.backtracking==0 ) {
              selectorDefinition = queryMetadata;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "selector"


    // $ANTLR start "queryExpression"
    // org/datayoo/moql/antlr/Selector.g:71:1: queryExpression returns [SelectorDefinition selectorDefinition] : (unionMetadata= unionExpression | exceptMetadata= exceptExpression | symexceptMetadata= symexceptExpression | complementationMetadata= complementationExpression | selectorMetadata= queryTerm );
    public final SelectorDefinition queryExpression() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        SelectorDefinition unionMetadata = null;

        SelectorDefinition exceptMetadata = null;

        SelectorDefinition symexceptMetadata = null;

        SelectorDefinition complementationMetadata = null;

        SelectorDefinition selectorMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:72:2: (unionMetadata= unionExpression | exceptMetadata= exceptExpression | symexceptMetadata= symexceptExpression | complementationMetadata= complementationExpression | selectorMetadata= queryTerm )
            int alt1=5;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA1_1 = input.LA(2);

                if ( (synpred1_Selector()) ) {
                    alt1=1;
                }
                else if ( (synpred2_Selector()) ) {
                    alt1=2;
                }
                else if ( (synpred3_Selector()) ) {
                    alt1=3;
                }
                else if ( (synpred4_Selector()) ) {
                    alt1=4;
                }
                else if ( (true) ) {
                    alt1=5;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 1, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                int LA1_2 = input.LA(2);

                if ( (synpred1_Selector()) ) {
                    alt1=1;
                }
                else if ( (synpred2_Selector()) ) {
                    alt1=2;
                }
                else if ( (synpred3_Selector()) ) {
                    alt1=3;
                }
                else if ( (synpred4_Selector()) ) {
                    alt1=4;
                }
                else if ( (true) ) {
                    alt1=5;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 1, 2, input);

                    throw nvae;
                }
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 1, 0, input);

                throw nvae;
            }

            switch (alt1) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:72:4: unionMetadata= unionExpression
                    {
                    pushFollow(FOLLOW_unionExpression_in_queryExpression725);
                    unionMetadata=unionExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = unionMetadata;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:73:4: exceptMetadata= exceptExpression
                    {
                    pushFollow(FOLLOW_exceptExpression_in_queryExpression736);
                    exceptMetadata=exceptExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = exceptMetadata;
                    }

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:74:4: symexceptMetadata= symexceptExpression
                    {
                    pushFollow(FOLLOW_symexceptExpression_in_queryExpression747);
                    symexceptMetadata=symexceptExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = symexceptMetadata;
                    }

                    }
                    break;
                case 4 :
                    // org/datayoo/moql/antlr/Selector.g:75:4: complementationMetadata= complementationExpression
                    {
                    pushFollow(FOLLOW_complementationExpression_in_queryExpression758);
                    complementationMetadata=complementationExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = complementationMetadata;
                    }

                    }
                    break;
                case 5 :
                    // org/datayoo/moql/antlr/Selector.g:76:4: selectorMetadata= queryTerm
                    {
                    pushFollow(FOLLOW_queryTerm_in_queryExpression769);
                    selectorMetadata=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = selectorMetadata;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "queryExpression"


    // $ANTLR start "unionExpression"
    // org/datayoo/moql/antlr/Selector.g:79:1: unionExpression returns [SelectorDefinition selectorDefinition] : ( '(' lSelectorDefinition2= queryTerm ')' UNION (unionAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm UNION (unionAll= ALL )? rSelectorDefinition1= queryExpression );
    public final SelectorDefinition unionExpression() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        Token unionAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;

        SelectorDefinition lSelectorDefinition1 = null;

        SelectorDefinition rSelectorDefinition1 = null;



        SetlectorMetadata setlectorMetadata = new SetlectorMetadata();
        ColumnsMetadata columns = new ColumnsMetadata();
        List sets = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:85:2: ( '(' lSelectorDefinition2= queryTerm ')' UNION (unionAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm UNION (unionAll= ALL )? rSelectorDefinition1= queryExpression )
            int alt7=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA7_1 = input.LA(2);

                if ( (synpred9_Selector()) ) {
                    alt7=1;
                }
                else if ( (true) ) {
                    alt7=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 7, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                alt7=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;
            }

            switch (alt7) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:85:4: '(' lSelectorDefinition2= queryTerm ')' UNION (unionAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
                    {
                    match(input,85,FOLLOW_85_in_unionExpression790); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryTerm_in_unionExpression795);
                    lSelectorDefinition2=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_unionExpression797); if (state.failed) return selectorDefinition;
                    match(input,UNION,FOLLOW_UNION_in_unionExpression799); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:85:59: (unionAll= ALL )?
                    int alt2=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt2=1;
                            }
                            break;
                    }

                    switch (alt2) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: unionAll= ALL
                            {
                            unionAll=(Token)match(input,ALL,FOLLOW_ALL_in_unionExpression805); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    match(input,85,FOLLOW_85_in_unionExpression809); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryExpression_in_unionExpression815);
                    rSelectorDefinition2=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_unionExpression817); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:85:122: (orderBy= orderByClause )?
                    int alt3=2;
                    switch ( input.LA(1) ) {
                        case ORDER:
                            {
                            alt3=1;
                            }
                            break;
                    }

                    switch (alt3) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                            {
                            pushFollow(FOLLOW_orderByClause_in_unionExpression823);
                            orderBy=orderByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:85:153: (limitMetadata= limitClause )?
                    int alt4=2;
                    switch ( input.LA(1) ) {
                        case LIMIT:
                            {
                            alt4=1;
                            }
                            break;
                    }

                    switch (alt4) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                            {
                            pushFollow(FOLLOW_limitClause_in_unionExpression830);
                            limitMetadata=limitClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:85:179: (decorateBy= decorateByClause )?
                    int alt5=2;
                    switch ( input.LA(1) ) {
                        case DECORATE:
                            {
                            alt5=1;
                            }
                            break;
                    }

                    switch (alt5) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                            {
                            pushFollow(FOLLOW_decorateByClause_in_unionExpression837);
                            decorateBy=decorateByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      	if (unionAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition2);
                      	sets.add(rSelectorDefinition2);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.UNION);
                      	if (orderBy != null) {
                      		setlectorMetadata.setOrderBy(orderBy);
                      	}
                      	if (limitMetadata != null) {
                      		setlectorMetadata.setLimit(limitMetadata);
                      	}
                      	if (decorateBy != null) {
                      		setlectorMetadata.setDecorateBy(decorateBy);
                      	}
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:106:4: lSelectorDefinition1= queryTerm UNION (unionAll= ALL )? rSelectorDefinition1= queryExpression
                    {
                    pushFollow(FOLLOW_queryTerm_in_unionExpression850);
                    lSelectorDefinition1=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,UNION,FOLLOW_UNION_in_unionExpression852); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:106:52: (unionAll= ALL )?
                    int alt6=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt6=1;
                            }
                            break;
                    }

                    switch (alt6) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: unionAll= ALL
                            {
                            unionAll=(Token)match(input,ALL,FOLLOW_ALL_in_unionExpression858); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_queryExpression_in_unionExpression865);
                    rSelectorDefinition1=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {

                      	if (unionAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition1);
                      	sets.add(rSelectorDefinition1);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.UNION);
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "unionExpression"


    // $ANTLR start "exceptExpression"
    // org/datayoo/moql/antlr/Selector.g:120:1: exceptExpression returns [SelectorDefinition selectorDefinition] : ( '(' lSelectorDefinition2= queryTerm ')' EXCEPT (exceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm EXCEPT (exceptAll= ALL )? rSelectorDefinition1= queryExpression );
    public final SelectorDefinition exceptExpression() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        Token exceptAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;

        SelectorDefinition lSelectorDefinition1 = null;

        SelectorDefinition rSelectorDefinition1 = null;



        SetlectorMetadata setlectorMetadata = new SetlectorMetadata();
        ColumnsMetadata columns = new ColumnsMetadata();
        List sets = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:126:2: ( '(' lSelectorDefinition2= queryTerm ')' EXCEPT (exceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm EXCEPT (exceptAll= ALL )? rSelectorDefinition1= queryExpression )
            int alt13=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA13_1 = input.LA(2);

                if ( (synpred15_Selector()) ) {
                    alt13=1;
                }
                else if ( (true) ) {
                    alt13=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                alt13=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 13, 0, input);

                throw nvae;
            }

            switch (alt13) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:126:4: '(' lSelectorDefinition2= queryTerm ')' EXCEPT (exceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
                    {
                    match(input,85,FOLLOW_85_in_exceptExpression887); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryTerm_in_exceptExpression892);
                    lSelectorDefinition2=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_exceptExpression894); if (state.failed) return selectorDefinition;
                    match(input,EXCEPT,FOLLOW_EXCEPT_in_exceptExpression896); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:126:61: (exceptAll= ALL )?
                    int alt8=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt8=1;
                            }
                            break;
                    }

                    switch (alt8) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: exceptAll= ALL
                            {
                            exceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_exceptExpression902); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    match(input,85,FOLLOW_85_in_exceptExpression905); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryExpression_in_exceptExpression911);
                    rSelectorDefinition2=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_exceptExpression913); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:126:123: (orderBy= orderByClause )?
                    int alt9=2;
                    switch ( input.LA(1) ) {
                        case ORDER:
                            {
                            alt9=1;
                            }
                            break;
                    }

                    switch (alt9) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                            {
                            pushFollow(FOLLOW_orderByClause_in_exceptExpression919);
                            orderBy=orderByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:126:154: (limitMetadata= limitClause )?
                    int alt10=2;
                    switch ( input.LA(1) ) {
                        case LIMIT:
                            {
                            alt10=1;
                            }
                            break;
                    }

                    switch (alt10) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                            {
                            pushFollow(FOLLOW_limitClause_in_exceptExpression926);
                            limitMetadata=limitClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:126:180: (decorateBy= decorateByClause )?
                    int alt11=2;
                    switch ( input.LA(1) ) {
                        case DECORATE:
                            {
                            alt11=1;
                            }
                            break;
                    }

                    switch (alt11) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                            {
                            pushFollow(FOLLOW_decorateByClause_in_exceptExpression933);
                            decorateBy=decorateByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      	if (exceptAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition2);
                      	sets.add(rSelectorDefinition2);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.EXCEPT);
                      	if (orderBy != null) {
                      		setlectorMetadata.setOrderBy(orderBy);
                      	}
                      	if (limitMetadata != null) {
                      		setlectorMetadata.setLimit(limitMetadata);
                      	}
                      	if (decorateBy != null) {
                      		setlectorMetadata.setDecorateBy(decorateBy);
                      	}
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:147:4: lSelectorDefinition1= queryTerm EXCEPT (exceptAll= ALL )? rSelectorDefinition1= queryExpression
                    {
                    pushFollow(FOLLOW_queryTerm_in_exceptExpression947);
                    lSelectorDefinition1=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,EXCEPT,FOLLOW_EXCEPT_in_exceptExpression949); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:147:54: (exceptAll= ALL )?
                    int alt12=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt12=1;
                            }
                            break;
                    }

                    switch (alt12) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: exceptAll= ALL
                            {
                            exceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_exceptExpression955); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_queryExpression_in_exceptExpression962);
                    rSelectorDefinition1=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {

                      	if (exceptAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition1);
                      	sets.add(rSelectorDefinition1);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.EXCEPT);
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "exceptExpression"


    // $ANTLR start "symexceptExpression"
    // org/datayoo/moql/antlr/Selector.g:161:1: symexceptExpression returns [SelectorDefinition selectorDefinition] : ( '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm SYMEXCEPT (symexceptAll= ALL )? rSelectorDefinition1= queryExpression );
    public final SelectorDefinition symexceptExpression() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        Token symexceptAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;

        SelectorDefinition lSelectorDefinition1 = null;

        SelectorDefinition rSelectorDefinition1 = null;



        SetlectorMetadata setlectorMetadata = new SetlectorMetadata();
        ColumnsMetadata columns = new ColumnsMetadata();
        List sets = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:167:2: ( '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm SYMEXCEPT (symexceptAll= ALL )? rSelectorDefinition1= queryExpression )
            int alt19=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA19_1 = input.LA(2);

                if ( (synpred21_Selector()) ) {
                    alt19=1;
                }
                else if ( (true) ) {
                    alt19=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 19, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                alt19=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 19, 0, input);

                throw nvae;
            }

            switch (alt19) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:167:4: '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
                    {
                    match(input,85,FOLLOW_85_in_symexceptExpression984); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryTerm_in_symexceptExpression989);
                    lSelectorDefinition2=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_symexceptExpression991); if (state.failed) return selectorDefinition;
                    match(input,SYMEXCEPT,FOLLOW_SYMEXCEPT_in_symexceptExpression993); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:167:67: (symexceptAll= ALL )?
                    int alt14=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt14=1;
                            }
                            break;
                    }

                    switch (alt14) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: symexceptAll= ALL
                            {
                            symexceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_symexceptExpression999); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    match(input,85,FOLLOW_85_in_symexceptExpression1002); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryExpression_in_symexceptExpression1008);
                    rSelectorDefinition2=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_symexceptExpression1010); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:167:129: (orderBy= orderByClause )?
                    int alt15=2;
                    switch ( input.LA(1) ) {
                        case ORDER:
                            {
                            alt15=1;
                            }
                            break;
                    }

                    switch (alt15) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                            {
                            pushFollow(FOLLOW_orderByClause_in_symexceptExpression1016);
                            orderBy=orderByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:167:160: (limitMetadata= limitClause )?
                    int alt16=2;
                    switch ( input.LA(1) ) {
                        case LIMIT:
                            {
                            alt16=1;
                            }
                            break;
                    }

                    switch (alt16) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                            {
                            pushFollow(FOLLOW_limitClause_in_symexceptExpression1023);
                            limitMetadata=limitClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:167:186: (decorateBy= decorateByClause )?
                    int alt17=2;
                    switch ( input.LA(1) ) {
                        case DECORATE:
                            {
                            alt17=1;
                            }
                            break;
                    }

                    switch (alt17) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                            {
                            pushFollow(FOLLOW_decorateByClause_in_symexceptExpression1030);
                            decorateBy=decorateByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      	if (symexceptAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition2);
                      	sets.add(rSelectorDefinition2);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.SYMEXCEPT);
                      	if (orderBy != null) {
                      		setlectorMetadata.setOrderBy(orderBy);
                      	}
                      	if (limitMetadata != null) {
                      		setlectorMetadata.setLimit(limitMetadata);
                      	}
                      	if (decorateBy != null) {
                      		setlectorMetadata.setDecorateBy(decorateBy);
                      	}
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:188:4: lSelectorDefinition1= queryTerm SYMEXCEPT (symexceptAll= ALL )? rSelectorDefinition1= queryExpression
                    {
                    pushFollow(FOLLOW_queryTerm_in_symexceptExpression1043);
                    lSelectorDefinition1=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,SYMEXCEPT,FOLLOW_SYMEXCEPT_in_symexceptExpression1045); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:188:60: (symexceptAll= ALL )?
                    int alt18=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt18=1;
                            }
                            break;
                    }

                    switch (alt18) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: symexceptAll= ALL
                            {
                            symexceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_symexceptExpression1051); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_queryExpression_in_symexceptExpression1058);
                    rSelectorDefinition1=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {

                      	if (symexceptAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition1);
                      	sets.add(rSelectorDefinition1);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.SYMEXCEPT);
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "symexceptExpression"


    // $ANTLR start "complementationExpression"
    // org/datayoo/moql/antlr/Selector.g:202:1: complementationExpression returns [SelectorDefinition selectorDefinition] : ( '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm COMPLEMENTATION (complementationAll= ALL )? rSelectorDefinition1= queryExpression );
    public final SelectorDefinition complementationExpression() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        Token symexceptAll=null;
        Token complementationAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;

        SelectorDefinition lSelectorDefinition1 = null;

        SelectorDefinition rSelectorDefinition1 = null;



        SetlectorMetadata setlectorMetadata = new SetlectorMetadata();
        ColumnsMetadata columns = new ColumnsMetadata();
        List sets = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:208:2: ( '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryTerm COMPLEMENTATION (complementationAll= ALL )? rSelectorDefinition1= queryExpression )
            int alt25=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA25_1 = input.LA(2);

                if ( (synpred27_Selector()) ) {
                    alt25=1;
                }
                else if ( (true) ) {
                    alt25=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 25, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                alt25=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 25, 0, input);

                throw nvae;
            }

            switch (alt25) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:208:4: '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
                    {
                    match(input,85,FOLLOW_85_in_complementationExpression1081); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryTerm_in_complementationExpression1086);
                    lSelectorDefinition2=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_complementationExpression1088); if (state.failed) return selectorDefinition;
                    match(input,SYMEXCEPT,FOLLOW_SYMEXCEPT_in_complementationExpression1090); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:208:67: (symexceptAll= ALL )?
                    int alt20=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt20=1;
                            }
                            break;
                    }

                    switch (alt20) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: symexceptAll= ALL
                            {
                            symexceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_complementationExpression1096); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    match(input,85,FOLLOW_85_in_complementationExpression1099); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryExpression_in_complementationExpression1105);
                    rSelectorDefinition2=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_complementationExpression1107); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:208:129: (orderBy= orderByClause )?
                    int alt21=2;
                    switch ( input.LA(1) ) {
                        case ORDER:
                            {
                            alt21=1;
                            }
                            break;
                    }

                    switch (alt21) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                            {
                            pushFollow(FOLLOW_orderByClause_in_complementationExpression1113);
                            orderBy=orderByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:208:160: (limitMetadata= limitClause )?
                    int alt22=2;
                    switch ( input.LA(1) ) {
                        case LIMIT:
                            {
                            alt22=1;
                            }
                            break;
                    }

                    switch (alt22) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                            {
                            pushFollow(FOLLOW_limitClause_in_complementationExpression1120);
                            limitMetadata=limitClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:208:186: (decorateBy= decorateByClause )?
                    int alt23=2;
                    switch ( input.LA(1) ) {
                        case DECORATE:
                            {
                            alt23=1;
                            }
                            break;
                    }

                    switch (alt23) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                            {
                            pushFollow(FOLLOW_decorateByClause_in_complementationExpression1127);
                            decorateBy=decorateByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      	if (complementationAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition2);
                      	sets.add(rSelectorDefinition2);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.COMPLEMENTATION);
                      	if (orderBy != null) {
                      		setlectorMetadata.setOrderBy(orderBy);
                      	}
                      	if (limitMetadata != null) {
                      		setlectorMetadata.setLimit(limitMetadata);
                      	}
                      	if (decorateBy != null) {
                      		setlectorMetadata.setDecorateBy(decorateBy);
                      	}
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:229:4: lSelectorDefinition1= queryTerm COMPLEMENTATION (complementationAll= ALL )? rSelectorDefinition1= queryExpression
                    {
                    pushFollow(FOLLOW_queryTerm_in_complementationExpression1140);
                    lSelectorDefinition1=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,COMPLEMENTATION,FOLLOW_COMPLEMENTATION_in_complementationExpression1142); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:229:72: (complementationAll= ALL )?
                    int alt24=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt24=1;
                            }
                            break;
                    }

                    switch (alt24) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: complementationAll= ALL
                            {
                            complementationAll=(Token)match(input,ALL,FOLLOW_ALL_in_complementationExpression1148); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_queryExpression_in_complementationExpression1155);
                    rSelectorDefinition1=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {

                      	if (complementationAll == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition1);
                      	sets.add(rSelectorDefinition1);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.COMPLEMENTATION);
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "complementationExpression"


    // $ANTLR start "orderByClause"
    // org/datayoo/moql/antlr/Selector.g:242:1: orderByClause returns [List orders] : ORDER BY order= sortSpecification ( ',' order= sortSpecification )* ;
    public final List orderByClause() throws RecognitionException {
        List orders = null;

        OrderMetadata order = null;



        orders = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:246:2: ( ORDER BY order= sortSpecification ( ',' order= sortSpecification )* )
            // org/datayoo/moql/antlr/Selector.g:246:4: ORDER BY order= sortSpecification ( ',' order= sortSpecification )*
            {
            match(input,ORDER,FOLLOW_ORDER_in_orderByClause1175); if (state.failed) return orders;
            match(input,BY,FOLLOW_BY_in_orderByClause1177); if (state.failed) return orders;
            pushFollow(FOLLOW_sortSpecification_in_orderByClause1183);
            order=sortSpecification();

            state._fsp--;
            if (state.failed) return orders;
            if ( state.backtracking==0 ) {
              orders.add(order);
            }
            // org/datayoo/moql/antlr/Selector.g:246:60: ( ',' order= sortSpecification )*
            loop26:
            do {
                int alt26=2;
                switch ( input.LA(1) ) {
                case 87:
                    {
                    alt26=1;
                    }
                    break;

                }

                switch (alt26) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:246:61: ',' order= sortSpecification
            	    {
            	    match(input,87,FOLLOW_87_in_orderByClause1188); if (state.failed) return orders;
            	    pushFollow(FOLLOW_sortSpecification_in_orderByClause1194);
            	    order=sortSpecification();

            	    state._fsp--;
            	    if (state.failed) return orders;
            	    if ( state.backtracking==0 ) {
            	      orders.add(order);
            	    }

            	    }
            	    break;

            	default :
            	    break loop26;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return orders;
    }
    // $ANTLR end "orderByClause"


    // $ANTLR start "sortSpecification"
    // org/datayoo/moql/antlr/Selector.g:249:1: sortSpecification returns [OrderMetadata order] : expr= expression (type= orderingSpecification )? ;
    public final OrderMetadata sortSpecification() throws RecognitionException {
        OrderMetadata order = null;

        SelectorParser.expression_return expr = null;

        OrderType type = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:257:2: (expr= expression (type= orderingSpecification )? )
            // org/datayoo/moql/antlr/Selector.g:257:4: expr= expression (type= orderingSpecification )?
            {
            pushFollow(FOLLOW_expression_in_sortSpecification1221);
            expr=expression();

            state._fsp--;
            if (state.failed) return order;
            // org/datayoo/moql/antlr/Selector.g:257:27: (type= orderingSpecification )?
            int alt27=2;
            switch ( input.LA(1) ) {
                case ASCENDING:
                case DESCENDING:
                    {
                    alt27=1;
                    }
                    break;
            }

            switch (alt27) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: type= orderingSpecification
                    {
                    pushFollow(FOLLOW_orderingSpecification_in_sortSpecification1227);
                    type=orderingSpecification();

                    state._fsp--;
                    if (state.failed) return order;

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              if (type == null) {
              	order = new OrderMetadata(expr.expressionText);
              } else {
              	order = new OrderMetadata(expr.expressionText, type);
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return order;
    }
    // $ANTLR end "sortSpecification"


    // $ANTLR start "orderingSpecification"
    // org/datayoo/moql/antlr/Selector.g:260:1: orderingSpecification returns [OrderType type] : (t= ASCENDING | t= DESCENDING );
    public final OrderType orderingSpecification() throws RecognitionException {
        OrderType type = null;

        Token t=null;

        try {
            // org/datayoo/moql/antlr/Selector.g:264:2: (t= ASCENDING | t= DESCENDING )
            int alt28=2;
            switch ( input.LA(1) ) {
            case ASCENDING:
                {
                alt28=1;
                }
                break;
            case DESCENDING:
                {
                alt28=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return type;}
                NoViableAltException nvae =
                    new NoViableAltException("", 28, 0, input);

                throw nvae;
            }

            switch (alt28) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:264:4: t= ASCENDING
                    {
                    t=(Token)match(input,ASCENDING,FOLLOW_ASCENDING_in_orderingSpecification1251); if (state.failed) return type;

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:264:20: t= DESCENDING
                    {
                    t=(Token)match(input,DESCENDING,FOLLOW_DESCENDING_in_orderingSpecification1259); if (state.failed) return type;

                    }
                    break;

            }
            if ( state.backtracking==0 ) {

              type = OrderType.valueOf(t.getText().toUpperCase());

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return type;
    }
    // $ANTLR end "orderingSpecification"


    // $ANTLR start "queryTerm"
    // org/datayoo/moql/antlr/Selector.g:267:1: queryTerm returns [SelectorDefinition selectorDefinition] : (intersectMetadata= intersectExpression | queryMetadata= queryPrimary );
    public final SelectorDefinition queryTerm() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        SelectorDefinition intersectMetadata = null;

        SelectorDefinition queryMetadata = null;



        SetlectorMetadata setlectorMetadata = new SetlectorMetadata();
        ColumnsMetadata columns = new ColumnsMetadata();
        List sets = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:273:2: (intersectMetadata= intersectExpression | queryMetadata= queryPrimary )
            int alt29=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA29_1 = input.LA(2);

                if ( (synpred32_Selector()) ) {
                    alt29=1;
                }
                else if ( (true) ) {
                    alt29=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 29, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                int LA29_2 = input.LA(2);

                if ( (synpred32_Selector()) ) {
                    alt29=1;
                }
                else if ( (true) ) {
                    alt29=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 29, 2, input);

                    throw nvae;
                }
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 29, 0, input);

                throw nvae;
            }

            switch (alt29) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:273:4: intersectMetadata= intersectExpression
                    {
                    pushFollow(FOLLOW_intersectExpression_in_queryTerm1283);
                    intersectMetadata=intersectExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = intersectMetadata;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:274:4: queryMetadata= queryPrimary
                    {
                    pushFollow(FOLLOW_queryPrimary_in_queryTerm1294);
                    queryMetadata=queryPrimary();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = queryMetadata;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "queryTerm"


    // $ANTLR start "intersectExpression"
    // org/datayoo/moql/antlr/Selector.g:277:1: intersectExpression returns [SelectorDefinition selectorDefinition] : ( '(' lSelectorDefinition2= queryPrimary ')' INTERSECT (all= ALL )? '(' rSelectorDefinition2= queryTerm ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryPrimary INTERSECT (all= ALL )? rSelectorDefinition1= queryTerm );
    public final SelectorDefinition intersectExpression() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        Token all=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;

        SelectorDefinition lSelectorDefinition1 = null;

        SelectorDefinition rSelectorDefinition1 = null;



        SetlectorMetadata setlectorMetadata = new SetlectorMetadata();
        ColumnsMetadata columns = new ColumnsMetadata();
        List sets = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:283:2: ( '(' lSelectorDefinition2= queryPrimary ')' INTERSECT (all= ALL )? '(' rSelectorDefinition2= queryTerm ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? | lSelectorDefinition1= queryPrimary INTERSECT (all= ALL )? rSelectorDefinition1= queryTerm )
            int alt35=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA35_1 = input.LA(2);

                if ( (synpred37_Selector()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                alt35=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 35, 0, input);

                throw nvae;
            }

            switch (alt35) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:283:4: '(' lSelectorDefinition2= queryPrimary ')' INTERSECT (all= ALL )? '(' rSelectorDefinition2= queryTerm ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
                    {
                    match(input,85,FOLLOW_85_in_intersectExpression1315); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryPrimary_in_intersectExpression1320);
                    lSelectorDefinition2=queryPrimary();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_intersectExpression1322); if (state.failed) return selectorDefinition;
                    match(input,INTERSECT,FOLLOW_INTERSECT_in_intersectExpression1324); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:283:61: (all= ALL )?
                    int alt30=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt30=1;
                            }
                            break;
                    }

                    switch (alt30) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: all= ALL
                            {
                            all=(Token)match(input,ALL,FOLLOW_ALL_in_intersectExpression1330); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    match(input,85,FOLLOW_85_in_intersectExpression1333); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryTerm_in_intersectExpression1339);
                    rSelectorDefinition2=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,86,FOLLOW_86_in_intersectExpression1341); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:283:117: (orderBy= orderByClause )?
                    int alt31=2;
                    switch ( input.LA(1) ) {
                        case ORDER:
                            {
                            alt31=1;
                            }
                            break;
                    }

                    switch (alt31) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                            {
                            pushFollow(FOLLOW_orderByClause_in_intersectExpression1347);
                            orderBy=orderByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:283:148: (limitMetadata= limitClause )?
                    int alt32=2;
                    switch ( input.LA(1) ) {
                        case LIMIT:
                            {
                            alt32=1;
                            }
                            break;
                    }

                    switch (alt32) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                            {
                            pushFollow(FOLLOW_limitClause_in_intersectExpression1354);
                            limitMetadata=limitClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    // org/datayoo/moql/antlr/Selector.g:283:174: (decorateBy= decorateByClause )?
                    int alt33=2;
                    switch ( input.LA(1) ) {
                        case DECORATE:
                            {
                            alt33=1;
                            }
                            break;
                    }

                    switch (alt33) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                            {
                            pushFollow(FOLLOW_decorateByClause_in_intersectExpression1361);
                            decorateBy=decorateByClause();

                            state._fsp--;
                            if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      	if (all == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition2);
                      	sets.add(rSelectorDefinition2);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.INTERSECT);
                      	if (orderBy != null) {
                      		setlectorMetadata.setOrderBy(orderBy);
                      	}
                      	if (limitMetadata != null) {
                      		setlectorMetadata.setLimit(limitMetadata);
                      	}
                      	if (decorateBy != null) {
                      		setlectorMetadata.setDecorateBy(decorateBy);
                      	}
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:304:4: lSelectorDefinition1= queryPrimary INTERSECT (all= ALL )? rSelectorDefinition1= queryTerm
                    {
                    pushFollow(FOLLOW_queryPrimary_in_intersectExpression1374);
                    lSelectorDefinition1=queryPrimary();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    match(input,INTERSECT,FOLLOW_INTERSECT_in_intersectExpression1376); if (state.failed) return selectorDefinition;
                    // org/datayoo/moql/antlr/Selector.g:304:54: (all= ALL )?
                    int alt34=2;
                    switch ( input.LA(1) ) {
                        case ALL:
                            {
                            alt34=1;
                            }
                            break;
                    }

                    switch (alt34) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: all= ALL
                            {
                            all=(Token)match(input,ALL,FOLLOW_ALL_in_intersectExpression1382); if (state.failed) return selectorDefinition;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_queryTerm_in_intersectExpression1389);
                    rSelectorDefinition1=queryTerm();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {

                      	if (all == null) {
                      		columns.setDistinct(true);
                      	}
                      	setlectorMetadata.setColumns(columns);
                      	sets.add(lSelectorDefinition1);
                      	sets.add(rSelectorDefinition1);
                      	setlectorMetadata.setSets(sets);
                      	setlectorMetadata.setCombinationType(CombinationType.INTERSECT);
                      	selectorDefinition = setlectorMetadata;
                      	
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "intersectExpression"


    // $ANTLR start "queryPrimary"
    // org/datayoo/moql/antlr/Selector.g:319:1: queryPrimary returns [SelectorDefinition selectorDefinition] : (selectorMetadata= querySpecification | '(' queryMetadata= queryExpression ')' );
    public final SelectorDefinition queryPrimary() throws RecognitionException {
        SelectorDefinition selectorDefinition = null;

        SelectorMetadata selectorMetadata = null;

        SelectorDefinition queryMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:320:2: (selectorMetadata= querySpecification | '(' queryMetadata= queryExpression ')' )
            int alt36=2;
            switch ( input.LA(1) ) {
            case SELECT:
                {
                alt36=1;
                }
                break;
            case 85:
                {
                alt36=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return selectorDefinition;}
                NoViableAltException nvae =
                    new NoViableAltException("", 36, 0, input);

                throw nvae;
            }

            switch (alt36) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:320:4: selectorMetadata= querySpecification
                    {
                    pushFollow(FOLLOW_querySpecification_in_queryPrimary1411);
                    selectorMetadata=querySpecification();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = selectorMetadata;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:321:4: '(' queryMetadata= queryExpression ')'
                    {
                    match(input,85,FOLLOW_85_in_queryPrimary1418); if (state.failed) return selectorDefinition;
                    pushFollow(FOLLOW_queryExpression_in_queryPrimary1424);
                    queryMetadata=queryExpression();

                    state._fsp--;
                    if (state.failed) return selectorDefinition;
                    if ( state.backtracking==0 ) {
                      selectorDefinition = queryMetadata;
                    }
                    match(input,86,FOLLOW_86_in_queryPrimary1427); if (state.failed) return selectorDefinition;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorDefinition;
    }
    // $ANTLR end "queryPrimary"


    // $ANTLR start "querySpecification"
    // org/datayoo/moql/antlr/Selector.g:324:1: querySpecification returns [SelectorMetadata selectorMetadata] : SELECT (cacheMetadata= cache )? (distinct= setQuantifier )? columnsMetadata= selectList tablesMetadata= fromClause (whereMetadata= whereClause )? (groupBy= groupByClause )? (havingMetadata= havingClause )? (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? ;
    public final SelectorMetadata querySpecification() throws RecognitionException {
        SelectorMetadata selectorMetadata = null;

        CacheMetadata cacheMetadata = null;

        boolean distinct = false;

        ColumnsMetadata columnsMetadata = null;

        TablesMetadata tablesMetadata = null;

        ConditionMetadata whereMetadata = null;

        List groupBy = null;

        ConditionMetadata havingMetadata = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;



        selectorMetadata = new SelectorMetadata();

        try {
            // org/datayoo/moql/antlr/Selector.g:347:2: ( SELECT (cacheMetadata= cache )? (distinct= setQuantifier )? columnsMetadata= selectList tablesMetadata= fromClause (whereMetadata= whereClause )? (groupBy= groupByClause )? (havingMetadata= havingClause )? (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? )
            // org/datayoo/moql/antlr/Selector.g:347:4: SELECT (cacheMetadata= cache )? (distinct= setQuantifier )? columnsMetadata= selectList tablesMetadata= fromClause (whereMetadata= whereClause )? (groupBy= groupByClause )? (havingMetadata= havingClause )? (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
            {
            match(input,SELECT,FOLLOW_SELECT_in_querySpecification1453); if (state.failed) return selectorMetadata;
            // org/datayoo/moql/antlr/Selector.g:347:25: (cacheMetadata= cache )?
            int alt37=2;
            switch ( input.LA(1) ) {
                case CACHE:
                    {
                    alt37=1;
                    }
                    break;
            }

            switch (alt37) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: cacheMetadata= cache
                    {
                    pushFollow(FOLLOW_cache_in_querySpecification1459);
                    cacheMetadata=cache();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }

            // org/datayoo/moql/antlr/Selector.g:347:43: (distinct= setQuantifier )?
            int alt38=2;
            switch ( input.LA(1) ) {
                case ALL:
                case DISTINCT:
                    {
                    alt38=1;
                    }
                    break;
            }

            switch (alt38) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: distinct= setQuantifier
                    {
                    pushFollow(FOLLOW_setQuantifier_in_querySpecification1466);
                    distinct=setQuantifier();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }

            pushFollow(FOLLOW_selectList_in_querySpecification1473);
            columnsMetadata=selectList();

            state._fsp--;
            if (state.failed) return selectorMetadata;
            pushFollow(FOLLOW_fromClause_in_querySpecification1481);
            tablesMetadata=fromClause();

            state._fsp--;
            if (state.failed) return selectorMetadata;
            // org/datayoo/moql/antlr/Selector.g:348:44: (whereMetadata= whereClause )?
            int alt39=2;
            switch ( input.LA(1) ) {
                case WHERE:
                    {
                    alt39=1;
                    }
                    break;
            }

            switch (alt39) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: whereMetadata= whereClause
                    {
                    pushFollow(FOLLOW_whereClause_in_querySpecification1487);
                    whereMetadata=whereClause();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }

            // org/datayoo/moql/antlr/Selector.g:348:67: (groupBy= groupByClause )?
            int alt40=2;
            switch ( input.LA(1) ) {
                case GROUP:
                    {
                    alt40=1;
                    }
                    break;
            }

            switch (alt40) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: groupBy= groupByClause
                    {
                    pushFollow(FOLLOW_groupByClause_in_querySpecification1494);
                    groupBy=groupByClause();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }

            // org/datayoo/moql/antlr/Selector.g:348:99: (havingMetadata= havingClause )?
            int alt41=2;
            switch ( input.LA(1) ) {
                case HAVING:
                    {
                    alt41=1;
                    }
                    break;
            }

            switch (alt41) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: havingMetadata= havingClause
                    {
                    pushFollow(FOLLOW_havingClause_in_querySpecification1501);
                    havingMetadata=havingClause();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }

            // org/datayoo/moql/antlr/Selector.g:349:11: (orderBy= orderByClause )?
            int alt42=2;
            switch ( input.LA(1) ) {
                case ORDER:
                    {
                    alt42=1;
                    }
                    break;
            }

            switch (alt42) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                    {
                    pushFollow(FOLLOW_orderByClause_in_querySpecification1510);
                    orderBy=orderByClause();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }

            // org/datayoo/moql/antlr/Selector.g:349:42: (limitMetadata= limitClause )?
            int alt43=2;
            switch ( input.LA(1) ) {
                case LIMIT:
                    {
                    alt43=1;
                    }
                    break;
            }

            switch (alt43) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                    {
                    pushFollow(FOLLOW_limitClause_in_querySpecification1517);
                    limitMetadata=limitClause();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }

            // org/datayoo/moql/antlr/Selector.g:349:68: (decorateBy= decorateByClause )?
            int alt44=2;
            switch ( input.LA(1) ) {
                case DECORATE:
                    {
                    alt44=1;
                    }
                    break;
            }

            switch (alt44) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                    {
                    pushFollow(FOLLOW_decorateByClause_in_querySpecification1524);
                    decorateBy=decorateByClause();

                    state._fsp--;
                    if (state.failed) return selectorMetadata;

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              if (cacheMetadata != null)
              	selectorMetadata.setCache(cacheMetadata);
              columnsMetadata.setDistinct(distinct);
              selectorMetadata.setColumns(columnsMetadata);
              selectorMetadata.setTables(tablesMetadata);
              if (whereMetadata != null)
              	selectorMetadata.setWhere(whereMetadata);
              if (groupBy != null)
              	selectorMetadata.setGroupBy(groupBy);
              if (havingMetadata != null)
              	selectorMetadata.setHaving(havingMetadata);
              if (orderBy != null) 
              	selectorMetadata.setOrderBy(orderBy);
              if (limitMetadata != null)
              	selectorMetadata.setLimit(limitMetadata);
              if (decorateBy != null)
              	selectorMetadata.setDecorateBy(decorateBy);

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return selectorMetadata;
    }
    // $ANTLR end "querySpecification"


    // $ANTLR start "cache"
    // org/datayoo/moql/antlr/Selector.g:352:1: cache returns [CacheMetadata cache] : CACHE '(' size= IntegerLiteral ( ',' strategy= washoutStrategy )? ')' ;
    public final CacheMetadata cache() throws RecognitionException {
        CacheMetadata cache = null;

        Token size=null;
        WashoutStrategy strategy = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:360:2: ( CACHE '(' size= IntegerLiteral ( ',' strategy= washoutStrategy )? ')' )
            // org/datayoo/moql/antlr/Selector.g:360:4: CACHE '(' size= IntegerLiteral ( ',' strategy= washoutStrategy )? ')'
            {
            match(input,CACHE,FOLLOW_CACHE_in_cache1544); if (state.failed) return cache;
            match(input,85,FOLLOW_85_in_cache1546); if (state.failed) return cache;
            size=(Token)match(input,IntegerLiteral,FOLLOW_IntegerLiteral_in_cache1552); if (state.failed) return cache;
            // org/datayoo/moql/antlr/Selector.g:360:36: ( ',' strategy= washoutStrategy )?
            int alt45=2;
            switch ( input.LA(1) ) {
                case 87:
                    {
                    alt45=1;
                    }
                    break;
            }

            switch (alt45) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:360:37: ',' strategy= washoutStrategy
                    {
                    match(input,87,FOLLOW_87_in_cache1555); if (state.failed) return cache;
                    pushFollow(FOLLOW_washoutStrategy_in_cache1561);
                    strategy=washoutStrategy();

                    state._fsp--;
                    if (state.failed) return cache;

                    }
                    break;

            }

            match(input,86,FOLLOW_86_in_cache1565); if (state.failed) return cache;

            }

            if ( state.backtracking==0 ) {

              if (strategy == null) {
              	cache = new CacheMetadata(Integer.valueOf(size.getText()));
              } else {
                  cache = new CacheMetadata(Integer.valueOf(size.getText()), strategy); 
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return cache;
    }
    // $ANTLR end "cache"


    // $ANTLR start "washoutStrategy"
    // org/datayoo/moql/antlr/Selector.g:363:1: washoutStrategy returns [WashoutStrategy strategy] : (t= FIFO | t= FILO | t= LRU | t= LFU );
    public final WashoutStrategy washoutStrategy() throws RecognitionException {
        WashoutStrategy strategy = null;

        Token t=null;

        try {
            // org/datayoo/moql/antlr/Selector.g:367:2: (t= FIFO | t= FILO | t= LRU | t= LFU )
            int alt46=4;
            switch ( input.LA(1) ) {
            case FIFO:
                {
                alt46=1;
                }
                break;
            case FILO:
                {
                alt46=2;
                }
                break;
            case LRU:
                {
                alt46=3;
                }
                break;
            case LFU:
                {
                alt46=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return strategy;}
                NoViableAltException nvae =
                    new NoViableAltException("", 46, 0, input);

                throw nvae;
            }

            switch (alt46) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:367:4: t= FIFO
                    {
                    t=(Token)match(input,FIFO,FOLLOW_FIFO_in_washoutStrategy1588); if (state.failed) return strategy;

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:367:15: t= FILO
                    {
                    t=(Token)match(input,FILO,FOLLOW_FILO_in_washoutStrategy1596); if (state.failed) return strategy;

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:367:26: t= LRU
                    {
                    t=(Token)match(input,LRU,FOLLOW_LRU_in_washoutStrategy1604); if (state.failed) return strategy;

                    }
                    break;
                case 4 :
                    // org/datayoo/moql/antlr/Selector.g:367:36: t= LFU
                    {
                    t=(Token)match(input,LFU,FOLLOW_LFU_in_washoutStrategy1612); if (state.failed) return strategy;

                    }
                    break;

            }
            if ( state.backtracking==0 ) {

              strategy = WashoutStrategy.valueOf(t.getText().toUpperCase());

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return strategy;
    }
    // $ANTLR end "washoutStrategy"


    // $ANTLR start "setQuantifier"
    // org/datayoo/moql/antlr/Selector.g:370:1: setQuantifier returns [boolean distinct] : ( DISTINCT | ALL );
    public final boolean setQuantifier() throws RecognitionException {
        boolean distinct = false;

        try {
            // org/datayoo/moql/antlr/Selector.g:371:2: ( DISTINCT | ALL )
            int alt47=2;
            switch ( input.LA(1) ) {
            case DISTINCT:
                {
                alt47=1;
                }
                break;
            case ALL:
                {
                alt47=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return distinct;}
                NoViableAltException nvae =
                    new NoViableAltException("", 47, 0, input);

                throw nvae;
            }

            switch (alt47) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:371:4: DISTINCT
                    {
                    match(input,DISTINCT,FOLLOW_DISTINCT_in_setQuantifier1627); if (state.failed) return distinct;
                    if ( state.backtracking==0 ) {
                      distinct = true;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:371:34: ALL
                    {
                    match(input,ALL,FOLLOW_ALL_in_setQuantifier1633); if (state.failed) return distinct;
                    if ( state.backtracking==0 ) {
                      distinct = false;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return distinct;
    }
    // $ANTLR end "setQuantifier"


    // $ANTLR start "limitClause"
    // org/datayoo/moql/antlr/Selector.g:374:1: limitClause returns [LimitMetadata limit] : LIMIT (startPos= IntegerLiteral ',' )? size= IntegerLiteral (percent= '%' )? ;
    public final LimitMetadata limitClause() throws RecognitionException {
        LimitMetadata limit = null;

        Token startPos=null;
        Token size=null;
        Token percent=null;

        try {
            // org/datayoo/moql/antlr/Selector.g:387:2: ( LIMIT (startPos= IntegerLiteral ',' )? size= IntegerLiteral (percent= '%' )? )
            // org/datayoo/moql/antlr/Selector.g:387:4: LIMIT (startPos= IntegerLiteral ',' )? size= IntegerLiteral (percent= '%' )?
            {
            match(input,LIMIT,FOLLOW_LIMIT_in_limitClause1655); if (state.failed) return limit;
            // org/datayoo/moql/antlr/Selector.g:387:10: (startPos= IntegerLiteral ',' )?
            int alt48=2;
            switch ( input.LA(1) ) {
                case IntegerLiteral:
                    {
                    switch ( input.LA(2) ) {
                        case 87:
                            {
                            alt48=1;
                            }
                            break;
                    }

                    }
                    break;
            }

            switch (alt48) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:387:11: startPos= IntegerLiteral ','
                    {
                    startPos=(Token)match(input,IntegerLiteral,FOLLOW_IntegerLiteral_in_limitClause1662); if (state.failed) return limit;
                    match(input,87,FOLLOW_87_in_limitClause1664); if (state.failed) return limit;

                    }
                    break;

            }

            size=(Token)match(input,IntegerLiteral,FOLLOW_IntegerLiteral_in_limitClause1672); if (state.failed) return limit;
            // org/datayoo/moql/antlr/Selector.g:387:65: (percent= '%' )?
            int alt49=2;
            switch ( input.LA(1) ) {
                case 88:
                    {
                    alt49=1;
                    }
                    break;
            }

            switch (alt49) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:387:66: percent= '%'
                    {
                    percent=(Token)match(input,88,FOLLOW_88_in_limitClause1679); if (state.failed) return limit;

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	int nStartPos = 0;
              	if (startPos != null) {
              		nStartPos = Integer.valueOf(startPos.getText()).intValue();
              	}
              	String text = size.getText();
              	if (percent == null) 
              		limit = new LimitMetadata(nStartPos, Integer.valueOf(text), false);
              	else {
              		limit = new LimitMetadata(nStartPos, Integer.valueOf(text), true);
              	}

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return limit;
    }
    // $ANTLR end "limitClause"


    // $ANTLR start "selectList"
    // org/datayoo/moql/antlr/Selector.g:390:1: selectList returns [ColumnsMetadata columns] : col= column ( ',' col= column )* ;
    public final ColumnsMetadata selectList() throws RecognitionException {
        ColumnsMetadata columns = null;

        ColumnMetadata col = null;



        columns = new ColumnsMetadata();
        List columnList = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:398:2: (col= column ( ',' col= column )* )
            // org/datayoo/moql/antlr/Selector.g:398:4: col= column ( ',' col= column )*
            {
            pushFollow(FOLLOW_column_in_selectList1708);
            col=column();

            state._fsp--;
            if (state.failed) return columns;
            if ( state.backtracking==0 ) {
              columnList.add(col);
            }
            // org/datayoo/moql/antlr/Selector.g:398:40: ( ',' col= column )*
            loop50:
            do {
                int alt50=2;
                switch ( input.LA(1) ) {
                case 87:
                    {
                    alt50=1;
                    }
                    break;

                }

                switch (alt50) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:398:41: ',' col= column
            	    {
            	    match(input,87,FOLLOW_87_in_selectList1713); if (state.failed) return columns;
            	    pushFollow(FOLLOW_column_in_selectList1719);
            	    col=column();

            	    state._fsp--;
            	    if (state.failed) return columns;
            	    if ( state.backtracking==0 ) {
            	      columnList.add(col);
            	    }

            	    }
            	    break;

            	default :
            	    break loop50;
                }
            } while (true);


            }

            if ( state.backtracking==0 ) {

              columns.setColumns(columnList);

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return columns;
    }
    // $ANTLR end "selectList"


    // $ANTLR start "column"
    // org/datayoo/moql/antlr/Selector.g:401:1: column returns [ColumnMetadata column] : (expr= expression ( ( AS )? t= Identifier )? | expr2= Identifier '.*' | selectorDefinition= queryExpression ( AS )? t= Identifier );
    public final ColumnMetadata column() throws RecognitionException {
        ColumnMetadata column = null;

        Token t=null;
        Token expr2=null;
        SelectorParser.expression_return expr = null;

        SelectorDefinition selectorDefinition = null;



        String name = null;

        try {
            // org/datayoo/moql/antlr/Selector.g:405:2: (expr= expression ( ( AS )? t= Identifier )? | expr2= Identifier '.*' | selectorDefinition= queryExpression ( AS )? t= Identifier )
            int alt54=3;
            switch ( input.LA(1) ) {
            case FALSE:
            case NULL:
            case TRUE:
            case IntegerLiteral:
            case FloatingPointLiteral:
            case StringLiteral:
            case 106:
                {
                alt54=1;
                }
                break;
            case 85:
                {
                int LA54_2 = input.LA(2);

                if ( (synpred58_Selector()) ) {
                    alt54=1;
                }
                else if ( (true) ) {
                    alt54=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return column;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 54, 2, input);

                    throw nvae;
                }
                }
                break;
            case Identifier:
                {
                int LA54_3 = input.LA(2);

                if ( (synpred58_Selector()) ) {
                    alt54=1;
                }
                else if ( (synpred59_Selector()) ) {
                    alt54=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return column;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 54, 3, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                alt54=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return column;}
                NoViableAltException nvae =
                    new NoViableAltException("", 54, 0, input);

                throw nvae;
            }

            switch (alt54) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:405:4: expr= expression ( ( AS )? t= Identifier )?
                    {
                    pushFollow(FOLLOW_expression_in_column1747);
                    expr=expression();

                    state._fsp--;
                    if (state.failed) return column;
                    // org/datayoo/moql/antlr/Selector.g:405:22: ( ( AS )? t= Identifier )?
                    int alt52=2;
                    switch ( input.LA(1) ) {
                        case AS:
                        case Identifier:
                            {
                            alt52=1;
                            }
                            break;
                    }

                    switch (alt52) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:405:23: ( AS )? t= Identifier
                            {
                            // org/datayoo/moql/antlr/Selector.g:405:23: ( AS )?
                            int alt51=2;
                            switch ( input.LA(1) ) {
                                case AS:
                                    {
                                    alt51=1;
                                    }
                                    break;
                            }

                            switch (alt51) {
                                case 1 :
                                    // org/datayoo/moql/antlr/Selector.g:0:0: AS
                                    {
                                    match(input,AS,FOLLOW_AS_in_column1750); if (state.failed) return column;

                                    }
                                    break;

                            }

                            t=(Token)match(input,Identifier,FOLLOW_Identifier_in_column1757); if (state.failed) return column;

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      	  if (t != null) {
                      	  	name = t.getText();
                      	  } else {
                      	  	name = expr.expressionText;
                      	  }
                      	  column = new ColumnMetadata(name, expr.expressionText);
                      	
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:414:4: expr2= Identifier '.*'
                    {
                    expr2=(Token)match(input,Identifier,FOLLOW_Identifier_in_column1771); if (state.failed) return column;
                    match(input,89,FOLLOW_89_in_column1772); if (state.failed) return column;
                    if ( state.backtracking==0 ) {

                      	  column = new ColumnMetadata(expr2.getText()+".*", expr2.getText()+".*");
                      	
                    }

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:418:4: selectorDefinition= queryExpression ( AS )? t= Identifier
                    {
                    pushFollow(FOLLOW_queryExpression_in_column1784);
                    selectorDefinition=queryExpression();

                    state._fsp--;
                    if (state.failed) return column;
                    // org/datayoo/moql/antlr/Selector.g:418:41: ( AS )?
                    int alt53=2;
                    switch ( input.LA(1) ) {
                        case AS:
                            {
                            alt53=1;
                            }
                            break;
                    }

                    switch (alt53) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: AS
                            {
                            match(input,AS,FOLLOW_AS_in_column1786); if (state.failed) return column;

                            }
                            break;

                    }

                    t=(Token)match(input,Identifier,FOLLOW_Identifier_in_column1793); if (state.failed) return column;
                    if ( state.backtracking==0 ) {

                      	  column = new ColumnMetadata(t.getText(), selectorDefinition);
                      	
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return column;
    }
    // $ANTLR end "column"


    // $ANTLR start "fromClause"
    // org/datayoo/moql/antlr/Selector.g:424:1: fromClause returns [TablesMetadata tablesMetadata] : FROM queryableMetadata= tableReference ( ',' queryableMetadata= tableReference )* ;
    public final TablesMetadata fromClause() throws RecognitionException {
        TablesMetadata tablesMetadata = null;

        QueryableMetadata queryableMetadata = null;



        List queryableMetadatas = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:431:2: ( FROM queryableMetadata= tableReference ( ',' queryableMetadata= tableReference )* )
            // org/datayoo/moql/antlr/Selector.g:431:4: FROM queryableMetadata= tableReference ( ',' queryableMetadata= tableReference )*
            {
            match(input,FROM,FOLLOW_FROM_in_fromClause1822); if (state.failed) return tablesMetadata;
            pushFollow(FOLLOW_tableReference_in_fromClause1828);
            queryableMetadata=tableReference();

            state._fsp--;
            if (state.failed) return tablesMetadata;
            if ( state.backtracking==0 ) {
              queryableMetadatas.add(queryableMetadata);
            }
            // org/datayoo/moql/antlr/Selector.g:432:2: ( ',' queryableMetadata= tableReference )*
            loop55:
            do {
                int alt55=2;
                switch ( input.LA(1) ) {
                case 87:
                    {
                    alt55=1;
                    }
                    break;

                }

                switch (alt55) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:432:3: ',' queryableMetadata= tableReference
            	    {
            	    match(input,87,FOLLOW_87_in_fromClause1835); if (state.failed) return tablesMetadata;
            	    pushFollow(FOLLOW_tableReference_in_fromClause1841);
            	    queryableMetadata=tableReference();

            	    state._fsp--;
            	    if (state.failed) return tablesMetadata;
            	    if ( state.backtracking==0 ) {
            	      queryableMetadatas.add(queryableMetadata);
            	    }

            	    }
            	    break;

            	default :
            	    break loop55;
                }
            } while (true);


            }

            if ( state.backtracking==0 ) {

              tablesMetadata = new TablesMetadata(queryableMetadatas);

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return tablesMetadata;
    }
    // $ANTLR end "fromClause"


    // $ANTLR start "tableReference"
    // org/datayoo/moql/antlr/Selector.g:435:1: tableReference returns [QueryableMetadata queryableMetadata] : (joinMetadata1= qualifiedJoin | '(' joinMetadata2= qualifiedJoin ')' | tableMetadata= nonJoinTableReference );
    public final QueryableMetadata tableReference() throws RecognitionException {
        QueryableMetadata queryableMetadata = null;

        JoinMetadata joinMetadata1 = null;

        JoinMetadata joinMetadata2 = null;

        TableMetadata tableMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:436:2: (joinMetadata1= qualifiedJoin | '(' joinMetadata2= qualifiedJoin ')' | tableMetadata= nonJoinTableReference )
            int alt56=3;
            switch ( input.LA(1) ) {
            case Identifier:
                {
                int LA56_1 = input.LA(2);

                if ( (synpred62_Selector()) ) {
                    alt56=1;
                }
                else if ( (true) ) {
                    alt56=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return queryableMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 56, 1, input);

                    throw nvae;
                }
                }
                break;
            case 85:
                {
                int LA56_2 = input.LA(2);

                if ( (synpred62_Selector()) ) {
                    alt56=1;
                }
                else if ( (synpred63_Selector()) ) {
                    alt56=2;
                }
                else if ( (true) ) {
                    alt56=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return queryableMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 56, 2, input);

                    throw nvae;
                }
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return queryableMetadata;}
                NoViableAltException nvae =
                    new NoViableAltException("", 56, 0, input);

                throw nvae;
            }

            switch (alt56) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:436:4: joinMetadata1= qualifiedJoin
                    {
                    pushFollow(FOLLOW_qualifiedJoin_in_tableReference1864);
                    joinMetadata1=qualifiedJoin();

                    state._fsp--;
                    if (state.failed) return queryableMetadata;
                    if ( state.backtracking==0 ) {
                      queryableMetadata = joinMetadata1;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:437:4: '(' joinMetadata2= qualifiedJoin ')'
                    {
                    match(input,85,FOLLOW_85_in_tableReference1871); if (state.failed) return queryableMetadata;
                    pushFollow(FOLLOW_qualifiedJoin_in_tableReference1877);
                    joinMetadata2=qualifiedJoin();

                    state._fsp--;
                    if (state.failed) return queryableMetadata;
                    if ( state.backtracking==0 ) {
                      queryableMetadata = joinMetadata2;
                    }
                    match(input,86,FOLLOW_86_in_tableReference1880); if (state.failed) return queryableMetadata;

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:438:4: tableMetadata= nonJoinTableReference
                    {
                    pushFollow(FOLLOW_nonJoinTableReference_in_tableReference1889);
                    tableMetadata=nonJoinTableReference();

                    state._fsp--;
                    if (state.failed) return queryableMetadata;
                    if ( state.backtracking==0 ) {
                      queryableMetadata = tableMetadata;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return queryableMetadata;
    }
    // $ANTLR end "tableReference"


    // $ANTLR start "nonJoinTableReference"
    // org/datayoo/moql/antlr/Selector.g:441:1: nonJoinTableReference returns [TableMetadata tableMetadata] : (value= Identifier ( AS )? name= Identifier | '(' queryMetadata= queryExpression ')' ( AS )? name= Identifier );
    public final TableMetadata nonJoinTableReference() throws RecognitionException {
        TableMetadata tableMetadata = null;

        Token value=null;
        Token name=null;
        SelectorDefinition queryMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:442:2: (value= Identifier ( AS )? name= Identifier | '(' queryMetadata= queryExpression ')' ( AS )? name= Identifier )
            int alt59=2;
            switch ( input.LA(1) ) {
            case Identifier:
                {
                alt59=1;
                }
                break;
            case 85:
                {
                alt59=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return tableMetadata;}
                NoViableAltException nvae =
                    new NoViableAltException("", 59, 0, input);

                throw nvae;
            }

            switch (alt59) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:442:4: value= Identifier ( AS )? name= Identifier
                    {
                    value=(Token)match(input,Identifier,FOLLOW_Identifier_in_nonJoinTableReference1909); if (state.failed) return tableMetadata;
                    // org/datayoo/moql/antlr/Selector.g:442:23: ( AS )?
                    int alt57=2;
                    switch ( input.LA(1) ) {
                        case AS:
                            {
                            alt57=1;
                            }
                            break;
                    }

                    switch (alt57) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: AS
                            {
                            match(input,AS,FOLLOW_AS_in_nonJoinTableReference1911); if (state.failed) return tableMetadata;

                            }
                            break;

                    }

                    name=(Token)match(input,Identifier,FOLLOW_Identifier_in_nonJoinTableReference1918); if (state.failed) return tableMetadata;
                    if ( state.backtracking==0 ) {
                      tableMetadata = new TableMetadata(name.getText(),value.getText());
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:443:4: '(' queryMetadata= queryExpression ')' ( AS )? name= Identifier
                    {
                    match(input,85,FOLLOW_85_in_nonJoinTableReference1925); if (state.failed) return tableMetadata;
                    pushFollow(FOLLOW_queryExpression_in_nonJoinTableReference1931);
                    queryMetadata=queryExpression();

                    state._fsp--;
                    if (state.failed) return tableMetadata;
                    match(input,86,FOLLOW_86_in_nonJoinTableReference1933); if (state.failed) return tableMetadata;
                    // org/datayoo/moql/antlr/Selector.g:443:44: ( AS )?
                    int alt58=2;
                    switch ( input.LA(1) ) {
                        case AS:
                            {
                            alt58=1;
                            }
                            break;
                    }

                    switch (alt58) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: AS
                            {
                            match(input,AS,FOLLOW_AS_in_nonJoinTableReference1935); if (state.failed) return tableMetadata;

                            }
                            break;

                    }

                    name=(Token)match(input,Identifier,FOLLOW_Identifier_in_nonJoinTableReference1942); if (state.failed) return tableMetadata;
                    if ( state.backtracking==0 ) {
                      tableMetadata = new TableMetadata(name.getText(), queryMetadata);
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return tableMetadata;
    }
    // $ANTLR end "nonJoinTableReference"


    // $ANTLR start "whereClause"
    // org/datayoo/moql/antlr/Selector.g:446:1: whereClause returns [ConditionMetadata whereMetadata] : WHERE operationMetadata= searchCondition ;
    public final ConditionMetadata whereClause() throws RecognitionException {
        ConditionMetadata whereMetadata = null;

        OperationMetadata operationMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:447:2: ( WHERE operationMetadata= searchCondition )
            // org/datayoo/moql/antlr/Selector.g:447:4: WHERE operationMetadata= searchCondition
            {
            match(input,WHERE,FOLLOW_WHERE_in_whereClause1958); if (state.failed) return whereMetadata;
            pushFollow(FOLLOW_searchCondition_in_whereClause1964);
            operationMetadata=searchCondition();

            state._fsp--;
            if (state.failed) return whereMetadata;
            if ( state.backtracking==0 ) {
              whereMetadata = new ConditionMetadata(operationMetadata);
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return whereMetadata;
    }
    // $ANTLR end "whereClause"


    // $ANTLR start "groupByClause"
    // org/datayoo/moql/antlr/Selector.g:450:1: groupByClause returns [List groupBy] : GROUP BY expr= expression ( ',' expr= expression )* ;
    public final List groupByClause() throws RecognitionException {
        List groupBy = null;

        SelectorParser.expression_return expr = null;



        groupBy = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:454:2: ( GROUP BY expr= expression ( ',' expr= expression )* )
            // org/datayoo/moql/antlr/Selector.g:454:4: GROUP BY expr= expression ( ',' expr= expression )*
            {
            match(input,GROUP,FOLLOW_GROUP_in_groupByClause1985); if (state.failed) return groupBy;
            match(input,BY,FOLLOW_BY_in_groupByClause1987); if (state.failed) return groupBy;
            pushFollow(FOLLOW_expression_in_groupByClause1993);
            expr=expression();

            state._fsp--;
            if (state.failed) return groupBy;
            if ( state.backtracking==0 ) {
              groupBy.add(new GroupMetadata(expr.expressionText));
            }
            // org/datayoo/moql/antlr/Selector.g:454:85: ( ',' expr= expression )*
            loop60:
            do {
                int alt60=2;
                switch ( input.LA(1) ) {
                case 87:
                    {
                    alt60=1;
                    }
                    break;

                }

                switch (alt60) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:454:86: ',' expr= expression
            	    {
            	    match(input,87,FOLLOW_87_in_groupByClause1997); if (state.failed) return groupBy;
            	    pushFollow(FOLLOW_expression_in_groupByClause2003);
            	    expr=expression();

            	    state._fsp--;
            	    if (state.failed) return groupBy;
            	    if ( state.backtracking==0 ) {
            	      groupBy.add(new GroupMetadata(expr.expressionText));
            	    }

            	    }
            	    break;

            	default :
            	    break loop60;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return groupBy;
    }
    // $ANTLR end "groupByClause"


    // $ANTLR start "havingClause"
    // org/datayoo/moql/antlr/Selector.g:457:1: havingClause returns [ConditionMetadata havingMetadata] : HAVING operationMetadata= searchCondition ;
    public final ConditionMetadata havingClause() throws RecognitionException {
        ConditionMetadata havingMetadata = null;

        OperationMetadata operationMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:458:2: ( HAVING operationMetadata= searchCondition )
            // org/datayoo/moql/antlr/Selector.g:458:4: HAVING operationMetadata= searchCondition
            {
            match(input,HAVING,FOLLOW_HAVING_in_havingClause2022); if (state.failed) return havingMetadata;
            pushFollow(FOLLOW_searchCondition_in_havingClause2028);
            operationMetadata=searchCondition();

            state._fsp--;
            if (state.failed) return havingMetadata;
            if ( state.backtracking==0 ) {
               havingMetadata = new ConditionMetadata(operationMetadata);
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return havingMetadata;
    }
    // $ANTLR end "havingClause"


    // $ANTLR start "decorateByClause"
    // org/datayoo/moql/antlr/Selector.g:461:1: decorateByClause returns [List decorateBy] : DECORATE BY dec= decorator ( ',' dec= decorator )* ;
    public final List decorateByClause() throws RecognitionException {
        List decorateBy = null;

        SelectorParser.decorator_return dec = null;



        decorateBy = new LinkedList();

        try {
            // org/datayoo/moql/antlr/Selector.g:465:2: ( DECORATE BY dec= decorator ( ',' dec= decorator )* )
            // org/datayoo/moql/antlr/Selector.g:465:4: DECORATE BY dec= decorator ( ',' dec= decorator )*
            {
            match(input,DECORATE,FOLLOW_DECORATE_in_decorateByClause2050); if (state.failed) return decorateBy;
            match(input,BY,FOLLOW_BY_in_decorateByClause2052); if (state.failed) return decorateBy;
            pushFollow(FOLLOW_decorator_in_decorateByClause2058);
            dec=decorator();

            state._fsp--;
            if (state.failed) return decorateBy;
            if ( state.backtracking==0 ) {
              decorateBy.add(new DecorateMetadata(dec.expressionText));
            }
            // org/datayoo/moql/antlr/Selector.g:465:91: ( ',' dec= decorator )*
            loop61:
            do {
                int alt61=2;
                switch ( input.LA(1) ) {
                case 87:
                    {
                    alt61=1;
                    }
                    break;

                }

                switch (alt61) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:465:92: ',' dec= decorator
            	    {
            	    match(input,87,FOLLOW_87_in_decorateByClause2062); if (state.failed) return decorateBy;
            	    pushFollow(FOLLOW_decorator_in_decorateByClause2068);
            	    dec=decorator();

            	    state._fsp--;
            	    if (state.failed) return decorateBy;
            	    if ( state.backtracking==0 ) {
            	      decorateBy.add(new DecorateMetadata(dec.expressionText));
            	    }

            	    }
            	    break;

            	default :
            	    break loop61;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return decorateBy;
    }
    // $ANTLR end "decorateByClause"

    public static class decorator_return extends ParserRuleReturnScope {
        public String expressionText;
    };

    // $ANTLR start "decorator"
    // org/datayoo/moql/antlr/Selector.g:468:1: decorator returns [String expressionText] : function ;
    public final SelectorParser.decorator_return decorator() throws RecognitionException {
        SelectorParser.decorator_return retval = new SelectorParser.decorator_return();
        retval.start = input.LT(1);

        try {
            // org/datayoo/moql/antlr/Selector.g:469:2: ( function )
            // org/datayoo/moql/antlr/Selector.g:469:4: function
            {
            pushFollow(FOLLOW_function_in_decorator2087);
            function();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) {
              retval.expressionText = input.toString(retval.start,input.LT(-1));
            }

            }

            retval.stop = input.LT(-1);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "decorator"


    // $ANTLR start "qualifiedJoin"
    // org/datayoo/moql/antlr/Selector.g:472:1: qualifiedJoin returns [JoinMetadata joinMetadata] : tableMetadata= nonJoinTableReference ( (type= joinType )? JOIN rQueryableMetadata= joinReference (on= joinCondition )? )+ ;
    public final JoinMetadata qualifiedJoin() throws RecognitionException {
        JoinMetadata joinMetadata = null;

        TableMetadata tableMetadata = null;

        JoinType type = null;

        QueryableMetadata rQueryableMetadata = null;

        ConditionMetadata on = null;



        QueryableMetadata lQueryableMetadata = null;

        try {
            // org/datayoo/moql/antlr/Selector.g:476:2: (tableMetadata= nonJoinTableReference ( (type= joinType )? JOIN rQueryableMetadata= joinReference (on= joinCondition )? )+ )
            // org/datayoo/moql/antlr/Selector.g:476:4: tableMetadata= nonJoinTableReference ( (type= joinType )? JOIN rQueryableMetadata= joinReference (on= joinCondition )? )+
            {
            pushFollow(FOLLOW_nonJoinTableReference_in_qualifiedJoin2113);
            tableMetadata=nonJoinTableReference();

            state._fsp--;
            if (state.failed) return joinMetadata;
            if ( state.backtracking==0 ) {
              lQueryableMetadata = tableMetadata;
            }
            // org/datayoo/moql/antlr/Selector.g:476:80: ( (type= joinType )? JOIN rQueryableMetadata= joinReference (on= joinCondition )? )+
            int cnt64=0;
            loop64:
            do {
                int alt64=2;
                switch ( input.LA(1) ) {
                case FULL:
                case INNER:
                case JOIN:
                case LEFT:
                case RIGHT:
                    {
                    alt64=1;
                    }
                    break;

                }

                switch (alt64) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:476:81: (type= joinType )? JOIN rQueryableMetadata= joinReference (on= joinCondition )?
            	    {
            	    // org/datayoo/moql/antlr/Selector.g:476:86: (type= joinType )?
            	    int alt62=2;
            	    switch ( input.LA(1) ) {
            	        case FULL:
            	        case INNER:
            	        case LEFT:
            	        case RIGHT:
            	            {
            	            alt62=1;
            	            }
            	            break;
            	    }

            	    switch (alt62) {
            	        case 1 :
            	            // org/datayoo/moql/antlr/Selector.g:0:0: type= joinType
            	            {
            	            pushFollow(FOLLOW_joinType_in_qualifiedJoin2122);
            	            type=joinType();

            	            state._fsp--;
            	            if (state.failed) return joinMetadata;

            	            }
            	            break;

            	    }

            	    match(input,JOIN,FOLLOW_JOIN_in_qualifiedJoin2125); if (state.failed) return joinMetadata;
            	    pushFollow(FOLLOW_joinReference_in_qualifiedJoin2131);
            	    rQueryableMetadata=joinReference();

            	    state._fsp--;
            	    if (state.failed) return joinMetadata;
            	    // org/datayoo/moql/antlr/Selector.g:476:141: (on= joinCondition )?
            	    int alt63=2;
            	    switch ( input.LA(1) ) {
            	        case ON:
            	            {
            	            alt63=1;
            	            }
            	            break;
            	    }

            	    switch (alt63) {
            	        case 1 :
            	            // org/datayoo/moql/antlr/Selector.g:0:0: on= joinCondition
            	            {
            	            pushFollow(FOLLOW_joinCondition_in_qualifiedJoin2137);
            	            on=joinCondition();

            	            state._fsp--;
            	            if (state.failed) return joinMetadata;

            	            }
            	            break;

            	    }

            	    if ( state.backtracking==0 ) {

            	      	if (type == null) {
            	      		type = JoinType.INNER;
            	      	}
            	      	joinMetadata = new JoinMetadata(type, lQueryableMetadata, rQueryableMetadata);
            	      	if (on != null) {
            	      		joinMetadata.setOn(on);
            	      	}
            	      	lQueryableMetadata = joinMetadata;
            	      	
            	    }

            	    }
            	    break;

            	default :
            	    if ( cnt64 >= 1 ) break loop64;
            	    if (state.backtracking>0) {state.failed=true; return joinMetadata;}
                        EarlyExitException eee =
                            new EarlyExitException(64, input);
                        throw eee;
                }
                cnt64++;
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return joinMetadata;
    }
    // $ANTLR end "qualifiedJoin"


    // $ANTLR start "joinType"
    // org/datayoo/moql/antlr/Selector.g:490:1: joinType returns [JoinType type] : (t= INNER | outType= outJoinType ( OUTER )? );
    public final JoinType joinType() throws RecognitionException {
        JoinType type = null;

        Token t=null;
        JoinType outType = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:491:2: (t= INNER | outType= outJoinType ( OUTER )? )
            int alt66=2;
            switch ( input.LA(1) ) {
            case INNER:
                {
                alt66=1;
                }
                break;
            case FULL:
            case LEFT:
            case RIGHT:
                {
                alt66=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return type;}
                NoViableAltException nvae =
                    new NoViableAltException("", 66, 0, input);

                throw nvae;
            }

            switch (alt66) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:491:4: t= INNER
                    {
                    t=(Token)match(input,INNER,FOLLOW_INNER_in_joinType2163); if (state.failed) return type;
                    if ( state.backtracking==0 ) {
                      type = JoinType.valueOf(t.getText().toUpperCase());
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:492:4: outType= outJoinType ( OUTER )?
                    {
                    pushFollow(FOLLOW_outJoinType_in_joinType2174);
                    outType=outJoinType();

                    state._fsp--;
                    if (state.failed) return type;
                    // org/datayoo/moql/antlr/Selector.g:492:26: ( OUTER )?
                    int alt65=2;
                    switch ( input.LA(1) ) {
                        case OUTER:
                            {
                            alt65=1;
                            }
                            break;
                    }

                    switch (alt65) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: OUTER
                            {
                            match(input,OUTER,FOLLOW_OUTER_in_joinType2176); if (state.failed) return type;

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {
                      type = outType;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return type;
    }
    // $ANTLR end "joinType"


    // $ANTLR start "outJoinType"
    // org/datayoo/moql/antlr/Selector.g:495:1: outJoinType returns [JoinType type] : (t= LEFT | t= RIGHT | t= FULL );
    public final JoinType outJoinType() throws RecognitionException {
        JoinType type = null;

        Token t=null;

        try {
            // org/datayoo/moql/antlr/Selector.g:499:2: (t= LEFT | t= RIGHT | t= FULL )
            int alt67=3;
            switch ( input.LA(1) ) {
            case LEFT:
                {
                alt67=1;
                }
                break;
            case RIGHT:
                {
                alt67=2;
                }
                break;
            case FULL:
                {
                alt67=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return type;}
                NoViableAltException nvae =
                    new NoViableAltException("", 67, 0, input);

                throw nvae;
            }

            switch (alt67) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:499:4: t= LEFT
                    {
                    t=(Token)match(input,LEFT,FOLLOW_LEFT_in_outJoinType2202); if (state.failed) return type;

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:499:15: t= RIGHT
                    {
                    t=(Token)match(input,RIGHT,FOLLOW_RIGHT_in_outJoinType2210); if (state.failed) return type;

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:499:27: t= FULL
                    {
                    t=(Token)match(input,FULL,FOLLOW_FULL_in_outJoinType2218); if (state.failed) return type;

                    }
                    break;

            }
            if ( state.backtracking==0 ) {

              type = JoinType.valueOf(t.getText().toUpperCase());

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return type;
    }
    // $ANTLR end "outJoinType"


    // $ANTLR start "joinReference"
    // org/datayoo/moql/antlr/Selector.g:502:1: joinReference returns [QueryableMetadata queryableMetadata] : ( '(' joinMetadata= qualifiedJoin ')' | tableMetadata= nonJoinTableReference );
    public final QueryableMetadata joinReference() throws RecognitionException {
        QueryableMetadata queryableMetadata = null;

        JoinMetadata joinMetadata = null;

        TableMetadata tableMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:503:2: ( '(' joinMetadata= qualifiedJoin ')' | tableMetadata= nonJoinTableReference )
            int alt68=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA68_1 = input.LA(2);

                if ( (synpred76_Selector()) ) {
                    alt68=1;
                }
                else if ( (true) ) {
                    alt68=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return queryableMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 68, 1, input);

                    throw nvae;
                }
                }
                break;
            case Identifier:
                {
                alt68=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return queryableMetadata;}
                NoViableAltException nvae =
                    new NoViableAltException("", 68, 0, input);

                throw nvae;
            }

            switch (alt68) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:503:5: '(' joinMetadata= qualifiedJoin ')'
                    {
                    match(input,85,FOLLOW_85_in_joinReference2233); if (state.failed) return queryableMetadata;
                    pushFollow(FOLLOW_qualifiedJoin_in_joinReference2239);
                    joinMetadata=qualifiedJoin();

                    state._fsp--;
                    if (state.failed) return queryableMetadata;
                    match(input,86,FOLLOW_86_in_joinReference2241); if (state.failed) return queryableMetadata;
                    if ( state.backtracking==0 ) {
                      queryableMetadata = joinMetadata;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:504:4: tableMetadata= nonJoinTableReference
                    {
                    pushFollow(FOLLOW_nonJoinTableReference_in_joinReference2252);
                    tableMetadata=nonJoinTableReference();

                    state._fsp--;
                    if (state.failed) return queryableMetadata;
                    if ( state.backtracking==0 ) {
                      queryableMetadata = tableMetadata;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return queryableMetadata;
    }
    // $ANTLR end "joinReference"


    // $ANTLR start "joinCondition"
    // org/datayoo/moql/antlr/Selector.g:507:1: joinCondition returns [ConditionMetadata onMetadata] : ON operationMetadata= searchCondition ;
    public final ConditionMetadata joinCondition() throws RecognitionException {
        ConditionMetadata onMetadata = null;

        OperationMetadata operationMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:508:2: ( ON operationMetadata= searchCondition )
            // org/datayoo/moql/antlr/Selector.g:508:4: ON operationMetadata= searchCondition
            {
            match(input,ON,FOLLOW_ON_in_joinCondition2268); if (state.failed) return onMetadata;
            pushFollow(FOLLOW_searchCondition_in_joinCondition2274);
            operationMetadata=searchCondition();

            state._fsp--;
            if (state.failed) return onMetadata;
            if ( state.backtracking==0 ) {
              onMetadata = new ConditionMetadata(operationMetadata);
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return onMetadata;
    }
    // $ANTLR end "joinCondition"


    // $ANTLR start "searchCondition"
    // org/datayoo/moql/antlr/Selector.g:511:1: searchCondition returns [OperationMetadata operationMetadata] : lOperationMetadata= booleanTerm (op= OR rOperationMetadata= searchCondition )? ;
    public final OperationMetadata searchCondition() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token op=null;
        OperationMetadata lOperationMetadata = null;

        OperationMetadata rOperationMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:519:2: (lOperationMetadata= booleanTerm (op= OR rOperationMetadata= searchCondition )? )
            // org/datayoo/moql/antlr/Selector.g:519:4: lOperationMetadata= booleanTerm (op= OR rOperationMetadata= searchCondition )?
            {
            pushFollow(FOLLOW_booleanTerm_in_searchCondition2299);
            lOperationMetadata=booleanTerm();

            state._fsp--;
            if (state.failed) return operationMetadata;
            // org/datayoo/moql/antlr/Selector.g:519:37: (op= OR rOperationMetadata= searchCondition )?
            int alt69=2;
            switch ( input.LA(1) ) {
                case OR:
                    {
                    alt69=1;
                    }
                    break;
            }

            switch (alt69) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:519:38: op= OR rOperationMetadata= searchCondition
                    {
                    op=(Token)match(input,OR,FOLLOW_OR_in_searchCondition2306); if (state.failed) return operationMetadata;
                    pushFollow(FOLLOW_searchCondition_in_searchCondition2312);
                    rOperationMetadata=searchCondition();

                    state._fsp--;
                    if (state.failed) return operationMetadata;

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              if (rOperationMetadata != null) {
              	operationMetadata = new LogicOperationMetadata(op.getText(), lOperationMetadata, rOperationMetadata);
              } else {
              	operationMetadata = lOperationMetadata;
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "searchCondition"


    // $ANTLR start "booleanTerm"
    // org/datayoo/moql/antlr/Selector.g:522:1: booleanTerm returns [OperationMetadata operationMetadata] : lOperationMetadata= booleanFactor (op= AND rOperationMetadata= booleanTerm )? ;
    public final OperationMetadata booleanTerm() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token op=null;
        OperationMetadata lOperationMetadata = null;

        OperationMetadata rOperationMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:530:2: (lOperationMetadata= booleanFactor (op= AND rOperationMetadata= booleanTerm )? )
            // org/datayoo/moql/antlr/Selector.g:530:4: lOperationMetadata= booleanFactor (op= AND rOperationMetadata= booleanTerm )?
            {
            pushFollow(FOLLOW_booleanFactor_in_booleanTerm2338);
            lOperationMetadata=booleanFactor();

            state._fsp--;
            if (state.failed) return operationMetadata;
            // org/datayoo/moql/antlr/Selector.g:530:39: (op= AND rOperationMetadata= booleanTerm )?
            int alt70=2;
            switch ( input.LA(1) ) {
                case AND:
                    {
                    alt70=1;
                    }
                    break;
            }

            switch (alt70) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:530:40: op= AND rOperationMetadata= booleanTerm
                    {
                    op=(Token)match(input,AND,FOLLOW_AND_in_booleanTerm2345); if (state.failed) return operationMetadata;
                    pushFollow(FOLLOW_booleanTerm_in_booleanTerm2351);
                    rOperationMetadata=booleanTerm();

                    state._fsp--;
                    if (state.failed) return operationMetadata;

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              if (rOperationMetadata != null) {
              	operationMetadata = new LogicOperationMetadata(op.getText(), lOperationMetadata, rOperationMetadata);
              } else {
              	operationMetadata = lOperationMetadata;
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "booleanTerm"


    // $ANTLR start "booleanFactor"
    // org/datayoo/moql/antlr/Selector.g:533:1: booleanFactor returns [OperationMetadata operationMetadata] : (not= NOT )? rOperationMetadata= booleanPrimary ;
    public final OperationMetadata booleanFactor() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token not=null;
        OperationMetadata rOperationMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:541:2: ( (not= NOT )? rOperationMetadata= booleanPrimary )
            // org/datayoo/moql/antlr/Selector.g:541:4: (not= NOT )? rOperationMetadata= booleanPrimary
            {
            // org/datayoo/moql/antlr/Selector.g:541:8: (not= NOT )?
            int alt71=2;
            switch ( input.LA(1) ) {
                case NOT:
                    {
                    alt71=1;
                    }
                    break;
            }

            switch (alt71) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: not= NOT
                    {
                    not=(Token)match(input,NOT,FOLLOW_NOT_in_booleanFactor2376); if (state.failed) return operationMetadata;

                    }
                    break;

            }

            pushFollow(FOLLOW_booleanPrimary_in_booleanFactor2383);
            rOperationMetadata=booleanPrimary();

            state._fsp--;
            if (state.failed) return operationMetadata;

            }

            if ( state.backtracking==0 ) {

              if (not != null) {
              	operationMetadata = new LogicOperationMetadata(not.getText(), rOperationMetadata);
              } else {
              	operationMetadata = rOperationMetadata;
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "booleanFactor"


    // $ANTLR start "booleanPrimary"
    // org/datayoo/moql/antlr/Selector.g:544:1: booleanPrimary returns [OperationMetadata operationMetadata] : (predicateMetadata= predicate | '(' conditionMetadata= searchCondition ')' | expr= expression );
    public final OperationMetadata booleanPrimary() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        OperationMetadata predicateMetadata = null;

        OperationMetadata conditionMetadata = null;

        SelectorParser.expression_return expr = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:545:2: (predicateMetadata= predicate | '(' conditionMetadata= searchCondition ')' | expr= expression )
            int alt72=3;
            switch ( input.LA(1) ) {
            case 106:
                {
                int LA72_1 = input.LA(2);

                if ( (synpred80_Selector()) ) {
                    alt72=1;
                }
                else if ( (true) ) {
                    alt72=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 72, 1, input);

                    throw nvae;
                }
                }
                break;
            case 85:
                {
                int LA72_2 = input.LA(2);

                if ( (synpred80_Selector()) ) {
                    alt72=1;
                }
                else if ( (synpred81_Selector()) ) {
                    alt72=2;
                }
                else if ( (true) ) {
                    alt72=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 72, 2, input);

                    throw nvae;
                }
                }
                break;
            case Identifier:
                {
                int LA72_3 = input.LA(2);

                if ( (synpred80_Selector()) ) {
                    alt72=1;
                }
                else if ( (true) ) {
                    alt72=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 72, 3, input);

                    throw nvae;
                }
                }
                break;
            case FALSE:
            case NULL:
            case TRUE:
            case IntegerLiteral:
            case FloatingPointLiteral:
            case StringLiteral:
                {
                int LA72_4 = input.LA(2);

                if ( (synpred80_Selector()) ) {
                    alt72=1;
                }
                else if ( (true) ) {
                    alt72=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 72, 4, input);

                    throw nvae;
                }
                }
                break;
            case EXISTS:
                {
                alt72=1;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                NoViableAltException nvae =
                    new NoViableAltException("", 72, 0, input);

                throw nvae;
            }

            switch (alt72) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:545:4: predicateMetadata= predicate
                    {
                    pushFollow(FOLLOW_predicate_in_booleanPrimary2402);
                    predicateMetadata=predicate();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = predicateMetadata;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:546:4: '(' conditionMetadata= searchCondition ')'
                    {
                    match(input,85,FOLLOW_85_in_booleanPrimary2409); if (state.failed) return operationMetadata;
                    pushFollow(FOLLOW_searchCondition_in_booleanPrimary2415);
                    conditionMetadata=searchCondition();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = new ParenMetadata(conditionMetadata);
                    }
                    match(input,86,FOLLOW_86_in_booleanPrimary2418); if (state.failed) return operationMetadata;

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:547:4: expr= expression
                    {
                    pushFollow(FOLLOW_expression_in_booleanPrimary2427);
                    expr=expression();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = new RelationOperationMetadata(SelectorConstants.EXPR, expr.expressionText);
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "booleanPrimary"


    // $ANTLR start "predicate"
    // org/datayoo/moql/antlr/Selector.g:550:1: predicate returns [OperationMetadata operationMetadata] : (comparisonMetadata= comparisonPredicate | betweenMetadata= betweenPredicate | inMetadata= inPredicate | likeMetadata= likePredicate | nullMetadata= nullPredicate | existsMetadata= existsPredicate );
    public final OperationMetadata predicate() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        OperationMetadata comparisonMetadata = null;

        OperationMetadata betweenMetadata = null;

        OperationMetadata inMetadata = null;

        OperationMetadata likeMetadata = null;

        OperationMetadata nullMetadata = null;

        OperationMetadata existsMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:551:2: (comparisonMetadata= comparisonPredicate | betweenMetadata= betweenPredicate | inMetadata= inPredicate | likeMetadata= likePredicate | nullMetadata= nullPredicate | existsMetadata= existsPredicate )
            int alt73=6;
            alt73 = dfa73.predict(input);
            switch (alt73) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:551:4: comparisonMetadata= comparisonPredicate
                    {
                    pushFollow(FOLLOW_comparisonPredicate_in_predicate2448);
                    comparisonMetadata=comparisonPredicate();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = comparisonMetadata;
                    }

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:552:4: betweenMetadata= betweenPredicate
                    {
                    pushFollow(FOLLOW_betweenPredicate_in_predicate2459);
                    betweenMetadata=betweenPredicate();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = betweenMetadata;
                    }

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:553:4: inMetadata= inPredicate
                    {
                    pushFollow(FOLLOW_inPredicate_in_predicate2470);
                    inMetadata=inPredicate();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = inMetadata;
                    }

                    }
                    break;
                case 4 :
                    // org/datayoo/moql/antlr/Selector.g:554:4: likeMetadata= likePredicate
                    {
                    pushFollow(FOLLOW_likePredicate_in_predicate2481);
                    likeMetadata=likePredicate();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = likeMetadata;
                    }

                    }
                    break;
                case 5 :
                    // org/datayoo/moql/antlr/Selector.g:555:4: nullMetadata= nullPredicate
                    {
                    pushFollow(FOLLOW_nullPredicate_in_predicate2492);
                    nullMetadata=nullPredicate();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = nullMetadata;
                    }

                    }
                    break;
                case 6 :
                    // org/datayoo/moql/antlr/Selector.g:556:4: existsMetadata= existsPredicate
                    {
                    pushFollow(FOLLOW_existsPredicate_in_predicate2503);
                    existsMetadata=existsPredicate();

                    state._fsp--;
                    if (state.failed) return operationMetadata;
                    if ( state.backtracking==0 ) {
                      operationMetadata = existsMetadata;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "predicate"


    // $ANTLR start "comparisonPredicate"
    // org/datayoo/moql/antlr/Selector.g:559:1: comparisonPredicate returns [OperationMetadata operationMetadata] : lExpr= expression op= ( '=' | '<' | '<=' | '>' | '>=' | '<>' | '!=' ) rExpr= expression ;
    public final OperationMetadata comparisonPredicate() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token op=null;
        SelectorParser.expression_return lExpr = null;

        SelectorParser.expression_return rExpr = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:563:2: (lExpr= expression op= ( '=' | '<' | '<=' | '>' | '>=' | '<>' | '!=' ) rExpr= expression )
            // org/datayoo/moql/antlr/Selector.g:563:4: lExpr= expression op= ( '=' | '<' | '<=' | '>' | '>=' | '<>' | '!=' ) rExpr= expression
            {
            pushFollow(FOLLOW_expression_in_comparisonPredicate2529);
            lExpr=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;
            op=(Token)input.LT(1);
            if ( (input.LA(1)>=90 && input.LA(1)<=96) ) {
                input.consume();
                state.errorRecovery=false;state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }

            pushFollow(FOLLOW_expression_in_comparisonPredicate2566);
            rExpr=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;

            }

            if ( state.backtracking==0 ) {

              operationMetadata = new RelationOperationMetadata(op.getText(), lExpr.expressionText, rExpr.expressionText);

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "comparisonPredicate"


    // $ANTLR start "betweenPredicate"
    // org/datayoo/moql/antlr/Selector.g:566:1: betweenPredicate returns [OperationMetadata operationMetadata] : lExpr= expression (not= NOT )? BETWEEN rExpr1= expression AND rExpr2= expression ;
    public final OperationMetadata betweenPredicate() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token not=null;
        SelectorParser.expression_return lExpr = null;

        SelectorParser.expression_return rExpr1 = null;

        SelectorParser.expression_return rExpr2 = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:574:2: (lExpr= expression (not= NOT )? BETWEEN rExpr1= expression AND rExpr2= expression )
            // org/datayoo/moql/antlr/Selector.g:574:4: lExpr= expression (not= NOT )? BETWEEN rExpr1= expression AND rExpr2= expression
            {
            pushFollow(FOLLOW_expression_in_betweenPredicate2590);
            lExpr=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;
            // org/datayoo/moql/antlr/Selector.g:574:27: (not= NOT )?
            int alt74=2;
            switch ( input.LA(1) ) {
                case NOT:
                    {
                    alt74=1;
                    }
                    break;
            }

            switch (alt74) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: not= NOT
                    {
                    not=(Token)match(input,NOT,FOLLOW_NOT_in_betweenPredicate2596); if (state.failed) return operationMetadata;

                    }
                    break;

            }

            match(input,BETWEEN,FOLLOW_BETWEEN_in_betweenPredicate2599); if (state.failed) return operationMetadata;
            pushFollow(FOLLOW_expression_in_betweenPredicate2605);
            rExpr1=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;
            match(input,AND,FOLLOW_AND_in_betweenPredicate2607); if (state.failed) return operationMetadata;
            pushFollow(FOLLOW_expression_in_betweenPredicate2613);
            rExpr2=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;

            }

            if ( state.backtracking==0 ) {

              String rExpr = StringFormater.format("({},{})", rExpr1.expressionText, rExpr2.expressionText);
              operationMetadata = new RelationOperationMetadata(SelectorConstants.BETWEEN, lExpr.expressionText, rExpr);
              if (not != null) {
              	operationMetadata = new LogicOperationMetadata(not.getText(), operationMetadata);
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "betweenPredicate"


    // $ANTLR start "inPredicate"
    // org/datayoo/moql/antlr/Selector.g:577:1: inPredicate returns [OperationMetadata operationMetadata] : lExpr= expression (not= NOT )? IN '(' (selectorDefinition= queryExpression | rExpr= expressionList ) ')' ;
    public final OperationMetadata inPredicate() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token not=null;
        SelectorParser.expression_return lExpr = null;

        SelectorDefinition selectorDefinition = null;

        SelectorParser.expressionList_return rExpr = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:589:2: (lExpr= expression (not= NOT )? IN '(' (selectorDefinition= queryExpression | rExpr= expressionList ) ')' )
            // org/datayoo/moql/antlr/Selector.g:589:4: lExpr= expression (not= NOT )? IN '(' (selectorDefinition= queryExpression | rExpr= expressionList ) ')'
            {
            pushFollow(FOLLOW_expression_in_inPredicate2637);
            lExpr=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;
            // org/datayoo/moql/antlr/Selector.g:589:27: (not= NOT )?
            int alt75=2;
            switch ( input.LA(1) ) {
                case NOT:
                    {
                    alt75=1;
                    }
                    break;
            }

            switch (alt75) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: not= NOT
                    {
                    not=(Token)match(input,NOT,FOLLOW_NOT_in_inPredicate2643); if (state.failed) return operationMetadata;

                    }
                    break;

            }

            match(input,IN,FOLLOW_IN_in_inPredicate2646); if (state.failed) return operationMetadata;
            match(input,85,FOLLOW_85_in_inPredicate2648); if (state.failed) return operationMetadata;
            // org/datayoo/moql/antlr/Selector.g:589:41: (selectorDefinition= queryExpression | rExpr= expressionList )
            int alt76=2;
            switch ( input.LA(1) ) {
            case 85:
                {
                int LA76_1 = input.LA(2);

                if ( (synpred95_Selector()) ) {
                    alt76=1;
                }
                else if ( (true) ) {
                    alt76=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 76, 1, input);

                    throw nvae;
                }
                }
                break;
            case SELECT:
                {
                alt76=1;
                }
                break;
            case FALSE:
            case NULL:
            case TRUE:
            case IntegerLiteral:
            case Identifier:
            case FloatingPointLiteral:
            case StringLiteral:
            case 106:
                {
                alt76=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return operationMetadata;}
                NoViableAltException nvae =
                    new NoViableAltException("", 76, 0, input);

                throw nvae;
            }

            switch (alt76) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:589:42: selectorDefinition= queryExpression
                    {
                    pushFollow(FOLLOW_queryExpression_in_inPredicate2655);
                    selectorDefinition=queryExpression();

                    state._fsp--;
                    if (state.failed) return operationMetadata;

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:589:81: rExpr= expressionList
                    {
                    pushFollow(FOLLOW_expressionList_in_inPredicate2663);
                    rExpr=expressionList();

                    state._fsp--;
                    if (state.failed) return operationMetadata;

                    }
                    break;

            }

            match(input,86,FOLLOW_86_in_inPredicate2666); if (state.failed) return operationMetadata;

            }

            if ( state.backtracking==0 ) {

              if (selectorDefinition != null) {
              	operationMetadata = new RelationOperationMetadata(SelectorConstants.IN, lExpr.expressionText, selectorDefinition);
              } else {
              	String inExpressionText = StringFormater.format("({})", rExpr.expressionText);
              	operationMetadata = new RelationOperationMetadata(SelectorConstants.IN, lExpr.expressionText, inExpressionText);
              }
              if (not != null) {
              	operationMetadata = new LogicOperationMetadata(not.getText(), operationMetadata);
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "inPredicate"


    // $ANTLR start "likePredicate"
    // org/datayoo/moql/antlr/Selector.g:592:1: likePredicate returns [OperationMetadata operationMetadata] : lExpr= expression (not= NOT )? LIKE rExpr= expression ;
    public final OperationMetadata likePredicate() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token not=null;
        SelectorParser.expression_return lExpr = null;

        SelectorParser.expression_return rExpr = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:599:2: (lExpr= expression (not= NOT )? LIKE rExpr= expression )
            // org/datayoo/moql/antlr/Selector.g:599:4: lExpr= expression (not= NOT )? LIKE rExpr= expression
            {
            pushFollow(FOLLOW_expression_in_likePredicate2689);
            lExpr=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;
            // org/datayoo/moql/antlr/Selector.g:599:26: (not= NOT )?
            int alt77=2;
            switch ( input.LA(1) ) {
                case NOT:
                    {
                    alt77=1;
                    }
                    break;
            }

            switch (alt77) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: not= NOT
                    {
                    not=(Token)match(input,NOT,FOLLOW_NOT_in_likePredicate2693); if (state.failed) return operationMetadata;

                    }
                    break;

            }

            match(input,LIKE,FOLLOW_LIKE_in_likePredicate2696); if (state.failed) return operationMetadata;
            pushFollow(FOLLOW_expression_in_likePredicate2702);
            rExpr=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;

            }

            if ( state.backtracking==0 ) {

              operationMetadata = new RelationOperationMetadata(SelectorConstants.LIKE, lExpr.expressionText, rExpr.expressionText);
              if (not != null) {
              	operationMetadata = new LogicOperationMetadata(not.getText(), operationMetadata);
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "likePredicate"


    // $ANTLR start "nullPredicate"
    // org/datayoo/moql/antlr/Selector.g:602:1: nullPredicate returns [OperationMetadata operationMetadata] : lExpr= expression IS (not= NOT )? rExpr= NULL ;
    public final OperationMetadata nullPredicate() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        Token not=null;
        Token rExpr=null;
        SelectorParser.expression_return lExpr = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:609:2: (lExpr= expression IS (not= NOT )? rExpr= NULL )
            // org/datayoo/moql/antlr/Selector.g:609:4: lExpr= expression IS (not= NOT )? rExpr= NULL
            {
            pushFollow(FOLLOW_expression_in_nullPredicate2726);
            lExpr=expression();

            state._fsp--;
            if (state.failed) return operationMetadata;
            match(input,IS,FOLLOW_IS_in_nullPredicate2728); if (state.failed) return operationMetadata;
            // org/datayoo/moql/antlr/Selector.g:609:30: (not= NOT )?
            int alt78=2;
            switch ( input.LA(1) ) {
                case NOT:
                    {
                    alt78=1;
                    }
                    break;
            }

            switch (alt78) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: not= NOT
                    {
                    not=(Token)match(input,NOT,FOLLOW_NOT_in_nullPredicate2734); if (state.failed) return operationMetadata;

                    }
                    break;

            }

            rExpr=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate2741); if (state.failed) return operationMetadata;

            }

            if ( state.backtracking==0 ) {

              operationMetadata = new RelationOperationMetadata(SelectorConstants.IS, lExpr.expressionText, rExpr.getText());
              if (not != null) {
              	operationMetadata = new LogicOperationMetadata(not.getText(), operationMetadata);
              }

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "nullPredicate"


    // $ANTLR start "existsPredicate"
    // org/datayoo/moql/antlr/Selector.g:612:1: existsPredicate returns [OperationMetadata operationMetadata] : EXISTS '(' queryMetadata= queryExpression ')' ;
    public final OperationMetadata existsPredicate() throws RecognitionException {
        OperationMetadata operationMetadata = null;

        SelectorDefinition queryMetadata = null;


        try {
            // org/datayoo/moql/antlr/Selector.g:616:2: ( EXISTS '(' queryMetadata= queryExpression ')' )
            // org/datayoo/moql/antlr/Selector.g:616:4: EXISTS '(' queryMetadata= queryExpression ')'
            {
            match(input,EXISTS,FOLLOW_EXISTS_in_existsPredicate2760); if (state.failed) return operationMetadata;
            match(input,85,FOLLOW_85_in_existsPredicate2762); if (state.failed) return operationMetadata;
            pushFollow(FOLLOW_queryExpression_in_existsPredicate2768);
            queryMetadata=queryExpression();

            state._fsp--;
            if (state.failed) return operationMetadata;
            match(input,86,FOLLOW_86_in_existsPredicate2770); if (state.failed) return operationMetadata;

            }

            if ( state.backtracking==0 ) {

              operationMetadata = new RelationOperationMetadata(SelectorConstants.EXISTS, queryMetadata);

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return operationMetadata;
    }
    // $ANTLR end "existsPredicate"

    public static class expressionList_return extends ParserRuleReturnScope {
        public String expressionText;
    };

    // $ANTLR start "expressionList"
    // org/datayoo/moql/antlr/Selector.g:619:1: expressionList returns [String expressionText] : expression ( ',' expression )* ;
    public final SelectorParser.expressionList_return expressionList() throws RecognitionException {
        SelectorParser.expressionList_return retval = new SelectorParser.expressionList_return();
        retval.start = input.LT(1);

        try {
            // org/datayoo/moql/antlr/Selector.g:620:6: ( expression ( ',' expression )* )
            // org/datayoo/moql/antlr/Selector.g:620:8: expression ( ',' expression )*
            {
            pushFollow(FOLLOW_expression_in_expressionList2788);
            expression();

            state._fsp--;
            if (state.failed) return retval;
            // org/datayoo/moql/antlr/Selector.g:620:19: ( ',' expression )*
            loop79:
            do {
                int alt79=2;
                switch ( input.LA(1) ) {
                case 87:
                    {
                    alt79=1;
                    }
                    break;

                }

                switch (alt79) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:620:20: ',' expression
            	    {
            	    match(input,87,FOLLOW_87_in_expressionList2791); if (state.failed) return retval;
            	    pushFollow(FOLLOW_expression_in_expressionList2793);
            	    expression();

            	    state._fsp--;
            	    if (state.failed) return retval;

            	    }
            	    break;

            	default :
            	    break loop79;
                }
            } while (true);

            if ( state.backtracking==0 ) {
              retval.expressionText = input.toString(retval.start,input.LT(-1));
            }

            }

            retval.stop = input.LT(-1);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "expressionList"


    // $ANTLR start "parExpression"
    // org/datayoo/moql/antlr/Selector.g:623:1: parExpression : '(' expression ')' ;
    public final void parExpression() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:624:6: ( '(' expression ')' )
            // org/datayoo/moql/antlr/Selector.g:624:9: '(' expression ')'
            {
            match(input,85,FOLLOW_85_in_parExpression2817); if (state.failed) return ;
            pushFollow(FOLLOW_expression_in_parExpression2818);
            expression();

            state._fsp--;
            if (state.failed) return ;
            match(input,86,FOLLOW_86_in_parExpression2819); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "parExpression"

    public static class expression_return extends ParserRuleReturnScope {
        public String expressionText;
    };

    // $ANTLR start "expression"
    // org/datayoo/moql/antlr/Selector.g:627:1: expression returns [String expressionText] : exclusiveOrExpression ( '|' exclusiveOrExpression )* ;
    public final SelectorParser.expression_return expression() throws RecognitionException {
        SelectorParser.expression_return retval = new SelectorParser.expression_return();
        retval.start = input.LT(1);

        try {
            // org/datayoo/moql/antlr/Selector.g:628:6: ( exclusiveOrExpression ( '|' exclusiveOrExpression )* )
            // org/datayoo/moql/antlr/Selector.g:628:8: exclusiveOrExpression ( '|' exclusiveOrExpression )*
            {
            pushFollow(FOLLOW_exclusiveOrExpression_in_expression2841);
            exclusiveOrExpression();

            state._fsp--;
            if (state.failed) return retval;
            // org/datayoo/moql/antlr/Selector.g:628:30: ( '|' exclusiveOrExpression )*
            loop80:
            do {
                int alt80=2;
                switch ( input.LA(1) ) {
                case 97:
                    {
                    alt80=1;
                    }
                    break;

                }

                switch (alt80) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:628:32: '|' exclusiveOrExpression
            	    {
            	    match(input,97,FOLLOW_97_in_expression2845); if (state.failed) return retval;
            	    pushFollow(FOLLOW_exclusiveOrExpression_in_expression2847);
            	    exclusiveOrExpression();

            	    state._fsp--;
            	    if (state.failed) return retval;

            	    }
            	    break;

            	default :
            	    break loop80;
                }
            } while (true);

            if ( state.backtracking==0 ) {
              retval.expressionText = input.toString(retval.start,input.LT(-1));
            }

            }

            retval.stop = input.LT(-1);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "expression"


    // $ANTLR start "exclusiveOrExpression"
    // org/datayoo/moql/antlr/Selector.g:631:1: exclusiveOrExpression : andExpression ( '^' andExpression )* ;
    public final void exclusiveOrExpression() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:632:6: ( andExpression ( '^' andExpression )* )
            // org/datayoo/moql/antlr/Selector.g:632:8: andExpression ( '^' andExpression )*
            {
            pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression2870);
            andExpression();

            state._fsp--;
            if (state.failed) return ;
            // org/datayoo/moql/antlr/Selector.g:632:22: ( '^' andExpression )*
            loop81:
            do {
                int alt81=2;
                switch ( input.LA(1) ) {
                case 98:
                    {
                    alt81=1;
                    }
                    break;

                }

                switch (alt81) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:632:23: '^' andExpression
            	    {
            	    match(input,98,FOLLOW_98_in_exclusiveOrExpression2873); if (state.failed) return ;
            	    pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression2875);
            	    andExpression();

            	    state._fsp--;
            	    if (state.failed) return ;

            	    }
            	    break;

            	default :
            	    break loop81;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "exclusiveOrExpression"


    // $ANTLR start "andExpression"
    // org/datayoo/moql/antlr/Selector.g:635:1: andExpression : shiftExpression ( '&' shiftExpression )* ;
    public final void andExpression() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:636:6: ( shiftExpression ( '&' shiftExpression )* )
            // org/datayoo/moql/antlr/Selector.g:636:8: shiftExpression ( '&' shiftExpression )*
            {
            pushFollow(FOLLOW_shiftExpression_in_andExpression2896);
            shiftExpression();

            state._fsp--;
            if (state.failed) return ;
            // org/datayoo/moql/antlr/Selector.g:636:24: ( '&' shiftExpression )*
            loop82:
            do {
                int alt82=2;
                switch ( input.LA(1) ) {
                case 99:
                    {
                    alt82=1;
                    }
                    break;

                }

                switch (alt82) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:636:25: '&' shiftExpression
            	    {
            	    match(input,99,FOLLOW_99_in_andExpression2899); if (state.failed) return ;
            	    pushFollow(FOLLOW_shiftExpression_in_andExpression2901);
            	    shiftExpression();

            	    state._fsp--;
            	    if (state.failed) return ;

            	    }
            	    break;

            	default :
            	    break loop82;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "andExpression"


    // $ANTLR start "shiftExpression"
    // org/datayoo/moql/antlr/Selector.g:638:1: shiftExpression : additiveExpression ( ( '<<' | '>>' ) additiveExpression )* ;
    public final void shiftExpression() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:639:6: ( additiveExpression ( ( '<<' | '>>' ) additiveExpression )* )
            // org/datayoo/moql/antlr/Selector.g:639:8: additiveExpression ( ( '<<' | '>>' ) additiveExpression )*
            {
            pushFollow(FOLLOW_additiveExpression_in_shiftExpression2921);
            additiveExpression();

            state._fsp--;
            if (state.failed) return ;
            // org/datayoo/moql/antlr/Selector.g:639:27: ( ( '<<' | '>>' ) additiveExpression )*
            loop83:
            do {
                int alt83=2;
                switch ( input.LA(1) ) {
                case 100:
                case 101:
                    {
                    alt83=1;
                    }
                    break;

                }

                switch (alt83) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:639:28: ( '<<' | '>>' ) additiveExpression
            	    {
            	    if ( (input.LA(1)>=100 && input.LA(1)<=101) ) {
            	        input.consume();
            	        state.errorRecovery=false;state.failed=false;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return ;}
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }

            	    pushFollow(FOLLOW_additiveExpression_in_shiftExpression2930);
            	    additiveExpression();

            	    state._fsp--;
            	    if (state.failed) return ;

            	    }
            	    break;

            	default :
            	    break loop83;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "shiftExpression"


    // $ANTLR start "additiveExpression"
    // org/datayoo/moql/antlr/Selector.g:642:1: additiveExpression : multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* ;
    public final void additiveExpression() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:643:6: ( multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* )
            // org/datayoo/moql/antlr/Selector.g:643:8: multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )*
            {
            pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression2955);
            multiplicativeExpression();

            state._fsp--;
            if (state.failed) return ;
            // org/datayoo/moql/antlr/Selector.g:643:33: ( ( '+' | '-' ) multiplicativeExpression )*
            loop84:
            do {
                int alt84=2;
                switch ( input.LA(1) ) {
                case 102:
                case 103:
                    {
                    alt84=1;
                    }
                    break;

                }

                switch (alt84) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:643:34: ( '+' | '-' ) multiplicativeExpression
            	    {
            	    if ( (input.LA(1)>=102 && input.LA(1)<=103) ) {
            	        input.consume();
            	        state.errorRecovery=false;state.failed=false;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return ;}
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }

            	    pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression2967);
            	    multiplicativeExpression();

            	    state._fsp--;
            	    if (state.failed) return ;

            	    }
            	    break;

            	default :
            	    break loop84;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "additiveExpression"


    // $ANTLR start "multiplicativeExpression"
    // org/datayoo/moql/antlr/Selector.g:646:1: multiplicativeExpression : notExpression ( ( '*' | '/' | '%' ) notExpression )* ;
    public final void multiplicativeExpression() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:647:6: ( notExpression ( ( '*' | '/' | '%' ) notExpression )* )
            // org/datayoo/moql/antlr/Selector.g:647:8: notExpression ( ( '*' | '/' | '%' ) notExpression )*
            {
            pushFollow(FOLLOW_notExpression_in_multiplicativeExpression2988);
            notExpression();

            state._fsp--;
            if (state.failed) return ;
            // org/datayoo/moql/antlr/Selector.g:647:22: ( ( '*' | '/' | '%' ) notExpression )*
            loop85:
            do {
                int alt85=2;
                switch ( input.LA(1) ) {
                case 88:
                case 104:
                case 105:
                    {
                    alt85=1;
                    }
                    break;

                }

                switch (alt85) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:647:23: ( '*' | '/' | '%' ) notExpression
            	    {
            	    if ( input.LA(1)==88||(input.LA(1)>=104 && input.LA(1)<=105) ) {
            	        input.consume();
            	        state.errorRecovery=false;state.failed=false;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return ;}
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }

            	    pushFollow(FOLLOW_notExpression_in_multiplicativeExpression3005);
            	    notExpression();

            	    state._fsp--;
            	    if (state.failed) return ;

            	    }
            	    break;

            	default :
            	    break loop85;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "multiplicativeExpression"


    // $ANTLR start "notExpression"
    // org/datayoo/moql/antlr/Selector.g:649:1: notExpression : ( '~' )? exp= primary ;
    public final void notExpression() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:650:6: ( ( '~' )? exp= primary )
            // org/datayoo/moql/antlr/Selector.g:650:8: ( '~' )? exp= primary
            {
            // org/datayoo/moql/antlr/Selector.g:650:8: ( '~' )?
            int alt86=2;
            switch ( input.LA(1) ) {
                case 106:
                    {
                    alt86=1;
                    }
                    break;
            }

            switch (alt86) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:0:0: '~'
                    {
                    match(input,106,FOLLOW_106_in_notExpression3025); if (state.failed) return ;

                    }
                    break;

            }

            pushFollow(FOLLOW_primary_in_notExpression3032);
            primary();

            state._fsp--;
            if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "notExpression"


    // $ANTLR start "primary"
    // org/datayoo/moql/antlr/Selector.g:651:1: primary : ( parExpression | function | member | constant );
    public final void primary() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:652:6: ( parExpression | function | member | constant )
            int alt87=4;
            switch ( input.LA(1) ) {
            case 85:
                {
                alt87=1;
                }
                break;
            case Identifier:
                {
                switch ( input.LA(2) ) {
                case 85:
                    {
                    alt87=2;
                    }
                    break;
                case EOF:
                case AND:
                case AS:
                case ASCENDING:
                case BETWEEN:
                case COMPLEMENTATION:
                case DECORATE:
                case DESCENDING:
                case EXCEPT:
                case FROM:
                case FULL:
                case GROUP:
                case HAVING:
                case IN:
                case INNER:
                case INTERSECT:
                case IS:
                case JOIN:
                case LEFT:
                case LIKE:
                case NOT:
                case OR:
                case ORDER:
                case RIGHT:
                case SYMEXCEPT:
                case LIMIT:
                case UNION:
                case WHERE:
                case Identifier:
                case 86:
                case 87:
                case 88:
                case 90:
                case 91:
                case 92:
                case 93:
                case 94:
                case 95:
                case 96:
                case 97:
                case 98:
                case 99:
                case 100:
                case 101:
                case 102:
                case 103:
                case 104:
                case 105:
                case 107:
                case 108:
                case 109:
                case 110:
                    {
                    alt87=3;
                    }
                    break;
                default:
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 87, 2, input);

                    throw nvae;
                }

                }
                break;
            case FALSE:
            case NULL:
            case TRUE:
            case IntegerLiteral:
            case FloatingPointLiteral:
            case StringLiteral:
                {
                alt87=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("", 87, 0, input);

                throw nvae;
            }

            switch (alt87) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:652:8: parExpression
                    {
                    pushFollow(FOLLOW_parExpression_in_primary3044);
                    parExpression();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:653:8: function
                    {
                    pushFollow(FOLLOW_function_in_primary3053);
                    function();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 3 :
                    // org/datayoo/moql/antlr/Selector.g:654:8: member
                    {
                    pushFollow(FOLLOW_member_in_primary3062);
                    member();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;
                case 4 :
                    // org/datayoo/moql/antlr/Selector.g:655:8: constant
                    {
                    pushFollow(FOLLOW_constant_in_primary3071);
                    constant();

                    state._fsp--;
                    if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "primary"


    // $ANTLR start "member"
    // org/datayoo/moql/antlr/Selector.g:658:1: member : variable ( '[' ( expression )? ']' )* ( ( '.' ( variable | function ) ( '[' ( expression )? ']' )* )* ) ;
    public final void member() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:659:2: ( variable ( '[' ( expression )? ']' )* ( ( '.' ( variable | function ) ( '[' ( expression )? ']' )* )* ) )
            // org/datayoo/moql/antlr/Selector.g:659:4: variable ( '[' ( expression )? ']' )* ( ( '.' ( variable | function ) ( '[' ( expression )? ']' )* )* )
            {
            pushFollow(FOLLOW_variable_in_member3091);
            variable();

            state._fsp--;
            if (state.failed) return ;
            // org/datayoo/moql/antlr/Selector.g:659:12: ( '[' ( expression )? ']' )*
            loop89:
            do {
                int alt89=2;
                switch ( input.LA(1) ) {
                case 107:
                    {
                    alt89=1;
                    }
                    break;

                }

                switch (alt89) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:659:13: '[' ( expression )? ']'
            	    {
            	    match(input,107,FOLLOW_107_in_member3093); if (state.failed) return ;
            	    // org/datayoo/moql/antlr/Selector.g:659:16: ( expression )?
            	    int alt88=2;
            	    switch ( input.LA(1) ) {
            	        case FALSE:
            	        case NULL:
            	        case TRUE:
            	        case IntegerLiteral:
            	        case Identifier:
            	        case FloatingPointLiteral:
            	        case StringLiteral:
            	        case 85:
            	        case 106:
            	            {
            	            alt88=1;
            	            }
            	            break;
            	    }

            	    switch (alt88) {
            	        case 1 :
            	            // org/datayoo/moql/antlr/Selector.g:0:0: expression
            	            {
            	            pushFollow(FOLLOW_expression_in_member3094);
            	            expression();

            	            state._fsp--;
            	            if (state.failed) return ;

            	            }
            	            break;

            	    }

            	    match(input,108,FOLLOW_108_in_member3096); if (state.failed) return ;

            	    }
            	    break;

            	default :
            	    break loop89;
                }
            } while (true);

            // org/datayoo/moql/antlr/Selector.g:659:33: ( ( '.' ( variable | function ) ( '[' ( expression )? ']' )* )* )
            // org/datayoo/moql/antlr/Selector.g:659:34: ( '.' ( variable | function ) ( '[' ( expression )? ']' )* )*
            {
            // org/datayoo/moql/antlr/Selector.g:659:34: ( '.' ( variable | function ) ( '[' ( expression )? ']' )* )*
            loop93:
            do {
                int alt93=2;
                switch ( input.LA(1) ) {
                case 109:
                    {
                    alt93=1;
                    }
                    break;

                }

                switch (alt93) {
            	case 1 :
            	    // org/datayoo/moql/antlr/Selector.g:659:35: '.' ( variable | function ) ( '[' ( expression )? ']' )*
            	    {
            	    match(input,109,FOLLOW_109_in_member3102); if (state.failed) return ;
            	    // org/datayoo/moql/antlr/Selector.g:659:39: ( variable | function )
            	    int alt90=2;
            	    switch ( input.LA(1) ) {
            	    case Identifier:
            	        {
            	        switch ( input.LA(2) ) {
            	        case 85:
            	            {
            	            alt90=2;
            	            }
            	            break;
            	        case EOF:
            	        case AND:
            	        case AS:
            	        case ASCENDING:
            	        case BETWEEN:
            	        case COMPLEMENTATION:
            	        case DECORATE:
            	        case DESCENDING:
            	        case EXCEPT:
            	        case FROM:
            	        case FULL:
            	        case GROUP:
            	        case HAVING:
            	        case IN:
            	        case INNER:
            	        case INTERSECT:
            	        case IS:
            	        case JOIN:
            	        case LEFT:
            	        case LIKE:
            	        case NOT:
            	        case OR:
            	        case ORDER:
            	        case RIGHT:
            	        case SYMEXCEPT:
            	        case LIMIT:
            	        case UNION:
            	        case WHERE:
            	        case Identifier:
            	        case 86:
            	        case 87:
            	        case 88:
            	        case 90:
            	        case 91:
            	        case 92:
            	        case 93:
            	        case 94:
            	        case 95:
            	        case 96:
            	        case 97:
            	        case 98:
            	        case 99:
            	        case 100:
            	        case 101:
            	        case 102:
            	        case 103:
            	        case 104:
            	        case 105:
            	        case 107:
            	        case 108:
            	        case 109:
            	        case 110:
            	            {
            	            alt90=1;
            	            }
            	            break;
            	        default:
            	            if (state.backtracking>0) {state.failed=true; return ;}
            	            NoViableAltException nvae =
            	                new NoViableAltException("", 90, 1, input);

            	            throw nvae;
            	        }

            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return ;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 90, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt90) {
            	        case 1 :
            	            // org/datayoo/moql/antlr/Selector.g:659:40: variable
            	            {
            	            pushFollow(FOLLOW_variable_in_member3105);
            	            variable();

            	            state._fsp--;
            	            if (state.failed) return ;

            	            }
            	            break;
            	        case 2 :
            	            // org/datayoo/moql/antlr/Selector.g:659:50: function
            	            {
            	            pushFollow(FOLLOW_function_in_member3108);
            	            function();

            	            state._fsp--;
            	            if (state.failed) return ;

            	            }
            	            break;

            	    }

            	    // org/datayoo/moql/antlr/Selector.g:659:60: ( '[' ( expression )? ']' )*
            	    loop92:
            	    do {
            	        int alt92=2;
            	        switch ( input.LA(1) ) {
            	        case 107:
            	            {
            	            alt92=1;
            	            }
            	            break;

            	        }

            	        switch (alt92) {
            	    	case 1 :
            	    	    // org/datayoo/moql/antlr/Selector.g:659:61: '[' ( expression )? ']'
            	    	    {
            	    	    match(input,107,FOLLOW_107_in_member3112); if (state.failed) return ;
            	    	    // org/datayoo/moql/antlr/Selector.g:659:64: ( expression )?
            	    	    int alt91=2;
            	    	    switch ( input.LA(1) ) {
            	    	        case FALSE:
            	    	        case NULL:
            	    	        case TRUE:
            	    	        case IntegerLiteral:
            	    	        case Identifier:
            	    	        case FloatingPointLiteral:
            	    	        case StringLiteral:
            	    	        case 85:
            	    	        case 106:
            	    	            {
            	    	            alt91=1;
            	    	            }
            	    	            break;
            	    	    }

            	    	    switch (alt91) {
            	    	        case 1 :
            	    	            // org/datayoo/moql/antlr/Selector.g:0:0: expression
            	    	            {
            	    	            pushFollow(FOLLOW_expression_in_member3113);
            	    	            expression();

            	    	            state._fsp--;
            	    	            if (state.failed) return ;

            	    	            }
            	    	            break;

            	    	    }

            	    	    match(input,108,FOLLOW_108_in_member3115); if (state.failed) return ;

            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop92;
            	        }
            	    } while (true);


            	    }
            	    break;

            	default :
            	    break loop93;
                }
            } while (true);


            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "member"


    // $ANTLR start "function"
    // org/datayoo/moql/antlr/Selector.g:662:1: function : ( Identifier '(' ( expressionList )? ')' | Identifier '(' expression 'as' expression ')' );
    public final void function() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:663:2: ( Identifier '(' ( expressionList )? ')' | Identifier '(' expression 'as' expression ')' )
            int alt95=2;
            switch ( input.LA(1) ) {
            case Identifier:
                {
                int LA95_1 = input.LA(2);

                if ( (synpred120_Selector()) ) {
                    alt95=1;
                }
                else if ( (true) ) {
                    alt95=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return ;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 95, 1, input);

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

                throw nvae;
            }

            switch (alt95) {
                case 1 :
                    // org/datayoo/moql/antlr/Selector.g:663:4: Identifier '(' ( expressionList )? ')'
                    {
                    match(input,Identifier,FOLLOW_Identifier_in_function3131); if (state.failed) return ;
                    match(input,85,FOLLOW_85_in_function3133); if (state.failed) return ;
                    // org/datayoo/moql/antlr/Selector.g:663:18: ( expressionList )?
                    int alt94=2;
                    switch ( input.LA(1) ) {
                        case FALSE:
                        case NULL:
                        case TRUE:
                        case IntegerLiteral:
                        case Identifier:
                        case FloatingPointLiteral:
                        case StringLiteral:
                        case 85:
                        case 106:
                            {
                            alt94=1;
                            }
                            break;
                    }

                    switch (alt94) {
                        case 1 :
                            // org/datayoo/moql/antlr/Selector.g:0:0: expressionList
                            {
                            pushFollow(FOLLOW_expressionList_in_function3134);
                            expressionList();

                            state._fsp--;
                            if (state.failed) return ;

                            }
                            break;

                    }

                    match(input,86,FOLLOW_86_in_function3136); if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // org/datayoo/moql/antlr/Selector.g:664:4: Identifier '(' expression 'as' expression ')'
                    {
                    match(input,Identifier,FOLLOW_Identifier_in_function3141); if (state.failed) return ;
                    match(input,85,FOLLOW_85_in_function3143); if (state.failed) return ;
                    pushFollow(FOLLOW_expression_in_function3145);
                    expression();

                    state._fsp--;
                    if (state.failed) return ;
                    match(input,110,FOLLOW_110_in_function3147); if (state.failed) return ;
                    pushFollow(FOLLOW_expression_in_function3149);
                    expression();

                    state._fsp--;
                    if (state.failed) return ;
                    match(input,86,FOLLOW_86_in_function3151); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "function"


    // $ANTLR start "variable"
    // org/datayoo/moql/antlr/Selector.g:667:1: variable : Identifier ;
    public final void variable() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:668:2: ( Identifier )
            // org/datayoo/moql/antlr/Selector.g:668:4: Identifier
            {
            match(input,Identifier,FOLLOW_Identifier_in_variable3163); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "variable"


    // $ANTLR start "constant"
    // org/datayoo/moql/antlr/Selector.g:671:1: constant : ( IntegerLiteral | FloatingPointLiteral | StringLiteral | NULL | TRUE | FALSE );
    public final void constant() throws RecognitionException {
        try {
            // org/datayoo/moql/antlr/Selector.g:672:2: ( IntegerLiteral | FloatingPointLiteral | StringLiteral | NULL | TRUE | FALSE )
            // org/datayoo/moql/antlr/Selector.g:
            {
            if ( input.LA(1)==FALSE||input.LA(1)==NULL||input.LA(1)==TRUE||input.LA(1)==IntegerLiteral||(input.LA(1)>=FloatingPointLiteral && input.LA(1)<=StringLiteral) ) {
                input.consume();
                state.errorRecovery=false;state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return ;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "constant"

    // $ANTLR start synpred1_Selector
    public final void synpred1_Selector_fragment() throws RecognitionException {   
        SelectorDefinition unionMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:72:4: (unionMetadata= unionExpression )
        // org/datayoo/moql/antlr/Selector.g:72:4: unionMetadata= unionExpression
        {
        pushFollow(FOLLOW_unionExpression_in_synpred1_Selector725);
        unionMetadata=unionExpression();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred1_Selector

    // $ANTLR start synpred2_Selector
    public final void synpred2_Selector_fragment() throws RecognitionException {   
        SelectorDefinition exceptMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:73:4: (exceptMetadata= exceptExpression )
        // org/datayoo/moql/antlr/Selector.g:73:4: exceptMetadata= exceptExpression
        {
        pushFollow(FOLLOW_exceptExpression_in_synpred2_Selector736);
        exceptMetadata=exceptExpression();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred2_Selector

    // $ANTLR start synpred3_Selector
    public final void synpred3_Selector_fragment() throws RecognitionException {   
        SelectorDefinition symexceptMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:74:4: (symexceptMetadata= symexceptExpression )
        // org/datayoo/moql/antlr/Selector.g:74:4: symexceptMetadata= symexceptExpression
        {
        pushFollow(FOLLOW_symexceptExpression_in_synpred3_Selector747);
        symexceptMetadata=symexceptExpression();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred3_Selector

    // $ANTLR start synpred4_Selector
    public final void synpred4_Selector_fragment() throws RecognitionException {   
        SelectorDefinition complementationMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:75:4: (complementationMetadata= complementationExpression )
        // org/datayoo/moql/antlr/Selector.g:75:4: complementationMetadata= complementationExpression
        {
        pushFollow(FOLLOW_complementationExpression_in_synpred4_Selector758);
        complementationMetadata=complementationExpression();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred4_Selector

    // $ANTLR start synpred9_Selector
    public final void synpred9_Selector_fragment() throws RecognitionException {   
        Token unionAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;


        // org/datayoo/moql/antlr/Selector.g:85:4: ( '(' lSelectorDefinition2= queryTerm ')' UNION (unionAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? )
        // org/datayoo/moql/antlr/Selector.g:85:4: '(' lSelectorDefinition2= queryTerm ')' UNION (unionAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
        {
        match(input,85,FOLLOW_85_in_synpred9_Selector790); if (state.failed) return ;
        pushFollow(FOLLOW_queryTerm_in_synpred9_Selector795);
        lSelectorDefinition2=queryTerm();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred9_Selector797); if (state.failed) return ;
        match(input,UNION,FOLLOW_UNION_in_synpred9_Selector799); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:85:59: (unionAll= ALL )?
        int alt96=2;
        switch ( input.LA(1) ) {
            case ALL:
                {
                alt96=1;
                }
                break;
        }

        switch (alt96) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: unionAll= ALL
                {
                unionAll=(Token)match(input,ALL,FOLLOW_ALL_in_synpred9_Selector805); if (state.failed) return ;

                }
                break;

        }

        match(input,85,FOLLOW_85_in_synpred9_Selector809); if (state.failed) return ;
        pushFollow(FOLLOW_queryExpression_in_synpred9_Selector815);
        rSelectorDefinition2=queryExpression();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred9_Selector817); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:85:122: (orderBy= orderByClause )?
        int alt97=2;
        switch ( input.LA(1) ) {
            case ORDER:
                {
                alt97=1;
                }
                break;
        }

        switch (alt97) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                {
                pushFollow(FOLLOW_orderByClause_in_synpred9_Selector823);
                orderBy=orderByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:85:153: (limitMetadata= limitClause )?
        int alt98=2;
        switch ( input.LA(1) ) {
            case LIMIT:
                {
                alt98=1;
                }
                break;
        }

        switch (alt98) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                {
                pushFollow(FOLLOW_limitClause_in_synpred9_Selector830);
                limitMetadata=limitClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:85:179: (decorateBy= decorateByClause )?
        int alt99=2;
        switch ( input.LA(1) ) {
            case DECORATE:
                {
                alt99=1;
                }
                break;
        }

        switch (alt99) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                {
                pushFollow(FOLLOW_decorateByClause_in_synpred9_Selector837);
                decorateBy=decorateByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }


        }
    }
    // $ANTLR end synpred9_Selector

    // $ANTLR start synpred15_Selector
    public final void synpred15_Selector_fragment() throws RecognitionException {   
        Token exceptAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;


        // org/datayoo/moql/antlr/Selector.g:126:4: ( '(' lSelectorDefinition2= queryTerm ')' EXCEPT (exceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? )
        // org/datayoo/moql/antlr/Selector.g:126:4: '(' lSelectorDefinition2= queryTerm ')' EXCEPT (exceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
        {
        match(input,85,FOLLOW_85_in_synpred15_Selector887); if (state.failed) return ;
        pushFollow(FOLLOW_queryTerm_in_synpred15_Selector892);
        lSelectorDefinition2=queryTerm();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred15_Selector894); if (state.failed) return ;
        match(input,EXCEPT,FOLLOW_EXCEPT_in_synpred15_Selector896); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:126:61: (exceptAll= ALL )?
        int alt100=2;
        switch ( input.LA(1) ) {
            case ALL:
                {
                alt100=1;
                }
                break;
        }

        switch (alt100) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: exceptAll= ALL
                {
                exceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_synpred15_Selector902); if (state.failed) return ;

                }
                break;

        }

        match(input,85,FOLLOW_85_in_synpred15_Selector905); if (state.failed) return ;
        pushFollow(FOLLOW_queryExpression_in_synpred15_Selector911);
        rSelectorDefinition2=queryExpression();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred15_Selector913); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:126:123: (orderBy= orderByClause )?
        int alt101=2;
        switch ( input.LA(1) ) {
            case ORDER:
                {
                alt101=1;
                }
                break;
        }

        switch (alt101) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                {
                pushFollow(FOLLOW_orderByClause_in_synpred15_Selector919);
                orderBy=orderByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:126:154: (limitMetadata= limitClause )?
        int alt102=2;
        switch ( input.LA(1) ) {
            case LIMIT:
                {
                alt102=1;
                }
                break;
        }

        switch (alt102) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                {
                pushFollow(FOLLOW_limitClause_in_synpred15_Selector926);
                limitMetadata=limitClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:126:180: (decorateBy= decorateByClause )?
        int alt103=2;
        switch ( input.LA(1) ) {
            case DECORATE:
                {
                alt103=1;
                }
                break;
        }

        switch (alt103) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                {
                pushFollow(FOLLOW_decorateByClause_in_synpred15_Selector933);
                decorateBy=decorateByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }


        }
    }
    // $ANTLR end synpred15_Selector

    // $ANTLR start synpred21_Selector
    public final void synpred21_Selector_fragment() throws RecognitionException {   
        Token symexceptAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;


        // org/datayoo/moql/antlr/Selector.g:167:4: ( '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? )
        // org/datayoo/moql/antlr/Selector.g:167:4: '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
        {
        match(input,85,FOLLOW_85_in_synpred21_Selector984); if (state.failed) return ;
        pushFollow(FOLLOW_queryTerm_in_synpred21_Selector989);
        lSelectorDefinition2=queryTerm();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred21_Selector991); if (state.failed) return ;
        match(input,SYMEXCEPT,FOLLOW_SYMEXCEPT_in_synpred21_Selector993); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:167:67: (symexceptAll= ALL )?
        int alt104=2;
        switch ( input.LA(1) ) {
            case ALL:
                {
                alt104=1;
                }
                break;
        }

        switch (alt104) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: symexceptAll= ALL
                {
                symexceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_synpred21_Selector999); if (state.failed) return ;

                }
                break;

        }

        match(input,85,FOLLOW_85_in_synpred21_Selector1002); if (state.failed) return ;
        pushFollow(FOLLOW_queryExpression_in_synpred21_Selector1008);
        rSelectorDefinition2=queryExpression();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred21_Selector1010); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:167:129: (orderBy= orderByClause )?
        int alt105=2;
        switch ( input.LA(1) ) {
            case ORDER:
                {
                alt105=1;
                }
                break;
        }

        switch (alt105) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                {
                pushFollow(FOLLOW_orderByClause_in_synpred21_Selector1016);
                orderBy=orderByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:167:160: (limitMetadata= limitClause )?
        int alt106=2;
        switch ( input.LA(1) ) {
            case LIMIT:
                {
                alt106=1;
                }
                break;
        }

        switch (alt106) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                {
                pushFollow(FOLLOW_limitClause_in_synpred21_Selector1023);
                limitMetadata=limitClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:167:186: (decorateBy= decorateByClause )?
        int alt107=2;
        switch ( input.LA(1) ) {
            case DECORATE:
                {
                alt107=1;
                }
                break;
        }

        switch (alt107) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                {
                pushFollow(FOLLOW_decorateByClause_in_synpred21_Selector1030);
                decorateBy=decorateByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }


        }
    }
    // $ANTLR end synpred21_Selector

    // $ANTLR start synpred27_Selector
    public final void synpred27_Selector_fragment() throws RecognitionException {   
        Token symexceptAll=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;


        // org/datayoo/moql/antlr/Selector.g:208:4: ( '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? )
        // org/datayoo/moql/antlr/Selector.g:208:4: '(' lSelectorDefinition2= queryTerm ')' SYMEXCEPT (symexceptAll= ALL )? '(' rSelectorDefinition2= queryExpression ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
        {
        match(input,85,FOLLOW_85_in_synpred27_Selector1081); if (state.failed) return ;
        pushFollow(FOLLOW_queryTerm_in_synpred27_Selector1086);
        lSelectorDefinition2=queryTerm();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred27_Selector1088); if (state.failed) return ;
        match(input,SYMEXCEPT,FOLLOW_SYMEXCEPT_in_synpred27_Selector1090); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:208:67: (symexceptAll= ALL )?
        int alt108=2;
        switch ( input.LA(1) ) {
            case ALL:
                {
                alt108=1;
                }
                break;
        }

        switch (alt108) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: symexceptAll= ALL
                {
                symexceptAll=(Token)match(input,ALL,FOLLOW_ALL_in_synpred27_Selector1096); if (state.failed) return ;

                }
                break;

        }

        match(input,85,FOLLOW_85_in_synpred27_Selector1099); if (state.failed) return ;
        pushFollow(FOLLOW_queryExpression_in_synpred27_Selector1105);
        rSelectorDefinition2=queryExpression();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred27_Selector1107); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:208:129: (orderBy= orderByClause )?
        int alt109=2;
        switch ( input.LA(1) ) {
            case ORDER:
                {
                alt109=1;
                }
                break;
        }

        switch (alt109) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                {
                pushFollow(FOLLOW_orderByClause_in_synpred27_Selector1113);
                orderBy=orderByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:208:160: (limitMetadata= limitClause )?
        int alt110=2;
        switch ( input.LA(1) ) {
            case LIMIT:
                {
                alt110=1;
                }
                break;
        }

        switch (alt110) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                {
                pushFollow(FOLLOW_limitClause_in_synpred27_Selector1120);
                limitMetadata=limitClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:208:186: (decorateBy= decorateByClause )?
        int alt111=2;
        switch ( input.LA(1) ) {
            case DECORATE:
                {
                alt111=1;
                }
                break;
        }

        switch (alt111) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                {
                pushFollow(FOLLOW_decorateByClause_in_synpred27_Selector1127);
                decorateBy=decorateByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }


        }
    }
    // $ANTLR end synpred27_Selector

    // $ANTLR start synpred32_Selector
    public final void synpred32_Selector_fragment() throws RecognitionException {   
        SelectorDefinition intersectMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:273:4: (intersectMetadata= intersectExpression )
        // org/datayoo/moql/antlr/Selector.g:273:4: intersectMetadata= intersectExpression
        {
        pushFollow(FOLLOW_intersectExpression_in_synpred32_Selector1283);
        intersectMetadata=intersectExpression();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred32_Selector

    // $ANTLR start synpred37_Selector
    public final void synpred37_Selector_fragment() throws RecognitionException {   
        Token all=null;
        SelectorDefinition lSelectorDefinition2 = null;

        SelectorDefinition rSelectorDefinition2 = null;

        List orderBy = null;

        LimitMetadata limitMetadata = null;

        List decorateBy = null;


        // org/datayoo/moql/antlr/Selector.g:283:4: ( '(' lSelectorDefinition2= queryPrimary ')' INTERSECT (all= ALL )? '(' rSelectorDefinition2= queryTerm ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )? )
        // org/datayoo/moql/antlr/Selector.g:283:4: '(' lSelectorDefinition2= queryPrimary ')' INTERSECT (all= ALL )? '(' rSelectorDefinition2= queryTerm ')' (orderBy= orderByClause )? (limitMetadata= limitClause )? (decorateBy= decorateByClause )?
        {
        match(input,85,FOLLOW_85_in_synpred37_Selector1315); if (state.failed) return ;
        pushFollow(FOLLOW_queryPrimary_in_synpred37_Selector1320);
        lSelectorDefinition2=queryPrimary();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred37_Selector1322); if (state.failed) return ;
        match(input,INTERSECT,FOLLOW_INTERSECT_in_synpred37_Selector1324); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:283:61: (all= ALL )?
        int alt112=2;
        switch ( input.LA(1) ) {
            case ALL:
                {
                alt112=1;
                }
                break;
        }

        switch (alt112) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: all= ALL
                {
                all=(Token)match(input,ALL,FOLLOW_ALL_in_synpred37_Selector1330); if (state.failed) return ;

                }
                break;

        }

        match(input,85,FOLLOW_85_in_synpred37_Selector1333); if (state.failed) return ;
        pushFollow(FOLLOW_queryTerm_in_synpred37_Selector1339);
        rSelectorDefinition2=queryTerm();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred37_Selector1341); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:283:117: (orderBy= orderByClause )?
        int alt113=2;
        switch ( input.LA(1) ) {
            case ORDER:
                {
                alt113=1;
                }
                break;
        }

        switch (alt113) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: orderBy= orderByClause
                {
                pushFollow(FOLLOW_orderByClause_in_synpred37_Selector1347);
                orderBy=orderByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:283:148: (limitMetadata= limitClause )?
        int alt114=2;
        switch ( input.LA(1) ) {
            case LIMIT:
                {
                alt114=1;
                }
                break;
        }

        switch (alt114) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: limitMetadata= limitClause
                {
                pushFollow(FOLLOW_limitClause_in_synpred37_Selector1354);
                limitMetadata=limitClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        // org/datayoo/moql/antlr/Selector.g:283:174: (decorateBy= decorateByClause )?
        int alt115=2;
        switch ( input.LA(1) ) {
            case DECORATE:
                {
                alt115=1;
                }
                break;
        }

        switch (alt115) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: decorateBy= decorateByClause
                {
                pushFollow(FOLLOW_decorateByClause_in_synpred37_Selector1361);
                decorateBy=decorateByClause();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }


        }
    }
    // $ANTLR end synpred37_Selector

    // $ANTLR start synpred58_Selector
    public final void synpred58_Selector_fragment() throws RecognitionException {   
        Token t=null;
        SelectorParser.expression_return expr = null;


        // org/datayoo/moql/antlr/Selector.g:405:4: (expr= expression ( ( AS )? t= Identifier )? )
        // org/datayoo/moql/antlr/Selector.g:405:4: expr= expression ( ( AS )? t= Identifier )?
        {
        pushFollow(FOLLOW_expression_in_synpred58_Selector1747);
        expr=expression();

        state._fsp--;
        if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:405:22: ( ( AS )? t= Identifier )?
        int alt118=2;
        switch ( input.LA(1) ) {
            case AS:
            case Identifier:
                {
                alt118=1;
                }
                break;
        }

        switch (alt118) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:405:23: ( AS )? t= Identifier
                {
                // org/datayoo/moql/antlr/Selector.g:405:23: ( AS )?
                int alt117=2;
                switch ( input.LA(1) ) {
                    case AS:
                        {
                        alt117=1;
                        }
                        break;
                }

                switch (alt117) {
                    case 1 :
                        // org/datayoo/moql/antlr/Selector.g:0:0: AS
                        {
                        match(input,AS,FOLLOW_AS_in_synpred58_Selector1750); if (state.failed) return ;

                        }
                        break;

                }

                t=(Token)match(input,Identifier,FOLLOW_Identifier_in_synpred58_Selector1757); if (state.failed) return ;

                }
                break;

        }


        }
    }
    // $ANTLR end synpred58_Selector

    // $ANTLR start synpred59_Selector
    public final void synpred59_Selector_fragment() throws RecognitionException {   
        Token expr2=null;

        // org/datayoo/moql/antlr/Selector.g:414:4: (expr2= Identifier '.*' )
        // org/datayoo/moql/antlr/Selector.g:414:4: expr2= Identifier '.*'
        {
        expr2=(Token)match(input,Identifier,FOLLOW_Identifier_in_synpred59_Selector1771); if (state.failed) return ;
        match(input,89,FOLLOW_89_in_synpred59_Selector1772); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred59_Selector

    // $ANTLR start synpred62_Selector
    public final void synpred62_Selector_fragment() throws RecognitionException {   
        JoinMetadata joinMetadata1 = null;


        // org/datayoo/moql/antlr/Selector.g:436:4: (joinMetadata1= qualifiedJoin )
        // org/datayoo/moql/antlr/Selector.g:436:4: joinMetadata1= qualifiedJoin
        {
        pushFollow(FOLLOW_qualifiedJoin_in_synpred62_Selector1864);
        joinMetadata1=qualifiedJoin();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred62_Selector

    // $ANTLR start synpred63_Selector
    public final void synpred63_Selector_fragment() throws RecognitionException {   
        JoinMetadata joinMetadata2 = null;


        // org/datayoo/moql/antlr/Selector.g:437:4: ( '(' joinMetadata2= qualifiedJoin ')' )
        // org/datayoo/moql/antlr/Selector.g:437:4: '(' joinMetadata2= qualifiedJoin ')'
        {
        match(input,85,FOLLOW_85_in_synpred63_Selector1871); if (state.failed) return ;
        pushFollow(FOLLOW_qualifiedJoin_in_synpred63_Selector1877);
        joinMetadata2=qualifiedJoin();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred63_Selector1880); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred63_Selector

    // $ANTLR start synpred76_Selector
    public final void synpred76_Selector_fragment() throws RecognitionException {   
        JoinMetadata joinMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:503:5: ( '(' joinMetadata= qualifiedJoin ')' )
        // org/datayoo/moql/antlr/Selector.g:503:5: '(' joinMetadata= qualifiedJoin ')'
        {
        match(input,85,FOLLOW_85_in_synpred76_Selector2233); if (state.failed) return ;
        pushFollow(FOLLOW_qualifiedJoin_in_synpred76_Selector2239);
        joinMetadata=qualifiedJoin();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred76_Selector2241); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred76_Selector

    // $ANTLR start synpred80_Selector
    public final void synpred80_Selector_fragment() throws RecognitionException {   
        OperationMetadata predicateMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:545:4: (predicateMetadata= predicate )
        // org/datayoo/moql/antlr/Selector.g:545:4: predicateMetadata= predicate
        {
        pushFollow(FOLLOW_predicate_in_synpred80_Selector2402);
        predicateMetadata=predicate();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred80_Selector

    // $ANTLR start synpred81_Selector
    public final void synpred81_Selector_fragment() throws RecognitionException {   
        OperationMetadata conditionMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:546:4: ( '(' conditionMetadata= searchCondition ')' )
        // org/datayoo/moql/antlr/Selector.g:546:4: '(' conditionMetadata= searchCondition ')'
        {
        match(input,85,FOLLOW_85_in_synpred81_Selector2409); if (state.failed) return ;
        pushFollow(FOLLOW_searchCondition_in_synpred81_Selector2415);
        conditionMetadata=searchCondition();

        state._fsp--;
        if (state.failed) return ;
        match(input,86,FOLLOW_86_in_synpred81_Selector2418); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred81_Selector

    // $ANTLR start synpred82_Selector
    public final void synpred82_Selector_fragment() throws RecognitionException {   
        OperationMetadata comparisonMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:551:4: (comparisonMetadata= comparisonPredicate )
        // org/datayoo/moql/antlr/Selector.g:551:4: comparisonMetadata= comparisonPredicate
        {
        pushFollow(FOLLOW_comparisonPredicate_in_synpred82_Selector2448);
        comparisonMetadata=comparisonPredicate();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred82_Selector

    // $ANTLR start synpred83_Selector
    public final void synpred83_Selector_fragment() throws RecognitionException {   
        OperationMetadata betweenMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:552:4: (betweenMetadata= betweenPredicate )
        // org/datayoo/moql/antlr/Selector.g:552:4: betweenMetadata= betweenPredicate
        {
        pushFollow(FOLLOW_betweenPredicate_in_synpred83_Selector2459);
        betweenMetadata=betweenPredicate();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred83_Selector

    // $ANTLR start synpred84_Selector
    public final void synpred84_Selector_fragment() throws RecognitionException {   
        OperationMetadata inMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:553:4: (inMetadata= inPredicate )
        // org/datayoo/moql/antlr/Selector.g:553:4: inMetadata= inPredicate
        {
        pushFollow(FOLLOW_inPredicate_in_synpred84_Selector2470);
        inMetadata=inPredicate();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred84_Selector

    // $ANTLR start synpred85_Selector
    public final void synpred85_Selector_fragment() throws RecognitionException {   
        OperationMetadata likeMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:554:4: (likeMetadata= likePredicate )
        // org/datayoo/moql/antlr/Selector.g:554:4: likeMetadata= likePredicate
        {
        pushFollow(FOLLOW_likePredicate_in_synpred85_Selector2481);
        likeMetadata=likePredicate();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred85_Selector

    // $ANTLR start synpred86_Selector
    public final void synpred86_Selector_fragment() throws RecognitionException {   
        OperationMetadata nullMetadata = null;


        // org/datayoo/moql/antlr/Selector.g:555:4: (nullMetadata= nullPredicate )
        // org/datayoo/moql/antlr/Selector.g:555:4: nullMetadata= nullPredicate
        {
        pushFollow(FOLLOW_nullPredicate_in_synpred86_Selector2492);
        nullMetadata=nullPredicate();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred86_Selector

    // $ANTLR start synpred95_Selector
    public final void synpred95_Selector_fragment() throws RecognitionException {   
        SelectorDefinition selectorDefinition = null;


        // org/datayoo/moql/antlr/Selector.g:589:42: (selectorDefinition= queryExpression )
        // org/datayoo/moql/antlr/Selector.g:589:42: selectorDefinition= queryExpression
        {
        pushFollow(FOLLOW_queryExpression_in_synpred95_Selector2655);
        selectorDefinition=queryExpression();

        state._fsp--;
        if (state.failed) return ;

        }
    }
    // $ANTLR end synpred95_Selector

    // $ANTLR start synpred120_Selector
    public final void synpred120_Selector_fragment() throws RecognitionException {   
        // org/datayoo/moql/antlr/Selector.g:663:4: ( Identifier '(' ( expressionList )? ')' )
        // org/datayoo/moql/antlr/Selector.g:663:4: Identifier '(' ( expressionList )? ')'
        {
        match(input,Identifier,FOLLOW_Identifier_in_synpred120_Selector3131); if (state.failed) return ;
        match(input,85,FOLLOW_85_in_synpred120_Selector3133); if (state.failed) return ;
        // org/datayoo/moql/antlr/Selector.g:663:18: ( expressionList )?
        int alt127=2;
        switch ( input.LA(1) ) {
            case FALSE:
            case NULL:
            case TRUE:
            case IntegerLiteral:
            case Identifier:
            case FloatingPointLiteral:
            case StringLiteral:
            case 85:
            case 106:
                {
                alt127=1;
                }
                break;
        }

        switch (alt127) {
            case 1 :
                // org/datayoo/moql/antlr/Selector.g:0:0: expressionList
                {
                pushFollow(FOLLOW_expressionList_in_synpred120_Selector3134);
                expressionList();

                state._fsp--;
                if (state.failed) return ;

                }
                break;

        }

        match(input,86,FOLLOW_86_in_synpred120_Selector3136); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred120_Selector

    // Delegated rules

    public final boolean synpred27_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred27_Selector_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 final boolean synpred59_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred59_Selector_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 final boolean synpred21_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred21_Selector_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 final boolean synpred85_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred85_Selector_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 final boolean synpred37_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred37_Selector_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 final boolean synpred63_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred63_Selector_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 final boolean synpred2_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_Selector_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 final boolean synpred82_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred82_Selector_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 final boolean synpred95_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred95_Selector_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 final boolean synpred3_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_Selector_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 final boolean synpred76_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred76_Selector_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 final boolean synpred15_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred15_Selector_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 final boolean synpred62_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred62_Selector_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 final boolean synpred81_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred81_Selector_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 final boolean synpred32_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred32_Selector_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 final boolean synpred58_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred58_Selector_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 final boolean synpred86_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred86_Selector_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 final boolean synpred4_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_Selector_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 final boolean synpred84_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred84_Selector_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 final boolean synpred80_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred80_Selector_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 final boolean synpred9_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred9_Selector_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 final boolean synpred83_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred83_Selector_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 final boolean synpred120_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred120_Selector_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 final boolean synpred1_Selector() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_Selector_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;
    }


    protected DFA73 dfa73 = new DFA73(this);
    static final String DFA73_eotS =
        "\13\uffff";
    static final String DFA73_eofS =
        "\13\uffff";
    static final String DFA73_minS =
        "\1\42\4\0\6\uffff";
    static final String DFA73_maxS =
        "\1\152\4\0\6\uffff";
    static final String DFA73_acceptS =
        "\5\uffff\1\6\1\1\1\2\1\3\1\4\1\5";
    static final String DFA73_specialS =
        "\1\uffff\1\0\1\1\1\2\1\3\6\uffff}>";
    static final String[] DFA73_transitionS = {
            "\1\5\1\uffff\1\4\25\uffff\1\4\10\uffff\1\4\2\uffff\1\4\1\3\2"+
            "\4\13\uffff\1\2\24\uffff\1\1",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA73_eot = DFA.unpackEncodedString(DFA73_eotS);
    static final short[] DFA73_eof = DFA.unpackEncodedString(DFA73_eofS);
    static final char[] DFA73_min = DFA.unpackEncodedStringToUnsignedChars(DFA73_minS);
    static final char[] DFA73_max = DFA.unpackEncodedStringToUnsignedChars(DFA73_maxS);
    static final short[] DFA73_accept = DFA.unpackEncodedString(DFA73_acceptS);
    static final short[] DFA73_special = DFA.unpackEncodedString(DFA73_specialS);
    static final short[][] DFA73_transition;

    static {
        int numStates = DFA73_transitionS.length;
        DFA73_transition = new short[numStates][];
        for (int i=0; i=0 ) return s;
                        break;
                    case 1 : 
                        int LA73_2 = input.LA(1);

                         
                        int index73_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred82_Selector()) ) {s = 6;}

                        else if ( (synpred83_Selector()) ) {s = 7;}

                        else if ( (synpred84_Selector()) ) {s = 8;}

                        else if ( (synpred85_Selector()) ) {s = 9;}

                        else if ( (synpred86_Selector()) ) {s = 10;}

                         
                        input.seek(index73_2);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA73_3 = input.LA(1);

                         
                        int index73_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred82_Selector()) ) {s = 6;}

                        else if ( (synpred83_Selector()) ) {s = 7;}

                        else if ( (synpred84_Selector()) ) {s = 8;}

                        else if ( (synpred85_Selector()) ) {s = 9;}

                        else if ( (synpred86_Selector()) ) {s = 10;}

                         
                        input.seek(index73_3);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA73_4 = input.LA(1);

                         
                        int index73_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred82_Selector()) ) {s = 6;}

                        else if ( (synpred83_Selector()) ) {s = 7;}

                        else if ( (synpred84_Selector()) ) {s = 8;}

                        else if ( (synpred85_Selector()) ) {s = 9;}

                        else if ( (synpred86_Selector()) ) {s = 10;}

                         
                        input.seek(index73_4);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 73, _s, input);
            error(nvae);
            throw nvae;
        }
    }
 

    public static final BitSet FOLLOW_queryExpression_in_selector704 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_unionExpression_in_queryExpression725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_exceptExpression_in_queryExpression736 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_symexceptExpression_in_queryExpression747 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_complementationExpression_in_queryExpression758 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryTerm_in_queryExpression769 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_unionExpression790 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_unionExpression795 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_unionExpression797 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_UNION_in_unionExpression799 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_unionExpression805 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_unionExpression809 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_unionExpression815 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_unionExpression817 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_unionExpression823 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_unionExpression830 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_unionExpression837 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryTerm_in_unionExpression850 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_UNION_in_unionExpression852 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200001L});
    public static final BitSet FOLLOW_ALL_in_unionExpression858 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_unionExpression865 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_exceptExpression887 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_exceptExpression892 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_exceptExpression894 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_EXCEPT_in_exceptExpression896 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_exceptExpression902 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_exceptExpression905 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_exceptExpression911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_exceptExpression913 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_exceptExpression919 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_exceptExpression926 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_exceptExpression933 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryTerm_in_exceptExpression947 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_EXCEPT_in_exceptExpression949 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200001L});
    public static final BitSet FOLLOW_ALL_in_exceptExpression955 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_exceptExpression962 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_symexceptExpression984 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_symexceptExpression989 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_symexceptExpression991 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_SYMEXCEPT_in_symexceptExpression993 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_symexceptExpression999 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_symexceptExpression1002 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_symexceptExpression1008 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_symexceptExpression1010 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_symexceptExpression1016 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_symexceptExpression1023 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_symexceptExpression1030 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryTerm_in_symexceptExpression1043 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_SYMEXCEPT_in_symexceptExpression1045 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200001L});
    public static final BitSet FOLLOW_ALL_in_symexceptExpression1051 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_symexceptExpression1058 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_complementationExpression1081 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_complementationExpression1086 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_complementationExpression1088 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_SYMEXCEPT_in_complementationExpression1090 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_complementationExpression1096 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_complementationExpression1099 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_complementationExpression1105 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_complementationExpression1107 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_complementationExpression1113 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_complementationExpression1120 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_complementationExpression1127 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryTerm_in_complementationExpression1140 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_COMPLEMENTATION_in_complementationExpression1142 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200001L});
    public static final BitSet FOLLOW_ALL_in_complementationExpression1148 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_complementationExpression1155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ORDER_in_orderByClause1175 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_BY_in_orderByClause1177 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_sortSpecification_in_orderByClause1183 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_87_in_orderByClause1188 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_sortSpecification_in_orderByClause1194 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_expression_in_sortSpecification1221 = new BitSet(new long[]{0x0000000040002002L});
    public static final BitSet FOLLOW_orderingSpecification_in_sortSpecification1227 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASCENDING_in_orderingSpecification1251 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DESCENDING_in_orderingSpecification1259 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_intersectExpression_in_queryTerm1283 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryPrimary_in_queryTerm1294 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_intersectExpression1315 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryPrimary_in_intersectExpression1320 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_intersectExpression1322 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_INTERSECT_in_intersectExpression1324 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_intersectExpression1330 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_intersectExpression1333 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_intersectExpression1339 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_intersectExpression1341 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_intersectExpression1347 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_intersectExpression1354 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_intersectExpression1361 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryPrimary_in_intersectExpression1374 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_INTERSECT_in_intersectExpression1376 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200001L});
    public static final BitSet FOLLOW_ALL_in_intersectExpression1382 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_intersectExpression1389 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_querySpecification_in_queryPrimary1411 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_queryPrimary1418 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_queryPrimary1424 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_queryPrimary1427 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SELECT_in_querySpecification1453 = new BitSet(new long[]{0x0400001080400040L,0x00000400002003C9L});
    public static final BitSet FOLLOW_cache_in_querySpecification1459 = new BitSet(new long[]{0x0400001080400040L,0x00000400002003C9L});
    public static final BitSet FOLLOW_setQuantifier_in_querySpecification1466 = new BitSet(new long[]{0x0400001080400040L,0x00000400002003C9L});
    public static final BitSet FOLLOW_selectList_in_querySpecification1473 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_fromClause_in_querySpecification1481 = new BitSet(new long[]{0x2000280020000002L,0x0000000000000024L});
    public static final BitSet FOLLOW_whereClause_in_querySpecification1487 = new BitSet(new long[]{0x2000280020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_groupByClause_in_querySpecification1494 = new BitSet(new long[]{0x2000200020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_havingClause_in_querySpecification1501 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_querySpecification1510 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_querySpecification1517 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_querySpecification1524 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CACHE_in_cache1544 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_cache1546 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_IntegerLiteral_in_cache1552 = new BitSet(new long[]{0x0000000000000000L,0x0000000000C00000L});
    public static final BitSet FOLLOW_87_in_cache1555 = new BitSet(new long[]{0x0120006000000000L});
    public static final BitSet FOLLOW_washoutStrategy_in_cache1561 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_cache1565 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FIFO_in_washoutStrategy1588 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FILO_in_washoutStrategy1596 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LRU_in_washoutStrategy1604 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LFU_in_washoutStrategy1612 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DISTINCT_in_setQuantifier1627 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ALL_in_setQuantifier1633 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LIMIT_in_limitClause1655 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_IntegerLiteral_in_limitClause1662 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800000L});
    public static final BitSet FOLLOW_87_in_limitClause1664 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_IntegerLiteral_in_limitClause1672 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
    public static final BitSet FOLLOW_88_in_limitClause1679 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_column_in_selectList1708 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_87_in_selectList1713 = new BitSet(new long[]{0x0400001080400040L,0x00000400002003C9L});
    public static final BitSet FOLLOW_column_in_selectList1719 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_expression_in_column1747 = new BitSet(new long[]{0x0000000000000802L,0x0000000000000080L});
    public static final BitSet FOLLOW_AS_in_column1750 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_Identifier_in_column1757 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_Identifier_in_column1771 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
    public static final BitSet FOLLOW_89_in_column1772 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryExpression_in_column1784 = new BitSet(new long[]{0x0000000000000800L,0x0000000000000080L});
    public static final BitSet FOLLOW_AS_in_column1786 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_Identifier_in_column1793 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FROM_in_fromClause1822 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200080L});
    public static final BitSet FOLLOW_tableReference_in_fromClause1828 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_87_in_fromClause1835 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200080L});
    public static final BitSet FOLLOW_tableReference_in_fromClause1841 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_qualifiedJoin_in_tableReference1864 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_tableReference1871 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200080L});
    public static final BitSet FOLLOW_qualifiedJoin_in_tableReference1877 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_tableReference1880 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nonJoinTableReference_in_tableReference1889 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_Identifier_in_nonJoinTableReference1909 = new BitSet(new long[]{0x0000000000000800L,0x0000000000000080L});
    public static final BitSet FOLLOW_AS_in_nonJoinTableReference1911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_Identifier_in_nonJoinTableReference1918 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_nonJoinTableReference1925 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_nonJoinTableReference1931 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_nonJoinTableReference1933 = new BitSet(new long[]{0x0000000000000800L,0x0000000000000080L});
    public static final BitSet FOLLOW_AS_in_nonJoinTableReference1935 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_Identifier_in_nonJoinTableReference1942 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WHERE_in_whereClause1958 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_searchCondition_in_whereClause1964 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GROUP_in_groupByClause1985 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_BY_in_groupByClause1987 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_groupByClause1993 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_87_in_groupByClause1997 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_groupByClause2003 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_HAVING_in_havingClause2022 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_searchCondition_in_havingClause2028 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DECORATE_in_decorateByClause2050 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_BY_in_decorateByClause2052 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_decorator_in_decorateByClause2058 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_87_in_decorateByClause2062 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_decorator_in_decorateByClause2068 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_function_in_decorator2087 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nonJoinTableReference_in_qualifiedJoin2113 = new BitSet(new long[]{0x8018820000000000L});
    public static final BitSet FOLLOW_joinType_in_qualifiedJoin2122 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_JOIN_in_qualifiedJoin2125 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200080L});
    public static final BitSet FOLLOW_joinReference_in_qualifiedJoin2131 = new BitSet(new long[]{0x8818820000000002L});
    public static final BitSet FOLLOW_joinCondition_in_qualifiedJoin2137 = new BitSet(new long[]{0x8018820000000002L});
    public static final BitSet FOLLOW_INNER_in_joinType2163 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_outJoinType_in_joinType2174 = new BitSet(new long[]{0x4000000000000002L});
    public static final BitSet FOLLOW_OUTER_in_joinType2176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LEFT_in_outJoinType2202 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RIGHT_in_outJoinType2210 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FULL_in_outJoinType2218 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_joinReference2233 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200080L});
    public static final BitSet FOLLOW_qualifiedJoin_in_joinReference2239 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_joinReference2241 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nonJoinTableReference_in_joinReference2252 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ON_in_joinCondition2268 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_searchCondition_in_joinCondition2274 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_booleanTerm_in_searchCondition2299 = new BitSet(new long[]{0x1000000000000002L});
    public static final BitSet FOLLOW_OR_in_searchCondition2306 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_searchCondition_in_searchCondition2312 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_booleanFactor_in_booleanTerm2338 = new BitSet(new long[]{0x0000000000000202L});
    public static final BitSet FOLLOW_AND_in_booleanTerm2345 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_booleanTerm_in_booleanTerm2351 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NOT_in_booleanFactor2376 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_booleanPrimary_in_booleanFactor2383 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_predicate_in_booleanPrimary2402 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_booleanPrimary2409 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_searchCondition_in_booleanPrimary2415 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_booleanPrimary2418 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_booleanPrimary2427 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_comparisonPredicate_in_predicate2448 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_betweenPredicate_in_predicate2459 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_inPredicate_in_predicate2470 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_likePredicate_in_predicate2481 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nullPredicate_in_predicate2492 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_existsPredicate_in_predicate2503 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_comparisonPredicate2529 = new BitSet(new long[]{0x0000000000000000L,0x00000001FC000000L});
    public static final BitSet FOLLOW_set_in_comparisonPredicate2535 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_comparisonPredicate2566 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_betweenPredicate2590 = new BitSet(new long[]{0x0200000000040000L});
    public static final BitSet FOLLOW_NOT_in_betweenPredicate2596 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_BETWEEN_in_betweenPredicate2599 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_betweenPredicate2605 = new BitSet(new long[]{0x0000000000000200L});
    public static final BitSet FOLLOW_AND_in_betweenPredicate2607 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_betweenPredicate2613 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_inPredicate2637 = new BitSet(new long[]{0x0200400000000000L});
    public static final BitSet FOLLOW_NOT_in_inPredicate2643 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_IN_in_inPredicate2646 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_inPredicate2648 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C9L});
    public static final BitSet FOLLOW_queryExpression_in_inPredicate2655 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_expressionList_in_inPredicate2663 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_inPredicate2666 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_likePredicate2689 = new BitSet(new long[]{0x0280000000000000L});
    public static final BitSet FOLLOW_NOT_in_likePredicate2693 = new BitSet(new long[]{0x0080000000000000L});
    public static final BitSet FOLLOW_LIKE_in_likePredicate2696 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_likePredicate2702 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_nullPredicate2726 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_IS_in_nullPredicate2728 = new BitSet(new long[]{0x0600000000000000L});
    public static final BitSet FOLLOW_NOT_in_nullPredicate2734 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_NULL_in_nullPredicate2741 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_EXISTS_in_existsPredicate2760 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_existsPredicate2762 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_existsPredicate2768 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_existsPredicate2770 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_expressionList2788 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_87_in_expressionList2791 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_expressionList2793 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_85_in_parExpression2817 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_parExpression2818 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_parExpression2819 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_exclusiveOrExpression_in_expression2841 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
    public static final BitSet FOLLOW_97_in_expression2845 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_exclusiveOrExpression_in_expression2847 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
    public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression2870 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_98_in_exclusiveOrExpression2873 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression2875 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_shiftExpression_in_andExpression2896 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
    public static final BitSet FOLLOW_99_in_andExpression2899 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_shiftExpression_in_andExpression2901 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression2921 = new BitSet(new long[]{0x0000000000000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_set_in_shiftExpression2924 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression2930 = new BitSet(new long[]{0x0000000000000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression2955 = new BitSet(new long[]{0x0000000000000002L,0x000000C000000000L});
    public static final BitSet FOLLOW_set_in_additiveExpression2958 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression2967 = new BitSet(new long[]{0x0000000000000002L,0x000000C000000000L});
    public static final BitSet FOLLOW_notExpression_in_multiplicativeExpression2988 = new BitSet(new long[]{0x0000000000000002L,0x0000030001000000L});
    public static final BitSet FOLLOW_set_in_multiplicativeExpression2991 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_notExpression_in_multiplicativeExpression3005 = new BitSet(new long[]{0x0000000000000002L,0x0000030001000000L});
    public static final BitSet FOLLOW_106_in_notExpression3025 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_primary_in_notExpression3032 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_parExpression_in_primary3044 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_function_in_primary3053 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_member_in_primary3062 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_constant_in_primary3071 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_variable_in_member3091 = new BitSet(new long[]{0x0000000000000002L,0x0000280000000000L});
    public static final BitSet FOLLOW_107_in_member3093 = new BitSet(new long[]{0x0400001000000000L,0x00001400002003C8L});
    public static final BitSet FOLLOW_expression_in_member3094 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
    public static final BitSet FOLLOW_108_in_member3096 = new BitSet(new long[]{0x0000000000000002L,0x0000280000000000L});
    public static final BitSet FOLLOW_109_in_member3102 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_variable_in_member3105 = new BitSet(new long[]{0x0000000000000002L,0x0000280000000000L});
    public static final BitSet FOLLOW_function_in_member3108 = new BitSet(new long[]{0x0000000000000002L,0x0000280000000000L});
    public static final BitSet FOLLOW_107_in_member3112 = new BitSet(new long[]{0x0400001000000000L,0x00001400002003C8L});
    public static final BitSet FOLLOW_expression_in_member3113 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
    public static final BitSet FOLLOW_108_in_member3115 = new BitSet(new long[]{0x0000000000000002L,0x0000280000000000L});
    public static final BitSet FOLLOW_Identifier_in_function3131 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_function3133 = new BitSet(new long[]{0x0400001000000000L,0x00000400006003C9L});
    public static final BitSet FOLLOW_expressionList_in_function3134 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_function3136 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_Identifier_in_function3141 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_function3143 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_function3145 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
    public static final BitSet FOLLOW_110_in_function3147 = new BitSet(new long[]{0x0400001000000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_expression_in_function3149 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_function3151 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_Identifier_in_variable3163 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_constant0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_unionExpression_in_synpred1_Selector725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_exceptExpression_in_synpred2_Selector736 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_symexceptExpression_in_synpred3_Selector747 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_complementationExpression_in_synpred4_Selector758 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred9_Selector790 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_synpred9_Selector795 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred9_Selector797 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_UNION_in_synpred9_Selector799 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_synpred9_Selector805 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_synpred9_Selector809 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_synpred9_Selector815 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred9_Selector817 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_synpred9_Selector823 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_synpred9_Selector830 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_synpred9_Selector837 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred15_Selector887 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_synpred15_Selector892 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred15_Selector894 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_EXCEPT_in_synpred15_Selector896 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_synpred15_Selector902 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_synpred15_Selector905 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_synpred15_Selector911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred15_Selector913 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_synpred15_Selector919 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_synpred15_Selector926 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_synpred15_Selector933 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred21_Selector984 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_synpred21_Selector989 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred21_Selector991 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_SYMEXCEPT_in_synpred21_Selector993 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_synpred21_Selector999 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_synpred21_Selector1002 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_synpred21_Selector1008 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred21_Selector1010 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_synpred21_Selector1016 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_synpred21_Selector1023 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_synpred21_Selector1030 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred27_Selector1081 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_synpred27_Selector1086 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred27_Selector1088 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_SYMEXCEPT_in_synpred27_Selector1090 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_synpred27_Selector1096 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_synpred27_Selector1099 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryExpression_in_synpred27_Selector1105 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred27_Selector1107 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_synpred27_Selector1113 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_synpred27_Selector1120 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_synpred27_Selector1127 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_intersectExpression_in_synpred32_Selector1283 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred37_Selector1315 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryPrimary_in_synpred37_Selector1320 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred37_Selector1322 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_INTERSECT_in_synpred37_Selector1324 = new BitSet(new long[]{0x0000000000000040L,0x0000000000200000L});
    public static final BitSet FOLLOW_ALL_in_synpred37_Selector1330 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_synpred37_Selector1333 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200001L});
    public static final BitSet FOLLOW_queryTerm_in_synpred37_Selector1339 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred37_Selector1341 = new BitSet(new long[]{0x2000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_orderByClause_in_synpred37_Selector1347 = new BitSet(new long[]{0x0000000020000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_limitClause_in_synpred37_Selector1354 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_decorateByClause_in_synpred37_Selector1361 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_synpred58_Selector1747 = new BitSet(new long[]{0x0000000000000802L,0x0000000000000080L});
    public static final BitSet FOLLOW_AS_in_synpred58_Selector1750 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_Identifier_in_synpred58_Selector1757 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_Identifier_in_synpred59_Selector1771 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
    public static final BitSet FOLLOW_89_in_synpred59_Selector1772 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_qualifiedJoin_in_synpred62_Selector1864 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred63_Selector1871 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200080L});
    public static final BitSet FOLLOW_qualifiedJoin_in_synpred63_Selector1877 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred63_Selector1880 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred76_Selector2233 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200080L});
    public static final BitSet FOLLOW_qualifiedJoin_in_synpred76_Selector2239 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred76_Selector2241 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_predicate_in_synpred80_Selector2402 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_synpred81_Selector2409 = new BitSet(new long[]{0x0600001400000000L,0x00000400002003C8L});
    public static final BitSet FOLLOW_searchCondition_in_synpred81_Selector2415 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred81_Selector2418 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_comparisonPredicate_in_synpred82_Selector2448 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_betweenPredicate_in_synpred83_Selector2459 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_inPredicate_in_synpred84_Selector2470 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_likePredicate_in_synpred85_Selector2481 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_nullPredicate_in_synpred86_Selector2492 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_queryExpression_in_synpred95_Selector2655 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_Identifier_in_synpred120_Selector3131 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_85_in_synpred120_Selector3133 = new BitSet(new long[]{0x0400001000000000L,0x00000400006003C9L});
    public static final BitSet FOLLOW_expressionList_in_synpred120_Selector3134 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_86_in_synpred120_Selector3136 = new BitSet(new long[]{0x0000000000000002L});

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy