package com.justeat.mickeydb.parser.antlr.internal;

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import com.justeat.mickeydb.services.MickeyLangGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalMickeyLangParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_NUMBER", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'database'", "'function'", "'('", "','", "')'", "':'", "'{'", "';'", "'}'", "'action'", "'on'", "'unique'", "'notify'", "'/'", "'param'", "'like'", "'migrate'", "'from'", "'||'", "'*'", "'%'", "'+'", "'-'", "'<<'", "'>>'", "'&'", "'|'", "'<'", "'<='", "'>'", "'>='", "'='", "'=='", "'!='", "'<>'", "'is'", "'is not'", "'in'", "'not in'", "'glob'", "'match'", "'regexp'", "'and'", "'or'", "'is null'", "'not null'", "'notnull'", "'new.'", "'old.'", "'.'", "'not'", "'exists'", "'case'", "'else'", "'end'", "'cast'", "'as'", "'$'", "'when'", "'then'", "'order by'", "'limit'", "'offset'", "'select'", "'distinct'", "'all'", "'where'", "'group by'", "'having'", "'asc'", "'desc'", "'natural'", "'left'", "'outer'", "'inner'", "'cross'", "'join'", "'null'", "'current_time'", "'current_date'", "'current_timestamp'", "'create'", "'temp'", "'table'", "'view'", "'trigger'", "'before'", "'after'", "'instead of'", "'delete'", "'insert'", "'update'", "'of'", "'for each row'", "'begin'", "'alter'", "'rename to'", "'add column'", "'drop'", "'if exists'", "'index'", "'primary key'", "'autoincrement'", "'default'", "'check'", "'constraint'", "'collate'", "'conflict'", "'replace'", "'into'", "'values'", "'set'", "'union all'", "'union'", "'intersect'", "'except'", "'text'", "'integer'", "'real'", "'blob'", "'none'", "'numeric'", "'boolean'", "'rollback'", "'abort'", "'fail'", "'ignore'"
    };
    public static final int T__50=50;
    public static final int T__59=59;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__51=51;
    public static final int T__137=137;
    public static final int T__52=52;
    public static final int T__136=136;
    public static final int T__53=53;
    public static final int T__54=54;
    public static final int T__138=138;
    public static final int T__133=133;
    public static final int T__132=132;
    public static final int T__60=60;
    public static final int T__135=135;
    public static final int T__61=61;
    public static final int T__134=134;
    public static final int RULE_ID=4;
    public static final int T__131=131;
    public static final int T__130=130;
    public static final int RULE_INT=7;
    public static final int T__66=66;
    public static final int RULE_ML_COMMENT=8;
    public static final int T__67=67;
    public static final int T__129=129;
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int T__62=62;
    public static final int T__126=126;
    public static final int T__63=63;
    public static final int T__125=125;
    public static final int T__64=64;
    public static final int T__128=128;
    public static final int T__65=65;
    public static final int T__127=127;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__42=42;
    public static final int T__43=43;
    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 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__19=19;
    public static final int T__15=15;
    public static final int T__16=16;
    public static final int T__17=17;
    public static final int T__18=18;
    public static final int T__99=99;
    public static final int T__12=12;
    public static final int T__13=13;
    public static final int T__14=14;
    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 T__98=98;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int T__20=20;
    public static final int T__21=21;
    public static final int T__122=122;
    public static final int T__70=70;
    public static final int T__121=121;
    public static final int T__71=71;
    public static final int T__124=124;
    public static final int T__72=72;
    public static final int T__123=123;
    public static final int T__120=120;
    public static final int RULE_STRING=5;
    public static final int RULE_SL_COMMENT=9;
    public static final int T__77=77;
    public static final int T__119=119;
    public static final int T__78=78;
    public static final int T__118=118;
    public static final int T__79=79;
    public static final int T__73=73;
    public static final int T__115=115;
    public static final int EOF=-1;
    public static final int T__74=74;
    public static final int T__114=114;
    public static final int T__75=75;
    public static final int T__117=117;
    public static final int T__76=76;
    public static final int T__116=116;
    public static final int T__80=80;
    public static final int T__111=111;
    public static final int T__81=81;
    public static final int T__110=110;
    public static final int T__82=82;
    public static final int T__113=113;
    public static final int T__83=83;
    public static final int T__112=112;
    public static final int RULE_WS=10;
    public static final int RULE_ANY_OTHER=11;
    public static final int RULE_NUMBER=6;
    public static final int T__88=88;
    public static final int T__108=108;
    public static final int T__89=89;
    public static final int T__107=107;
    public static final int T__109=109;
    public static final int T__84=84;
    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 InternalMickeyLangParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalMickeyLangParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalMickeyLangParser.tokenNames; }
    public String getGrammarFileName() { return "InternalMickeyLang.g"; }



     	private MickeyLangGrammarAccess grammarAccess;

        public InternalMickeyLangParser(TokenStream input, MickeyLangGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }

        @Override
        protected String getFirstRuleName() {
        	return "MickeyFile";
       	}

       	@Override
       	protected MickeyLangGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}




    // $ANTLR start "entryRuleMickeyFile"
    // InternalMickeyLang.g:65:1: entryRuleMickeyFile returns [EObject current=null] : iv_ruleMickeyFile= ruleMickeyFile EOF ;
    public final EObject entryRuleMickeyFile() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMickeyFile = null;


        try {
            // InternalMickeyLang.g:65:51: (iv_ruleMickeyFile= ruleMickeyFile EOF )
            // InternalMickeyLang.g:66:2: iv_ruleMickeyFile= ruleMickeyFile EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMickeyFileRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMickeyFile=ruleMickeyFile();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMickeyFile; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMickeyFile"


    // $ANTLR start "ruleMickeyFile"
    // InternalMickeyLang.g:72:1: ruleMickeyFile returns [EObject current=null] : (otherlv_0= 'database' ( (lv_databaseName_1_0= ruleQualifiedName ) ) ( (lv_blocks_2_0= ruleMickeyBlock ) )* ) ;
    public final EObject ruleMickeyFile() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        AntlrDatatypeRuleToken lv_databaseName_1_0 = null;

        EObject lv_blocks_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:78:2: ( (otherlv_0= 'database' ( (lv_databaseName_1_0= ruleQualifiedName ) ) ( (lv_blocks_2_0= ruleMickeyBlock ) )* ) )
            // InternalMickeyLang.g:79:2: (otherlv_0= 'database' ( (lv_databaseName_1_0= ruleQualifiedName ) ) ( (lv_blocks_2_0= ruleMickeyBlock ) )* )
            {
            // InternalMickeyLang.g:79:2: (otherlv_0= 'database' ( (lv_databaseName_1_0= ruleQualifiedName ) ) ( (lv_blocks_2_0= ruleMickeyBlock ) )* )
            // InternalMickeyLang.g:80:3: otherlv_0= 'database' ( (lv_databaseName_1_0= ruleQualifiedName ) ) ( (lv_blocks_2_0= ruleMickeyBlock ) )*
            {
            otherlv_0=(Token)match(input,12,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getMickeyFileAccess().getDatabaseKeyword_0());
              		
            }
            // InternalMickeyLang.g:84:3: ( (lv_databaseName_1_0= ruleQualifiedName ) )
            // InternalMickeyLang.g:85:4: (lv_databaseName_1_0= ruleQualifiedName )
            {
            // InternalMickeyLang.g:85:4: (lv_databaseName_1_0= ruleQualifiedName )
            // InternalMickeyLang.g:86:5: lv_databaseName_1_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getMickeyFileAccess().getDatabaseNameQualifiedNameParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_4);
            lv_databaseName_1_0=ruleQualifiedName();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getMickeyFileRule());
              					}
              					set(
              						current,
              						"databaseName",
              						lv_databaseName_1_0,
              						"com.justeat.mickeydb.MickeyLang.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:103:3: ( (lv_blocks_2_0= ruleMickeyBlock ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==13||LA1_0==21||LA1_0==28||LA1_0==93||LA1_0==107||LA1_0==110) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // InternalMickeyLang.g:104:4: (lv_blocks_2_0= ruleMickeyBlock )
            	    {
            	    // InternalMickeyLang.g:104:4: (lv_blocks_2_0= ruleMickeyBlock )
            	    // InternalMickeyLang.g:105:5: lv_blocks_2_0= ruleMickeyBlock
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getMickeyFileAccess().getBlocksMickeyBlockParserRuleCall_2_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_4);
            	    lv_blocks_2_0=ruleMickeyBlock();

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

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getMickeyFileRule());
            	      					}
            	      					add(
            	      						current,
            	      						"blocks",
            	      						lv_blocks_2_0,
            	      						"com.justeat.mickeydb.MickeyLang.MickeyBlock");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMickeyFile"


    // $ANTLR start "entryRuleMickeyBlock"
    // InternalMickeyLang.g:126:1: entryRuleMickeyBlock returns [EObject current=null] : iv_ruleMickeyBlock= ruleMickeyBlock EOF ;
    public final EObject entryRuleMickeyBlock() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMickeyBlock = null;


        try {
            // InternalMickeyLang.g:126:52: (iv_ruleMickeyBlock= ruleMickeyBlock EOF )
            // InternalMickeyLang.g:127:2: iv_ruleMickeyBlock= ruleMickeyBlock EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMickeyBlockRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMickeyBlock=ruleMickeyBlock();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMickeyBlock; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMickeyBlock"


    // $ANTLR start "ruleMickeyBlock"
    // InternalMickeyLang.g:133:1: ruleMickeyBlock returns [EObject current=null] : (this_MickeyFunction_0= ruleMickeyFunction | this_ActionStatement_1= ruleActionStatement | this_DDLStatement_2= ruleDDLStatement | this_MigrationBlock_3= ruleMigrationBlock ) ;
    public final EObject ruleMickeyBlock() throws RecognitionException {
        EObject current = null;

        EObject this_MickeyFunction_0 = null;

        EObject this_ActionStatement_1 = null;

        EObject this_DDLStatement_2 = null;

        EObject this_MigrationBlock_3 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:139:2: ( (this_MickeyFunction_0= ruleMickeyFunction | this_ActionStatement_1= ruleActionStatement | this_DDLStatement_2= ruleDDLStatement | this_MigrationBlock_3= ruleMigrationBlock ) )
            // InternalMickeyLang.g:140:2: (this_MickeyFunction_0= ruleMickeyFunction | this_ActionStatement_1= ruleActionStatement | this_DDLStatement_2= ruleDDLStatement | this_MigrationBlock_3= ruleMigrationBlock )
            {
            // InternalMickeyLang.g:140:2: (this_MickeyFunction_0= ruleMickeyFunction | this_ActionStatement_1= ruleActionStatement | this_DDLStatement_2= ruleDDLStatement | this_MigrationBlock_3= ruleMigrationBlock )
            int alt2=4;
            switch ( input.LA(1) ) {
            case 13:
                {
                alt2=1;
                }
                break;
            case 21:
                {
                alt2=2;
                }
                break;
            case 93:
            case 107:
            case 110:
                {
                alt2=3;
                }
                break;
            case 28:
                {
                alt2=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;
            }

            switch (alt2) {
                case 1 :
                    // InternalMickeyLang.g:141:3: this_MickeyFunction_0= ruleMickeyFunction
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getMickeyBlockAccess().getMickeyFunctionParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_MickeyFunction_0=ruleMickeyFunction();

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

                      			current = this_MickeyFunction_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:150:3: this_ActionStatement_1= ruleActionStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getMickeyBlockAccess().getActionStatementParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_ActionStatement_1=ruleActionStatement();

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

                      			current = this_ActionStatement_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:159:3: this_DDLStatement_2= ruleDDLStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getMickeyBlockAccess().getDDLStatementParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DDLStatement_2=ruleDDLStatement();

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

                      			current = this_DDLStatement_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:168:3: this_MigrationBlock_3= ruleMigrationBlock
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getMickeyBlockAccess().getMigrationBlockParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_MigrationBlock_3=ruleMigrationBlock();

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

                      			current = this_MigrationBlock_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMickeyBlock"


    // $ANTLR start "entryRuleMickeyFunction"
    // InternalMickeyLang.g:180:1: entryRuleMickeyFunction returns [EObject current=null] : iv_ruleMickeyFunction= ruleMickeyFunction EOF ;
    public final EObject entryRuleMickeyFunction() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMickeyFunction = null;


        try {
            // InternalMickeyLang.g:180:55: (iv_ruleMickeyFunction= ruleMickeyFunction EOF )
            // InternalMickeyLang.g:181:2: iv_ruleMickeyFunction= ruleMickeyFunction EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMickeyFunctionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMickeyFunction=ruleMickeyFunction();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMickeyFunction; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMickeyFunction"


    // $ANTLR start "ruleMickeyFunction"
    // InternalMickeyLang.g:187:1: ruleMickeyFunction returns [EObject current=null] : (otherlv_0= 'function' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleFunctionArg ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )* )? otherlv_6= ')' (otherlv_7= ':' ( ( ruleQualifiedName ) ) )? otherlv_9= '{' ( ( (lv_statements_10_0= ruleDMLStatement ) ) otherlv_11= ';' )* otherlv_12= '}' ) ;
    public final EObject ruleMickeyFunction() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        EObject lv_args_3_0 = null;

        EObject lv_args_5_0 = null;

        EObject lv_statements_10_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:193:2: ( (otherlv_0= 'function' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleFunctionArg ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )* )? otherlv_6= ')' (otherlv_7= ':' ( ( ruleQualifiedName ) ) )? otherlv_9= '{' ( ( (lv_statements_10_0= ruleDMLStatement ) ) otherlv_11= ';' )* otherlv_12= '}' ) )
            // InternalMickeyLang.g:194:2: (otherlv_0= 'function' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleFunctionArg ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )* )? otherlv_6= ')' (otherlv_7= ':' ( ( ruleQualifiedName ) ) )? otherlv_9= '{' ( ( (lv_statements_10_0= ruleDMLStatement ) ) otherlv_11= ';' )* otherlv_12= '}' )
            {
            // InternalMickeyLang.g:194:2: (otherlv_0= 'function' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleFunctionArg ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )* )? otherlv_6= ')' (otherlv_7= ':' ( ( ruleQualifiedName ) ) )? otherlv_9= '{' ( ( (lv_statements_10_0= ruleDMLStatement ) ) otherlv_11= ';' )* otherlv_12= '}' )
            // InternalMickeyLang.g:195:3: otherlv_0= 'function' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleFunctionArg ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )* )? otherlv_6= ')' (otherlv_7= ':' ( ( ruleQualifiedName ) ) )? otherlv_9= '{' ( ( (lv_statements_10_0= ruleDMLStatement ) ) otherlv_11= ';' )* otherlv_12= '}'
            {
            otherlv_0=(Token)match(input,13,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getMickeyFunctionAccess().getFunctionKeyword_0());
              		
            }
            // InternalMickeyLang.g:199:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalMickeyLang.g:200:4: (lv_name_1_0= RULE_ID )
            {
            // InternalMickeyLang.g:200:4: (lv_name_1_0= RULE_ID )
            // InternalMickeyLang.g:201:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_5); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getMickeyFunctionAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMickeyFunctionRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            otherlv_2=(Token)match(input,14,FOLLOW_6); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getMickeyFunctionAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalMickeyLang.g:221:3: ( ( (lv_args_3_0= ruleFunctionArg ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )* )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( ((LA4_0>=128 && LA4_0<=131)||LA4_0==134) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // InternalMickeyLang.g:222:4: ( (lv_args_3_0= ruleFunctionArg ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )*
                    {
                    // InternalMickeyLang.g:222:4: ( (lv_args_3_0= ruleFunctionArg ) )
                    // InternalMickeyLang.g:223:5: (lv_args_3_0= ruleFunctionArg )
                    {
                    // InternalMickeyLang.g:223:5: (lv_args_3_0= ruleFunctionArg )
                    // InternalMickeyLang.g:224:6: lv_args_3_0= ruleFunctionArg
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getMickeyFunctionAccess().getArgsFunctionArgParserRuleCall_3_0_0());
                      					
                    }
                    pushFollow(FOLLOW_7);
                    lv_args_3_0=ruleFunctionArg();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getMickeyFunctionRule());
                      						}
                      						add(
                      							current,
                      							"args",
                      							lv_args_3_0,
                      							"com.justeat.mickeydb.MickeyLang.FunctionArg");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalMickeyLang.g:241:4: (otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) ) )*
                    loop3:
                    do {
                        int alt3=2;
                        int LA3_0 = input.LA(1);

                        if ( (LA3_0==15) ) {
                            alt3=1;
                        }


                        switch (alt3) {
                    	case 1 :
                    	    // InternalMickeyLang.g:242:5: otherlv_4= ',' ( (lv_args_5_0= ruleFunctionArg ) )
                    	    {
                    	    otherlv_4=(Token)match(input,15,FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_4, grammarAccess.getMickeyFunctionAccess().getCommaKeyword_3_1_0());
                    	      				
                    	    }
                    	    // InternalMickeyLang.g:246:5: ( (lv_args_5_0= ruleFunctionArg ) )
                    	    // InternalMickeyLang.g:247:6: (lv_args_5_0= ruleFunctionArg )
                    	    {
                    	    // InternalMickeyLang.g:247:6: (lv_args_5_0= ruleFunctionArg )
                    	    // InternalMickeyLang.g:248:7: lv_args_5_0= ruleFunctionArg
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getMickeyFunctionAccess().getArgsFunctionArgParserRuleCall_3_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_7);
                    	    lv_args_5_0=ruleFunctionArg();

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

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getMickeyFunctionRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"args",
                    	      								lv_args_5_0,
                    	      								"com.justeat.mickeydb.MickeyLang.FunctionArg");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_6=(Token)match(input,16,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getMickeyFunctionAccess().getRightParenthesisKeyword_4());
              		
            }
            // InternalMickeyLang.g:271:3: (otherlv_7= ':' ( ( ruleQualifiedName ) ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==17) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // InternalMickeyLang.g:272:4: otherlv_7= ':' ( ( ruleQualifiedName ) )
                    {
                    otherlv_7=(Token)match(input,17,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getMickeyFunctionAccess().getColonKeyword_5_0());
                      			
                    }
                    // InternalMickeyLang.g:276:4: ( ( ruleQualifiedName ) )
                    // InternalMickeyLang.g:277:5: ( ruleQualifiedName )
                    {
                    // InternalMickeyLang.g:277:5: ( ruleQualifiedName )
                    // InternalMickeyLang.g:278:6: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getMickeyFunctionRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getMickeyFunctionAccess().getTypeTableDefinitionCrossReference_5_1_0());
                      					
                    }
                    pushFollow(FOLLOW_10);
                    ruleQualifiedName();

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

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_9=(Token)match(input,18,FOLLOW_11); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_9, grammarAccess.getMickeyFunctionAccess().getLeftCurlyBracketKeyword_6());
              		
            }
            // InternalMickeyLang.g:297:3: ( ( (lv_statements_10_0= ruleDMLStatement ) ) otherlv_11= ';' )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==75||(LA6_0>=101 && LA6_0<=103)||LA6_0==120) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // InternalMickeyLang.g:298:4: ( (lv_statements_10_0= ruleDMLStatement ) ) otherlv_11= ';'
            	    {
            	    // InternalMickeyLang.g:298:4: ( (lv_statements_10_0= ruleDMLStatement ) )
            	    // InternalMickeyLang.g:299:5: (lv_statements_10_0= ruleDMLStatement )
            	    {
            	    // InternalMickeyLang.g:299:5: (lv_statements_10_0= ruleDMLStatement )
            	    // InternalMickeyLang.g:300:6: lv_statements_10_0= ruleDMLStatement
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getMickeyFunctionAccess().getStatementsDMLStatementParserRuleCall_7_0_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_12);
            	    lv_statements_10_0=ruleDMLStatement();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getMickeyFunctionRule());
            	      						}
            	      						add(
            	      							current,
            	      							"statements",
            	      							lv_statements_10_0,
            	      							"com.justeat.mickeydb.MickeyLang.DMLStatement");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }

            	    otherlv_11=(Token)match(input,19,FOLLOW_11); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_11, grammarAccess.getMickeyFunctionAccess().getSemicolonKeyword_7_1());
            	      			
            	    }

            	    }
            	    break;

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

            otherlv_12=(Token)match(input,20,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_12, grammarAccess.getMickeyFunctionAccess().getRightCurlyBracketKeyword_8());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMickeyFunction"


    // $ANTLR start "entryRuleActionStatement"
    // InternalMickeyLang.g:330:1: entryRuleActionStatement returns [EObject current=null] : iv_ruleActionStatement= ruleActionStatement EOF ;
    public final EObject entryRuleActionStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleActionStatement = null;


        try {
            // InternalMickeyLang.g:330:56: (iv_ruleActionStatement= ruleActionStatement EOF )
            // InternalMickeyLang.g:331:2: iv_ruleActionStatement= ruleActionStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getActionStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleActionStatement=ruleActionStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleActionStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleActionStatement"


    // $ANTLR start "ruleActionStatement"
    // InternalMickeyLang.g:337:1: ruleActionStatement returns [EObject current=null] : (otherlv_0= 'action' ( (lv_name_1_0= RULE_ID ) ) ( (lv_uri_2_0= ruleContentUri ) ) otherlv_3= 'on' ( ( ruleQualifiedName ) ) ( (lv_unique_5_0= 'unique' ) )? (otherlv_6= '{' ( (lv_params_7_0= ruleContentUriQueryParam ) )* ( (lv_notifications_8_0= ruleContentNotificationUri ) )* otherlv_9= '}' )? ) ;
    public final EObject ruleActionStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_3=null;
        Token lv_unique_5_0=null;
        Token otherlv_6=null;
        Token otherlv_9=null;
        EObject lv_uri_2_0 = null;

        EObject lv_params_7_0 = null;

        EObject lv_notifications_8_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:343:2: ( (otherlv_0= 'action' ( (lv_name_1_0= RULE_ID ) ) ( (lv_uri_2_0= ruleContentUri ) ) otherlv_3= 'on' ( ( ruleQualifiedName ) ) ( (lv_unique_5_0= 'unique' ) )? (otherlv_6= '{' ( (lv_params_7_0= ruleContentUriQueryParam ) )* ( (lv_notifications_8_0= ruleContentNotificationUri ) )* otherlv_9= '}' )? ) )
            // InternalMickeyLang.g:344:2: (otherlv_0= 'action' ( (lv_name_1_0= RULE_ID ) ) ( (lv_uri_2_0= ruleContentUri ) ) otherlv_3= 'on' ( ( ruleQualifiedName ) ) ( (lv_unique_5_0= 'unique' ) )? (otherlv_6= '{' ( (lv_params_7_0= ruleContentUriQueryParam ) )* ( (lv_notifications_8_0= ruleContentNotificationUri ) )* otherlv_9= '}' )? )
            {
            // InternalMickeyLang.g:344:2: (otherlv_0= 'action' ( (lv_name_1_0= RULE_ID ) ) ( (lv_uri_2_0= ruleContentUri ) ) otherlv_3= 'on' ( ( ruleQualifiedName ) ) ( (lv_unique_5_0= 'unique' ) )? (otherlv_6= '{' ( (lv_params_7_0= ruleContentUriQueryParam ) )* ( (lv_notifications_8_0= ruleContentNotificationUri ) )* otherlv_9= '}' )? )
            // InternalMickeyLang.g:345:3: otherlv_0= 'action' ( (lv_name_1_0= RULE_ID ) ) ( (lv_uri_2_0= ruleContentUri ) ) otherlv_3= 'on' ( ( ruleQualifiedName ) ) ( (lv_unique_5_0= 'unique' ) )? (otherlv_6= '{' ( (lv_params_7_0= ruleContentUriQueryParam ) )* ( (lv_notifications_8_0= ruleContentNotificationUri ) )* otherlv_9= '}' )?
            {
            otherlv_0=(Token)match(input,21,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getActionStatementAccess().getActionKeyword_0());
              		
            }
            // InternalMickeyLang.g:349:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalMickeyLang.g:350:4: (lv_name_1_0= RULE_ID )
            {
            // InternalMickeyLang.g:350:4: (lv_name_1_0= RULE_ID )
            // InternalMickeyLang.g:351:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_13); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getActionStatementAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getActionStatementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalMickeyLang.g:367:3: ( (lv_uri_2_0= ruleContentUri ) )
            // InternalMickeyLang.g:368:4: (lv_uri_2_0= ruleContentUri )
            {
            // InternalMickeyLang.g:368:4: (lv_uri_2_0= ruleContentUri )
            // InternalMickeyLang.g:369:5: lv_uri_2_0= ruleContentUri
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getActionStatementAccess().getUriContentUriParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_14);
            lv_uri_2_0=ruleContentUri();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getActionStatementRule());
              					}
              					set(
              						current,
              						"uri",
              						lv_uri_2_0,
              						"com.justeat.mickeydb.MickeyLang.ContentUri");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_3=(Token)match(input,22,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getActionStatementAccess().getOnKeyword_3());
              		
            }
            // InternalMickeyLang.g:390:3: ( ( ruleQualifiedName ) )
            // InternalMickeyLang.g:391:4: ( ruleQualifiedName )
            {
            // InternalMickeyLang.g:391:4: ( ruleQualifiedName )
            // InternalMickeyLang.g:392:5: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getActionStatementRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getActionStatementAccess().getTypeTableDefinitionCrossReference_4_0());
              				
            }
            pushFollow(FOLLOW_15);
            ruleQualifiedName();

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

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:406:3: ( (lv_unique_5_0= 'unique' ) )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==23) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // InternalMickeyLang.g:407:4: (lv_unique_5_0= 'unique' )
                    {
                    // InternalMickeyLang.g:407:4: (lv_unique_5_0= 'unique' )
                    // InternalMickeyLang.g:408:5: lv_unique_5_0= 'unique'
                    {
                    lv_unique_5_0=(Token)match(input,23,FOLLOW_16); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_unique_5_0, grammarAccess.getActionStatementAccess().getUniqueUniqueKeyword_5_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getActionStatementRule());
                      					}
                      					setWithLastConsumed(current, "unique", true, "unique");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:420:3: (otherlv_6= '{' ( (lv_params_7_0= ruleContentUriQueryParam ) )* ( (lv_notifications_8_0= ruleContentNotificationUri ) )* otherlv_9= '}' )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==18) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // InternalMickeyLang.g:421:4: otherlv_6= '{' ( (lv_params_7_0= ruleContentUriQueryParam ) )* ( (lv_notifications_8_0= ruleContentNotificationUri ) )* otherlv_9= '}'
                    {
                    otherlv_6=(Token)match(input,18,FOLLOW_17); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getActionStatementAccess().getLeftCurlyBracketKeyword_6_0());
                      			
                    }
                    // InternalMickeyLang.g:425:4: ( (lv_params_7_0= ruleContentUriQueryParam ) )*
                    loop8:
                    do {
                        int alt8=2;
                        int LA8_0 = input.LA(1);

                        if ( (LA8_0==26) ) {
                            alt8=1;
                        }


                        switch (alt8) {
                    	case 1 :
                    	    // InternalMickeyLang.g:426:5: (lv_params_7_0= ruleContentUriQueryParam )
                    	    {
                    	    // InternalMickeyLang.g:426:5: (lv_params_7_0= ruleContentUriQueryParam )
                    	    // InternalMickeyLang.g:427:6: lv_params_7_0= ruleContentUriQueryParam
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getActionStatementAccess().getParamsContentUriQueryParamParserRuleCall_6_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_17);
                    	    lv_params_7_0=ruleContentUriQueryParam();

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

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getActionStatementRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"params",
                    	      							lv_params_7_0,
                    	      							"com.justeat.mickeydb.MickeyLang.ContentUriQueryParam");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

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

                    // InternalMickeyLang.g:444:4: ( (lv_notifications_8_0= ruleContentNotificationUri ) )*
                    loop9:
                    do {
                        int alt9=2;
                        int LA9_0 = input.LA(1);

                        if ( (LA9_0==24) ) {
                            alt9=1;
                        }


                        switch (alt9) {
                    	case 1 :
                    	    // InternalMickeyLang.g:445:5: (lv_notifications_8_0= ruleContentNotificationUri )
                    	    {
                    	    // InternalMickeyLang.g:445:5: (lv_notifications_8_0= ruleContentNotificationUri )
                    	    // InternalMickeyLang.g:446:6: lv_notifications_8_0= ruleContentNotificationUri
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getActionStatementAccess().getNotificationsContentNotificationUriParserRuleCall_6_2_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_notifications_8_0=ruleContentNotificationUri();

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

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getActionStatementRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"notifications",
                    	      							lv_notifications_8_0,
                    	      							"com.justeat.mickeydb.MickeyLang.ContentNotificationUri");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

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

                    otherlv_9=(Token)match(input,20,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_9, grammarAccess.getActionStatementAccess().getRightCurlyBracketKeyword_6_3());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleActionStatement"


    // $ANTLR start "entryRuleContentNotificationUri"
    // InternalMickeyLang.g:472:1: entryRuleContentNotificationUri returns [EObject current=null] : iv_ruleContentNotificationUri= ruleContentNotificationUri EOF ;
    public final EObject entryRuleContentNotificationUri() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleContentNotificationUri = null;


        try {
            // InternalMickeyLang.g:472:63: (iv_ruleContentNotificationUri= ruleContentNotificationUri EOF )
            // InternalMickeyLang.g:473:2: iv_ruleContentNotificationUri= ruleContentNotificationUri EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getContentNotificationUriRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleContentNotificationUri=ruleContentNotificationUri();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleContentNotificationUri; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleContentNotificationUri"


    // $ANTLR start "ruleContentNotificationUri"
    // InternalMickeyLang.g:479:1: ruleContentNotificationUri returns [EObject current=null] : (otherlv_0= 'notify' ( (lv_uri_1_0= ruleNotifyContentUri ) ) ) ;
    public final EObject ruleContentNotificationUri() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_uri_1_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:485:2: ( (otherlv_0= 'notify' ( (lv_uri_1_0= ruleNotifyContentUri ) ) ) )
            // InternalMickeyLang.g:486:2: (otherlv_0= 'notify' ( (lv_uri_1_0= ruleNotifyContentUri ) ) )
            {
            // InternalMickeyLang.g:486:2: (otherlv_0= 'notify' ( (lv_uri_1_0= ruleNotifyContentUri ) ) )
            // InternalMickeyLang.g:487:3: otherlv_0= 'notify' ( (lv_uri_1_0= ruleNotifyContentUri ) )
            {
            otherlv_0=(Token)match(input,24,FOLLOW_19); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getContentNotificationUriAccess().getNotifyKeyword_0());
              		
            }
            // InternalMickeyLang.g:491:3: ( (lv_uri_1_0= ruleNotifyContentUri ) )
            // InternalMickeyLang.g:492:4: (lv_uri_1_0= ruleNotifyContentUri )
            {
            // InternalMickeyLang.g:492:4: (lv_uri_1_0= ruleNotifyContentUri )
            // InternalMickeyLang.g:493:5: lv_uri_1_0= ruleNotifyContentUri
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getContentNotificationUriAccess().getUriNotifyContentUriParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_uri_1_0=ruleNotifyContentUri();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getContentNotificationUriRule());
              					}
              					set(
              						current,
              						"uri",
              						lv_uri_1_0,
              						"com.justeat.mickeydb.MickeyLang.NotifyContentUri");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContentNotificationUri"


    // $ANTLR start "entryRuleFunctionArg"
    // InternalMickeyLang.g:514:1: entryRuleFunctionArg returns [EObject current=null] : iv_ruleFunctionArg= ruleFunctionArg EOF ;
    public final EObject entryRuleFunctionArg() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFunctionArg = null;


        try {
            // InternalMickeyLang.g:514:52: (iv_ruleFunctionArg= ruleFunctionArg EOF )
            // InternalMickeyLang.g:515:2: iv_ruleFunctionArg= ruleFunctionArg EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFunctionArgRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleFunctionArg=ruleFunctionArg();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFunctionArg; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFunctionArg"


    // $ANTLR start "ruleFunctionArg"
    // InternalMickeyLang.g:521:1: ruleFunctionArg returns [EObject current=null] : ( ( (lv_type_0_0= ruleColumnType ) ) ( (lv_name_1_0= RULE_ID ) ) ) ;
    public final EObject ruleFunctionArg() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Enumerator lv_type_0_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:527:2: ( ( ( (lv_type_0_0= ruleColumnType ) ) ( (lv_name_1_0= RULE_ID ) ) ) )
            // InternalMickeyLang.g:528:2: ( ( (lv_type_0_0= ruleColumnType ) ) ( (lv_name_1_0= RULE_ID ) ) )
            {
            // InternalMickeyLang.g:528:2: ( ( (lv_type_0_0= ruleColumnType ) ) ( (lv_name_1_0= RULE_ID ) ) )
            // InternalMickeyLang.g:529:3: ( (lv_type_0_0= ruleColumnType ) ) ( (lv_name_1_0= RULE_ID ) )
            {
            // InternalMickeyLang.g:529:3: ( (lv_type_0_0= ruleColumnType ) )
            // InternalMickeyLang.g:530:4: (lv_type_0_0= ruleColumnType )
            {
            // InternalMickeyLang.g:530:4: (lv_type_0_0= ruleColumnType )
            // InternalMickeyLang.g:531:5: lv_type_0_0= ruleColumnType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getFunctionArgAccess().getTypeColumnTypeEnumRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_3);
            lv_type_0_0=ruleColumnType();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getFunctionArgRule());
              					}
              					set(
              						current,
              						"type",
              						lv_type_0_0,
              						"com.justeat.mickeydb.MickeyLang.ColumnType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:548:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalMickeyLang.g:549:4: (lv_name_1_0= RULE_ID )
            {
            // InternalMickeyLang.g:549:4: (lv_name_1_0= RULE_ID )
            // InternalMickeyLang.g:550:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getFunctionArgAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getFunctionArgRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFunctionArg"


    // $ANTLR start "entryRuleNotifyContentUri"
    // InternalMickeyLang.g:570:1: entryRuleNotifyContentUri returns [EObject current=null] : iv_ruleNotifyContentUri= ruleNotifyContentUri EOF ;
    public final EObject entryRuleNotifyContentUri() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNotifyContentUri = null;


        try {
            // InternalMickeyLang.g:570:57: (iv_ruleNotifyContentUri= ruleNotifyContentUri EOF )
            // InternalMickeyLang.g:571:2: iv_ruleNotifyContentUri= ruleNotifyContentUri EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNotifyContentUriRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleNotifyContentUri=ruleNotifyContentUri();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNotifyContentUri; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNotifyContentUri"


    // $ANTLR start "ruleNotifyContentUri"
    // InternalMickeyLang.g:577:1: ruleNotifyContentUri returns [EObject current=null] : ( () ( (lv_segments_1_0= ruleNotifyContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleNotifyContentUriSegment ) ) )* ) ;
    public final EObject ruleNotifyContentUri() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject lv_segments_1_0 = null;

        EObject lv_segments_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:583:2: ( ( () ( (lv_segments_1_0= ruleNotifyContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleNotifyContentUriSegment ) ) )* ) )
            // InternalMickeyLang.g:584:2: ( () ( (lv_segments_1_0= ruleNotifyContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleNotifyContentUriSegment ) ) )* )
            {
            // InternalMickeyLang.g:584:2: ( () ( (lv_segments_1_0= ruleNotifyContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleNotifyContentUriSegment ) ) )* )
            // InternalMickeyLang.g:585:3: () ( (lv_segments_1_0= ruleNotifyContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleNotifyContentUriSegment ) ) )*
            {
            // InternalMickeyLang.g:585:3: ()
            // InternalMickeyLang.g:586:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getNotifyContentUriAccess().getNotifyContentUriAction_0(),
              					current);
              			
            }

            }

            // InternalMickeyLang.g:592:3: ( (lv_segments_1_0= ruleNotifyContentUriSegment ) )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==RULE_ID||LA11_0==18) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // InternalMickeyLang.g:593:4: (lv_segments_1_0= ruleNotifyContentUriSegment )
                    {
                    // InternalMickeyLang.g:593:4: (lv_segments_1_0= ruleNotifyContentUriSegment )
                    // InternalMickeyLang.g:594:5: lv_segments_1_0= ruleNotifyContentUriSegment
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getNotifyContentUriAccess().getSegmentsNotifyContentUriSegmentParserRuleCall_1_0());
                      				
                    }
                    pushFollow(FOLLOW_20);
                    lv_segments_1_0=ruleNotifyContentUriSegment();

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

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getNotifyContentUriRule());
                      					}
                      					add(
                      						current,
                      						"segments",
                      						lv_segments_1_0,
                      						"com.justeat.mickeydb.MickeyLang.NotifyContentUriSegment");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:611:3: (otherlv_2= '/' ( (lv_segments_3_0= ruleNotifyContentUriSegment ) ) )*
            loop12:
            do {
                int alt12=2;
                int LA12_0 = input.LA(1);

                if ( (LA12_0==25) ) {
                    alt12=1;
                }


                switch (alt12) {
            	case 1 :
            	    // InternalMickeyLang.g:612:4: otherlv_2= '/' ( (lv_segments_3_0= ruleNotifyContentUriSegment ) )
            	    {
            	    otherlv_2=(Token)match(input,25,FOLLOW_21); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_2, grammarAccess.getNotifyContentUriAccess().getSolidusKeyword_2_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:616:4: ( (lv_segments_3_0= ruleNotifyContentUriSegment ) )
            	    // InternalMickeyLang.g:617:5: (lv_segments_3_0= ruleNotifyContentUriSegment )
            	    {
            	    // InternalMickeyLang.g:617:5: (lv_segments_3_0= ruleNotifyContentUriSegment )
            	    // InternalMickeyLang.g:618:6: lv_segments_3_0= ruleNotifyContentUriSegment
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getNotifyContentUriAccess().getSegmentsNotifyContentUriSegmentParserRuleCall_2_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_20);
            	    lv_segments_3_0=ruleNotifyContentUriSegment();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getNotifyContentUriRule());
            	      						}
            	      						add(
            	      							current,
            	      							"segments",
            	      							lv_segments_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.NotifyContentUriSegment");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNotifyContentUri"


    // $ANTLR start "entryRuleNotifyContentUriSegment"
    // InternalMickeyLang.g:640:1: entryRuleNotifyContentUriSegment returns [EObject current=null] : iv_ruleNotifyContentUriSegment= ruleNotifyContentUriSegment EOF ;
    public final EObject entryRuleNotifyContentUriSegment() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNotifyContentUriSegment = null;


        try {
            // InternalMickeyLang.g:640:64: (iv_ruleNotifyContentUriSegment= ruleNotifyContentUriSegment EOF )
            // InternalMickeyLang.g:641:2: iv_ruleNotifyContentUriSegment= ruleNotifyContentUriSegment EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNotifyContentUriSegmentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleNotifyContentUriSegment=ruleNotifyContentUriSegment();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNotifyContentUriSegment; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNotifyContentUriSegment"


    // $ANTLR start "ruleNotifyContentUriSegment"
    // InternalMickeyLang.g:647:1: ruleNotifyContentUriSegment returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '}' ) ) ;
    public final EObject ruleNotifyContentUriSegment() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_2=null;
        Token lv_name_3_0=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:653:2: ( ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '}' ) ) )
            // InternalMickeyLang.g:654:2: ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '}' ) )
            {
            // InternalMickeyLang.g:654:2: ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '}' ) )
            int alt13=2;
            int LA13_0 = input.LA(1);

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

                throw nvae;
            }
            switch (alt13) {
                case 1 :
                    // InternalMickeyLang.g:655:3: ( (lv_name_0_0= RULE_ID ) )
                    {
                    // InternalMickeyLang.g:655:3: ( (lv_name_0_0= RULE_ID ) )
                    // InternalMickeyLang.g:656:4: (lv_name_0_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:656:4: (lv_name_0_0= RULE_ID )
                    // InternalMickeyLang.g:657:5: lv_name_0_0= RULE_ID
                    {
                    lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_name_0_0, grammarAccess.getNotifyContentUriSegmentAccess().getNameIDTerminalRuleCall_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getNotifyContentUriSegmentRule());
                      					}
                      					setWithLastConsumed(
                      						current,
                      						"name",
                      						lv_name_0_0,
                      						"org.eclipse.xtext.common.Terminals.ID");
                      				
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:674:3: ( () otherlv_2= '{' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '}' )
                    {
                    // InternalMickeyLang.g:674:3: ( () otherlv_2= '{' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '}' )
                    // InternalMickeyLang.g:675:4: () otherlv_2= '{' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '}'
                    {
                    // InternalMickeyLang.g:675:4: ()
                    // InternalMickeyLang.g:676:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getNotifyContentUriSegmentAccess().getNotifyContentUriParamSegmentAction_1_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_2=(Token)match(input,18,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getNotifyContentUriSegmentAccess().getLeftCurlyBracketKeyword_1_1());
                      			
                    }
                    // InternalMickeyLang.g:686:4: ( (lv_name_3_0= RULE_ID ) )
                    // InternalMickeyLang.g:687:5: (lv_name_3_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:687:5: (lv_name_3_0= RULE_ID )
                    // InternalMickeyLang.g:688:6: lv_name_3_0= RULE_ID
                    {
                    lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_3_0, grammarAccess.getNotifyContentUriSegmentAccess().getNameIDTerminalRuleCall_1_2_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getNotifyContentUriSegmentRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_3_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }

                    otherlv_4=(Token)match(input,20,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getNotifyContentUriSegmentAccess().getRightCurlyBracketKeyword_1_3());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNotifyContentUriSegment"


    // $ANTLR start "entryRuleContentUri"
    // InternalMickeyLang.g:713:1: entryRuleContentUri returns [EObject current=null] : iv_ruleContentUri= ruleContentUri EOF ;
    public final EObject entryRuleContentUri() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleContentUri = null;


        try {
            // InternalMickeyLang.g:713:51: (iv_ruleContentUri= ruleContentUri EOF )
            // InternalMickeyLang.g:714:2: iv_ruleContentUri= ruleContentUri EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getContentUriRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleContentUri=ruleContentUri();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleContentUri; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleContentUri"


    // $ANTLR start "ruleContentUri"
    // InternalMickeyLang.g:720:1: ruleContentUri returns [EObject current=null] : ( () ( (lv_segments_1_0= ruleContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleContentUriSegment ) ) )* ) ;
    public final EObject ruleContentUri() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject lv_segments_1_0 = null;

        EObject lv_segments_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:726:2: ( ( () ( (lv_segments_1_0= ruleContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleContentUriSegment ) ) )* ) )
            // InternalMickeyLang.g:727:2: ( () ( (lv_segments_1_0= ruleContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleContentUriSegment ) ) )* )
            {
            // InternalMickeyLang.g:727:2: ( () ( (lv_segments_1_0= ruleContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleContentUriSegment ) ) )* )
            // InternalMickeyLang.g:728:3: () ( (lv_segments_1_0= ruleContentUriSegment ) )? (otherlv_2= '/' ( (lv_segments_3_0= ruleContentUriSegment ) ) )*
            {
            // InternalMickeyLang.g:728:3: ()
            // InternalMickeyLang.g:729:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getContentUriAccess().getContentUriAction_0(),
              					current);
              			
            }

            }

            // InternalMickeyLang.g:735:3: ( (lv_segments_1_0= ruleContentUriSegment ) )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==RULE_ID||LA14_0==18) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // InternalMickeyLang.g:736:4: (lv_segments_1_0= ruleContentUriSegment )
                    {
                    // InternalMickeyLang.g:736:4: (lv_segments_1_0= ruleContentUriSegment )
                    // InternalMickeyLang.g:737:5: lv_segments_1_0= ruleContentUriSegment
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getContentUriAccess().getSegmentsContentUriSegmentParserRuleCall_1_0());
                      				
                    }
                    pushFollow(FOLLOW_20);
                    lv_segments_1_0=ruleContentUriSegment();

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

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getContentUriRule());
                      					}
                      					add(
                      						current,
                      						"segments",
                      						lv_segments_1_0,
                      						"com.justeat.mickeydb.MickeyLang.ContentUriSegment");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:754:3: (otherlv_2= '/' ( (lv_segments_3_0= ruleContentUriSegment ) ) )*
            loop15:
            do {
                int alt15=2;
                int LA15_0 = input.LA(1);

                if ( (LA15_0==25) ) {
                    alt15=1;
                }


                switch (alt15) {
            	case 1 :
            	    // InternalMickeyLang.g:755:4: otherlv_2= '/' ( (lv_segments_3_0= ruleContentUriSegment ) )
            	    {
            	    otherlv_2=(Token)match(input,25,FOLLOW_21); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_2, grammarAccess.getContentUriAccess().getSolidusKeyword_2_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:759:4: ( (lv_segments_3_0= ruleContentUriSegment ) )
            	    // InternalMickeyLang.g:760:5: (lv_segments_3_0= ruleContentUriSegment )
            	    {
            	    // InternalMickeyLang.g:760:5: (lv_segments_3_0= ruleContentUriSegment )
            	    // InternalMickeyLang.g:761:6: lv_segments_3_0= ruleContentUriSegment
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getContentUriAccess().getSegmentsContentUriSegmentParserRuleCall_2_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_20);
            	    lv_segments_3_0=ruleContentUriSegment();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getContentUriRule());
            	      						}
            	      						add(
            	      							current,
            	      							"segments",
            	      							lv_segments_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ContentUriSegment");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContentUri"


    // $ANTLR start "entryRuleContentUriQueryParam"
    // InternalMickeyLang.g:783:1: entryRuleContentUriQueryParam returns [EObject current=null] : iv_ruleContentUriQueryParam= ruleContentUriQueryParam EOF ;
    public final EObject entryRuleContentUriQueryParam() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleContentUriQueryParam = null;


        try {
            // InternalMickeyLang.g:783:61: (iv_ruleContentUriQueryParam= ruleContentUriQueryParam EOF )
            // InternalMickeyLang.g:784:2: iv_ruleContentUriQueryParam= ruleContentUriQueryParam EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getContentUriQueryParamRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleContentUriQueryParam=ruleContentUriQueryParam();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleContentUriQueryParam; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleContentUriQueryParam"


    // $ANTLR start "ruleContentUriQueryParam"
    // InternalMickeyLang.g:790:1: ruleContentUriQueryParam returns [EObject current=null] : (otherlv_0= 'param' ( (lv_like_1_0= 'like' ) )? ( (otherlv_2= RULE_ID ) ) ) ;
    public final EObject ruleContentUriQueryParam() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_like_1_0=null;
        Token otherlv_2=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:796:2: ( (otherlv_0= 'param' ( (lv_like_1_0= 'like' ) )? ( (otherlv_2= RULE_ID ) ) ) )
            // InternalMickeyLang.g:797:2: (otherlv_0= 'param' ( (lv_like_1_0= 'like' ) )? ( (otherlv_2= RULE_ID ) ) )
            {
            // InternalMickeyLang.g:797:2: (otherlv_0= 'param' ( (lv_like_1_0= 'like' ) )? ( (otherlv_2= RULE_ID ) ) )
            // InternalMickeyLang.g:798:3: otherlv_0= 'param' ( (lv_like_1_0= 'like' ) )? ( (otherlv_2= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,26,FOLLOW_23); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getContentUriQueryParamAccess().getParamKeyword_0());
              		
            }
            // InternalMickeyLang.g:802:3: ( (lv_like_1_0= 'like' ) )?
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==27) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // InternalMickeyLang.g:803:4: (lv_like_1_0= 'like' )
                    {
                    // InternalMickeyLang.g:803:4: (lv_like_1_0= 'like' )
                    // InternalMickeyLang.g:804:5: lv_like_1_0= 'like'
                    {
                    lv_like_1_0=(Token)match(input,27,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_like_1_0, grammarAccess.getContentUriQueryParamAccess().getLikeLikeKeyword_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getContentUriQueryParamRule());
                      					}
                      					setWithLastConsumed(current, "like", true, "like");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:816:3: ( (otherlv_2= RULE_ID ) )
            // InternalMickeyLang.g:817:4: (otherlv_2= RULE_ID )
            {
            // InternalMickeyLang.g:817:4: (otherlv_2= RULE_ID )
            // InternalMickeyLang.g:818:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getContentUriQueryParamRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getContentUriQueryParamAccess().getColumnColumnSourceCrossReference_2_0());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContentUriQueryParam"


    // $ANTLR start "entryRuleContentUriSegment"
    // InternalMickeyLang.g:833:1: entryRuleContentUriSegment returns [EObject current=null] : iv_ruleContentUriSegment= ruleContentUriSegment EOF ;
    public final EObject entryRuleContentUriSegment() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleContentUriSegment = null;


        try {
            // InternalMickeyLang.g:833:58: (iv_ruleContentUriSegment= ruleContentUriSegment EOF )
            // InternalMickeyLang.g:834:2: iv_ruleContentUriSegment= ruleContentUriSegment EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getContentUriSegmentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleContentUriSegment=ruleContentUriSegment();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleContentUriSegment; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleContentUriSegment"


    // $ANTLR start "ruleContentUriSegment"
    // InternalMickeyLang.g:840:1: ruleContentUriSegment returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (otherlv_3= RULE_ID ) ) otherlv_4= '}' ) ) ;
    public final EObject ruleContentUriSegment() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:846:2: ( ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (otherlv_3= RULE_ID ) ) otherlv_4= '}' ) ) )
            // InternalMickeyLang.g:847:2: ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (otherlv_3= RULE_ID ) ) otherlv_4= '}' ) )
            {
            // InternalMickeyLang.g:847:2: ( ( (lv_name_0_0= RULE_ID ) ) | ( () otherlv_2= '{' ( (otherlv_3= RULE_ID ) ) otherlv_4= '}' ) )
            int alt17=2;
            int LA17_0 = input.LA(1);

            if ( (LA17_0==RULE_ID) ) {
                alt17=1;
            }
            else if ( (LA17_0==18) ) {
                alt17=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 17, 0, input);

                throw nvae;
            }
            switch (alt17) {
                case 1 :
                    // InternalMickeyLang.g:848:3: ( (lv_name_0_0= RULE_ID ) )
                    {
                    // InternalMickeyLang.g:848:3: ( (lv_name_0_0= RULE_ID ) )
                    // InternalMickeyLang.g:849:4: (lv_name_0_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:849:4: (lv_name_0_0= RULE_ID )
                    // InternalMickeyLang.g:850:5: lv_name_0_0= RULE_ID
                    {
                    lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_name_0_0, grammarAccess.getContentUriSegmentAccess().getNameIDTerminalRuleCall_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getContentUriSegmentRule());
                      					}
                      					setWithLastConsumed(
                      						current,
                      						"name",
                      						lv_name_0_0,
                      						"org.eclipse.xtext.common.Terminals.ID");
                      				
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:867:3: ( () otherlv_2= '{' ( (otherlv_3= RULE_ID ) ) otherlv_4= '}' )
                    {
                    // InternalMickeyLang.g:867:3: ( () otherlv_2= '{' ( (otherlv_3= RULE_ID ) ) otherlv_4= '}' )
                    // InternalMickeyLang.g:868:4: () otherlv_2= '{' ( (otherlv_3= RULE_ID ) ) otherlv_4= '}'
                    {
                    // InternalMickeyLang.g:868:4: ()
                    // InternalMickeyLang.g:869:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getContentUriSegmentAccess().getContentUriParamSegmentAction_1_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_2=(Token)match(input,18,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getContentUriSegmentAccess().getLeftCurlyBracketKeyword_1_1());
                      			
                    }
                    // InternalMickeyLang.g:879:4: ( (otherlv_3= RULE_ID ) )
                    // InternalMickeyLang.g:880:5: (otherlv_3= RULE_ID )
                    {
                    // InternalMickeyLang.g:880:5: (otherlv_3= RULE_ID )
                    // InternalMickeyLang.g:881:6: otherlv_3= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getContentUriSegmentRule());
                      						}
                      					
                    }
                    otherlv_3=(Token)match(input,RULE_ID,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_3, grammarAccess.getContentUriSegmentAccess().getParamColumnSourceCrossReference_1_2_0());
                      					
                    }

                    }


                    }

                    otherlv_4=(Token)match(input,20,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getContentUriSegmentAccess().getRightCurlyBracketKeyword_1_3());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContentUriSegment"


    // $ANTLR start "entryRuleMigrationBlock"
    // InternalMickeyLang.g:901:1: entryRuleMigrationBlock returns [EObject current=null] : iv_ruleMigrationBlock= ruleMigrationBlock EOF ;
    public final EObject entryRuleMigrationBlock() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMigrationBlock = null;


        try {
            // InternalMickeyLang.g:901:55: (iv_ruleMigrationBlock= ruleMigrationBlock EOF )
            // InternalMickeyLang.g:902:2: iv_ruleMigrationBlock= ruleMigrationBlock EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMigrationBlockRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMigrationBlock=ruleMigrationBlock();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMigrationBlock; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMigrationBlock"


    // $ANTLR start "ruleMigrationBlock"
    // InternalMickeyLang.g:908:1: ruleMigrationBlock returns [EObject current=null] : ( () otherlv_1= 'migrate' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'from' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( ( (lv_statements_6_0= ruleDDLStatement ) ) otherlv_7= ';' )* otherlv_8= '}' ) ;
    public final EObject ruleMigrationBlock() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        EObject lv_statements_6_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:914:2: ( ( () otherlv_1= 'migrate' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'from' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( ( (lv_statements_6_0= ruleDDLStatement ) ) otherlv_7= ';' )* otherlv_8= '}' ) )
            // InternalMickeyLang.g:915:2: ( () otherlv_1= 'migrate' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'from' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( ( (lv_statements_6_0= ruleDDLStatement ) ) otherlv_7= ';' )* otherlv_8= '}' )
            {
            // InternalMickeyLang.g:915:2: ( () otherlv_1= 'migrate' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'from' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( ( (lv_statements_6_0= ruleDDLStatement ) ) otherlv_7= ';' )* otherlv_8= '}' )
            // InternalMickeyLang.g:916:3: () otherlv_1= 'migrate' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'from' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( ( (lv_statements_6_0= ruleDDLStatement ) ) otherlv_7= ';' )* otherlv_8= '}'
            {
            // InternalMickeyLang.g:916:3: ()
            // InternalMickeyLang.g:917:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getMigrationBlockAccess().getMigrationBlockAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,28,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getMigrationBlockAccess().getMigrateKeyword_1());
              		
            }
            // InternalMickeyLang.g:927:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalMickeyLang.g:928:4: (lv_name_2_0= RULE_ID )
            {
            // InternalMickeyLang.g:928:4: (lv_name_2_0= RULE_ID )
            // InternalMickeyLang.g:929:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_24); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_2_0, grammarAccess.getMigrationBlockAccess().getNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMigrationBlockRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalMickeyLang.g:945:3: (otherlv_3= 'from' ( ( ruleQualifiedName ) ) )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==29) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // InternalMickeyLang.g:946:4: otherlv_3= 'from' ( ( ruleQualifiedName ) )
                    {
                    otherlv_3=(Token)match(input,29,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getMigrationBlockAccess().getFromKeyword_3_0());
                      			
                    }
                    // InternalMickeyLang.g:950:4: ( ( ruleQualifiedName ) )
                    // InternalMickeyLang.g:951:5: ( ruleQualifiedName )
                    {
                    // InternalMickeyLang.g:951:5: ( ruleQualifiedName )
                    // InternalMickeyLang.g:952:6: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getMigrationBlockRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getMigrationBlockAccess().getFromMigrationBlockCrossReference_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_10);
                    ruleQualifiedName();

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

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_5=(Token)match(input,18,FOLLOW_25); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getMigrationBlockAccess().getLeftCurlyBracketKeyword_4());
              		
            }
            // InternalMickeyLang.g:971:3: ( ( (lv_statements_6_0= ruleDDLStatement ) ) otherlv_7= ';' )*
            loop19:
            do {
                int alt19=2;
                int LA19_0 = input.LA(1);

                if ( (LA19_0==93||LA19_0==107||LA19_0==110) ) {
                    alt19=1;
                }


                switch (alt19) {
            	case 1 :
            	    // InternalMickeyLang.g:972:4: ( (lv_statements_6_0= ruleDDLStatement ) ) otherlv_7= ';'
            	    {
            	    // InternalMickeyLang.g:972:4: ( (lv_statements_6_0= ruleDDLStatement ) )
            	    // InternalMickeyLang.g:973:5: (lv_statements_6_0= ruleDDLStatement )
            	    {
            	    // InternalMickeyLang.g:973:5: (lv_statements_6_0= ruleDDLStatement )
            	    // InternalMickeyLang.g:974:6: lv_statements_6_0= ruleDDLStatement
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getMigrationBlockAccess().getStatementsDDLStatementParserRuleCall_5_0_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_12);
            	    lv_statements_6_0=ruleDDLStatement();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getMigrationBlockRule());
            	      						}
            	      						add(
            	      							current,
            	      							"statements",
            	      							lv_statements_6_0,
            	      							"com.justeat.mickeydb.MickeyLang.DDLStatement");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }

            	    otherlv_7=(Token)match(input,19,FOLLOW_25); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_7, grammarAccess.getMigrationBlockAccess().getSemicolonKeyword_5_1());
            	      			
            	    }

            	    }
            	    break;

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

            otherlv_8=(Token)match(input,20,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_8, grammarAccess.getMigrationBlockAccess().getRightCurlyBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMigrationBlock"


    // $ANTLR start "entryRuleSqlExpression"
    // InternalMickeyLang.g:1004:1: entryRuleSqlExpression returns [EObject current=null] : iv_ruleSqlExpression= ruleSqlExpression EOF ;
    public final EObject entryRuleSqlExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSqlExpression = null;


        try {
            // InternalMickeyLang.g:1004:54: (iv_ruleSqlExpression= ruleSqlExpression EOF )
            // InternalMickeyLang.g:1005:2: iv_ruleSqlExpression= ruleSqlExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSqlExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSqlExpression=ruleSqlExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSqlExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSqlExpression"


    // $ANTLR start "ruleSqlExpression"
    // InternalMickeyLang.g:1011:1: ruleSqlExpression returns [EObject current=null] : this_ExprConcat_0= ruleExprConcat ;
    public final EObject ruleSqlExpression() throws RecognitionException {
        EObject current = null;

        EObject this_ExprConcat_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1017:2: (this_ExprConcat_0= ruleExprConcat )
            // InternalMickeyLang.g:1018:2: this_ExprConcat_0= ruleExprConcat
            {
            if ( state.backtracking==0 ) {

              		newCompositeNode(grammarAccess.getSqlExpressionAccess().getExprConcatParserRuleCall());
              	
            }
            pushFollow(FOLLOW_2);
            this_ExprConcat_0=ruleExprConcat();

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

              		current = this_ExprConcat_0;
              		afterParserOrEnumRuleCall();
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSqlExpression"


    // $ANTLR start "entryRuleExprConcat"
    // InternalMickeyLang.g:1029:1: entryRuleExprConcat returns [EObject current=null] : iv_ruleExprConcat= ruleExprConcat EOF ;
    public final EObject entryRuleExprConcat() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprConcat = null;


        try {
            // InternalMickeyLang.g:1029:51: (iv_ruleExprConcat= ruleExprConcat EOF )
            // InternalMickeyLang.g:1030:2: iv_ruleExprConcat= ruleExprConcat EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprConcatRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprConcat=ruleExprConcat();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprConcat; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprConcat"


    // $ANTLR start "ruleExprConcat"
    // InternalMickeyLang.g:1036:1: ruleExprConcat returns [EObject current=null] : (this_ExprMult_0= ruleExprMult ( () ( (lv_op_2_0= '||' ) ) ( (lv_right_3_0= ruleExprMult ) ) )* ) ;
    public final EObject ruleExprConcat() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_0=null;
        EObject this_ExprMult_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1042:2: ( (this_ExprMult_0= ruleExprMult ( () ( (lv_op_2_0= '||' ) ) ( (lv_right_3_0= ruleExprMult ) ) )* ) )
            // InternalMickeyLang.g:1043:2: (this_ExprMult_0= ruleExprMult ( () ( (lv_op_2_0= '||' ) ) ( (lv_right_3_0= ruleExprMult ) ) )* )
            {
            // InternalMickeyLang.g:1043:2: (this_ExprMult_0= ruleExprMult ( () ( (lv_op_2_0= '||' ) ) ( (lv_right_3_0= ruleExprMult ) ) )* )
            // InternalMickeyLang.g:1044:3: this_ExprMult_0= ruleExprMult ( () ( (lv_op_2_0= '||' ) ) ( (lv_right_3_0= ruleExprMult ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprConcatAccess().getExprMultParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_26);
            this_ExprMult_0=ruleExprMult();

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

              			current = this_ExprMult_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1052:3: ( () ( (lv_op_2_0= '||' ) ) ( (lv_right_3_0= ruleExprMult ) ) )*
            loop20:
            do {
                int alt20=2;
                int LA20_0 = input.LA(1);

                if ( (LA20_0==30) ) {
                    alt20=1;
                }


                switch (alt20) {
            	case 1 :
            	    // InternalMickeyLang.g:1053:4: () ( (lv_op_2_0= '||' ) ) ( (lv_right_3_0= ruleExprMult ) )
            	    {
            	    // InternalMickeyLang.g:1053:4: ()
            	    // InternalMickeyLang.g:1054:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprConcatAccess().getExprConcatLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1060:4: ( (lv_op_2_0= '||' ) )
            	    // InternalMickeyLang.g:1061:5: (lv_op_2_0= '||' )
            	    {
            	    // InternalMickeyLang.g:1061:5: (lv_op_2_0= '||' )
            	    // InternalMickeyLang.g:1062:6: lv_op_2_0= '||'
            	    {
            	    lv_op_2_0=(Token)match(input,30,FOLLOW_27); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(lv_op_2_0, grammarAccess.getExprConcatAccess().getOpVerticalLineVerticalLineKeyword_1_1_0());
            	      					
            	    }
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElement(grammarAccess.getExprConcatRule());
            	      						}
            	      						setWithLastConsumed(current, "op", lv_op_2_0, "||");
            	      					
            	    }

            	    }


            	    }

            	    // InternalMickeyLang.g:1074:4: ( (lv_right_3_0= ruleExprMult ) )
            	    // InternalMickeyLang.g:1075:5: (lv_right_3_0= ruleExprMult )
            	    {
            	    // InternalMickeyLang.g:1075:5: (lv_right_3_0= ruleExprMult )
            	    // InternalMickeyLang.g:1076:6: lv_right_3_0= ruleExprMult
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprConcatAccess().getRightExprMultParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_26);
            	    lv_right_3_0=ruleExprMult();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprConcatRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ExprMult");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprConcat"


    // $ANTLR start "entryRuleExprMult"
    // InternalMickeyLang.g:1098:1: entryRuleExprMult returns [EObject current=null] : iv_ruleExprMult= ruleExprMult EOF ;
    public final EObject entryRuleExprMult() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprMult = null;


        try {
            // InternalMickeyLang.g:1098:49: (iv_ruleExprMult= ruleExprMult EOF )
            // InternalMickeyLang.g:1099:2: iv_ruleExprMult= ruleExprMult EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprMultRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprMult=ruleExprMult();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprMult; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprMult"


    // $ANTLR start "ruleExprMult"
    // InternalMickeyLang.g:1105:1: ruleExprMult returns [EObject current=null] : (this_ExprAdd_0= ruleExprAdd ( () ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) ) ( (lv_right_3_0= ruleExprAdd ) ) )* ) ;
    public final EObject ruleExprMult() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_1=null;
        Token lv_op_2_2=null;
        Token lv_op_2_3=null;
        EObject this_ExprAdd_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1111:2: ( (this_ExprAdd_0= ruleExprAdd ( () ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) ) ( (lv_right_3_0= ruleExprAdd ) ) )* ) )
            // InternalMickeyLang.g:1112:2: (this_ExprAdd_0= ruleExprAdd ( () ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) ) ( (lv_right_3_0= ruleExprAdd ) ) )* )
            {
            // InternalMickeyLang.g:1112:2: (this_ExprAdd_0= ruleExprAdd ( () ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) ) ( (lv_right_3_0= ruleExprAdd ) ) )* )
            // InternalMickeyLang.g:1113:3: this_ExprAdd_0= ruleExprAdd ( () ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) ) ( (lv_right_3_0= ruleExprAdd ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprMultAccess().getExprAddParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_28);
            this_ExprAdd_0=ruleExprAdd();

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

              			current = this_ExprAdd_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1121:3: ( () ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) ) ( (lv_right_3_0= ruleExprAdd ) ) )*
            loop22:
            do {
                int alt22=2;
                int LA22_0 = input.LA(1);

                if ( (LA22_0==25||(LA22_0>=31 && LA22_0<=32)) ) {
                    alt22=1;
                }


                switch (alt22) {
            	case 1 :
            	    // InternalMickeyLang.g:1122:4: () ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) ) ( (lv_right_3_0= ruleExprAdd ) )
            	    {
            	    // InternalMickeyLang.g:1122:4: ()
            	    // InternalMickeyLang.g:1123:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprMultAccess().getExprMultLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1129:4: ( ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) ) )
            	    // InternalMickeyLang.g:1130:5: ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) )
            	    {
            	    // InternalMickeyLang.g:1130:5: ( (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' ) )
            	    // InternalMickeyLang.g:1131:6: (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' )
            	    {
            	    // InternalMickeyLang.g:1131:6: (lv_op_2_1= '*' | lv_op_2_2= '/' | lv_op_2_3= '%' )
            	    int alt21=3;
            	    switch ( input.LA(1) ) {
            	    case 31:
            	        {
            	        alt21=1;
            	        }
            	        break;
            	    case 25:
            	        {
            	        alt21=2;
            	        }
            	        break;
            	    case 32:
            	        {
            	        alt21=3;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 21, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt21) {
            	        case 1 :
            	            // InternalMickeyLang.g:1132:7: lv_op_2_1= '*'
            	            {
            	            lv_op_2_1=(Token)match(input,31,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_1, grammarAccess.getExprMultAccess().getOpAsteriskKeyword_1_1_0_0());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprMultRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_1, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalMickeyLang.g:1143:7: lv_op_2_2= '/'
            	            {
            	            lv_op_2_2=(Token)match(input,25,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_2, grammarAccess.getExprMultAccess().getOpSolidusKeyword_1_1_0_1());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprMultRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_2, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 3 :
            	            // InternalMickeyLang.g:1154:7: lv_op_2_3= '%'
            	            {
            	            lv_op_2_3=(Token)match(input,32,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_3, grammarAccess.getExprMultAccess().getOpPercentSignKeyword_1_1_0_2());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprMultRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_3, null);
            	              						
            	            }

            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // InternalMickeyLang.g:1167:4: ( (lv_right_3_0= ruleExprAdd ) )
            	    // InternalMickeyLang.g:1168:5: (lv_right_3_0= ruleExprAdd )
            	    {
            	    // InternalMickeyLang.g:1168:5: (lv_right_3_0= ruleExprAdd )
            	    // InternalMickeyLang.g:1169:6: lv_right_3_0= ruleExprAdd
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprMultAccess().getRightExprAddParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_28);
            	    lv_right_3_0=ruleExprAdd();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprMultRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ExprAdd");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprMult"


    // $ANTLR start "entryRuleExprAdd"
    // InternalMickeyLang.g:1191:1: entryRuleExprAdd returns [EObject current=null] : iv_ruleExprAdd= ruleExprAdd EOF ;
    public final EObject entryRuleExprAdd() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprAdd = null;


        try {
            // InternalMickeyLang.g:1191:48: (iv_ruleExprAdd= ruleExprAdd EOF )
            // InternalMickeyLang.g:1192:2: iv_ruleExprAdd= ruleExprAdd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprAddRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprAdd=ruleExprAdd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprAdd; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprAdd"


    // $ANTLR start "ruleExprAdd"
    // InternalMickeyLang.g:1198:1: ruleExprAdd returns [EObject current=null] : (this_ExprBit_0= ruleExprBit ( () ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) ) ( (lv_right_3_0= ruleExprBit ) ) )* ) ;
    public final EObject ruleExprAdd() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_1=null;
        Token lv_op_2_2=null;
        EObject this_ExprBit_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1204:2: ( (this_ExprBit_0= ruleExprBit ( () ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) ) ( (lv_right_3_0= ruleExprBit ) ) )* ) )
            // InternalMickeyLang.g:1205:2: (this_ExprBit_0= ruleExprBit ( () ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) ) ( (lv_right_3_0= ruleExprBit ) ) )* )
            {
            // InternalMickeyLang.g:1205:2: (this_ExprBit_0= ruleExprBit ( () ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) ) ( (lv_right_3_0= ruleExprBit ) ) )* )
            // InternalMickeyLang.g:1206:3: this_ExprBit_0= ruleExprBit ( () ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) ) ( (lv_right_3_0= ruleExprBit ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprAddAccess().getExprBitParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_29);
            this_ExprBit_0=ruleExprBit();

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

              			current = this_ExprBit_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1214:3: ( () ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) ) ( (lv_right_3_0= ruleExprBit ) ) )*
            loop24:
            do {
                int alt24=2;
                int LA24_0 = input.LA(1);

                if ( ((LA24_0>=33 && LA24_0<=34)) ) {
                    alt24=1;
                }


                switch (alt24) {
            	case 1 :
            	    // InternalMickeyLang.g:1215:4: () ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) ) ( (lv_right_3_0= ruleExprBit ) )
            	    {
            	    // InternalMickeyLang.g:1215:4: ()
            	    // InternalMickeyLang.g:1216:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprAddAccess().getExprAddLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1222:4: ( ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) ) )
            	    // InternalMickeyLang.g:1223:5: ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) )
            	    {
            	    // InternalMickeyLang.g:1223:5: ( (lv_op_2_1= '+' | lv_op_2_2= '-' ) )
            	    // InternalMickeyLang.g:1224:6: (lv_op_2_1= '+' | lv_op_2_2= '-' )
            	    {
            	    // InternalMickeyLang.g:1224:6: (lv_op_2_1= '+' | lv_op_2_2= '-' )
            	    int alt23=2;
            	    int LA23_0 = input.LA(1);

            	    if ( (LA23_0==33) ) {
            	        alt23=1;
            	    }
            	    else if ( (LA23_0==34) ) {
            	        alt23=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 23, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt23) {
            	        case 1 :
            	            // InternalMickeyLang.g:1225:7: lv_op_2_1= '+'
            	            {
            	            lv_op_2_1=(Token)match(input,33,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_1, grammarAccess.getExprAddAccess().getOpPlusSignKeyword_1_1_0_0());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprAddRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_1, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalMickeyLang.g:1236:7: lv_op_2_2= '-'
            	            {
            	            lv_op_2_2=(Token)match(input,34,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_2, grammarAccess.getExprAddAccess().getOpHyphenMinusKeyword_1_1_0_1());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprAddRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_2, null);
            	              						
            	            }

            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // InternalMickeyLang.g:1249:4: ( (lv_right_3_0= ruleExprBit ) )
            	    // InternalMickeyLang.g:1250:5: (lv_right_3_0= ruleExprBit )
            	    {
            	    // InternalMickeyLang.g:1250:5: (lv_right_3_0= ruleExprBit )
            	    // InternalMickeyLang.g:1251:6: lv_right_3_0= ruleExprBit
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprAddAccess().getRightExprBitParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_29);
            	    lv_right_3_0=ruleExprBit();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprAddRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ExprBit");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprAdd"


    // $ANTLR start "entryRuleExprBit"
    // InternalMickeyLang.g:1273:1: entryRuleExprBit returns [EObject current=null] : iv_ruleExprBit= ruleExprBit EOF ;
    public final EObject entryRuleExprBit() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprBit = null;


        try {
            // InternalMickeyLang.g:1273:48: (iv_ruleExprBit= ruleExprBit EOF )
            // InternalMickeyLang.g:1274:2: iv_ruleExprBit= ruleExprBit EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprBitRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprBit=ruleExprBit();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprBit; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprBit"


    // $ANTLR start "ruleExprBit"
    // InternalMickeyLang.g:1280:1: ruleExprBit returns [EObject current=null] : (this_ExprRelate_0= ruleExprRelate ( () ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) ) ( (lv_right_3_0= ruleExprRelate ) ) )* ) ;
    public final EObject ruleExprBit() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_1=null;
        Token lv_op_2_2=null;
        Token lv_op_2_3=null;
        Token lv_op_2_4=null;
        EObject this_ExprRelate_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1286:2: ( (this_ExprRelate_0= ruleExprRelate ( () ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) ) ( (lv_right_3_0= ruleExprRelate ) ) )* ) )
            // InternalMickeyLang.g:1287:2: (this_ExprRelate_0= ruleExprRelate ( () ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) ) ( (lv_right_3_0= ruleExprRelate ) ) )* )
            {
            // InternalMickeyLang.g:1287:2: (this_ExprRelate_0= ruleExprRelate ( () ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) ) ( (lv_right_3_0= ruleExprRelate ) ) )* )
            // InternalMickeyLang.g:1288:3: this_ExprRelate_0= ruleExprRelate ( () ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) ) ( (lv_right_3_0= ruleExprRelate ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprBitAccess().getExprRelateParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_30);
            this_ExprRelate_0=ruleExprRelate();

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

              			current = this_ExprRelate_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1296:3: ( () ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) ) ( (lv_right_3_0= ruleExprRelate ) ) )*
            loop26:
            do {
                int alt26=2;
                int LA26_0 = input.LA(1);

                if ( ((LA26_0>=35 && LA26_0<=38)) ) {
                    alt26=1;
                }


                switch (alt26) {
            	case 1 :
            	    // InternalMickeyLang.g:1297:4: () ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) ) ( (lv_right_3_0= ruleExprRelate ) )
            	    {
            	    // InternalMickeyLang.g:1297:4: ()
            	    // InternalMickeyLang.g:1298:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprBitAccess().getExprBitLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1304:4: ( ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) ) )
            	    // InternalMickeyLang.g:1305:5: ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) )
            	    {
            	    // InternalMickeyLang.g:1305:5: ( (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' ) )
            	    // InternalMickeyLang.g:1306:6: (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' )
            	    {
            	    // InternalMickeyLang.g:1306:6: (lv_op_2_1= '<<' | lv_op_2_2= '>>' | lv_op_2_3= '&' | lv_op_2_4= '|' )
            	    int alt25=4;
            	    switch ( input.LA(1) ) {
            	    case 35:
            	        {
            	        alt25=1;
            	        }
            	        break;
            	    case 36:
            	        {
            	        alt25=2;
            	        }
            	        break;
            	    case 37:
            	        {
            	        alt25=3;
            	        }
            	        break;
            	    case 38:
            	        {
            	        alt25=4;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 25, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt25) {
            	        case 1 :
            	            // InternalMickeyLang.g:1307:7: lv_op_2_1= '<<'
            	            {
            	            lv_op_2_1=(Token)match(input,35,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_1, grammarAccess.getExprBitAccess().getOpLessThanSignLessThanSignKeyword_1_1_0_0());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprBitRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_1, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalMickeyLang.g:1318:7: lv_op_2_2= '>>'
            	            {
            	            lv_op_2_2=(Token)match(input,36,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_2, grammarAccess.getExprBitAccess().getOpGreaterThanSignGreaterThanSignKeyword_1_1_0_1());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprBitRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_2, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 3 :
            	            // InternalMickeyLang.g:1329:7: lv_op_2_3= '&'
            	            {
            	            lv_op_2_3=(Token)match(input,37,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_3, grammarAccess.getExprBitAccess().getOpAmpersandKeyword_1_1_0_2());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprBitRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_3, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 4 :
            	            // InternalMickeyLang.g:1340:7: lv_op_2_4= '|'
            	            {
            	            lv_op_2_4=(Token)match(input,38,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_4, grammarAccess.getExprBitAccess().getOpVerticalLineKeyword_1_1_0_3());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprBitRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_4, null);
            	              						
            	            }

            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // InternalMickeyLang.g:1353:4: ( (lv_right_3_0= ruleExprRelate ) )
            	    // InternalMickeyLang.g:1354:5: (lv_right_3_0= ruleExprRelate )
            	    {
            	    // InternalMickeyLang.g:1354:5: (lv_right_3_0= ruleExprRelate )
            	    // InternalMickeyLang.g:1355:6: lv_right_3_0= ruleExprRelate
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprBitAccess().getRightExprRelateParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_30);
            	    lv_right_3_0=ruleExprRelate();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprBitRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ExprRelate");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprBit"


    // $ANTLR start "entryRuleExprRelate"
    // InternalMickeyLang.g:1377:1: entryRuleExprRelate returns [EObject current=null] : iv_ruleExprRelate= ruleExprRelate EOF ;
    public final EObject entryRuleExprRelate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprRelate = null;


        try {
            // InternalMickeyLang.g:1377:51: (iv_ruleExprRelate= ruleExprRelate EOF )
            // InternalMickeyLang.g:1378:2: iv_ruleExprRelate= ruleExprRelate EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprRelateRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprRelate=ruleExprRelate();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprRelate; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprRelate"


    // $ANTLR start "ruleExprRelate"
    // InternalMickeyLang.g:1384:1: ruleExprRelate returns [EObject current=null] : (this_ExprEqual_0= ruleExprEqual ( () ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) ) ( (lv_right_3_0= ruleExprEqual ) ) )* ) ;
    public final EObject ruleExprRelate() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_1=null;
        Token lv_op_2_2=null;
        Token lv_op_2_3=null;
        Token lv_op_2_4=null;
        EObject this_ExprEqual_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1390:2: ( (this_ExprEqual_0= ruleExprEqual ( () ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) ) ( (lv_right_3_0= ruleExprEqual ) ) )* ) )
            // InternalMickeyLang.g:1391:2: (this_ExprEqual_0= ruleExprEqual ( () ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) ) ( (lv_right_3_0= ruleExprEqual ) ) )* )
            {
            // InternalMickeyLang.g:1391:2: (this_ExprEqual_0= ruleExprEqual ( () ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) ) ( (lv_right_3_0= ruleExprEqual ) ) )* )
            // InternalMickeyLang.g:1392:3: this_ExprEqual_0= ruleExprEqual ( () ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) ) ( (lv_right_3_0= ruleExprEqual ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprRelateAccess().getExprEqualParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_31);
            this_ExprEqual_0=ruleExprEqual();

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

              			current = this_ExprEqual_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1400:3: ( () ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) ) ( (lv_right_3_0= ruleExprEqual ) ) )*
            loop28:
            do {
                int alt28=2;
                int LA28_0 = input.LA(1);

                if ( ((LA28_0>=39 && LA28_0<=42)) ) {
                    alt28=1;
                }


                switch (alt28) {
            	case 1 :
            	    // InternalMickeyLang.g:1401:4: () ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) ) ( (lv_right_3_0= ruleExprEqual ) )
            	    {
            	    // InternalMickeyLang.g:1401:4: ()
            	    // InternalMickeyLang.g:1402:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprRelateAccess().getExprRelateLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1408:4: ( ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) ) )
            	    // InternalMickeyLang.g:1409:5: ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) )
            	    {
            	    // InternalMickeyLang.g:1409:5: ( (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' ) )
            	    // InternalMickeyLang.g:1410:6: (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' )
            	    {
            	    // InternalMickeyLang.g:1410:6: (lv_op_2_1= '<' | lv_op_2_2= '<=' | lv_op_2_3= '>' | lv_op_2_4= '>=' )
            	    int alt27=4;
            	    switch ( input.LA(1) ) {
            	    case 39:
            	        {
            	        alt27=1;
            	        }
            	        break;
            	    case 40:
            	        {
            	        alt27=2;
            	        }
            	        break;
            	    case 41:
            	        {
            	        alt27=3;
            	        }
            	        break;
            	    case 42:
            	        {
            	        alt27=4;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 27, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt27) {
            	        case 1 :
            	            // InternalMickeyLang.g:1411:7: lv_op_2_1= '<'
            	            {
            	            lv_op_2_1=(Token)match(input,39,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_1, grammarAccess.getExprRelateAccess().getOpLessThanSignKeyword_1_1_0_0());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprRelateRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_1, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalMickeyLang.g:1422:7: lv_op_2_2= '<='
            	            {
            	            lv_op_2_2=(Token)match(input,40,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_2, grammarAccess.getExprRelateAccess().getOpLessThanSignEqualsSignKeyword_1_1_0_1());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprRelateRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_2, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 3 :
            	            // InternalMickeyLang.g:1433:7: lv_op_2_3= '>'
            	            {
            	            lv_op_2_3=(Token)match(input,41,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_3, grammarAccess.getExprRelateAccess().getOpGreaterThanSignKeyword_1_1_0_2());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprRelateRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_3, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 4 :
            	            // InternalMickeyLang.g:1444:7: lv_op_2_4= '>='
            	            {
            	            lv_op_2_4=(Token)match(input,42,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_4, grammarAccess.getExprRelateAccess().getOpGreaterThanSignEqualsSignKeyword_1_1_0_3());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprRelateRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_4, null);
            	              						
            	            }

            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // InternalMickeyLang.g:1457:4: ( (lv_right_3_0= ruleExprEqual ) )
            	    // InternalMickeyLang.g:1458:5: (lv_right_3_0= ruleExprEqual )
            	    {
            	    // InternalMickeyLang.g:1458:5: (lv_right_3_0= ruleExprEqual )
            	    // InternalMickeyLang.g:1459:6: lv_right_3_0= ruleExprEqual
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprRelateAccess().getRightExprEqualParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_31);
            	    lv_right_3_0=ruleExprEqual();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprRelateRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ExprEqual");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprRelate"


    // $ANTLR start "entryRuleExprEqual"
    // InternalMickeyLang.g:1481:1: entryRuleExprEqual returns [EObject current=null] : iv_ruleExprEqual= ruleExprEqual EOF ;
    public final EObject entryRuleExprEqual() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprEqual = null;


        try {
            // InternalMickeyLang.g:1481:50: (iv_ruleExprEqual= ruleExprEqual EOF )
            // InternalMickeyLang.g:1482:2: iv_ruleExprEqual= ruleExprEqual EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprEqualRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprEqual=ruleExprEqual();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprEqual; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprEqual"


    // $ANTLR start "ruleExprEqual"
    // InternalMickeyLang.g:1488:1: ruleExprEqual returns [EObject current=null] : (this_ExprAnd_0= ruleExprAnd ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) ) ( (lv_right_3_0= ruleExprAnd ) ) )* ) ;
    public final EObject ruleExprEqual() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_1=null;
        Token lv_op_2_2=null;
        Token lv_op_2_3=null;
        Token lv_op_2_4=null;
        Token lv_op_2_5=null;
        Token lv_op_2_6=null;
        Token lv_op_2_7=null;
        Token lv_op_2_8=null;
        Token lv_op_2_9=null;
        Token lv_op_2_10=null;
        Token lv_op_2_11=null;
        Token lv_op_2_12=null;
        EObject this_ExprAnd_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1494:2: ( (this_ExprAnd_0= ruleExprAnd ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) ) ( (lv_right_3_0= ruleExprAnd ) ) )* ) )
            // InternalMickeyLang.g:1495:2: (this_ExprAnd_0= ruleExprAnd ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) ) ( (lv_right_3_0= ruleExprAnd ) ) )* )
            {
            // InternalMickeyLang.g:1495:2: (this_ExprAnd_0= ruleExprAnd ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) ) ( (lv_right_3_0= ruleExprAnd ) ) )* )
            // InternalMickeyLang.g:1496:3: this_ExprAnd_0= ruleExprAnd ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) ) ( (lv_right_3_0= ruleExprAnd ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprEqualAccess().getExprAndParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_32);
            this_ExprAnd_0=ruleExprAnd();

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

              			current = this_ExprAnd_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1504:3: ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) ) ( (lv_right_3_0= ruleExprAnd ) ) )*
            loop30:
            do {
                int alt30=2;
                int LA30_0 = input.LA(1);

                if ( (LA30_0==27||(LA30_0>=43 && LA30_0<=53)) ) {
                    alt30=1;
                }


                switch (alt30) {
            	case 1 :
            	    // InternalMickeyLang.g:1505:4: () ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) ) ( (lv_right_3_0= ruleExprAnd ) )
            	    {
            	    // InternalMickeyLang.g:1505:4: ()
            	    // InternalMickeyLang.g:1506:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprEqualAccess().getExprEqualLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1512:4: ( ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) ) )
            	    // InternalMickeyLang.g:1513:5: ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) )
            	    {
            	    // InternalMickeyLang.g:1513:5: ( (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' ) )
            	    // InternalMickeyLang.g:1514:6: (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' )
            	    {
            	    // InternalMickeyLang.g:1514:6: (lv_op_2_1= '=' | lv_op_2_2= '==' | lv_op_2_3= '!=' | lv_op_2_4= '<>' | lv_op_2_5= 'is' | lv_op_2_6= 'is not' | lv_op_2_7= 'in' | lv_op_2_8= 'not in' | lv_op_2_9= 'like' | lv_op_2_10= 'glob' | lv_op_2_11= 'match' | lv_op_2_12= 'regexp' )
            	    int alt29=12;
            	    switch ( input.LA(1) ) {
            	    case 43:
            	        {
            	        alt29=1;
            	        }
            	        break;
            	    case 44:
            	        {
            	        alt29=2;
            	        }
            	        break;
            	    case 45:
            	        {
            	        alt29=3;
            	        }
            	        break;
            	    case 46:
            	        {
            	        alt29=4;
            	        }
            	        break;
            	    case 47:
            	        {
            	        alt29=5;
            	        }
            	        break;
            	    case 48:
            	        {
            	        alt29=6;
            	        }
            	        break;
            	    case 49:
            	        {
            	        alt29=7;
            	        }
            	        break;
            	    case 50:
            	        {
            	        alt29=8;
            	        }
            	        break;
            	    case 27:
            	        {
            	        alt29=9;
            	        }
            	        break;
            	    case 51:
            	        {
            	        alt29=10;
            	        }
            	        break;
            	    case 52:
            	        {
            	        alt29=11;
            	        }
            	        break;
            	    case 53:
            	        {
            	        alt29=12;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 29, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt29) {
            	        case 1 :
            	            // InternalMickeyLang.g:1515:7: lv_op_2_1= '='
            	            {
            	            lv_op_2_1=(Token)match(input,43,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_1, grammarAccess.getExprEqualAccess().getOpEqualsSignKeyword_1_1_0_0());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_1, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalMickeyLang.g:1526:7: lv_op_2_2= '=='
            	            {
            	            lv_op_2_2=(Token)match(input,44,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_2, grammarAccess.getExprEqualAccess().getOpEqualsSignEqualsSignKeyword_1_1_0_1());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_2, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 3 :
            	            // InternalMickeyLang.g:1537:7: lv_op_2_3= '!='
            	            {
            	            lv_op_2_3=(Token)match(input,45,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_3, grammarAccess.getExprEqualAccess().getOpExclamationMarkEqualsSignKeyword_1_1_0_2());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_3, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 4 :
            	            // InternalMickeyLang.g:1548:7: lv_op_2_4= '<>'
            	            {
            	            lv_op_2_4=(Token)match(input,46,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_4, grammarAccess.getExprEqualAccess().getOpLessThanSignGreaterThanSignKeyword_1_1_0_3());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_4, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 5 :
            	            // InternalMickeyLang.g:1559:7: lv_op_2_5= 'is'
            	            {
            	            lv_op_2_5=(Token)match(input,47,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_5, grammarAccess.getExprEqualAccess().getOpIsKeyword_1_1_0_4());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_5, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 6 :
            	            // InternalMickeyLang.g:1570:7: lv_op_2_6= 'is not'
            	            {
            	            lv_op_2_6=(Token)match(input,48,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_6, grammarAccess.getExprEqualAccess().getOpIsNotKeyword_1_1_0_5());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_6, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 7 :
            	            // InternalMickeyLang.g:1581:7: lv_op_2_7= 'in'
            	            {
            	            lv_op_2_7=(Token)match(input,49,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_7, grammarAccess.getExprEqualAccess().getOpInKeyword_1_1_0_6());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_7, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 8 :
            	            // InternalMickeyLang.g:1592:7: lv_op_2_8= 'not in'
            	            {
            	            lv_op_2_8=(Token)match(input,50,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_8, grammarAccess.getExprEqualAccess().getOpNotInKeyword_1_1_0_7());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_8, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 9 :
            	            // InternalMickeyLang.g:1603:7: lv_op_2_9= 'like'
            	            {
            	            lv_op_2_9=(Token)match(input,27,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_9, grammarAccess.getExprEqualAccess().getOpLikeKeyword_1_1_0_8());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_9, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 10 :
            	            // InternalMickeyLang.g:1614:7: lv_op_2_10= 'glob'
            	            {
            	            lv_op_2_10=(Token)match(input,51,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_10, grammarAccess.getExprEqualAccess().getOpGlobKeyword_1_1_0_9());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_10, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 11 :
            	            // InternalMickeyLang.g:1625:7: lv_op_2_11= 'match'
            	            {
            	            lv_op_2_11=(Token)match(input,52,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_11, grammarAccess.getExprEqualAccess().getOpMatchKeyword_1_1_0_10());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_11, null);
            	              						
            	            }

            	            }
            	            break;
            	        case 12 :
            	            // InternalMickeyLang.g:1636:7: lv_op_2_12= 'regexp'
            	            {
            	            lv_op_2_12=(Token)match(input,53,FOLLOW_27); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_op_2_12, grammarAccess.getExprEqualAccess().getOpRegexpKeyword_1_1_0_11());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getExprEqualRule());
            	              							}
            	              							setWithLastConsumed(current, "op", lv_op_2_12, null);
            	              						
            	            }

            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // InternalMickeyLang.g:1649:4: ( (lv_right_3_0= ruleExprAnd ) )
            	    // InternalMickeyLang.g:1650:5: (lv_right_3_0= ruleExprAnd )
            	    {
            	    // InternalMickeyLang.g:1650:5: (lv_right_3_0= ruleExprAnd )
            	    // InternalMickeyLang.g:1651:6: lv_right_3_0= ruleExprAnd
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprEqualAccess().getRightExprAndParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_32);
            	    lv_right_3_0=ruleExprAnd();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprEqualRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ExprAnd");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprEqual"


    // $ANTLR start "entryRuleExprAnd"
    // InternalMickeyLang.g:1673:1: entryRuleExprAnd returns [EObject current=null] : iv_ruleExprAnd= ruleExprAnd EOF ;
    public final EObject entryRuleExprAnd() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprAnd = null;


        try {
            // InternalMickeyLang.g:1673:48: (iv_ruleExprAnd= ruleExprAnd EOF )
            // InternalMickeyLang.g:1674:2: iv_ruleExprAnd= ruleExprAnd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprAndRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprAnd=ruleExprAnd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprAnd; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprAnd"


    // $ANTLR start "ruleExprAnd"
    // InternalMickeyLang.g:1680:1: ruleExprAnd returns [EObject current=null] : (this_ExprOr_0= ruleExprOr ( () ( (lv_op_2_0= 'and' ) ) ( (lv_right_3_0= ruleExprOr ) ) )* ) ;
    public final EObject ruleExprAnd() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_0=null;
        EObject this_ExprOr_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1686:2: ( (this_ExprOr_0= ruleExprOr ( () ( (lv_op_2_0= 'and' ) ) ( (lv_right_3_0= ruleExprOr ) ) )* ) )
            // InternalMickeyLang.g:1687:2: (this_ExprOr_0= ruleExprOr ( () ( (lv_op_2_0= 'and' ) ) ( (lv_right_3_0= ruleExprOr ) ) )* )
            {
            // InternalMickeyLang.g:1687:2: (this_ExprOr_0= ruleExprOr ( () ( (lv_op_2_0= 'and' ) ) ( (lv_right_3_0= ruleExprOr ) ) )* )
            // InternalMickeyLang.g:1688:3: this_ExprOr_0= ruleExprOr ( () ( (lv_op_2_0= 'and' ) ) ( (lv_right_3_0= ruleExprOr ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprAndAccess().getExprOrParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_33);
            this_ExprOr_0=ruleExprOr();

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

              			current = this_ExprOr_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1696:3: ( () ( (lv_op_2_0= 'and' ) ) ( (lv_right_3_0= ruleExprOr ) ) )*
            loop31:
            do {
                int alt31=2;
                int LA31_0 = input.LA(1);

                if ( (LA31_0==54) ) {
                    alt31=1;
                }


                switch (alt31) {
            	case 1 :
            	    // InternalMickeyLang.g:1697:4: () ( (lv_op_2_0= 'and' ) ) ( (lv_right_3_0= ruleExprOr ) )
            	    {
            	    // InternalMickeyLang.g:1697:4: ()
            	    // InternalMickeyLang.g:1698:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprAndAccess().getExprAndLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1704:4: ( (lv_op_2_0= 'and' ) )
            	    // InternalMickeyLang.g:1705:5: (lv_op_2_0= 'and' )
            	    {
            	    // InternalMickeyLang.g:1705:5: (lv_op_2_0= 'and' )
            	    // InternalMickeyLang.g:1706:6: lv_op_2_0= 'and'
            	    {
            	    lv_op_2_0=(Token)match(input,54,FOLLOW_27); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(lv_op_2_0, grammarAccess.getExprAndAccess().getOpAndKeyword_1_1_0());
            	      					
            	    }
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElement(grammarAccess.getExprAndRule());
            	      						}
            	      						setWithLastConsumed(current, "op", lv_op_2_0, "and");
            	      					
            	    }

            	    }


            	    }

            	    // InternalMickeyLang.g:1718:4: ( (lv_right_3_0= ruleExprOr ) )
            	    // InternalMickeyLang.g:1719:5: (lv_right_3_0= ruleExprOr )
            	    {
            	    // InternalMickeyLang.g:1719:5: (lv_right_3_0= ruleExprOr )
            	    // InternalMickeyLang.g:1720:6: lv_right_3_0= ruleExprOr
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprAndAccess().getRightExprOrParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_33);
            	    lv_right_3_0=ruleExprOr();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprAndRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.ExprOr");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprAnd"


    // $ANTLR start "entryRuleExprOr"
    // InternalMickeyLang.g:1742:1: entryRuleExprOr returns [EObject current=null] : iv_ruleExprOr= ruleExprOr EOF ;
    public final EObject entryRuleExprOr() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExprOr = null;


        try {
            // InternalMickeyLang.g:1742:47: (iv_ruleExprOr= ruleExprOr EOF )
            // InternalMickeyLang.g:1743:2: iv_ruleExprOr= ruleExprOr EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExprOrRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleExprOr=ruleExprOr();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExprOr; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExprOr"


    // $ANTLR start "ruleExprOr"
    // InternalMickeyLang.g:1749:1: ruleExprOr returns [EObject current=null] : (this_NullCheckExpression_0= ruleNullCheckExpression ( () ( (lv_op_2_0= 'or' ) ) ( (lv_right_3_0= ruleNullCheckExpression ) ) )* ) ;
    public final EObject ruleExprOr() throws RecognitionException {
        EObject current = null;

        Token lv_op_2_0=null;
        EObject this_NullCheckExpression_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1755:2: ( (this_NullCheckExpression_0= ruleNullCheckExpression ( () ( (lv_op_2_0= 'or' ) ) ( (lv_right_3_0= ruleNullCheckExpression ) ) )* ) )
            // InternalMickeyLang.g:1756:2: (this_NullCheckExpression_0= ruleNullCheckExpression ( () ( (lv_op_2_0= 'or' ) ) ( (lv_right_3_0= ruleNullCheckExpression ) ) )* )
            {
            // InternalMickeyLang.g:1756:2: (this_NullCheckExpression_0= ruleNullCheckExpression ( () ( (lv_op_2_0= 'or' ) ) ( (lv_right_3_0= ruleNullCheckExpression ) ) )* )
            // InternalMickeyLang.g:1757:3: this_NullCheckExpression_0= ruleNullCheckExpression ( () ( (lv_op_2_0= 'or' ) ) ( (lv_right_3_0= ruleNullCheckExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getExprOrAccess().getNullCheckExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_34);
            this_NullCheckExpression_0=ruleNullCheckExpression();

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

              			current = this_NullCheckExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1765:3: ( () ( (lv_op_2_0= 'or' ) ) ( (lv_right_3_0= ruleNullCheckExpression ) ) )*
            loop32:
            do {
                int alt32=2;
                int LA32_0 = input.LA(1);

                if ( (LA32_0==55) ) {
                    alt32=1;
                }


                switch (alt32) {
            	case 1 :
            	    // InternalMickeyLang.g:1766:4: () ( (lv_op_2_0= 'or' ) ) ( (lv_right_3_0= ruleNullCheckExpression ) )
            	    {
            	    // InternalMickeyLang.g:1766:4: ()
            	    // InternalMickeyLang.g:1767:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getExprOrAccess().getExprOrLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:1773:4: ( (lv_op_2_0= 'or' ) )
            	    // InternalMickeyLang.g:1774:5: (lv_op_2_0= 'or' )
            	    {
            	    // InternalMickeyLang.g:1774:5: (lv_op_2_0= 'or' )
            	    // InternalMickeyLang.g:1775:6: lv_op_2_0= 'or'
            	    {
            	    lv_op_2_0=(Token)match(input,55,FOLLOW_27); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(lv_op_2_0, grammarAccess.getExprOrAccess().getOpOrKeyword_1_1_0());
            	      					
            	    }
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElement(grammarAccess.getExprOrRule());
            	      						}
            	      						setWithLastConsumed(current, "op", lv_op_2_0, "or");
            	      					
            	    }

            	    }


            	    }

            	    // InternalMickeyLang.g:1787:4: ( (lv_right_3_0= ruleNullCheckExpression ) )
            	    // InternalMickeyLang.g:1788:5: (lv_right_3_0= ruleNullCheckExpression )
            	    {
            	    // InternalMickeyLang.g:1788:5: (lv_right_3_0= ruleNullCheckExpression )
            	    // InternalMickeyLang.g:1789:6: lv_right_3_0= ruleNullCheckExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getExprOrAccess().getRightNullCheckExpressionParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_34);
            	    lv_right_3_0=ruleNullCheckExpression();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getExprOrRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.NullCheckExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExprOr"


    // $ANTLR start "entryRuleNullCheckExpression"
    // InternalMickeyLang.g:1811:1: entryRuleNullCheckExpression returns [EObject current=null] : iv_ruleNullCheckExpression= ruleNullCheckExpression EOF ;
    public final EObject entryRuleNullCheckExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNullCheckExpression = null;


        try {
            // InternalMickeyLang.g:1811:60: (iv_ruleNullCheckExpression= ruleNullCheckExpression EOF )
            // InternalMickeyLang.g:1812:2: iv_ruleNullCheckExpression= ruleNullCheckExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNullCheckExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleNullCheckExpression=ruleNullCheckExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNullCheckExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNullCheckExpression"


    // $ANTLR start "ruleNullCheckExpression"
    // InternalMickeyLang.g:1818:1: ruleNullCheckExpression returns [EObject current=null] : (this_PrimaryExpression_0= rulePrimaryExpression ( () ( (lv_right_2_0= ruleNullExpression ) ) )? ) ;
    public final EObject ruleNullCheckExpression() throws RecognitionException {
        EObject current = null;

        EObject this_PrimaryExpression_0 = null;

        EObject lv_right_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1824:2: ( (this_PrimaryExpression_0= rulePrimaryExpression ( () ( (lv_right_2_0= ruleNullExpression ) ) )? ) )
            // InternalMickeyLang.g:1825:2: (this_PrimaryExpression_0= rulePrimaryExpression ( () ( (lv_right_2_0= ruleNullExpression ) ) )? )
            {
            // InternalMickeyLang.g:1825:2: (this_PrimaryExpression_0= rulePrimaryExpression ( () ( (lv_right_2_0= ruleNullExpression ) ) )? )
            // InternalMickeyLang.g:1826:3: this_PrimaryExpression_0= rulePrimaryExpression ( () ( (lv_right_2_0= ruleNullExpression ) ) )?
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getNullCheckExpressionAccess().getPrimaryExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_35);
            this_PrimaryExpression_0=rulePrimaryExpression();

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

              			current = this_PrimaryExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:1834:3: ( () ( (lv_right_2_0= ruleNullExpression ) ) )?
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( ((LA33_0>=56 && LA33_0<=58)) ) {
                alt33=1;
            }
            switch (alt33) {
                case 1 :
                    // InternalMickeyLang.g:1835:4: () ( (lv_right_2_0= ruleNullExpression ) )
                    {
                    // InternalMickeyLang.g:1835:4: ()
                    // InternalMickeyLang.g:1836:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElementAndSet(
                      						grammarAccess.getNullCheckExpressionAccess().getNullCheckExpressionLeftAction_1_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:1842:4: ( (lv_right_2_0= ruleNullExpression ) )
                    // InternalMickeyLang.g:1843:5: (lv_right_2_0= ruleNullExpression )
                    {
                    // InternalMickeyLang.g:1843:5: (lv_right_2_0= ruleNullExpression )
                    // InternalMickeyLang.g:1844:6: lv_right_2_0= ruleNullExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getNullCheckExpressionAccess().getRightNullExpressionParserRuleCall_1_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_right_2_0=ruleNullExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getNullCheckExpressionRule());
                      						}
                      						set(
                      							current,
                      							"right",
                      							lv_right_2_0,
                      							"com.justeat.mickeydb.MickeyLang.NullExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNullCheckExpression"


    // $ANTLR start "entryRuleNullExpression"
    // InternalMickeyLang.g:1866:1: entryRuleNullExpression returns [EObject current=null] : iv_ruleNullExpression= ruleNullExpression EOF ;
    public final EObject entryRuleNullExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNullExpression = null;


        try {
            // InternalMickeyLang.g:1866:55: (iv_ruleNullExpression= ruleNullExpression EOF )
            // InternalMickeyLang.g:1867:2: iv_ruleNullExpression= ruleNullExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNullExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleNullExpression=ruleNullExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNullExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNullExpression"


    // $ANTLR start "ruleNullExpression"
    // InternalMickeyLang.g:1873:1: ruleNullExpression returns [EObject current=null] : ( ( () otherlv_1= 'is null' ) | ( () (otherlv_3= 'not null' | otherlv_4= 'notnull' ) ) ) ;
    public final EObject ruleNullExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:1879:2: ( ( ( () otherlv_1= 'is null' ) | ( () (otherlv_3= 'not null' | otherlv_4= 'notnull' ) ) ) )
            // InternalMickeyLang.g:1880:2: ( ( () otherlv_1= 'is null' ) | ( () (otherlv_3= 'not null' | otherlv_4= 'notnull' ) ) )
            {
            // InternalMickeyLang.g:1880:2: ( ( () otherlv_1= 'is null' ) | ( () (otherlv_3= 'not null' | otherlv_4= 'notnull' ) ) )
            int alt35=2;
            int LA35_0 = input.LA(1);

            if ( (LA35_0==56) ) {
                alt35=1;
            }
            else if ( ((LA35_0>=57 && LA35_0<=58)) ) {
                alt35=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 35, 0, input);

                throw nvae;
            }
            switch (alt35) {
                case 1 :
                    // InternalMickeyLang.g:1881:3: ( () otherlv_1= 'is null' )
                    {
                    // InternalMickeyLang.g:1881:3: ( () otherlv_1= 'is null' )
                    // InternalMickeyLang.g:1882:4: () otherlv_1= 'is null'
                    {
                    // InternalMickeyLang.g:1882:4: ()
                    // InternalMickeyLang.g:1883:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getNullExpressionAccess().getIsNullAction_0_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_1=(Token)match(input,56,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getNullExpressionAccess().getIsNullKeyword_0_1());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:1895:3: ( () (otherlv_3= 'not null' | otherlv_4= 'notnull' ) )
                    {
                    // InternalMickeyLang.g:1895:3: ( () (otherlv_3= 'not null' | otherlv_4= 'notnull' ) )
                    // InternalMickeyLang.g:1896:4: () (otherlv_3= 'not null' | otherlv_4= 'notnull' )
                    {
                    // InternalMickeyLang.g:1896:4: ()
                    // InternalMickeyLang.g:1897:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getNullExpressionAccess().getNotNullAction_1_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:1903:4: (otherlv_3= 'not null' | otherlv_4= 'notnull' )
                    int alt34=2;
                    int LA34_0 = input.LA(1);

                    if ( (LA34_0==57) ) {
                        alt34=1;
                    }
                    else if ( (LA34_0==58) ) {
                        alt34=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 34, 0, input);

                        throw nvae;
                    }
                    switch (alt34) {
                        case 1 :
                            // InternalMickeyLang.g:1904:5: otherlv_3= 'not null'
                            {
                            otherlv_3=(Token)match(input,57,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					newLeafNode(otherlv_3, grammarAccess.getNullExpressionAccess().getNotNullKeyword_1_1_0());
                              				
                            }

                            }
                            break;
                        case 2 :
                            // InternalMickeyLang.g:1909:5: otherlv_4= 'notnull'
                            {
                            otherlv_4=(Token)match(input,58,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					newLeafNode(otherlv_4, grammarAccess.getNullExpressionAccess().getNotnullKeyword_1_1_1());
                              				
                            }

                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNullExpression"


    // $ANTLR start "entryRulePrimaryExpression"
    // InternalMickeyLang.g:1919:1: entryRulePrimaryExpression returns [EObject current=null] : iv_rulePrimaryExpression= rulePrimaryExpression EOF ;
    public final EObject entryRulePrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePrimaryExpression = null;


        try {
            // InternalMickeyLang.g:1919:58: (iv_rulePrimaryExpression= rulePrimaryExpression EOF )
            // InternalMickeyLang.g:1920:2: iv_rulePrimaryExpression= rulePrimaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPrimaryExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_rulePrimaryExpression=rulePrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePrimaryExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePrimaryExpression"


    // $ANTLR start "rulePrimaryExpression"
    // InternalMickeyLang.g:1926:1: rulePrimaryExpression returns [EObject current=null] : ( ( () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) ) ) | ( () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) ) ) | ( () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) ) ) | ( () ( (lv_literalValue_15_0= ruleLiteralValue ) ) ) | ( () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')' ) | ( () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')' ) | ( () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end' ) | ( () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')' ) | ( () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')' ) | ( () otherlv_49= '$' ( (otherlv_50= RULE_ID ) ) ) ) ;
    public final EObject rulePrimaryExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token lv_all_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        Token lv_not_21_0=null;
        Token lv_exists_22_0=null;
        Token otherlv_23=null;
        Token otherlv_25=null;
        Token otherlv_27=null;
        Token otherlv_30=null;
        Token otherlv_32=null;
        Token lv_name_34_0=null;
        Token otherlv_35=null;
        Token lv_all_36_0=null;
        Token otherlv_38=null;
        Token otherlv_40=null;
        Token otherlv_42=null;
        Token otherlv_43=null;
        Token otherlv_45=null;
        Token otherlv_47=null;
        Token otherlv_49=null;
        Token otherlv_50=null;
        EObject lv_literalValue_15_0 = null;

        EObject lv_expression_18_0 = null;

        EObject lv_select_24_0 = null;

        EObject lv_caseExpression_28_0 = null;

        EObject lv_cases_29_0 = null;

        EObject lv_elseExpression_31_0 = null;

        EObject lv_arguments_37_0 = null;

        EObject lv_arguments_39_0 = null;

        EObject lv_expression_44_0 = null;

        Enumerator lv_type_46_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:1932:2: ( ( ( () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) ) ) | ( () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) ) ) | ( () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) ) ) | ( () ( (lv_literalValue_15_0= ruleLiteralValue ) ) ) | ( () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')' ) | ( () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')' ) | ( () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end' ) | ( () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')' ) | ( () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')' ) | ( () otherlv_49= '$' ( (otherlv_50= RULE_ID ) ) ) ) )
            // InternalMickeyLang.g:1933:2: ( ( () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) ) ) | ( () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) ) ) | ( () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) ) ) | ( () ( (lv_literalValue_15_0= ruleLiteralValue ) ) ) | ( () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')' ) | ( () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')' ) | ( () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end' ) | ( () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')' ) | ( () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')' ) | ( () otherlv_49= '$' ( (otherlv_50= RULE_ID ) ) ) )
            {
            // InternalMickeyLang.g:1933:2: ( ( () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) ) ) | ( () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) ) ) | ( () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) ) ) | ( () ( (lv_literalValue_15_0= ruleLiteralValue ) ) ) | ( () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')' ) | ( () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')' ) | ( () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end' ) | ( () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')' ) | ( () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')' ) | ( () otherlv_49= '$' ( (otherlv_50= RULE_ID ) ) ) )
            int alt45=10;
            alt45 = dfa45.predict(input);
            switch (alt45) {
                case 1 :
                    // InternalMickeyLang.g:1934:3: ( () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) ) )
                    {
                    // InternalMickeyLang.g:1934:3: ( () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) ) )
                    // InternalMickeyLang.g:1935:4: () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) )
                    {
                    // InternalMickeyLang.g:1935:4: ()
                    // InternalMickeyLang.g:1936:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getNewColumnAction_0_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_1=(Token)match(input,59,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getPrimaryExpressionAccess().getNewKeyword_0_1());
                      			
                    }
                    // InternalMickeyLang.g:1946:4: ( (otherlv_2= RULE_ID ) )
                    // InternalMickeyLang.g:1947:5: (otherlv_2= RULE_ID )
                    {
                    // InternalMickeyLang.g:1947:5: (otherlv_2= RULE_ID )
                    // InternalMickeyLang.g:1948:6: otherlv_2= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                      						}
                      					
                    }
                    otherlv_2=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_2, grammarAccess.getPrimaryExpressionAccess().getColumnColumnSourceCrossReference_0_2_0());
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:1961:3: ( () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) ) )
                    {
                    // InternalMickeyLang.g:1961:3: ( () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) ) )
                    // InternalMickeyLang.g:1962:4: () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) )
                    {
                    // InternalMickeyLang.g:1962:4: ()
                    // InternalMickeyLang.g:1963:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getOldColumnAction_1_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_4=(Token)match(input,60,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getPrimaryExpressionAccess().getOldKeyword_1_1());
                      			
                    }
                    // InternalMickeyLang.g:1973:4: ( (otherlv_5= RULE_ID ) )
                    // InternalMickeyLang.g:1974:5: (otherlv_5= RULE_ID )
                    {
                    // InternalMickeyLang.g:1974:5: (otherlv_5= RULE_ID )
                    // InternalMickeyLang.g:1975:6: otherlv_5= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                      						}
                      					
                    }
                    otherlv_5=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_5, grammarAccess.getPrimaryExpressionAccess().getColumnColumnSourceCrossReference_1_2_0());
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:1988:3: ( () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) ) )
                    {
                    // InternalMickeyLang.g:1988:3: ( () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) ) )
                    // InternalMickeyLang.g:1989:4: () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) )
                    {
                    // InternalMickeyLang.g:1989:4: ()
                    // InternalMickeyLang.g:1990:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getColumnSourceRefAction_2_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:1996:4: ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) )
                    int alt37=3;
                    alt37 = dfa37.predict(input);
                    switch (alt37) {
                        case 1 :
                            // InternalMickeyLang.g:1997:5: ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' )
                            {
                            // InternalMickeyLang.g:1997:5: ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' )
                            // InternalMickeyLang.g:1998:6: ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.'
                            {
                            // InternalMickeyLang.g:1998:6: ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) )
                            // InternalMickeyLang.g:1999:7: ( ( RULE_ID ) )=> (otherlv_7= RULE_ID )
                            {
                            // InternalMickeyLang.g:2003:7: (otherlv_7= RULE_ID )
                            // InternalMickeyLang.g:2004:8: otherlv_7= RULE_ID
                            {
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                              								}
                              							
                            }
                            otherlv_7=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								newLeafNode(otherlv_7, grammarAccess.getPrimaryExpressionAccess().getSourceSelectSourceCrossReference_2_1_0_0_0());
                              							
                            }

                            }


                            }

                            otherlv_8=(Token)match(input,61,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_8, grammarAccess.getPrimaryExpressionAccess().getFullStopKeyword_2_1_0_1());
                              					
                            }

                            }


                            }
                            break;
                        case 2 :
                            // InternalMickeyLang.g:2021:5: ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) )
                            {
                            // InternalMickeyLang.g:2021:5: ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) )
                            // InternalMickeyLang.g:2022:6: ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) )
                            {
                            // InternalMickeyLang.g:2022:6: ( (otherlv_9= RULE_ID ) )
                            // InternalMickeyLang.g:2023:7: (otherlv_9= RULE_ID )
                            {
                            // InternalMickeyLang.g:2023:7: (otherlv_9= RULE_ID )
                            // InternalMickeyLang.g:2024:8: otherlv_9= RULE_ID
                            {
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                              								}
                              							
                            }
                            otherlv_9=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								newLeafNode(otherlv_9, grammarAccess.getPrimaryExpressionAccess().getSourceSelectSourceCrossReference_2_1_1_0_0());
                              							
                            }

                            }


                            }

                            otherlv_10=(Token)match(input,61,FOLLOW_37); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_10, grammarAccess.getPrimaryExpressionAccess().getFullStopKeyword_2_1_1_1());
                              					
                            }
                            // InternalMickeyLang.g:2039:6: ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) )
                            int alt36=2;
                            int LA36_0 = input.LA(1);

                            if ( (LA36_0==31) ) {
                                alt36=1;
                            }
                            else if ( (LA36_0==RULE_ID) ) {
                                alt36=2;
                            }
                            else {
                                if (state.backtracking>0) {state.failed=true; return current;}
                                NoViableAltException nvae =
                                    new NoViableAltException("", 36, 0, input);

                                throw nvae;
                            }
                            switch (alt36) {
                                case 1 :
                                    // InternalMickeyLang.g:2040:7: ( (lv_all_11_0= '*' ) )
                                    {
                                    // InternalMickeyLang.g:2040:7: ( (lv_all_11_0= '*' ) )
                                    // InternalMickeyLang.g:2041:8: (lv_all_11_0= '*' )
                                    {
                                    // InternalMickeyLang.g:2041:8: (lv_all_11_0= '*' )
                                    // InternalMickeyLang.g:2042:9: lv_all_11_0= '*'
                                    {
                                    lv_all_11_0=(Token)match(input,31,FOLLOW_2); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      									newLeafNode(lv_all_11_0, grammarAccess.getPrimaryExpressionAccess().getAllAsteriskKeyword_2_1_1_2_0_0());
                                      								
                                    }
                                    if ( state.backtracking==0 ) {

                                      									if (current==null) {
                                      										current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                                      									}
                                      									setWithLastConsumed(current, "all", true, "*");
                                      								
                                    }

                                    }


                                    }


                                    }
                                    break;
                                case 2 :
                                    // InternalMickeyLang.g:2055:7: ( (otherlv_12= RULE_ID ) )
                                    {
                                    // InternalMickeyLang.g:2055:7: ( (otherlv_12= RULE_ID ) )
                                    // InternalMickeyLang.g:2056:8: (otherlv_12= RULE_ID )
                                    {
                                    // InternalMickeyLang.g:2056:8: (otherlv_12= RULE_ID )
                                    // InternalMickeyLang.g:2057:9: otherlv_12= RULE_ID
                                    {
                                    if ( state.backtracking==0 ) {

                                      									if (current==null) {
                                      										current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                                      									}
                                      								
                                    }
                                    otherlv_12=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      									newLeafNode(otherlv_12, grammarAccess.getPrimaryExpressionAccess().getColumnColumnSourceCrossReference_2_1_1_2_1_0());
                                      								
                                    }

                                    }


                                    }


                                    }
                                    break;

                            }


                            }


                            }
                            break;
                        case 3 :
                            // InternalMickeyLang.g:2071:5: ( (otherlv_13= RULE_ID ) )
                            {
                            // InternalMickeyLang.g:2071:5: ( (otherlv_13= RULE_ID ) )
                            // InternalMickeyLang.g:2072:6: (otherlv_13= RULE_ID )
                            {
                            // InternalMickeyLang.g:2072:6: (otherlv_13= RULE_ID )
                            // InternalMickeyLang.g:2073:7: otherlv_13= RULE_ID
                            {
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                              							}
                              						
                            }
                            otherlv_13=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_13, grammarAccess.getPrimaryExpressionAccess().getColumnColumnSourceCrossReference_2_1_2_0());
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:2087:3: ( () ( (lv_literalValue_15_0= ruleLiteralValue ) ) )
                    {
                    // InternalMickeyLang.g:2087:3: ( () ( (lv_literalValue_15_0= ruleLiteralValue ) ) )
                    // InternalMickeyLang.g:2088:4: () ( (lv_literalValue_15_0= ruleLiteralValue ) )
                    {
                    // InternalMickeyLang.g:2088:4: ()
                    // InternalMickeyLang.g:2089:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getLiteralAction_3_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:2095:4: ( (lv_literalValue_15_0= ruleLiteralValue ) )
                    // InternalMickeyLang.g:2096:5: (lv_literalValue_15_0= ruleLiteralValue )
                    {
                    // InternalMickeyLang.g:2096:5: (lv_literalValue_15_0= ruleLiteralValue )
                    // InternalMickeyLang.g:2097:6: lv_literalValue_15_0= ruleLiteralValue
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getLiteralValueLiteralValueParserRuleCall_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_literalValue_15_0=ruleLiteralValue();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                      						}
                      						set(
                      							current,
                      							"literalValue",
                      							lv_literalValue_15_0,
                      							"com.justeat.mickeydb.MickeyLang.LiteralValue");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 5 :
                    // InternalMickeyLang.g:2116:3: ( () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')' )
                    {
                    // InternalMickeyLang.g:2116:3: ( () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')' )
                    // InternalMickeyLang.g:2117:4: () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')'
                    {
                    // InternalMickeyLang.g:2117:4: ()
                    // InternalMickeyLang.g:2118:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getNestedExpressionAction_4_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_17=(Token)match(input,14,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_17, grammarAccess.getPrimaryExpressionAccess().getLeftParenthesisKeyword_4_1());
                      			
                    }
                    // InternalMickeyLang.g:2128:4: ( (lv_expression_18_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:2129:5: (lv_expression_18_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:2129:5: (lv_expression_18_0= ruleSqlExpression )
                    // InternalMickeyLang.g:2130:6: lv_expression_18_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getExpressionSqlExpressionParserRuleCall_4_2_0());
                      					
                    }
                    pushFollow(FOLLOW_38);
                    lv_expression_18_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                      						}
                      						set(
                      							current,
                      							"expression",
                      							lv_expression_18_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    otherlv_19=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_19, grammarAccess.getPrimaryExpressionAccess().getRightParenthesisKeyword_4_3());
                      			
                    }

                    }


                    }
                    break;
                case 6 :
                    // InternalMickeyLang.g:2153:3: ( () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')' )
                    {
                    // InternalMickeyLang.g:2153:3: ( () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')' )
                    // InternalMickeyLang.g:2154:4: () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')'
                    {
                    // InternalMickeyLang.g:2154:4: ()
                    // InternalMickeyLang.g:2155:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getSelectStatementExpressionAction_5_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:2161:4: ( (lv_not_21_0= 'not' ) )?
                    int alt38=2;
                    int LA38_0 = input.LA(1);

                    if ( (LA38_0==62) ) {
                        alt38=1;
                    }
                    switch (alt38) {
                        case 1 :
                            // InternalMickeyLang.g:2162:5: (lv_not_21_0= 'not' )
                            {
                            // InternalMickeyLang.g:2162:5: (lv_not_21_0= 'not' )
                            // InternalMickeyLang.g:2163:6: lv_not_21_0= 'not'
                            {
                            lv_not_21_0=(Token)match(input,62,FOLLOW_39); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(lv_not_21_0, grammarAccess.getPrimaryExpressionAccess().getNotNotKeyword_5_1_0());
                              					
                            }
                            if ( state.backtracking==0 ) {

                              						if (current==null) {
                              							current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                              						}
                              						setWithLastConsumed(current, "not", true, "not");
                              					
                            }

                            }


                            }
                            break;

                    }

                    // InternalMickeyLang.g:2175:4: ( (lv_exists_22_0= 'exists' ) )?
                    int alt39=2;
                    int LA39_0 = input.LA(1);

                    if ( (LA39_0==63) ) {
                        alt39=1;
                    }
                    switch (alt39) {
                        case 1 :
                            // InternalMickeyLang.g:2176:5: (lv_exists_22_0= 'exists' )
                            {
                            // InternalMickeyLang.g:2176:5: (lv_exists_22_0= 'exists' )
                            // InternalMickeyLang.g:2177:6: lv_exists_22_0= 'exists'
                            {
                            lv_exists_22_0=(Token)match(input,63,FOLLOW_5); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(lv_exists_22_0, grammarAccess.getPrimaryExpressionAccess().getExistsExistsKeyword_5_2_0());
                              					
                            }
                            if ( state.backtracking==0 ) {

                              						if (current==null) {
                              							current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                              						}
                              						setWithLastConsumed(current, "exists", true, "exists");
                              					
                            }

                            }


                            }
                            break;

                    }

                    otherlv_23=(Token)match(input,14,FOLLOW_40); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_23, grammarAccess.getPrimaryExpressionAccess().getLeftParenthesisKeyword_5_3());
                      			
                    }
                    // InternalMickeyLang.g:2193:4: ( (lv_select_24_0= ruleSelectStatement ) )
                    // InternalMickeyLang.g:2194:5: (lv_select_24_0= ruleSelectStatement )
                    {
                    // InternalMickeyLang.g:2194:5: (lv_select_24_0= ruleSelectStatement )
                    // InternalMickeyLang.g:2195:6: lv_select_24_0= ruleSelectStatement
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getSelectSelectStatementParserRuleCall_5_4_0());
                      					
                    }
                    pushFollow(FOLLOW_38);
                    lv_select_24_0=ruleSelectStatement();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                      						}
                      						set(
                      							current,
                      							"select",
                      							lv_select_24_0,
                      							"com.justeat.mickeydb.MickeyLang.SelectStatement");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    otherlv_25=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_25, grammarAccess.getPrimaryExpressionAccess().getRightParenthesisKeyword_5_5());
                      			
                    }

                    }


                    }
                    break;
                case 7 :
                    // InternalMickeyLang.g:2218:3: ( () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end' )
                    {
                    // InternalMickeyLang.g:2218:3: ( () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end' )
                    // InternalMickeyLang.g:2219:4: () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end'
                    {
                    // InternalMickeyLang.g:2219:4: ()
                    // InternalMickeyLang.g:2220:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getCaseExpressionAction_6_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_27=(Token)match(input,64,FOLLOW_41); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_27, grammarAccess.getPrimaryExpressionAccess().getCaseKeyword_6_1());
                      			
                    }
                    // InternalMickeyLang.g:2230:4: ( (lv_caseExpression_28_0= ruleSqlExpression ) )?
                    int alt40=2;
                    int LA40_0 = input.LA(1);

                    if ( ((LA40_0>=RULE_ID && LA40_0<=RULE_NUMBER)||LA40_0==14||LA40_0==34||(LA40_0>=59 && LA40_0<=60)||(LA40_0>=62 && LA40_0<=64)||LA40_0==67||LA40_0==69||(LA40_0>=89 && LA40_0<=92)) ) {
                        alt40=1;
                    }
                    switch (alt40) {
                        case 1 :
                            // InternalMickeyLang.g:2231:5: (lv_caseExpression_28_0= ruleSqlExpression )
                            {
                            // InternalMickeyLang.g:2231:5: (lv_caseExpression_28_0= ruleSqlExpression )
                            // InternalMickeyLang.g:2232:6: lv_caseExpression_28_0= ruleSqlExpression
                            {
                            if ( state.backtracking==0 ) {

                              						newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getCaseExpressionSqlExpressionParserRuleCall_6_2_0());
                              					
                            }
                            pushFollow(FOLLOW_41);
                            lv_caseExpression_28_0=ruleSqlExpression();

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

                              						if (current==null) {
                              							current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                              						}
                              						set(
                              							current,
                              							"caseExpression",
                              							lv_caseExpression_28_0,
                              							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                              						afterParserOrEnumRuleCall();
                              					
                            }

                            }


                            }
                            break;

                    }

                    // InternalMickeyLang.g:2249:4: ( (lv_cases_29_0= ruleCase ) )+
                    int cnt41=0;
                    loop41:
                    do {
                        int alt41=2;
                        int LA41_0 = input.LA(1);

                        if ( (LA41_0==70) ) {
                            alt41=1;
                        }


                        switch (alt41) {
                    	case 1 :
                    	    // InternalMickeyLang.g:2250:5: (lv_cases_29_0= ruleCase )
                    	    {
                    	    // InternalMickeyLang.g:2250:5: (lv_cases_29_0= ruleCase )
                    	    // InternalMickeyLang.g:2251:6: lv_cases_29_0= ruleCase
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getCasesCaseParserRuleCall_6_3_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_42);
                    	    lv_cases_29_0=ruleCase();

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

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"cases",
                    	      							lv_cases_29_0,
                    	      							"com.justeat.mickeydb.MickeyLang.Case");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt41 >= 1 ) break loop41;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(41, input);
                                throw eee;
                        }
                        cnt41++;
                    } while (true);

                    // InternalMickeyLang.g:2268:4: (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )?
                    int alt42=2;
                    int LA42_0 = input.LA(1);

                    if ( (LA42_0==65) ) {
                        alt42=1;
                    }
                    switch (alt42) {
                        case 1 :
                            // InternalMickeyLang.g:2269:5: otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) )
                            {
                            otherlv_30=(Token)match(input,65,FOLLOW_27); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					newLeafNode(otherlv_30, grammarAccess.getPrimaryExpressionAccess().getElseKeyword_6_4_0());
                              				
                            }
                            // InternalMickeyLang.g:2273:5: ( (lv_elseExpression_31_0= ruleSqlExpression ) )
                            // InternalMickeyLang.g:2274:6: (lv_elseExpression_31_0= ruleSqlExpression )
                            {
                            // InternalMickeyLang.g:2274:6: (lv_elseExpression_31_0= ruleSqlExpression )
                            // InternalMickeyLang.g:2275:7: lv_elseExpression_31_0= ruleSqlExpression
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getElseExpressionSqlExpressionParserRuleCall_6_4_1_0());
                              						
                            }
                            pushFollow(FOLLOW_43);
                            lv_elseExpression_31_0=ruleSqlExpression();

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

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                              							}
                              							set(
                              								current,
                              								"elseExpression",
                              								lv_elseExpression_31_0,
                              								"com.justeat.mickeydb.MickeyLang.SqlExpression");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }

                    otherlv_32=(Token)match(input,66,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_32, grammarAccess.getPrimaryExpressionAccess().getEndKeyword_6_5());
                      			
                    }

                    }


                    }
                    break;
                case 8 :
                    // InternalMickeyLang.g:2299:3: ( () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')' )
                    {
                    // InternalMickeyLang.g:2299:3: ( () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')' )
                    // InternalMickeyLang.g:2300:4: () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')'
                    {
                    // InternalMickeyLang.g:2300:4: ()
                    // InternalMickeyLang.g:2301:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getFunctionAction_7_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:2307:4: ( (lv_name_34_0= RULE_ID ) )
                    // InternalMickeyLang.g:2308:5: (lv_name_34_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:2308:5: (lv_name_34_0= RULE_ID )
                    // InternalMickeyLang.g:2309:6: lv_name_34_0= RULE_ID
                    {
                    lv_name_34_0=(Token)match(input,RULE_ID,FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_34_0, grammarAccess.getPrimaryExpressionAccess().getNameIDTerminalRuleCall_7_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_34_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }

                    otherlv_35=(Token)match(input,14,FOLLOW_44); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_35, grammarAccess.getPrimaryExpressionAccess().getLeftParenthesisKeyword_7_2());
                      			
                    }
                    // InternalMickeyLang.g:2329:4: ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) )
                    int alt44=2;
                    int LA44_0 = input.LA(1);

                    if ( (LA44_0==31) ) {
                        alt44=1;
                    }
                    else if ( ((LA44_0>=RULE_ID && LA44_0<=RULE_NUMBER)||LA44_0==14||LA44_0==34||(LA44_0>=59 && LA44_0<=60)||(LA44_0>=62 && LA44_0<=64)||LA44_0==67||LA44_0==69||(LA44_0>=89 && LA44_0<=92)) ) {
                        alt44=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 44, 0, input);

                        throw nvae;
                    }
                    switch (alt44) {
                        case 1 :
                            // InternalMickeyLang.g:2330:5: ( (lv_all_36_0= '*' ) )
                            {
                            // InternalMickeyLang.g:2330:5: ( (lv_all_36_0= '*' ) )
                            // InternalMickeyLang.g:2331:6: (lv_all_36_0= '*' )
                            {
                            // InternalMickeyLang.g:2331:6: (lv_all_36_0= '*' )
                            // InternalMickeyLang.g:2332:7: lv_all_36_0= '*'
                            {
                            lv_all_36_0=(Token)match(input,31,FOLLOW_38); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_all_36_0, grammarAccess.getPrimaryExpressionAccess().getAllAsteriskKeyword_7_3_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                              							}
                              							setWithLastConsumed(current, "all", true, "*");
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalMickeyLang.g:2345:5: ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* )
                            {
                            // InternalMickeyLang.g:2345:5: ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* )
                            // InternalMickeyLang.g:2346:6: ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )*
                            {
                            // InternalMickeyLang.g:2346:6: ( (lv_arguments_37_0= ruleSqlExpression ) )
                            // InternalMickeyLang.g:2347:7: (lv_arguments_37_0= ruleSqlExpression )
                            {
                            // InternalMickeyLang.g:2347:7: (lv_arguments_37_0= ruleSqlExpression )
                            // InternalMickeyLang.g:2348:8: lv_arguments_37_0= ruleSqlExpression
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getArgumentsSqlExpressionParserRuleCall_7_3_1_0_0());
                              							
                            }
                            pushFollow(FOLLOW_7);
                            lv_arguments_37_0=ruleSqlExpression();

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

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                              								}
                              								add(
                              									current,
                              									"arguments",
                              									lv_arguments_37_0,
                              									"com.justeat.mickeydb.MickeyLang.SqlExpression");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }

                            // InternalMickeyLang.g:2365:6: (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )*
                            loop43:
                            do {
                                int alt43=2;
                                int LA43_0 = input.LA(1);

                                if ( (LA43_0==15) ) {
                                    alt43=1;
                                }


                                switch (alt43) {
                            	case 1 :
                            	    // InternalMickeyLang.g:2366:7: otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) )
                            	    {
                            	    otherlv_38=(Token)match(input,15,FOLLOW_27); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							newLeafNode(otherlv_38, grammarAccess.getPrimaryExpressionAccess().getCommaKeyword_7_3_1_1_0());
                            	      						
                            	    }
                            	    // InternalMickeyLang.g:2370:7: ( (lv_arguments_39_0= ruleSqlExpression ) )
                            	    // InternalMickeyLang.g:2371:8: (lv_arguments_39_0= ruleSqlExpression )
                            	    {
                            	    // InternalMickeyLang.g:2371:8: (lv_arguments_39_0= ruleSqlExpression )
                            	    // InternalMickeyLang.g:2372:9: lv_arguments_39_0= ruleSqlExpression
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      									newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getArgumentsSqlExpressionParserRuleCall_7_3_1_1_1_0());
                            	      								
                            	    }
                            	    pushFollow(FOLLOW_7);
                            	    lv_arguments_39_0=ruleSqlExpression();

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

                            	      									if (current==null) {
                            	      										current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                            	      									}
                            	      									add(
                            	      										current,
                            	      										"arguments",
                            	      										lv_arguments_39_0,
                            	      										"com.justeat.mickeydb.MickeyLang.SqlExpression");
                            	      									afterParserOrEnumRuleCall();
                            	      								
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

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


                            }


                            }
                            break;

                    }

                    otherlv_40=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_40, grammarAccess.getPrimaryExpressionAccess().getRightParenthesisKeyword_7_4());
                      			
                    }

                    }


                    }
                    break;
                case 9 :
                    // InternalMickeyLang.g:2398:3: ( () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')' )
                    {
                    // InternalMickeyLang.g:2398:3: ( () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')' )
                    // InternalMickeyLang.g:2399:4: () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')'
                    {
                    // InternalMickeyLang.g:2399:4: ()
                    // InternalMickeyLang.g:2400:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getCastExpressionAction_8_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_42=(Token)match(input,67,FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_42, grammarAccess.getPrimaryExpressionAccess().getCastKeyword_8_1());
                      			
                    }
                    otherlv_43=(Token)match(input,14,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_43, grammarAccess.getPrimaryExpressionAccess().getLeftParenthesisKeyword_8_2());
                      			
                    }
                    // InternalMickeyLang.g:2414:4: ( (lv_expression_44_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:2415:5: (lv_expression_44_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:2415:5: (lv_expression_44_0= ruleSqlExpression )
                    // InternalMickeyLang.g:2416:6: lv_expression_44_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getExpressionSqlExpressionParserRuleCall_8_3_0());
                      					
                    }
                    pushFollow(FOLLOW_45);
                    lv_expression_44_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                      						}
                      						set(
                      							current,
                      							"expression",
                      							lv_expression_44_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    otherlv_45=(Token)match(input,68,FOLLOW_46); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_45, grammarAccess.getPrimaryExpressionAccess().getAsKeyword_8_4());
                      			
                    }
                    // InternalMickeyLang.g:2437:4: ( (lv_type_46_0= ruleSqliteDataType ) )
                    // InternalMickeyLang.g:2438:5: (lv_type_46_0= ruleSqliteDataType )
                    {
                    // InternalMickeyLang.g:2438:5: (lv_type_46_0= ruleSqliteDataType )
                    // InternalMickeyLang.g:2439:6: lv_type_46_0= ruleSqliteDataType
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getTypeSqliteDataTypeEnumRuleCall_8_5_0());
                      					
                    }
                    pushFollow(FOLLOW_38);
                    lv_type_46_0=ruleSqliteDataType();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getPrimaryExpressionRule());
                      						}
                      						set(
                      							current,
                      							"type",
                      							lv_type_46_0,
                      							"com.justeat.mickeydb.MickeyLang.SqliteDataType");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    otherlv_47=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_47, grammarAccess.getPrimaryExpressionAccess().getRightParenthesisKeyword_8_6());
                      			
                    }

                    }


                    }
                    break;
                case 10 :
                    // InternalMickeyLang.g:2462:3: ( () otherlv_49= '$' ( (otherlv_50= RULE_ID ) ) )
                    {
                    // InternalMickeyLang.g:2462:3: ( () otherlv_49= '$' ( (otherlv_50= RULE_ID ) ) )
                    // InternalMickeyLang.g:2463:4: () otherlv_49= '$' ( (otherlv_50= RULE_ID ) )
                    {
                    // InternalMickeyLang.g:2463:4: ()
                    // InternalMickeyLang.g:2464:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getPrimaryExpressionAccess().getFunctionArgumentAction_9_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_49=(Token)match(input,69,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_49, grammarAccess.getPrimaryExpressionAccess().getDollarSignKeyword_9_1());
                      			
                    }
                    // InternalMickeyLang.g:2474:4: ( (otherlv_50= RULE_ID ) )
                    // InternalMickeyLang.g:2475:5: (otherlv_50= RULE_ID )
                    {
                    // InternalMickeyLang.g:2475:5: (otherlv_50= RULE_ID )
                    // InternalMickeyLang.g:2476:6: otherlv_50= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPrimaryExpressionRule());
                      						}
                      					
                    }
                    otherlv_50=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_50, grammarAccess.getPrimaryExpressionAccess().getArgFunctionArgCrossReference_9_2_0());
                      					
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePrimaryExpression"


    // $ANTLR start "entryRuleCase"
    // InternalMickeyLang.g:2492:1: entryRuleCase returns [EObject current=null] : iv_ruleCase= ruleCase EOF ;
    public final EObject entryRuleCase() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCase = null;


        try {
            // InternalMickeyLang.g:2492:45: (iv_ruleCase= ruleCase EOF )
            // InternalMickeyLang.g:2493:2: iv_ruleCase= ruleCase EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCaseRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleCase=ruleCase();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCase; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCase"


    // $ANTLR start "ruleCase"
    // InternalMickeyLang.g:2499:1: ruleCase returns [EObject current=null] : (otherlv_0= 'when' ( (lv_whenExpression_1_0= ruleSqlExpression ) ) otherlv_2= 'then' ( (lv_thenExpression_3_0= ruleSqlExpression ) ) ) ;
    public final EObject ruleCase() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject lv_whenExpression_1_0 = null;

        EObject lv_thenExpression_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:2505:2: ( (otherlv_0= 'when' ( (lv_whenExpression_1_0= ruleSqlExpression ) ) otherlv_2= 'then' ( (lv_thenExpression_3_0= ruleSqlExpression ) ) ) )
            // InternalMickeyLang.g:2506:2: (otherlv_0= 'when' ( (lv_whenExpression_1_0= ruleSqlExpression ) ) otherlv_2= 'then' ( (lv_thenExpression_3_0= ruleSqlExpression ) ) )
            {
            // InternalMickeyLang.g:2506:2: (otherlv_0= 'when' ( (lv_whenExpression_1_0= ruleSqlExpression ) ) otherlv_2= 'then' ( (lv_thenExpression_3_0= ruleSqlExpression ) ) )
            // InternalMickeyLang.g:2507:3: otherlv_0= 'when' ( (lv_whenExpression_1_0= ruleSqlExpression ) ) otherlv_2= 'then' ( (lv_thenExpression_3_0= ruleSqlExpression ) )
            {
            otherlv_0=(Token)match(input,70,FOLLOW_27); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getCaseAccess().getWhenKeyword_0());
              		
            }
            // InternalMickeyLang.g:2511:3: ( (lv_whenExpression_1_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:2512:4: (lv_whenExpression_1_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:2512:4: (lv_whenExpression_1_0= ruleSqlExpression )
            // InternalMickeyLang.g:2513:5: lv_whenExpression_1_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getCaseAccess().getWhenExpressionSqlExpressionParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_47);
            lv_whenExpression_1_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getCaseRule());
              					}
              					set(
              						current,
              						"whenExpression",
              						lv_whenExpression_1_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_2=(Token)match(input,71,FOLLOW_27); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getCaseAccess().getThenKeyword_2());
              		
            }
            // InternalMickeyLang.g:2534:3: ( (lv_thenExpression_3_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:2535:4: (lv_thenExpression_3_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:2535:4: (lv_thenExpression_3_0= ruleSqlExpression )
            // InternalMickeyLang.g:2536:5: lv_thenExpression_3_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getCaseAccess().getThenExpressionSqlExpressionParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_thenExpression_3_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getCaseRule());
              					}
              					set(
              						current,
              						"thenExpression",
              						lv_thenExpression_3_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCase"


    // $ANTLR start "entryRuleSelectStatement"
    // InternalMickeyLang.g:2557:1: entryRuleSelectStatement returns [EObject current=null] : iv_ruleSelectStatement= ruleSelectStatement EOF ;
    public final EObject entryRuleSelectStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSelectStatement = null;


        try {
            // InternalMickeyLang.g:2557:56: (iv_ruleSelectStatement= ruleSelectStatement EOF )
            // InternalMickeyLang.g:2558:2: iv_ruleSelectStatement= ruleSelectStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSelectStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSelectStatement=ruleSelectStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSelectStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSelectStatement"


    // $ANTLR start "ruleSelectStatement"
    // InternalMickeyLang.g:2564:1: ruleSelectStatement returns [EObject current=null] : ( ( (lv_core_0_0= ruleSelectCore ) ) (otherlv_1= 'order by' ( (lv_orderby_2_0= ruleOrderingTermList ) ) )? (otherlv_3= 'limit' ( (lv_limit_4_0= ruleSqlExpression ) ) ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )? )? ) ;
    public final EObject ruleSelectStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        EObject lv_core_0_0 = null;

        EObject lv_orderby_2_0 = null;

        EObject lv_limit_4_0 = null;

        EObject lv_limitOffset_7_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:2570:2: ( ( ( (lv_core_0_0= ruleSelectCore ) ) (otherlv_1= 'order by' ( (lv_orderby_2_0= ruleOrderingTermList ) ) )? (otherlv_3= 'limit' ( (lv_limit_4_0= ruleSqlExpression ) ) ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )? )? ) )
            // InternalMickeyLang.g:2571:2: ( ( (lv_core_0_0= ruleSelectCore ) ) (otherlv_1= 'order by' ( (lv_orderby_2_0= ruleOrderingTermList ) ) )? (otherlv_3= 'limit' ( (lv_limit_4_0= ruleSqlExpression ) ) ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )? )? )
            {
            // InternalMickeyLang.g:2571:2: ( ( (lv_core_0_0= ruleSelectCore ) ) (otherlv_1= 'order by' ( (lv_orderby_2_0= ruleOrderingTermList ) ) )? (otherlv_3= 'limit' ( (lv_limit_4_0= ruleSqlExpression ) ) ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )? )? )
            // InternalMickeyLang.g:2572:3: ( (lv_core_0_0= ruleSelectCore ) ) (otherlv_1= 'order by' ( (lv_orderby_2_0= ruleOrderingTermList ) ) )? (otherlv_3= 'limit' ( (lv_limit_4_0= ruleSqlExpression ) ) ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )? )?
            {
            // InternalMickeyLang.g:2572:3: ( (lv_core_0_0= ruleSelectCore ) )
            // InternalMickeyLang.g:2573:4: (lv_core_0_0= ruleSelectCore )
            {
            // InternalMickeyLang.g:2573:4: (lv_core_0_0= ruleSelectCore )
            // InternalMickeyLang.g:2574:5: lv_core_0_0= ruleSelectCore
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getSelectStatementAccess().getCoreSelectCoreParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_48);
            lv_core_0_0=ruleSelectCore();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getSelectStatementRule());
              					}
              					set(
              						current,
              						"core",
              						lv_core_0_0,
              						"com.justeat.mickeydb.MickeyLang.SelectCore");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:2591:3: (otherlv_1= 'order by' ( (lv_orderby_2_0= ruleOrderingTermList ) ) )?
            int alt46=2;
            int LA46_0 = input.LA(1);

            if ( (LA46_0==72) ) {
                alt46=1;
            }
            switch (alt46) {
                case 1 :
                    // InternalMickeyLang.g:2592:4: otherlv_1= 'order by' ( (lv_orderby_2_0= ruleOrderingTermList ) )
                    {
                    otherlv_1=(Token)match(input,72,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getSelectStatementAccess().getOrderByKeyword_1_0());
                      			
                    }
                    // InternalMickeyLang.g:2596:4: ( (lv_orderby_2_0= ruleOrderingTermList ) )
                    // InternalMickeyLang.g:2597:5: (lv_orderby_2_0= ruleOrderingTermList )
                    {
                    // InternalMickeyLang.g:2597:5: (lv_orderby_2_0= ruleOrderingTermList )
                    // InternalMickeyLang.g:2598:6: lv_orderby_2_0= ruleOrderingTermList
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSelectStatementAccess().getOrderbyOrderingTermListParserRuleCall_1_1_0());
                      					
                    }
                    pushFollow(FOLLOW_49);
                    lv_orderby_2_0=ruleOrderingTermList();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSelectStatementRule());
                      						}
                      						set(
                      							current,
                      							"orderby",
                      							lv_orderby_2_0,
                      							"com.justeat.mickeydb.MickeyLang.OrderingTermList");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:2616:3: (otherlv_3= 'limit' ( (lv_limit_4_0= ruleSqlExpression ) ) ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )? )?
            int alt49=2;
            int LA49_0 = input.LA(1);

            if ( (LA49_0==73) ) {
                alt49=1;
            }
            switch (alt49) {
                case 1 :
                    // InternalMickeyLang.g:2617:4: otherlv_3= 'limit' ( (lv_limit_4_0= ruleSqlExpression ) ) ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )?
                    {
                    otherlv_3=(Token)match(input,73,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getSelectStatementAccess().getLimitKeyword_2_0());
                      			
                    }
                    // InternalMickeyLang.g:2621:4: ( (lv_limit_4_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:2622:5: (lv_limit_4_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:2622:5: (lv_limit_4_0= ruleSqlExpression )
                    // InternalMickeyLang.g:2623:6: lv_limit_4_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSelectStatementAccess().getLimitSqlExpressionParserRuleCall_2_1_0());
                      					
                    }
                    pushFollow(FOLLOW_50);
                    lv_limit_4_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSelectStatementRule());
                      						}
                      						set(
                      							current,
                      							"limit",
                      							lv_limit_4_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalMickeyLang.g:2640:4: ( (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) ) )?
                    int alt48=2;
                    int LA48_0 = input.LA(1);

                    if ( (LA48_0==15||LA48_0==74) ) {
                        alt48=1;
                    }
                    switch (alt48) {
                        case 1 :
                            // InternalMickeyLang.g:2641:5: (otherlv_5= 'offset' | otherlv_6= ',' ) ( (lv_limitOffset_7_0= ruleSqlExpression ) )
                            {
                            // InternalMickeyLang.g:2641:5: (otherlv_5= 'offset' | otherlv_6= ',' )
                            int alt47=2;
                            int LA47_0 = input.LA(1);

                            if ( (LA47_0==74) ) {
                                alt47=1;
                            }
                            else if ( (LA47_0==15) ) {
                                alt47=2;
                            }
                            else {
                                if (state.backtracking>0) {state.failed=true; return current;}
                                NoViableAltException nvae =
                                    new NoViableAltException("", 47, 0, input);

                                throw nvae;
                            }
                            switch (alt47) {
                                case 1 :
                                    // InternalMickeyLang.g:2642:6: otherlv_5= 'offset'
                                    {
                                    otherlv_5=(Token)match(input,74,FOLLOW_27); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      						newLeafNode(otherlv_5, grammarAccess.getSelectStatementAccess().getOffsetKeyword_2_2_0_0());
                                      					
                                    }

                                    }
                                    break;
                                case 2 :
                                    // InternalMickeyLang.g:2647:6: otherlv_6= ','
                                    {
                                    otherlv_6=(Token)match(input,15,FOLLOW_27); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      						newLeafNode(otherlv_6, grammarAccess.getSelectStatementAccess().getCommaKeyword_2_2_0_1());
                                      					
                                    }

                                    }
                                    break;

                            }

                            // InternalMickeyLang.g:2652:5: ( (lv_limitOffset_7_0= ruleSqlExpression ) )
                            // InternalMickeyLang.g:2653:6: (lv_limitOffset_7_0= ruleSqlExpression )
                            {
                            // InternalMickeyLang.g:2653:6: (lv_limitOffset_7_0= ruleSqlExpression )
                            // InternalMickeyLang.g:2654:7: lv_limitOffset_7_0= ruleSqlExpression
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getSelectStatementAccess().getLimitOffsetSqlExpressionParserRuleCall_2_2_1_0());
                              						
                            }
                            pushFollow(FOLLOW_2);
                            lv_limitOffset_7_0=ruleSqlExpression();

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

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getSelectStatementRule());
                              							}
                              							set(
                              								current,
                              								"limitOffset",
                              								lv_limitOffset_7_0,
                              								"com.justeat.mickeydb.MickeyLang.SqlExpression");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSelectStatement"


    // $ANTLR start "entryRuleOrderingTermList"
    // InternalMickeyLang.g:2677:1: entryRuleOrderingTermList returns [EObject current=null] : iv_ruleOrderingTermList= ruleOrderingTermList EOF ;
    public final EObject entryRuleOrderingTermList() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOrderingTermList = null;


        try {
            // InternalMickeyLang.g:2677:57: (iv_ruleOrderingTermList= ruleOrderingTermList EOF )
            // InternalMickeyLang.g:2678:2: iv_ruleOrderingTermList= ruleOrderingTermList EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOrderingTermListRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOrderingTermList=ruleOrderingTermList();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOrderingTermList; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOrderingTermList"


    // $ANTLR start "ruleOrderingTermList"
    // InternalMickeyLang.g:2684:1: ruleOrderingTermList returns [EObject current=null] : ( ( (lv_orderingTerms_0_0= ruleOrderingTerm ) ) (otherlv_1= ',' ( (lv_orderingTerms_2_0= ruleOrderingTerm ) ) )* ) ;
    public final EObject ruleOrderingTermList() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_orderingTerms_0_0 = null;

        EObject lv_orderingTerms_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:2690:2: ( ( ( (lv_orderingTerms_0_0= ruleOrderingTerm ) ) (otherlv_1= ',' ( (lv_orderingTerms_2_0= ruleOrderingTerm ) ) )* ) )
            // InternalMickeyLang.g:2691:2: ( ( (lv_orderingTerms_0_0= ruleOrderingTerm ) ) (otherlv_1= ',' ( (lv_orderingTerms_2_0= ruleOrderingTerm ) ) )* )
            {
            // InternalMickeyLang.g:2691:2: ( ( (lv_orderingTerms_0_0= ruleOrderingTerm ) ) (otherlv_1= ',' ( (lv_orderingTerms_2_0= ruleOrderingTerm ) ) )* )
            // InternalMickeyLang.g:2692:3: ( (lv_orderingTerms_0_0= ruleOrderingTerm ) ) (otherlv_1= ',' ( (lv_orderingTerms_2_0= ruleOrderingTerm ) ) )*
            {
            // InternalMickeyLang.g:2692:3: ( (lv_orderingTerms_0_0= ruleOrderingTerm ) )
            // InternalMickeyLang.g:2693:4: (lv_orderingTerms_0_0= ruleOrderingTerm )
            {
            // InternalMickeyLang.g:2693:4: (lv_orderingTerms_0_0= ruleOrderingTerm )
            // InternalMickeyLang.g:2694:5: lv_orderingTerms_0_0= ruleOrderingTerm
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getOrderingTermListAccess().getOrderingTermsOrderingTermParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_51);
            lv_orderingTerms_0_0=ruleOrderingTerm();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getOrderingTermListRule());
              					}
              					add(
              						current,
              						"orderingTerms",
              						lv_orderingTerms_0_0,
              						"com.justeat.mickeydb.MickeyLang.OrderingTerm");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:2711:3: (otherlv_1= ',' ( (lv_orderingTerms_2_0= ruleOrderingTerm ) ) )*
            loop50:
            do {
                int alt50=2;
                int LA50_0 = input.LA(1);

                if ( (LA50_0==15) ) {
                    alt50=1;
                }


                switch (alt50) {
            	case 1 :
            	    // InternalMickeyLang.g:2712:4: otherlv_1= ',' ( (lv_orderingTerms_2_0= ruleOrderingTerm ) )
            	    {
            	    otherlv_1=(Token)match(input,15,FOLLOW_27); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_1, grammarAccess.getOrderingTermListAccess().getCommaKeyword_1_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:2716:4: ( (lv_orderingTerms_2_0= ruleOrderingTerm ) )
            	    // InternalMickeyLang.g:2717:5: (lv_orderingTerms_2_0= ruleOrderingTerm )
            	    {
            	    // InternalMickeyLang.g:2717:5: (lv_orderingTerms_2_0= ruleOrderingTerm )
            	    // InternalMickeyLang.g:2718:6: lv_orderingTerms_2_0= ruleOrderingTerm
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getOrderingTermListAccess().getOrderingTermsOrderingTermParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_51);
            	    lv_orderingTerms_2_0=ruleOrderingTerm();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getOrderingTermListRule());
            	      						}
            	      						add(
            	      							current,
            	      							"orderingTerms",
            	      							lv_orderingTerms_2_0,
            	      							"com.justeat.mickeydb.MickeyLang.OrderingTerm");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOrderingTermList"


    // $ANTLR start "entryRuleSelectCore"
    // InternalMickeyLang.g:2740:1: entryRuleSelectCore returns [EObject current=null] : iv_ruleSelectCore= ruleSelectCore EOF ;
    public final EObject entryRuleSelectCore() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSelectCore = null;


        try {
            // InternalMickeyLang.g:2740:51: (iv_ruleSelectCore= ruleSelectCore EOF )
            // InternalMickeyLang.g:2741:2: iv_ruleSelectCore= ruleSelectCore EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSelectCoreRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSelectCore=ruleSelectCore();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSelectCore; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSelectCore"


    // $ANTLR start "ruleSelectCore"
    // InternalMickeyLang.g:2747:1: ruleSelectCore returns [EObject current=null] : (this_SelectExpression_0= ruleSelectExpression ( () ( (lv_op_2_0= ruleCompoundOperator ) ) ( (lv_right_3_0= ruleSelectExpression ) ) )* ) ;
    public final EObject ruleSelectCore() throws RecognitionException {
        EObject current = null;

        EObject this_SelectExpression_0 = null;

        Enumerator lv_op_2_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:2753:2: ( (this_SelectExpression_0= ruleSelectExpression ( () ( (lv_op_2_0= ruleCompoundOperator ) ) ( (lv_right_3_0= ruleSelectExpression ) ) )* ) )
            // InternalMickeyLang.g:2754:2: (this_SelectExpression_0= ruleSelectExpression ( () ( (lv_op_2_0= ruleCompoundOperator ) ) ( (lv_right_3_0= ruleSelectExpression ) ) )* )
            {
            // InternalMickeyLang.g:2754:2: (this_SelectExpression_0= ruleSelectExpression ( () ( (lv_op_2_0= ruleCompoundOperator ) ) ( (lv_right_3_0= ruleSelectExpression ) ) )* )
            // InternalMickeyLang.g:2755:3: this_SelectExpression_0= ruleSelectExpression ( () ( (lv_op_2_0= ruleCompoundOperator ) ) ( (lv_right_3_0= ruleSelectExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getSelectCoreAccess().getSelectExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_52);
            this_SelectExpression_0=ruleSelectExpression();

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

              			current = this_SelectExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalMickeyLang.g:2763:3: ( () ( (lv_op_2_0= ruleCompoundOperator ) ) ( (lv_right_3_0= ruleSelectExpression ) ) )*
            loop51:
            do {
                int alt51=2;
                int LA51_0 = input.LA(1);

                if ( ((LA51_0>=124 && LA51_0<=127)) ) {
                    alt51=1;
                }


                switch (alt51) {
            	case 1 :
            	    // InternalMickeyLang.g:2764:4: () ( (lv_op_2_0= ruleCompoundOperator ) ) ( (lv_right_3_0= ruleSelectExpression ) )
            	    {
            	    // InternalMickeyLang.g:2764:4: ()
            	    // InternalMickeyLang.g:2765:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getSelectCoreAccess().getSelectCoreLeftAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    // InternalMickeyLang.g:2771:4: ( (lv_op_2_0= ruleCompoundOperator ) )
            	    // InternalMickeyLang.g:2772:5: (lv_op_2_0= ruleCompoundOperator )
            	    {
            	    // InternalMickeyLang.g:2772:5: (lv_op_2_0= ruleCompoundOperator )
            	    // InternalMickeyLang.g:2773:6: lv_op_2_0= ruleCompoundOperator
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSelectCoreAccess().getOpCompoundOperatorEnumRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_op_2_0=ruleCompoundOperator();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSelectCoreRule());
            	      						}
            	      						set(
            	      							current,
            	      							"op",
            	      							lv_op_2_0,
            	      							"com.justeat.mickeydb.MickeyLang.CompoundOperator");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }

            	    // InternalMickeyLang.g:2790:4: ( (lv_right_3_0= ruleSelectExpression ) )
            	    // InternalMickeyLang.g:2791:5: (lv_right_3_0= ruleSelectExpression )
            	    {
            	    // InternalMickeyLang.g:2791:5: (lv_right_3_0= ruleSelectExpression )
            	    // InternalMickeyLang.g:2792:6: lv_right_3_0= ruleSelectExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSelectCoreAccess().getRightSelectExpressionParserRuleCall_1_2_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_52);
            	    lv_right_3_0=ruleSelectExpression();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSelectCoreRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"com.justeat.mickeydb.MickeyLang.SelectExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSelectCore"


    // $ANTLR start "entryRuleSelectExpression"
    // InternalMickeyLang.g:2814:1: entryRuleSelectExpression returns [EObject current=null] : iv_ruleSelectExpression= ruleSelectExpression EOF ;
    public final EObject entryRuleSelectExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSelectExpression = null;


        try {
            // InternalMickeyLang.g:2814:57: (iv_ruleSelectExpression= ruleSelectExpression EOF )
            // InternalMickeyLang.g:2815:2: iv_ruleSelectExpression= ruleSelectExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSelectExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSelectExpression=ruleSelectExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSelectExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSelectExpression"


    // $ANTLR start "ruleSelectExpression"
    // InternalMickeyLang.g:2821:1: ruleSelectExpression returns [EObject current=null] : ( () otherlv_1= 'select' ( ( (lv_distinct_2_0= 'distinct' ) ) | ( (lv_all_3_0= 'all' ) ) )? ( ( (lv_allColumns_4_0= '*' ) ) | ( (lv_selectList_5_0= ruleSelectList ) ) ) (otherlv_6= 'from' ( (lv_source_7_0= ruleJoinSource ) ) )? (otherlv_8= 'where' ( (lv_where_9_0= ruleWhereExpressions ) ) )? (otherlv_10= 'group by' ( (lv_groupBy_11_0= ruleGroupByExpressions ) ) )? (otherlv_12= 'having' ( (lv_having_13_0= ruleHavingExpressions ) ) )? ) ;
    public final EObject ruleSelectExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_distinct_2_0=null;
        Token lv_all_3_0=null;
        Token lv_allColumns_4_0=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        EObject lv_selectList_5_0 = null;

        EObject lv_source_7_0 = null;

        EObject lv_where_9_0 = null;

        EObject lv_groupBy_11_0 = null;

        EObject lv_having_13_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:2827:2: ( ( () otherlv_1= 'select' ( ( (lv_distinct_2_0= 'distinct' ) ) | ( (lv_all_3_0= 'all' ) ) )? ( ( (lv_allColumns_4_0= '*' ) ) | ( (lv_selectList_5_0= ruleSelectList ) ) ) (otherlv_6= 'from' ( (lv_source_7_0= ruleJoinSource ) ) )? (otherlv_8= 'where' ( (lv_where_9_0= ruleWhereExpressions ) ) )? (otherlv_10= 'group by' ( (lv_groupBy_11_0= ruleGroupByExpressions ) ) )? (otherlv_12= 'having' ( (lv_having_13_0= ruleHavingExpressions ) ) )? ) )
            // InternalMickeyLang.g:2828:2: ( () otherlv_1= 'select' ( ( (lv_distinct_2_0= 'distinct' ) ) | ( (lv_all_3_0= 'all' ) ) )? ( ( (lv_allColumns_4_0= '*' ) ) | ( (lv_selectList_5_0= ruleSelectList ) ) ) (otherlv_6= 'from' ( (lv_source_7_0= ruleJoinSource ) ) )? (otherlv_8= 'where' ( (lv_where_9_0= ruleWhereExpressions ) ) )? (otherlv_10= 'group by' ( (lv_groupBy_11_0= ruleGroupByExpressions ) ) )? (otherlv_12= 'having' ( (lv_having_13_0= ruleHavingExpressions ) ) )? )
            {
            // InternalMickeyLang.g:2828:2: ( () otherlv_1= 'select' ( ( (lv_distinct_2_0= 'distinct' ) ) | ( (lv_all_3_0= 'all' ) ) )? ( ( (lv_allColumns_4_0= '*' ) ) | ( (lv_selectList_5_0= ruleSelectList ) ) ) (otherlv_6= 'from' ( (lv_source_7_0= ruleJoinSource ) ) )? (otherlv_8= 'where' ( (lv_where_9_0= ruleWhereExpressions ) ) )? (otherlv_10= 'group by' ( (lv_groupBy_11_0= ruleGroupByExpressions ) ) )? (otherlv_12= 'having' ( (lv_having_13_0= ruleHavingExpressions ) ) )? )
            // InternalMickeyLang.g:2829:3: () otherlv_1= 'select' ( ( (lv_distinct_2_0= 'distinct' ) ) | ( (lv_all_3_0= 'all' ) ) )? ( ( (lv_allColumns_4_0= '*' ) ) | ( (lv_selectList_5_0= ruleSelectList ) ) ) (otherlv_6= 'from' ( (lv_source_7_0= ruleJoinSource ) ) )? (otherlv_8= 'where' ( (lv_where_9_0= ruleWhereExpressions ) ) )? (otherlv_10= 'group by' ( (lv_groupBy_11_0= ruleGroupByExpressions ) ) )? (otherlv_12= 'having' ( (lv_having_13_0= ruleHavingExpressions ) ) )?
            {
            // InternalMickeyLang.g:2829:3: ()
            // InternalMickeyLang.g:2830:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getSelectExpressionAccess().getSelectExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,75,FOLLOW_53); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getSelectExpressionAccess().getSelectKeyword_1());
              		
            }
            // InternalMickeyLang.g:2840:3: ( ( (lv_distinct_2_0= 'distinct' ) ) | ( (lv_all_3_0= 'all' ) ) )?
            int alt52=3;
            int LA52_0 = input.LA(1);

            if ( (LA52_0==76) ) {
                alt52=1;
            }
            else if ( (LA52_0==77) ) {
                alt52=2;
            }
            switch (alt52) {
                case 1 :
                    // InternalMickeyLang.g:2841:4: ( (lv_distinct_2_0= 'distinct' ) )
                    {
                    // InternalMickeyLang.g:2841:4: ( (lv_distinct_2_0= 'distinct' ) )
                    // InternalMickeyLang.g:2842:5: (lv_distinct_2_0= 'distinct' )
                    {
                    // InternalMickeyLang.g:2842:5: (lv_distinct_2_0= 'distinct' )
                    // InternalMickeyLang.g:2843:6: lv_distinct_2_0= 'distinct'
                    {
                    lv_distinct_2_0=(Token)match(input,76,FOLLOW_53); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_distinct_2_0, grammarAccess.getSelectExpressionAccess().getDistinctDistinctKeyword_2_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSelectExpressionRule());
                      						}
                      						setWithLastConsumed(current, "distinct", true, "distinct");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:2856:4: ( (lv_all_3_0= 'all' ) )
                    {
                    // InternalMickeyLang.g:2856:4: ( (lv_all_3_0= 'all' ) )
                    // InternalMickeyLang.g:2857:5: (lv_all_3_0= 'all' )
                    {
                    // InternalMickeyLang.g:2857:5: (lv_all_3_0= 'all' )
                    // InternalMickeyLang.g:2858:6: lv_all_3_0= 'all'
                    {
                    lv_all_3_0=(Token)match(input,77,FOLLOW_53); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_all_3_0, grammarAccess.getSelectExpressionAccess().getAllAllKeyword_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSelectExpressionRule());
                      						}
                      						setWithLastConsumed(current, "all", true, "all");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:2871:3: ( ( (lv_allColumns_4_0= '*' ) ) | ( (lv_selectList_5_0= ruleSelectList ) ) )
            int alt53=2;
            int LA53_0 = input.LA(1);

            if ( (LA53_0==31) ) {
                alt53=1;
            }
            else if ( ((LA53_0>=RULE_ID && LA53_0<=RULE_NUMBER)||LA53_0==14||LA53_0==34||(LA53_0>=59 && LA53_0<=60)||(LA53_0>=62 && LA53_0<=64)||LA53_0==67||LA53_0==69||(LA53_0>=89 && LA53_0<=92)) ) {
                alt53=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 53, 0, input);

                throw nvae;
            }
            switch (alt53) {
                case 1 :
                    // InternalMickeyLang.g:2872:4: ( (lv_allColumns_4_0= '*' ) )
                    {
                    // InternalMickeyLang.g:2872:4: ( (lv_allColumns_4_0= '*' ) )
                    // InternalMickeyLang.g:2873:5: (lv_allColumns_4_0= '*' )
                    {
                    // InternalMickeyLang.g:2873:5: (lv_allColumns_4_0= '*' )
                    // InternalMickeyLang.g:2874:6: lv_allColumns_4_0= '*'
                    {
                    lv_allColumns_4_0=(Token)match(input,31,FOLLOW_54); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_allColumns_4_0, grammarAccess.getSelectExpressionAccess().getAllColumnsAsteriskKeyword_3_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSelectExpressionRule());
                      						}
                      						setWithLastConsumed(current, "allColumns", true, "*");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:2887:4: ( (lv_selectList_5_0= ruleSelectList ) )
                    {
                    // InternalMickeyLang.g:2887:4: ( (lv_selectList_5_0= ruleSelectList ) )
                    // InternalMickeyLang.g:2888:5: (lv_selectList_5_0= ruleSelectList )
                    {
                    // InternalMickeyLang.g:2888:5: (lv_selectList_5_0= ruleSelectList )
                    // InternalMickeyLang.g:2889:6: lv_selectList_5_0= ruleSelectList
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSelectExpressionAccess().getSelectListSelectListParserRuleCall_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_54);
                    lv_selectList_5_0=ruleSelectList();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSelectExpressionRule());
                      						}
                      						set(
                      							current,
                      							"selectList",
                      							lv_selectList_5_0,
                      							"com.justeat.mickeydb.MickeyLang.SelectList");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:2907:3: (otherlv_6= 'from' ( (lv_source_7_0= ruleJoinSource ) ) )?
            int alt54=2;
            int LA54_0 = input.LA(1);

            if ( (LA54_0==29) ) {
                alt54=1;
            }
            switch (alt54) {
                case 1 :
                    // InternalMickeyLang.g:2908:4: otherlv_6= 'from' ( (lv_source_7_0= ruleJoinSource ) )
                    {
                    otherlv_6=(Token)match(input,29,FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getSelectExpressionAccess().getFromKeyword_4_0());
                      			
                    }
                    // InternalMickeyLang.g:2912:4: ( (lv_source_7_0= ruleJoinSource ) )
                    // InternalMickeyLang.g:2913:5: (lv_source_7_0= ruleJoinSource )
                    {
                    // InternalMickeyLang.g:2913:5: (lv_source_7_0= ruleJoinSource )
                    // InternalMickeyLang.g:2914:6: lv_source_7_0= ruleJoinSource
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSelectExpressionAccess().getSourceJoinSourceParserRuleCall_4_1_0());
                      					
                    }
                    pushFollow(FOLLOW_56);
                    lv_source_7_0=ruleJoinSource();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSelectExpressionRule());
                      						}
                      						set(
                      							current,
                      							"source",
                      							lv_source_7_0,
                      							"com.justeat.mickeydb.MickeyLang.JoinSource");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:2932:3: (otherlv_8= 'where' ( (lv_where_9_0= ruleWhereExpressions ) ) )?
            int alt55=2;
            int LA55_0 = input.LA(1);

            if ( (LA55_0==78) ) {
                alt55=1;
            }
            switch (alt55) {
                case 1 :
                    // InternalMickeyLang.g:2933:4: otherlv_8= 'where' ( (lv_where_9_0= ruleWhereExpressions ) )
                    {
                    otherlv_8=(Token)match(input,78,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_8, grammarAccess.getSelectExpressionAccess().getWhereKeyword_5_0());
                      			
                    }
                    // InternalMickeyLang.g:2937:4: ( (lv_where_9_0= ruleWhereExpressions ) )
                    // InternalMickeyLang.g:2938:5: (lv_where_9_0= ruleWhereExpressions )
                    {
                    // InternalMickeyLang.g:2938:5: (lv_where_9_0= ruleWhereExpressions )
                    // InternalMickeyLang.g:2939:6: lv_where_9_0= ruleWhereExpressions
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSelectExpressionAccess().getWhereWhereExpressionsParserRuleCall_5_1_0());
                      					
                    }
                    pushFollow(FOLLOW_57);
                    lv_where_9_0=ruleWhereExpressions();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSelectExpressionRule());
                      						}
                      						set(
                      							current,
                      							"where",
                      							lv_where_9_0,
                      							"com.justeat.mickeydb.MickeyLang.WhereExpressions");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:2957:3: (otherlv_10= 'group by' ( (lv_groupBy_11_0= ruleGroupByExpressions ) ) )?
            int alt56=2;
            int LA56_0 = input.LA(1);

            if ( (LA56_0==79) ) {
                alt56=1;
            }
            switch (alt56) {
                case 1 :
                    // InternalMickeyLang.g:2958:4: otherlv_10= 'group by' ( (lv_groupBy_11_0= ruleGroupByExpressions ) )
                    {
                    otherlv_10=(Token)match(input,79,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_10, grammarAccess.getSelectExpressionAccess().getGroupByKeyword_6_0());
                      			
                    }
                    // InternalMickeyLang.g:2962:4: ( (lv_groupBy_11_0= ruleGroupByExpressions ) )
                    // InternalMickeyLang.g:2963:5: (lv_groupBy_11_0= ruleGroupByExpressions )
                    {
                    // InternalMickeyLang.g:2963:5: (lv_groupBy_11_0= ruleGroupByExpressions )
                    // InternalMickeyLang.g:2964:6: lv_groupBy_11_0= ruleGroupByExpressions
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSelectExpressionAccess().getGroupByGroupByExpressionsParserRuleCall_6_1_0());
                      					
                    }
                    pushFollow(FOLLOW_58);
                    lv_groupBy_11_0=ruleGroupByExpressions();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSelectExpressionRule());
                      						}
                      						set(
                      							current,
                      							"groupBy",
                      							lv_groupBy_11_0,
                      							"com.justeat.mickeydb.MickeyLang.GroupByExpressions");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:2982:3: (otherlv_12= 'having' ( (lv_having_13_0= ruleHavingExpressions ) ) )?
            int alt57=2;
            int LA57_0 = input.LA(1);

            if ( (LA57_0==80) ) {
                alt57=1;
            }
            switch (alt57) {
                case 1 :
                    // InternalMickeyLang.g:2983:4: otherlv_12= 'having' ( (lv_having_13_0= ruleHavingExpressions ) )
                    {
                    otherlv_12=(Token)match(input,80,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_12, grammarAccess.getSelectExpressionAccess().getHavingKeyword_7_0());
                      			
                    }
                    // InternalMickeyLang.g:2987:4: ( (lv_having_13_0= ruleHavingExpressions ) )
                    // InternalMickeyLang.g:2988:5: (lv_having_13_0= ruleHavingExpressions )
                    {
                    // InternalMickeyLang.g:2988:5: (lv_having_13_0= ruleHavingExpressions )
                    // InternalMickeyLang.g:2989:6: lv_having_13_0= ruleHavingExpressions
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSelectExpressionAccess().getHavingHavingExpressionsParserRuleCall_7_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_having_13_0=ruleHavingExpressions();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSelectExpressionRule());
                      						}
                      						set(
                      							current,
                      							"having",
                      							lv_having_13_0,
                      							"com.justeat.mickeydb.MickeyLang.HavingExpressions");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSelectExpression"


    // $ANTLR start "entryRuleSelectList"
    // InternalMickeyLang.g:3011:1: entryRuleSelectList returns [EObject current=null] : iv_ruleSelectList= ruleSelectList EOF ;
    public final EObject entryRuleSelectList() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSelectList = null;


        try {
            // InternalMickeyLang.g:3011:51: (iv_ruleSelectList= ruleSelectList EOF )
            // InternalMickeyLang.g:3012:2: iv_ruleSelectList= ruleSelectList EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSelectListRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSelectList=ruleSelectList();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSelectList; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSelectList"


    // $ANTLR start "ruleSelectList"
    // InternalMickeyLang.g:3018:1: ruleSelectList returns [EObject current=null] : ( ( (lv_resultColumns_0_0= ruleResultColumn ) ) (otherlv_1= ',' ( (lv_resultColumns_2_0= ruleResultColumn ) ) )* ) ;
    public final EObject ruleSelectList() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_resultColumns_0_0 = null;

        EObject lv_resultColumns_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3024:2: ( ( ( (lv_resultColumns_0_0= ruleResultColumn ) ) (otherlv_1= ',' ( (lv_resultColumns_2_0= ruleResultColumn ) ) )* ) )
            // InternalMickeyLang.g:3025:2: ( ( (lv_resultColumns_0_0= ruleResultColumn ) ) (otherlv_1= ',' ( (lv_resultColumns_2_0= ruleResultColumn ) ) )* )
            {
            // InternalMickeyLang.g:3025:2: ( ( (lv_resultColumns_0_0= ruleResultColumn ) ) (otherlv_1= ',' ( (lv_resultColumns_2_0= ruleResultColumn ) ) )* )
            // InternalMickeyLang.g:3026:3: ( (lv_resultColumns_0_0= ruleResultColumn ) ) (otherlv_1= ',' ( (lv_resultColumns_2_0= ruleResultColumn ) ) )*
            {
            // InternalMickeyLang.g:3026:3: ( (lv_resultColumns_0_0= ruleResultColumn ) )
            // InternalMickeyLang.g:3027:4: (lv_resultColumns_0_0= ruleResultColumn )
            {
            // InternalMickeyLang.g:3027:4: (lv_resultColumns_0_0= ruleResultColumn )
            // InternalMickeyLang.g:3028:5: lv_resultColumns_0_0= ruleResultColumn
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getSelectListAccess().getResultColumnsResultColumnParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_51);
            lv_resultColumns_0_0=ruleResultColumn();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getSelectListRule());
              					}
              					add(
              						current,
              						"resultColumns",
              						lv_resultColumns_0_0,
              						"com.justeat.mickeydb.MickeyLang.ResultColumn");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:3045:3: (otherlv_1= ',' ( (lv_resultColumns_2_0= ruleResultColumn ) ) )*
            loop58:
            do {
                int alt58=2;
                int LA58_0 = input.LA(1);

                if ( (LA58_0==15) ) {
                    alt58=1;
                }


                switch (alt58) {
            	case 1 :
            	    // InternalMickeyLang.g:3046:4: otherlv_1= ',' ( (lv_resultColumns_2_0= ruleResultColumn ) )
            	    {
            	    otherlv_1=(Token)match(input,15,FOLLOW_53); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_1, grammarAccess.getSelectListAccess().getCommaKeyword_1_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:3050:4: ( (lv_resultColumns_2_0= ruleResultColumn ) )
            	    // InternalMickeyLang.g:3051:5: (lv_resultColumns_2_0= ruleResultColumn )
            	    {
            	    // InternalMickeyLang.g:3051:5: (lv_resultColumns_2_0= ruleResultColumn )
            	    // InternalMickeyLang.g:3052:6: lv_resultColumns_2_0= ruleResultColumn
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSelectListAccess().getResultColumnsResultColumnParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_51);
            	    lv_resultColumns_2_0=ruleResultColumn();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSelectListRule());
            	      						}
            	      						add(
            	      							current,
            	      							"resultColumns",
            	      							lv_resultColumns_2_0,
            	      							"com.justeat.mickeydb.MickeyLang.ResultColumn");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSelectList"


    // $ANTLR start "entryRuleWhereExpressions"
    // InternalMickeyLang.g:3074:1: entryRuleWhereExpressions returns [EObject current=null] : iv_ruleWhereExpressions= ruleWhereExpressions EOF ;
    public final EObject entryRuleWhereExpressions() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleWhereExpressions = null;


        try {
            // InternalMickeyLang.g:3074:57: (iv_ruleWhereExpressions= ruleWhereExpressions EOF )
            // InternalMickeyLang.g:3075:2: iv_ruleWhereExpressions= ruleWhereExpressions EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getWhereExpressionsRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleWhereExpressions=ruleWhereExpressions();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleWhereExpressions; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleWhereExpressions"


    // $ANTLR start "ruleWhereExpressions"
    // InternalMickeyLang.g:3081:1: ruleWhereExpressions returns [EObject current=null] : ( (lv_expression_0_0= ruleSqlExpression ) ) ;
    public final EObject ruleWhereExpressions() throws RecognitionException {
        EObject current = null;

        EObject lv_expression_0_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3087:2: ( ( (lv_expression_0_0= ruleSqlExpression ) ) )
            // InternalMickeyLang.g:3088:2: ( (lv_expression_0_0= ruleSqlExpression ) )
            {
            // InternalMickeyLang.g:3088:2: ( (lv_expression_0_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:3089:3: (lv_expression_0_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:3089:3: (lv_expression_0_0= ruleSqlExpression )
            // InternalMickeyLang.g:3090:4: lv_expression_0_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              				newCompositeNode(grammarAccess.getWhereExpressionsAccess().getExpressionSqlExpressionParserRuleCall_0());
              			
            }
            pushFollow(FOLLOW_2);
            lv_expression_0_0=ruleSqlExpression();

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

              				if (current==null) {
              					current = createModelElementForParent(grammarAccess.getWhereExpressionsRule());
              				}
              				set(
              					current,
              					"expression",
              					lv_expression_0_0,
              					"com.justeat.mickeydb.MickeyLang.SqlExpression");
              				afterParserOrEnumRuleCall();
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleWhereExpressions"


    // $ANTLR start "entryRuleGroupByExpressions"
    // InternalMickeyLang.g:3110:1: entryRuleGroupByExpressions returns [EObject current=null] : iv_ruleGroupByExpressions= ruleGroupByExpressions EOF ;
    public final EObject entryRuleGroupByExpressions() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGroupByExpressions = null;


        try {
            // InternalMickeyLang.g:3110:59: (iv_ruleGroupByExpressions= ruleGroupByExpressions EOF )
            // InternalMickeyLang.g:3111:2: iv_ruleGroupByExpressions= ruleGroupByExpressions EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getGroupByExpressionsRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleGroupByExpressions=ruleGroupByExpressions();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleGroupByExpressions; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGroupByExpressions"


    // $ANTLR start "ruleGroupByExpressions"
    // InternalMickeyLang.g:3117:1: ruleGroupByExpressions returns [EObject current=null] : ( ( (lv_groupByExpressions_0_0= ruleSqlExpression ) ) (otherlv_1= ',' ( (lv_groupByExpressions_2_0= ruleSqlExpression ) ) )* ) ;
    public final EObject ruleGroupByExpressions() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_groupByExpressions_0_0 = null;

        EObject lv_groupByExpressions_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3123:2: ( ( ( (lv_groupByExpressions_0_0= ruleSqlExpression ) ) (otherlv_1= ',' ( (lv_groupByExpressions_2_0= ruleSqlExpression ) ) )* ) )
            // InternalMickeyLang.g:3124:2: ( ( (lv_groupByExpressions_0_0= ruleSqlExpression ) ) (otherlv_1= ',' ( (lv_groupByExpressions_2_0= ruleSqlExpression ) ) )* )
            {
            // InternalMickeyLang.g:3124:2: ( ( (lv_groupByExpressions_0_0= ruleSqlExpression ) ) (otherlv_1= ',' ( (lv_groupByExpressions_2_0= ruleSqlExpression ) ) )* )
            // InternalMickeyLang.g:3125:3: ( (lv_groupByExpressions_0_0= ruleSqlExpression ) ) (otherlv_1= ',' ( (lv_groupByExpressions_2_0= ruleSqlExpression ) ) )*
            {
            // InternalMickeyLang.g:3125:3: ( (lv_groupByExpressions_0_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:3126:4: (lv_groupByExpressions_0_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:3126:4: (lv_groupByExpressions_0_0= ruleSqlExpression )
            // InternalMickeyLang.g:3127:5: lv_groupByExpressions_0_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getGroupByExpressionsAccess().getGroupByExpressionsSqlExpressionParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_51);
            lv_groupByExpressions_0_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getGroupByExpressionsRule());
              					}
              					add(
              						current,
              						"groupByExpressions",
              						lv_groupByExpressions_0_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:3144:3: (otherlv_1= ',' ( (lv_groupByExpressions_2_0= ruleSqlExpression ) ) )*
            loop59:
            do {
                int alt59=2;
                int LA59_0 = input.LA(1);

                if ( (LA59_0==15) ) {
                    alt59=1;
                }


                switch (alt59) {
            	case 1 :
            	    // InternalMickeyLang.g:3145:4: otherlv_1= ',' ( (lv_groupByExpressions_2_0= ruleSqlExpression ) )
            	    {
            	    otherlv_1=(Token)match(input,15,FOLLOW_27); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_1, grammarAccess.getGroupByExpressionsAccess().getCommaKeyword_1_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:3149:4: ( (lv_groupByExpressions_2_0= ruleSqlExpression ) )
            	    // InternalMickeyLang.g:3150:5: (lv_groupByExpressions_2_0= ruleSqlExpression )
            	    {
            	    // InternalMickeyLang.g:3150:5: (lv_groupByExpressions_2_0= ruleSqlExpression )
            	    // InternalMickeyLang.g:3151:6: lv_groupByExpressions_2_0= ruleSqlExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getGroupByExpressionsAccess().getGroupByExpressionsSqlExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_51);
            	    lv_groupByExpressions_2_0=ruleSqlExpression();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getGroupByExpressionsRule());
            	      						}
            	      						add(
            	      							current,
            	      							"groupByExpressions",
            	      							lv_groupByExpressions_2_0,
            	      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGroupByExpressions"


    // $ANTLR start "entryRuleHavingExpressions"
    // InternalMickeyLang.g:3173:1: entryRuleHavingExpressions returns [EObject current=null] : iv_ruleHavingExpressions= ruleHavingExpressions EOF ;
    public final EObject entryRuleHavingExpressions() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleHavingExpressions = null;


        try {
            // InternalMickeyLang.g:3173:58: (iv_ruleHavingExpressions= ruleHavingExpressions EOF )
            // InternalMickeyLang.g:3174:2: iv_ruleHavingExpressions= ruleHavingExpressions EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getHavingExpressionsRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleHavingExpressions=ruleHavingExpressions();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleHavingExpressions; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleHavingExpressions"


    // $ANTLR start "ruleHavingExpressions"
    // InternalMickeyLang.g:3180:1: ruleHavingExpressions returns [EObject current=null] : ( (lv_expression_0_0= ruleSqlExpression ) ) ;
    public final EObject ruleHavingExpressions() throws RecognitionException {
        EObject current = null;

        EObject lv_expression_0_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3186:2: ( ( (lv_expression_0_0= ruleSqlExpression ) ) )
            // InternalMickeyLang.g:3187:2: ( (lv_expression_0_0= ruleSqlExpression ) )
            {
            // InternalMickeyLang.g:3187:2: ( (lv_expression_0_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:3188:3: (lv_expression_0_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:3188:3: (lv_expression_0_0= ruleSqlExpression )
            // InternalMickeyLang.g:3189:4: lv_expression_0_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              				newCompositeNode(grammarAccess.getHavingExpressionsAccess().getExpressionSqlExpressionParserRuleCall_0());
              			
            }
            pushFollow(FOLLOW_2);
            lv_expression_0_0=ruleSqlExpression();

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

              				if (current==null) {
              					current = createModelElementForParent(grammarAccess.getHavingExpressionsRule());
              				}
              				set(
              					current,
              					"expression",
              					lv_expression_0_0,
              					"com.justeat.mickeydb.MickeyLang.SqlExpression");
              				afterParserOrEnumRuleCall();
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleHavingExpressions"


    // $ANTLR start "entryRuleOrderingTerm"
    // InternalMickeyLang.g:3209:1: entryRuleOrderingTerm returns [EObject current=null] : iv_ruleOrderingTerm= ruleOrderingTerm EOF ;
    public final EObject entryRuleOrderingTerm() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOrderingTerm = null;


        try {
            // InternalMickeyLang.g:3209:53: (iv_ruleOrderingTerm= ruleOrderingTerm EOF )
            // InternalMickeyLang.g:3210:2: iv_ruleOrderingTerm= ruleOrderingTerm EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOrderingTermRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOrderingTerm=ruleOrderingTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOrderingTerm; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOrderingTerm"


    // $ANTLR start "ruleOrderingTerm"
    // InternalMickeyLang.g:3216:1: ruleOrderingTerm returns [EObject current=null] : ( ( (lv_expression_0_0= ruleSqlExpression ) ) ( ( (lv_asc_1_0= 'asc' ) ) | ( (lv_desc_2_0= 'desc' ) ) )? ) ;
    public final EObject ruleOrderingTerm() throws RecognitionException {
        EObject current = null;

        Token lv_asc_1_0=null;
        Token lv_desc_2_0=null;
        EObject lv_expression_0_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3222:2: ( ( ( (lv_expression_0_0= ruleSqlExpression ) ) ( ( (lv_asc_1_0= 'asc' ) ) | ( (lv_desc_2_0= 'desc' ) ) )? ) )
            // InternalMickeyLang.g:3223:2: ( ( (lv_expression_0_0= ruleSqlExpression ) ) ( ( (lv_asc_1_0= 'asc' ) ) | ( (lv_desc_2_0= 'desc' ) ) )? )
            {
            // InternalMickeyLang.g:3223:2: ( ( (lv_expression_0_0= ruleSqlExpression ) ) ( ( (lv_asc_1_0= 'asc' ) ) | ( (lv_desc_2_0= 'desc' ) ) )? )
            // InternalMickeyLang.g:3224:3: ( (lv_expression_0_0= ruleSqlExpression ) ) ( ( (lv_asc_1_0= 'asc' ) ) | ( (lv_desc_2_0= 'desc' ) ) )?
            {
            // InternalMickeyLang.g:3224:3: ( (lv_expression_0_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:3225:4: (lv_expression_0_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:3225:4: (lv_expression_0_0= ruleSqlExpression )
            // InternalMickeyLang.g:3226:5: lv_expression_0_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getOrderingTermAccess().getExpressionSqlExpressionParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_59);
            lv_expression_0_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getOrderingTermRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_0_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:3243:3: ( ( (lv_asc_1_0= 'asc' ) ) | ( (lv_desc_2_0= 'desc' ) ) )?
            int alt60=3;
            int LA60_0 = input.LA(1);

            if ( (LA60_0==81) ) {
                alt60=1;
            }
            else if ( (LA60_0==82) ) {
                alt60=2;
            }
            switch (alt60) {
                case 1 :
                    // InternalMickeyLang.g:3244:4: ( (lv_asc_1_0= 'asc' ) )
                    {
                    // InternalMickeyLang.g:3244:4: ( (lv_asc_1_0= 'asc' ) )
                    // InternalMickeyLang.g:3245:5: (lv_asc_1_0= 'asc' )
                    {
                    // InternalMickeyLang.g:3245:5: (lv_asc_1_0= 'asc' )
                    // InternalMickeyLang.g:3246:6: lv_asc_1_0= 'asc'
                    {
                    lv_asc_1_0=(Token)match(input,81,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_asc_1_0, grammarAccess.getOrderingTermAccess().getAscAscKeyword_1_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getOrderingTermRule());
                      						}
                      						setWithLastConsumed(current, "asc", true, "asc");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:3259:4: ( (lv_desc_2_0= 'desc' ) )
                    {
                    // InternalMickeyLang.g:3259:4: ( (lv_desc_2_0= 'desc' ) )
                    // InternalMickeyLang.g:3260:5: (lv_desc_2_0= 'desc' )
                    {
                    // InternalMickeyLang.g:3260:5: (lv_desc_2_0= 'desc' )
                    // InternalMickeyLang.g:3261:6: lv_desc_2_0= 'desc'
                    {
                    lv_desc_2_0=(Token)match(input,82,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_desc_2_0, grammarAccess.getOrderingTermAccess().getDescDescKeyword_1_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getOrderingTermRule());
                      						}
                      						setWithLastConsumed(current, "desc", true, "desc");
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOrderingTerm"


    // $ANTLR start "entryRuleJoinSource"
    // InternalMickeyLang.g:3278:1: entryRuleJoinSource returns [EObject current=null] : iv_ruleJoinSource= ruleJoinSource EOF ;
    public final EObject entryRuleJoinSource() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJoinSource = null;


        try {
            // InternalMickeyLang.g:3278:51: (iv_ruleJoinSource= ruleJoinSource EOF )
            // InternalMickeyLang.g:3279:2: iv_ruleJoinSource= ruleJoinSource EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJoinSourceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJoinSource=ruleJoinSource();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJoinSource; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJoinSource"


    // $ANTLR start "ruleJoinSource"
    // InternalMickeyLang.g:3285:1: ruleJoinSource returns [EObject current=null] : ( ( (lv_source_0_0= ruleSingleSource ) ) ( (lv_joinStatements_1_0= ruleJoinStatement ) )* ) ;
    public final EObject ruleJoinSource() throws RecognitionException {
        EObject current = null;

        EObject lv_source_0_0 = null;

        EObject lv_joinStatements_1_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3291:2: ( ( ( (lv_source_0_0= ruleSingleSource ) ) ( (lv_joinStatements_1_0= ruleJoinStatement ) )* ) )
            // InternalMickeyLang.g:3292:2: ( ( (lv_source_0_0= ruleSingleSource ) ) ( (lv_joinStatements_1_0= ruleJoinStatement ) )* )
            {
            // InternalMickeyLang.g:3292:2: ( ( (lv_source_0_0= ruleSingleSource ) ) ( (lv_joinStatements_1_0= ruleJoinStatement ) )* )
            // InternalMickeyLang.g:3293:3: ( (lv_source_0_0= ruleSingleSource ) ) ( (lv_joinStatements_1_0= ruleJoinStatement ) )*
            {
            // InternalMickeyLang.g:3293:3: ( (lv_source_0_0= ruleSingleSource ) )
            // InternalMickeyLang.g:3294:4: (lv_source_0_0= ruleSingleSource )
            {
            // InternalMickeyLang.g:3294:4: (lv_source_0_0= ruleSingleSource )
            // InternalMickeyLang.g:3295:5: lv_source_0_0= ruleSingleSource
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJoinSourceAccess().getSourceSingleSourceParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_60);
            lv_source_0_0=ruleSingleSource();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJoinSourceRule());
              					}
              					set(
              						current,
              						"source",
              						lv_source_0_0,
              						"com.justeat.mickeydb.MickeyLang.SingleSource");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:3312:3: ( (lv_joinStatements_1_0= ruleJoinStatement ) )*
            loop61:
            do {
                int alt61=2;
                int LA61_0 = input.LA(1);

                if ( ((LA61_0>=83 && LA61_0<=84)||(LA61_0>=86 && LA61_0<=88)) ) {
                    alt61=1;
                }


                switch (alt61) {
            	case 1 :
            	    // InternalMickeyLang.g:3313:4: (lv_joinStatements_1_0= ruleJoinStatement )
            	    {
            	    // InternalMickeyLang.g:3313:4: (lv_joinStatements_1_0= ruleJoinStatement )
            	    // InternalMickeyLang.g:3314:5: lv_joinStatements_1_0= ruleJoinStatement
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getJoinSourceAccess().getJoinStatementsJoinStatementParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_60);
            	    lv_joinStatements_1_0=ruleJoinStatement();

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

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getJoinSourceRule());
            	      					}
            	      					add(
            	      						current,
            	      						"joinStatements",
            	      						lv_joinStatements_1_0,
            	      						"com.justeat.mickeydb.MickeyLang.JoinStatement");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJoinSource"


    // $ANTLR start "entryRuleSingleSource"
    // InternalMickeyLang.g:3335:1: entryRuleSingleSource returns [EObject current=null] : iv_ruleSingleSource= ruleSingleSource EOF ;
    public final EObject entryRuleSingleSource() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSingleSource = null;


        try {
            // InternalMickeyLang.g:3335:53: (iv_ruleSingleSource= ruleSingleSource EOF )
            // InternalMickeyLang.g:3336:2: iv_ruleSingleSource= ruleSingleSource EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSingleSourceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSingleSource=ruleSingleSource();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSingleSource; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSingleSource"


    // $ANTLR start "ruleSingleSource"
    // InternalMickeyLang.g:3342:1: ruleSingleSource returns [EObject current=null] : (this_SingleSourceTable_0= ruleSingleSourceTable | this_SingleSourceSelectStatement_1= ruleSingleSourceSelectStatement | this_SingleSourceJoin_2= ruleSingleSourceJoin ) ;
    public final EObject ruleSingleSource() throws RecognitionException {
        EObject current = null;

        EObject this_SingleSourceTable_0 = null;

        EObject this_SingleSourceSelectStatement_1 = null;

        EObject this_SingleSourceJoin_2 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3348:2: ( (this_SingleSourceTable_0= ruleSingleSourceTable | this_SingleSourceSelectStatement_1= ruleSingleSourceSelectStatement | this_SingleSourceJoin_2= ruleSingleSourceJoin ) )
            // InternalMickeyLang.g:3349:2: (this_SingleSourceTable_0= ruleSingleSourceTable | this_SingleSourceSelectStatement_1= ruleSingleSourceSelectStatement | this_SingleSourceJoin_2= ruleSingleSourceJoin )
            {
            // InternalMickeyLang.g:3349:2: (this_SingleSourceTable_0= ruleSingleSourceTable | this_SingleSourceSelectStatement_1= ruleSingleSourceSelectStatement | this_SingleSourceJoin_2= ruleSingleSourceJoin )
            int alt62=3;
            int LA62_0 = input.LA(1);

            if ( (LA62_0==RULE_ID) ) {
                alt62=1;
            }
            else if ( (LA62_0==14) ) {
                int LA62_2 = input.LA(2);

                if ( (LA62_2==75) ) {
                    alt62=2;
                }
                else if ( (LA62_2==RULE_ID||LA62_2==14) ) {
                    alt62=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 62, 2, input);

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

                throw nvae;
            }
            switch (alt62) {
                case 1 :
                    // InternalMickeyLang.g:3350:3: this_SingleSourceTable_0= ruleSingleSourceTable
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getSingleSourceAccess().getSingleSourceTableParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SingleSourceTable_0=ruleSingleSourceTable();

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

                      			current = this_SingleSourceTable_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:3359:3: this_SingleSourceSelectStatement_1= ruleSingleSourceSelectStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getSingleSourceAccess().getSingleSourceSelectStatementParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SingleSourceSelectStatement_1=ruleSingleSourceSelectStatement();

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

                      			current = this_SingleSourceSelectStatement_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:3368:3: this_SingleSourceJoin_2= ruleSingleSourceJoin
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getSingleSourceAccess().getSingleSourceJoinParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SingleSourceJoin_2=ruleSingleSourceJoin();

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

                      			current = this_SingleSourceJoin_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSingleSource"


    // $ANTLR start "entryRuleSingleSourceTable"
    // InternalMickeyLang.g:3380:1: entryRuleSingleSourceTable returns [EObject current=null] : iv_ruleSingleSourceTable= ruleSingleSourceTable EOF ;
    public final EObject entryRuleSingleSourceTable() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSingleSourceTable = null;


        try {
            // InternalMickeyLang.g:3380:58: (iv_ruleSingleSourceTable= ruleSingleSourceTable EOF )
            // InternalMickeyLang.g:3381:2: iv_ruleSingleSourceTable= ruleSingleSourceTable EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSingleSourceTableRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSingleSourceTable=ruleSingleSourceTable();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSingleSourceTable; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSingleSourceTable"


    // $ANTLR start "ruleSingleSourceTable"
    // InternalMickeyLang.g:3387:1: ruleSingleSourceTable returns [EObject current=null] : ( () ( ( ruleQualifiedName ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? ) ;
    public final EObject ruleSingleSourceTable() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token lv_name_3_0=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:3393:2: ( ( () ( ( ruleQualifiedName ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? ) )
            // InternalMickeyLang.g:3394:2: ( () ( ( ruleQualifiedName ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? )
            {
            // InternalMickeyLang.g:3394:2: ( () ( ( ruleQualifiedName ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? )
            // InternalMickeyLang.g:3395:3: () ( ( ruleQualifiedName ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )?
            {
            // InternalMickeyLang.g:3395:3: ()
            // InternalMickeyLang.g:3396:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getSingleSourceTableAccess().getSingleSourceTableAction_0(),
              					current);
              			
            }

            }

            // InternalMickeyLang.g:3402:3: ( ( ruleQualifiedName ) )
            // InternalMickeyLang.g:3403:4: ( ruleQualifiedName )
            {
            // InternalMickeyLang.g:3403:4: ( ruleQualifiedName )
            // InternalMickeyLang.g:3404:5: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSingleSourceTableRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getSingleSourceTableAccess().getTableReferenceTableDefinitionCrossReference_1_0());
              				
            }
            pushFollow(FOLLOW_61);
            ruleQualifiedName();

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

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:3418:3: (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )?
            int alt63=2;
            int LA63_0 = input.LA(1);

            if ( (LA63_0==68) ) {
                alt63=1;
            }
            switch (alt63) {
                case 1 :
                    // InternalMickeyLang.g:3419:4: otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) )
                    {
                    otherlv_2=(Token)match(input,68,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getSingleSourceTableAccess().getAsKeyword_2_0());
                      			
                    }
                    // InternalMickeyLang.g:3423:4: ( (lv_name_3_0= RULE_ID ) )
                    // InternalMickeyLang.g:3424:5: (lv_name_3_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:3424:5: (lv_name_3_0= RULE_ID )
                    // InternalMickeyLang.g:3425:6: lv_name_3_0= RULE_ID
                    {
                    lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_3_0, grammarAccess.getSingleSourceTableAccess().getNameIDTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSingleSourceTableRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_3_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSingleSourceTable"


    // $ANTLR start "entryRuleSingleSourceSelectStatement"
    // InternalMickeyLang.g:3446:1: entryRuleSingleSourceSelectStatement returns [EObject current=null] : iv_ruleSingleSourceSelectStatement= ruleSingleSourceSelectStatement EOF ;
    public final EObject entryRuleSingleSourceSelectStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSingleSourceSelectStatement = null;


        try {
            // InternalMickeyLang.g:3446:68: (iv_ruleSingleSourceSelectStatement= ruleSingleSourceSelectStatement EOF )
            // InternalMickeyLang.g:3447:2: iv_ruleSingleSourceSelectStatement= ruleSingleSourceSelectStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSingleSourceSelectStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSingleSourceSelectStatement=ruleSingleSourceSelectStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSingleSourceSelectStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSingleSourceSelectStatement"


    // $ANTLR start "ruleSingleSourceSelectStatement"
    // InternalMickeyLang.g:3453:1: ruleSingleSourceSelectStatement returns [EObject current=null] : ( () otherlv_1= '(' ( (lv_selectStatement_2_0= ruleSelectStatement ) ) otherlv_3= ')' (otherlv_4= 'as' ( (lv_name_5_0= RULE_ID ) ) )? ) ;
    public final EObject ruleSingleSourceSelectStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_name_5_0=null;
        EObject lv_selectStatement_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3459:2: ( ( () otherlv_1= '(' ( (lv_selectStatement_2_0= ruleSelectStatement ) ) otherlv_3= ')' (otherlv_4= 'as' ( (lv_name_5_0= RULE_ID ) ) )? ) )
            // InternalMickeyLang.g:3460:2: ( () otherlv_1= '(' ( (lv_selectStatement_2_0= ruleSelectStatement ) ) otherlv_3= ')' (otherlv_4= 'as' ( (lv_name_5_0= RULE_ID ) ) )? )
            {
            // InternalMickeyLang.g:3460:2: ( () otherlv_1= '(' ( (lv_selectStatement_2_0= ruleSelectStatement ) ) otherlv_3= ')' (otherlv_4= 'as' ( (lv_name_5_0= RULE_ID ) ) )? )
            // InternalMickeyLang.g:3461:3: () otherlv_1= '(' ( (lv_selectStatement_2_0= ruleSelectStatement ) ) otherlv_3= ')' (otherlv_4= 'as' ( (lv_name_5_0= RULE_ID ) ) )?
            {
            // InternalMickeyLang.g:3461:3: ()
            // InternalMickeyLang.g:3462:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getSingleSourceSelectStatementAccess().getSingleSourceSelectStatementAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,14,FOLLOW_40); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getSingleSourceSelectStatementAccess().getLeftParenthesisKeyword_1());
              		
            }
            // InternalMickeyLang.g:3472:3: ( (lv_selectStatement_2_0= ruleSelectStatement ) )
            // InternalMickeyLang.g:3473:4: (lv_selectStatement_2_0= ruleSelectStatement )
            {
            // InternalMickeyLang.g:3473:4: (lv_selectStatement_2_0= ruleSelectStatement )
            // InternalMickeyLang.g:3474:5: lv_selectStatement_2_0= ruleSelectStatement
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getSingleSourceSelectStatementAccess().getSelectStatementSelectStatementParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_38);
            lv_selectStatement_2_0=ruleSelectStatement();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getSingleSourceSelectStatementRule());
              					}
              					set(
              						current,
              						"selectStatement",
              						lv_selectStatement_2_0,
              						"com.justeat.mickeydb.MickeyLang.SelectStatement");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_3=(Token)match(input,16,FOLLOW_61); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getSingleSourceSelectStatementAccess().getRightParenthesisKeyword_3());
              		
            }
            // InternalMickeyLang.g:3495:3: (otherlv_4= 'as' ( (lv_name_5_0= RULE_ID ) ) )?
            int alt64=2;
            int LA64_0 = input.LA(1);

            if ( (LA64_0==68) ) {
                alt64=1;
            }
            switch (alt64) {
                case 1 :
                    // InternalMickeyLang.g:3496:4: otherlv_4= 'as' ( (lv_name_5_0= RULE_ID ) )
                    {
                    otherlv_4=(Token)match(input,68,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getSingleSourceSelectStatementAccess().getAsKeyword_4_0());
                      			
                    }
                    // InternalMickeyLang.g:3500:4: ( (lv_name_5_0= RULE_ID ) )
                    // InternalMickeyLang.g:3501:5: (lv_name_5_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:3501:5: (lv_name_5_0= RULE_ID )
                    // InternalMickeyLang.g:3502:6: lv_name_5_0= RULE_ID
                    {
                    lv_name_5_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_5_0, grammarAccess.getSingleSourceSelectStatementAccess().getNameIDTerminalRuleCall_4_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSingleSourceSelectStatementRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_5_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSingleSourceSelectStatement"


    // $ANTLR start "entryRuleSingleSourceJoin"
    // InternalMickeyLang.g:3523:1: entryRuleSingleSourceJoin returns [EObject current=null] : iv_ruleSingleSourceJoin= ruleSingleSourceJoin EOF ;
    public final EObject entryRuleSingleSourceJoin() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSingleSourceJoin = null;


        try {
            // InternalMickeyLang.g:3523:57: (iv_ruleSingleSourceJoin= ruleSingleSourceJoin EOF )
            // InternalMickeyLang.g:3524:2: iv_ruleSingleSourceJoin= ruleSingleSourceJoin EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSingleSourceJoinRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSingleSourceJoin=ruleSingleSourceJoin();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSingleSourceJoin; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSingleSourceJoin"


    // $ANTLR start "ruleSingleSourceJoin"
    // InternalMickeyLang.g:3530:1: ruleSingleSourceJoin returns [EObject current=null] : (otherlv_0= '(' ( (lv_joinSource_1_0= ruleJoinSource ) ) otherlv_2= ')' ) ;
    public final EObject ruleSingleSourceJoin() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject lv_joinSource_1_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3536:2: ( (otherlv_0= '(' ( (lv_joinSource_1_0= ruleJoinSource ) ) otherlv_2= ')' ) )
            // InternalMickeyLang.g:3537:2: (otherlv_0= '(' ( (lv_joinSource_1_0= ruleJoinSource ) ) otherlv_2= ')' )
            {
            // InternalMickeyLang.g:3537:2: (otherlv_0= '(' ( (lv_joinSource_1_0= ruleJoinSource ) ) otherlv_2= ')' )
            // InternalMickeyLang.g:3538:3: otherlv_0= '(' ( (lv_joinSource_1_0= ruleJoinSource ) ) otherlv_2= ')'
            {
            otherlv_0=(Token)match(input,14,FOLLOW_55); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getSingleSourceJoinAccess().getLeftParenthesisKeyword_0());
              		
            }
            // InternalMickeyLang.g:3542:3: ( (lv_joinSource_1_0= ruleJoinSource ) )
            // InternalMickeyLang.g:3543:4: (lv_joinSource_1_0= ruleJoinSource )
            {
            // InternalMickeyLang.g:3543:4: (lv_joinSource_1_0= ruleJoinSource )
            // InternalMickeyLang.g:3544:5: lv_joinSource_1_0= ruleJoinSource
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getSingleSourceJoinAccess().getJoinSourceJoinSourceParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_38);
            lv_joinSource_1_0=ruleJoinSource();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getSingleSourceJoinRule());
              					}
              					set(
              						current,
              						"joinSource",
              						lv_joinSource_1_0,
              						"com.justeat.mickeydb.MickeyLang.JoinSource");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_2=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getSingleSourceJoinAccess().getRightParenthesisKeyword_2());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSingleSourceJoin"


    // $ANTLR start "entryRuleJoinStatement"
    // InternalMickeyLang.g:3569:1: entryRuleJoinStatement returns [EObject current=null] : iv_ruleJoinStatement= ruleJoinStatement EOF ;
    public final EObject entryRuleJoinStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJoinStatement = null;


        try {
            // InternalMickeyLang.g:3569:54: (iv_ruleJoinStatement= ruleJoinStatement EOF )
            // InternalMickeyLang.g:3570:2: iv_ruleJoinStatement= ruleJoinStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJoinStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJoinStatement=ruleJoinStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJoinStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJoinStatement"


    // $ANTLR start "ruleJoinStatement"
    // InternalMickeyLang.g:3576:1: ruleJoinStatement returns [EObject current=null] : ( () ( (lv_natural_1_0= 'natural' ) )? ( ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? ) | ( (lv_inner_4_0= 'inner' ) ) | ( (lv_cross_5_0= 'cross' ) ) )? otherlv_6= 'join' ( (lv_singleSource_7_0= ruleSingleSource ) ) otherlv_8= 'on' ( (lv_expression_9_0= ruleSqlExpression ) ) ) ;
    public final EObject ruleJoinStatement() throws RecognitionException {
        EObject current = null;

        Token lv_natural_1_0=null;
        Token lv_left_2_0=null;
        Token lv_outer_3_0=null;
        Token lv_inner_4_0=null;
        Token lv_cross_5_0=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        EObject lv_singleSource_7_0 = null;

        EObject lv_expression_9_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3582:2: ( ( () ( (lv_natural_1_0= 'natural' ) )? ( ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? ) | ( (lv_inner_4_0= 'inner' ) ) | ( (lv_cross_5_0= 'cross' ) ) )? otherlv_6= 'join' ( (lv_singleSource_7_0= ruleSingleSource ) ) otherlv_8= 'on' ( (lv_expression_9_0= ruleSqlExpression ) ) ) )
            // InternalMickeyLang.g:3583:2: ( () ( (lv_natural_1_0= 'natural' ) )? ( ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? ) | ( (lv_inner_4_0= 'inner' ) ) | ( (lv_cross_5_0= 'cross' ) ) )? otherlv_6= 'join' ( (lv_singleSource_7_0= ruleSingleSource ) ) otherlv_8= 'on' ( (lv_expression_9_0= ruleSqlExpression ) ) )
            {
            // InternalMickeyLang.g:3583:2: ( () ( (lv_natural_1_0= 'natural' ) )? ( ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? ) | ( (lv_inner_4_0= 'inner' ) ) | ( (lv_cross_5_0= 'cross' ) ) )? otherlv_6= 'join' ( (lv_singleSource_7_0= ruleSingleSource ) ) otherlv_8= 'on' ( (lv_expression_9_0= ruleSqlExpression ) ) )
            // InternalMickeyLang.g:3584:3: () ( (lv_natural_1_0= 'natural' ) )? ( ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? ) | ( (lv_inner_4_0= 'inner' ) ) | ( (lv_cross_5_0= 'cross' ) ) )? otherlv_6= 'join' ( (lv_singleSource_7_0= ruleSingleSource ) ) otherlv_8= 'on' ( (lv_expression_9_0= ruleSqlExpression ) )
            {
            // InternalMickeyLang.g:3584:3: ()
            // InternalMickeyLang.g:3585:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getJoinStatementAccess().getJoinStatementAction_0(),
              					current);
              			
            }

            }

            // InternalMickeyLang.g:3591:3: ( (lv_natural_1_0= 'natural' ) )?
            int alt65=2;
            int LA65_0 = input.LA(1);

            if ( (LA65_0==83) ) {
                alt65=1;
            }
            switch (alt65) {
                case 1 :
                    // InternalMickeyLang.g:3592:4: (lv_natural_1_0= 'natural' )
                    {
                    // InternalMickeyLang.g:3592:4: (lv_natural_1_0= 'natural' )
                    // InternalMickeyLang.g:3593:5: lv_natural_1_0= 'natural'
                    {
                    lv_natural_1_0=(Token)match(input,83,FOLLOW_62); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_natural_1_0, grammarAccess.getJoinStatementAccess().getNaturalNaturalKeyword_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getJoinStatementRule());
                      					}
                      					setWithLastConsumed(current, "natural", true, "natural");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:3605:3: ( ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? ) | ( (lv_inner_4_0= 'inner' ) ) | ( (lv_cross_5_0= 'cross' ) ) )?
            int alt67=4;
            switch ( input.LA(1) ) {
                case 84:
                    {
                    alt67=1;
                    }
                    break;
                case 86:
                    {
                    alt67=2;
                    }
                    break;
                case 87:
                    {
                    alt67=3;
                    }
                    break;
            }

            switch (alt67) {
                case 1 :
                    // InternalMickeyLang.g:3606:4: ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? )
                    {
                    // InternalMickeyLang.g:3606:4: ( ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )? )
                    // InternalMickeyLang.g:3607:5: ( (lv_left_2_0= 'left' ) ) ( (lv_outer_3_0= 'outer' ) )?
                    {
                    // InternalMickeyLang.g:3607:5: ( (lv_left_2_0= 'left' ) )
                    // InternalMickeyLang.g:3608:6: (lv_left_2_0= 'left' )
                    {
                    // InternalMickeyLang.g:3608:6: (lv_left_2_0= 'left' )
                    // InternalMickeyLang.g:3609:7: lv_left_2_0= 'left'
                    {
                    lv_left_2_0=(Token)match(input,84,FOLLOW_63); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_left_2_0, grammarAccess.getJoinStatementAccess().getLeftLeftKeyword_2_0_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getJoinStatementRule());
                      							}
                      							setWithLastConsumed(current, "left", true, "left");
                      						
                    }

                    }


                    }

                    // InternalMickeyLang.g:3621:5: ( (lv_outer_3_0= 'outer' ) )?
                    int alt66=2;
                    int LA66_0 = input.LA(1);

                    if ( (LA66_0==85) ) {
                        alt66=1;
                    }
                    switch (alt66) {
                        case 1 :
                            // InternalMickeyLang.g:3622:6: (lv_outer_3_0= 'outer' )
                            {
                            // InternalMickeyLang.g:3622:6: (lv_outer_3_0= 'outer' )
                            // InternalMickeyLang.g:3623:7: lv_outer_3_0= 'outer'
                            {
                            lv_outer_3_0=(Token)match(input,85,FOLLOW_64); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_outer_3_0, grammarAccess.getJoinStatementAccess().getOuterOuterKeyword_2_0_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getJoinStatementRule());
                              							}
                              							setWithLastConsumed(current, "outer", true, "outer");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:3637:4: ( (lv_inner_4_0= 'inner' ) )
                    {
                    // InternalMickeyLang.g:3637:4: ( (lv_inner_4_0= 'inner' ) )
                    // InternalMickeyLang.g:3638:5: (lv_inner_4_0= 'inner' )
                    {
                    // InternalMickeyLang.g:3638:5: (lv_inner_4_0= 'inner' )
                    // InternalMickeyLang.g:3639:6: lv_inner_4_0= 'inner'
                    {
                    lv_inner_4_0=(Token)match(input,86,FOLLOW_64); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_inner_4_0, grammarAccess.getJoinStatementAccess().getInnerInnerKeyword_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getJoinStatementRule());
                      						}
                      						setWithLastConsumed(current, "inner", true, "inner");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:3652:4: ( (lv_cross_5_0= 'cross' ) )
                    {
                    // InternalMickeyLang.g:3652:4: ( (lv_cross_5_0= 'cross' ) )
                    // InternalMickeyLang.g:3653:5: (lv_cross_5_0= 'cross' )
                    {
                    // InternalMickeyLang.g:3653:5: (lv_cross_5_0= 'cross' )
                    // InternalMickeyLang.g:3654:6: lv_cross_5_0= 'cross'
                    {
                    lv_cross_5_0=(Token)match(input,87,FOLLOW_64); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_cross_5_0, grammarAccess.getJoinStatementAccess().getCrossCrossKeyword_2_2_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getJoinStatementRule());
                      						}
                      						setWithLastConsumed(current, "cross", true, "cross");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_6=(Token)match(input,88,FOLLOW_55); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getJoinStatementAccess().getJoinKeyword_3());
              		
            }
            // InternalMickeyLang.g:3671:3: ( (lv_singleSource_7_0= ruleSingleSource ) )
            // InternalMickeyLang.g:3672:4: (lv_singleSource_7_0= ruleSingleSource )
            {
            // InternalMickeyLang.g:3672:4: (lv_singleSource_7_0= ruleSingleSource )
            // InternalMickeyLang.g:3673:5: lv_singleSource_7_0= ruleSingleSource
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJoinStatementAccess().getSingleSourceSingleSourceParserRuleCall_4_0());
              				
            }
            pushFollow(FOLLOW_14);
            lv_singleSource_7_0=ruleSingleSource();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJoinStatementRule());
              					}
              					set(
              						current,
              						"singleSource",
              						lv_singleSource_7_0,
              						"com.justeat.mickeydb.MickeyLang.SingleSource");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_8=(Token)match(input,22,FOLLOW_27); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_8, grammarAccess.getJoinStatementAccess().getOnKeyword_5());
              		
            }
            // InternalMickeyLang.g:3694:3: ( (lv_expression_9_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:3695:4: (lv_expression_9_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:3695:4: (lv_expression_9_0= ruleSqlExpression )
            // InternalMickeyLang.g:3696:5: lv_expression_9_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJoinStatementAccess().getExpressionSqlExpressionParserRuleCall_6_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_expression_9_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJoinStatementRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_9_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJoinStatement"


    // $ANTLR start "entryRuleResultColumn"
    // InternalMickeyLang.g:3717:1: entryRuleResultColumn returns [EObject current=null] : iv_ruleResultColumn= ruleResultColumn EOF ;
    public final EObject entryRuleResultColumn() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleResultColumn = null;


        try {
            // InternalMickeyLang.g:3717:53: (iv_ruleResultColumn= ruleResultColumn EOF )
            // InternalMickeyLang.g:3718:2: iv_ruleResultColumn= ruleResultColumn EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getResultColumnRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleResultColumn=ruleResultColumn();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleResultColumn; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleResultColumn"


    // $ANTLR start "ruleResultColumn"
    // InternalMickeyLang.g:3724:1: ruleResultColumn returns [EObject current=null] : ( () ( (lv_expression_1_0= ruleSqlExpression ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? ) ;
    public final EObject ruleResultColumn() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token lv_name_3_0=null;
        EObject lv_expression_1_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3730:2: ( ( () ( (lv_expression_1_0= ruleSqlExpression ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? ) )
            // InternalMickeyLang.g:3731:2: ( () ( (lv_expression_1_0= ruleSqlExpression ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? )
            {
            // InternalMickeyLang.g:3731:2: ( () ( (lv_expression_1_0= ruleSqlExpression ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )? )
            // InternalMickeyLang.g:3732:3: () ( (lv_expression_1_0= ruleSqlExpression ) ) (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )?
            {
            // InternalMickeyLang.g:3732:3: ()
            // InternalMickeyLang.g:3733:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getResultColumnAccess().getResultColumnAction_0(),
              					current);
              			
            }

            }

            // InternalMickeyLang.g:3739:3: ( (lv_expression_1_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:3740:4: (lv_expression_1_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:3740:4: (lv_expression_1_0= ruleSqlExpression )
            // InternalMickeyLang.g:3741:5: lv_expression_1_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getResultColumnAccess().getExpressionSqlExpressionParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_61);
            lv_expression_1_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getResultColumnRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_1_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:3758:3: (otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) ) )?
            int alt68=2;
            int LA68_0 = input.LA(1);

            if ( (LA68_0==68) ) {
                alt68=1;
            }
            switch (alt68) {
                case 1 :
                    // InternalMickeyLang.g:3759:4: otherlv_2= 'as' ( (lv_name_3_0= RULE_ID ) )
                    {
                    otherlv_2=(Token)match(input,68,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getResultColumnAccess().getAsKeyword_2_0());
                      			
                    }
                    // InternalMickeyLang.g:3763:4: ( (lv_name_3_0= RULE_ID ) )
                    // InternalMickeyLang.g:3764:5: (lv_name_3_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:3764:5: (lv_name_3_0= RULE_ID )
                    // InternalMickeyLang.g:3765:6: lv_name_3_0= RULE_ID
                    {
                    lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_3_0, grammarAccess.getResultColumnAccess().getNameIDTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getResultColumnRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_3_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleResultColumn"


    // $ANTLR start "entryRuleLiteralValue"
    // InternalMickeyLang.g:3786:1: entryRuleLiteralValue returns [EObject current=null] : iv_ruleLiteralValue= ruleLiteralValue EOF ;
    public final EObject entryRuleLiteralValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLiteralValue = null;


        try {
            // InternalMickeyLang.g:3786:53: (iv_ruleLiteralValue= ruleLiteralValue EOF )
            // InternalMickeyLang.g:3787:2: iv_ruleLiteralValue= ruleLiteralValue EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLiteralValueRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleLiteralValue=ruleLiteralValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLiteralValue; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLiteralValue"


    // $ANTLR start "ruleLiteralValue"
    // InternalMickeyLang.g:3793:1: ruleLiteralValue returns [EObject current=null] : ( ( () ( (lv_number_1_0= ruleSignedNumber ) ) ) | ( () ( (lv_literal_3_0= RULE_STRING ) ) ) | ( () ( (lv_literal_5_0= 'null' ) ) ) | ( () ( (lv_literal_7_0= 'current_time' ) ) ) | ( () ( (lv_literal_9_0= 'current_date' ) ) ) | ( () ( (lv_literal_11_0= 'current_timestamp' ) ) ) ) ;
    public final EObject ruleLiteralValue() throws RecognitionException {
        EObject current = null;

        Token lv_literal_3_0=null;
        Token lv_literal_5_0=null;
        Token lv_literal_7_0=null;
        Token lv_literal_9_0=null;
        Token lv_literal_11_0=null;
        AntlrDatatypeRuleToken lv_number_1_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3799:2: ( ( ( () ( (lv_number_1_0= ruleSignedNumber ) ) ) | ( () ( (lv_literal_3_0= RULE_STRING ) ) ) | ( () ( (lv_literal_5_0= 'null' ) ) ) | ( () ( (lv_literal_7_0= 'current_time' ) ) ) | ( () ( (lv_literal_9_0= 'current_date' ) ) ) | ( () ( (lv_literal_11_0= 'current_timestamp' ) ) ) ) )
            // InternalMickeyLang.g:3800:2: ( ( () ( (lv_number_1_0= ruleSignedNumber ) ) ) | ( () ( (lv_literal_3_0= RULE_STRING ) ) ) | ( () ( (lv_literal_5_0= 'null' ) ) ) | ( () ( (lv_literal_7_0= 'current_time' ) ) ) | ( () ( (lv_literal_9_0= 'current_date' ) ) ) | ( () ( (lv_literal_11_0= 'current_timestamp' ) ) ) )
            {
            // InternalMickeyLang.g:3800:2: ( ( () ( (lv_number_1_0= ruleSignedNumber ) ) ) | ( () ( (lv_literal_3_0= RULE_STRING ) ) ) | ( () ( (lv_literal_5_0= 'null' ) ) ) | ( () ( (lv_literal_7_0= 'current_time' ) ) ) | ( () ( (lv_literal_9_0= 'current_date' ) ) ) | ( () ( (lv_literal_11_0= 'current_timestamp' ) ) ) )
            int alt69=6;
            switch ( input.LA(1) ) {
            case RULE_NUMBER:
            case 34:
                {
                alt69=1;
                }
                break;
            case RULE_STRING:
                {
                alt69=2;
                }
                break;
            case 89:
                {
                alt69=3;
                }
                break;
            case 90:
                {
                alt69=4;
                }
                break;
            case 91:
                {
                alt69=5;
                }
                break;
            case 92:
                {
                alt69=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 69, 0, input);

                throw nvae;
            }

            switch (alt69) {
                case 1 :
                    // InternalMickeyLang.g:3801:3: ( () ( (lv_number_1_0= ruleSignedNumber ) ) )
                    {
                    // InternalMickeyLang.g:3801:3: ( () ( (lv_number_1_0= ruleSignedNumber ) ) )
                    // InternalMickeyLang.g:3802:4: () ( (lv_number_1_0= ruleSignedNumber ) )
                    {
                    // InternalMickeyLang.g:3802:4: ()
                    // InternalMickeyLang.g:3803:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getLiteralValueAccess().getNumericLiteralAction_0_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:3809:4: ( (lv_number_1_0= ruleSignedNumber ) )
                    // InternalMickeyLang.g:3810:5: (lv_number_1_0= ruleSignedNumber )
                    {
                    // InternalMickeyLang.g:3810:5: (lv_number_1_0= ruleSignedNumber )
                    // InternalMickeyLang.g:3811:6: lv_number_1_0= ruleSignedNumber
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getLiteralValueAccess().getNumberSignedNumberParserRuleCall_0_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_number_1_0=ruleSignedNumber();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getLiteralValueRule());
                      						}
                      						set(
                      							current,
                      							"number",
                      							lv_number_1_0,
                      							"com.justeat.mickeydb.MickeyLang.SignedNumber");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:3830:3: ( () ( (lv_literal_3_0= RULE_STRING ) ) )
                    {
                    // InternalMickeyLang.g:3830:3: ( () ( (lv_literal_3_0= RULE_STRING ) ) )
                    // InternalMickeyLang.g:3831:4: () ( (lv_literal_3_0= RULE_STRING ) )
                    {
                    // InternalMickeyLang.g:3831:4: ()
                    // InternalMickeyLang.g:3832:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getLiteralValueAccess().getStringLiteralAction_1_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:3838:4: ( (lv_literal_3_0= RULE_STRING ) )
                    // InternalMickeyLang.g:3839:5: (lv_literal_3_0= RULE_STRING )
                    {
                    // InternalMickeyLang.g:3839:5: (lv_literal_3_0= RULE_STRING )
                    // InternalMickeyLang.g:3840:6: lv_literal_3_0= RULE_STRING
                    {
                    lv_literal_3_0=(Token)match(input,RULE_STRING,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_literal_3_0, grammarAccess.getLiteralValueAccess().getLiteralSTRINGTerminalRuleCall_1_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getLiteralValueRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"literal",
                      							lv_literal_3_0,
                      							"com.justeat.mickeydb.MickeyLang.STRING");
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:3858:3: ( () ( (lv_literal_5_0= 'null' ) ) )
                    {
                    // InternalMickeyLang.g:3858:3: ( () ( (lv_literal_5_0= 'null' ) ) )
                    // InternalMickeyLang.g:3859:4: () ( (lv_literal_5_0= 'null' ) )
                    {
                    // InternalMickeyLang.g:3859:4: ()
                    // InternalMickeyLang.g:3860:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getLiteralValueAccess().getNullLiteralAction_2_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:3866:4: ( (lv_literal_5_0= 'null' ) )
                    // InternalMickeyLang.g:3867:5: (lv_literal_5_0= 'null' )
                    {
                    // InternalMickeyLang.g:3867:5: (lv_literal_5_0= 'null' )
                    // InternalMickeyLang.g:3868:6: lv_literal_5_0= 'null'
                    {
                    lv_literal_5_0=(Token)match(input,89,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_literal_5_0, grammarAccess.getLiteralValueAccess().getLiteralNullKeyword_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getLiteralValueRule());
                      						}
                      						setWithLastConsumed(current, "literal", lv_literal_5_0, "null");
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:3882:3: ( () ( (lv_literal_7_0= 'current_time' ) ) )
                    {
                    // InternalMickeyLang.g:3882:3: ( () ( (lv_literal_7_0= 'current_time' ) ) )
                    // InternalMickeyLang.g:3883:4: () ( (lv_literal_7_0= 'current_time' ) )
                    {
                    // InternalMickeyLang.g:3883:4: ()
                    // InternalMickeyLang.g:3884:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getLiteralValueAccess().getCurrentTimeLiteralAction_3_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:3890:4: ( (lv_literal_7_0= 'current_time' ) )
                    // InternalMickeyLang.g:3891:5: (lv_literal_7_0= 'current_time' )
                    {
                    // InternalMickeyLang.g:3891:5: (lv_literal_7_0= 'current_time' )
                    // InternalMickeyLang.g:3892:6: lv_literal_7_0= 'current_time'
                    {
                    lv_literal_7_0=(Token)match(input,90,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_literal_7_0, grammarAccess.getLiteralValueAccess().getLiteralCurrent_timeKeyword_3_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getLiteralValueRule());
                      						}
                      						setWithLastConsumed(current, "literal", lv_literal_7_0, "current_time");
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 5 :
                    // InternalMickeyLang.g:3906:3: ( () ( (lv_literal_9_0= 'current_date' ) ) )
                    {
                    // InternalMickeyLang.g:3906:3: ( () ( (lv_literal_9_0= 'current_date' ) ) )
                    // InternalMickeyLang.g:3907:4: () ( (lv_literal_9_0= 'current_date' ) )
                    {
                    // InternalMickeyLang.g:3907:4: ()
                    // InternalMickeyLang.g:3908:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getLiteralValueAccess().getCurrentDateLiteralAction_4_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:3914:4: ( (lv_literal_9_0= 'current_date' ) )
                    // InternalMickeyLang.g:3915:5: (lv_literal_9_0= 'current_date' )
                    {
                    // InternalMickeyLang.g:3915:5: (lv_literal_9_0= 'current_date' )
                    // InternalMickeyLang.g:3916:6: lv_literal_9_0= 'current_date'
                    {
                    lv_literal_9_0=(Token)match(input,91,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_literal_9_0, grammarAccess.getLiteralValueAccess().getLiteralCurrent_dateKeyword_4_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getLiteralValueRule());
                      						}
                      						setWithLastConsumed(current, "literal", lv_literal_9_0, "current_date");
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 6 :
                    // InternalMickeyLang.g:3930:3: ( () ( (lv_literal_11_0= 'current_timestamp' ) ) )
                    {
                    // InternalMickeyLang.g:3930:3: ( () ( (lv_literal_11_0= 'current_timestamp' ) ) )
                    // InternalMickeyLang.g:3931:4: () ( (lv_literal_11_0= 'current_timestamp' ) )
                    {
                    // InternalMickeyLang.g:3931:4: ()
                    // InternalMickeyLang.g:3932:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getLiteralValueAccess().getCurrentTimeStampLiteralAction_5_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:3938:4: ( (lv_literal_11_0= 'current_timestamp' ) )
                    // InternalMickeyLang.g:3939:5: (lv_literal_11_0= 'current_timestamp' )
                    {
                    // InternalMickeyLang.g:3939:5: (lv_literal_11_0= 'current_timestamp' )
                    // InternalMickeyLang.g:3940:6: lv_literal_11_0= 'current_timestamp'
                    {
                    lv_literal_11_0=(Token)match(input,92,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_literal_11_0, grammarAccess.getLiteralValueAccess().getLiteralCurrent_timestampKeyword_5_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getLiteralValueRule());
                      						}
                      						setWithLastConsumed(current, "literal", lv_literal_11_0, "current_timestamp");
                      					
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLiteralValue"


    // $ANTLR start "entryRuleDDLStatement"
    // InternalMickeyLang.g:3957:1: entryRuleDDLStatement returns [EObject current=null] : iv_ruleDDLStatement= ruleDDLStatement EOF ;
    public final EObject entryRuleDDLStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDDLStatement = null;


        try {
            // InternalMickeyLang.g:3957:53: (iv_ruleDDLStatement= ruleDDLStatement EOF )
            // InternalMickeyLang.g:3958:2: iv_ruleDDLStatement= ruleDDLStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDDLStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDDLStatement=ruleDDLStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDDLStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDDLStatement"


    // $ANTLR start "ruleDDLStatement"
    // InternalMickeyLang.g:3964:1: ruleDDLStatement returns [EObject current=null] : (this_CreateTableStatement_0= ruleCreateTableStatement | this_CreateViewStatement_1= ruleCreateViewStatement | this_CreateTriggerStatement_2= ruleCreateTriggerStatement | this_CreateIndexStatement_3= ruleCreateIndexStatement | this_AlterTableRenameStatement_4= ruleAlterTableRenameStatement | this_AlterTableAddColumnStatement_5= ruleAlterTableAddColumnStatement | this_DropTableStatement_6= ruleDropTableStatement | this_DropTriggerStatement_7= ruleDropTriggerStatement | this_DropViewStatement_8= ruleDropViewStatement | this_DropIndexStatement_9= ruleDropIndexStatement ) ;
    public final EObject ruleDDLStatement() throws RecognitionException {
        EObject current = null;

        EObject this_CreateTableStatement_0 = null;

        EObject this_CreateViewStatement_1 = null;

        EObject this_CreateTriggerStatement_2 = null;

        EObject this_CreateIndexStatement_3 = null;

        EObject this_AlterTableRenameStatement_4 = null;

        EObject this_AlterTableAddColumnStatement_5 = null;

        EObject this_DropTableStatement_6 = null;

        EObject this_DropTriggerStatement_7 = null;

        EObject this_DropViewStatement_8 = null;

        EObject this_DropIndexStatement_9 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:3970:2: ( (this_CreateTableStatement_0= ruleCreateTableStatement | this_CreateViewStatement_1= ruleCreateViewStatement | this_CreateTriggerStatement_2= ruleCreateTriggerStatement | this_CreateIndexStatement_3= ruleCreateIndexStatement | this_AlterTableRenameStatement_4= ruleAlterTableRenameStatement | this_AlterTableAddColumnStatement_5= ruleAlterTableAddColumnStatement | this_DropTableStatement_6= ruleDropTableStatement | this_DropTriggerStatement_7= ruleDropTriggerStatement | this_DropViewStatement_8= ruleDropViewStatement | this_DropIndexStatement_9= ruleDropIndexStatement ) )
            // InternalMickeyLang.g:3971:2: (this_CreateTableStatement_0= ruleCreateTableStatement | this_CreateViewStatement_1= ruleCreateViewStatement | this_CreateTriggerStatement_2= ruleCreateTriggerStatement | this_CreateIndexStatement_3= ruleCreateIndexStatement | this_AlterTableRenameStatement_4= ruleAlterTableRenameStatement | this_AlterTableAddColumnStatement_5= ruleAlterTableAddColumnStatement | this_DropTableStatement_6= ruleDropTableStatement | this_DropTriggerStatement_7= ruleDropTriggerStatement | this_DropViewStatement_8= ruleDropViewStatement | this_DropIndexStatement_9= ruleDropIndexStatement )
            {
            // InternalMickeyLang.g:3971:2: (this_CreateTableStatement_0= ruleCreateTableStatement | this_CreateViewStatement_1= ruleCreateViewStatement | this_CreateTriggerStatement_2= ruleCreateTriggerStatement | this_CreateIndexStatement_3= ruleCreateIndexStatement | this_AlterTableRenameStatement_4= ruleAlterTableRenameStatement | this_AlterTableAddColumnStatement_5= ruleAlterTableAddColumnStatement | this_DropTableStatement_6= ruleDropTableStatement | this_DropTriggerStatement_7= ruleDropTriggerStatement | this_DropViewStatement_8= ruleDropViewStatement | this_DropIndexStatement_9= ruleDropIndexStatement )
            int alt70=10;
            alt70 = dfa70.predict(input);
            switch (alt70) {
                case 1 :
                    // InternalMickeyLang.g:3972:3: this_CreateTableStatement_0= ruleCreateTableStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getCreateTableStatementParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_CreateTableStatement_0=ruleCreateTableStatement();

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

                      			current = this_CreateTableStatement_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:3981:3: this_CreateViewStatement_1= ruleCreateViewStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getCreateViewStatementParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_CreateViewStatement_1=ruleCreateViewStatement();

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

                      			current = this_CreateViewStatement_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:3990:3: this_CreateTriggerStatement_2= ruleCreateTriggerStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getCreateTriggerStatementParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_CreateTriggerStatement_2=ruleCreateTriggerStatement();

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

                      			current = this_CreateTriggerStatement_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:3999:3: this_CreateIndexStatement_3= ruleCreateIndexStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getCreateIndexStatementParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_CreateIndexStatement_3=ruleCreateIndexStatement();

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

                      			current = this_CreateIndexStatement_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalMickeyLang.g:4008:3: this_AlterTableRenameStatement_4= ruleAlterTableRenameStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getAlterTableRenameStatementParserRuleCall_4());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_AlterTableRenameStatement_4=ruleAlterTableRenameStatement();

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

                      			current = this_AlterTableRenameStatement_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalMickeyLang.g:4017:3: this_AlterTableAddColumnStatement_5= ruleAlterTableAddColumnStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getAlterTableAddColumnStatementParserRuleCall_5());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_AlterTableAddColumnStatement_5=ruleAlterTableAddColumnStatement();

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

                      			current = this_AlterTableAddColumnStatement_5;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalMickeyLang.g:4026:3: this_DropTableStatement_6= ruleDropTableStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getDropTableStatementParserRuleCall_6());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DropTableStatement_6=ruleDropTableStatement();

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

                      			current = this_DropTableStatement_6;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 8 :
                    // InternalMickeyLang.g:4035:3: this_DropTriggerStatement_7= ruleDropTriggerStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getDropTriggerStatementParserRuleCall_7());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DropTriggerStatement_7=ruleDropTriggerStatement();

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

                      			current = this_DropTriggerStatement_7;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 9 :
                    // InternalMickeyLang.g:4044:3: this_DropViewStatement_8= ruleDropViewStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getDropViewStatementParserRuleCall_8());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DropViewStatement_8=ruleDropViewStatement();

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

                      			current = this_DropViewStatement_8;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 10 :
                    // InternalMickeyLang.g:4053:3: this_DropIndexStatement_9= ruleDropIndexStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDDLStatementAccess().getDropIndexStatementParserRuleCall_9());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DropIndexStatement_9=ruleDropIndexStatement();

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

                      			current = this_DropIndexStatement_9;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDDLStatement"


    // $ANTLR start "entryRuleCreateTableStatement"
    // InternalMickeyLang.g:4065:1: entryRuleCreateTableStatement returns [EObject current=null] : iv_ruleCreateTableStatement= ruleCreateTableStatement EOF ;
    public final EObject entryRuleCreateTableStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCreateTableStatement = null;


        try {
            // InternalMickeyLang.g:4065:61: (iv_ruleCreateTableStatement= ruleCreateTableStatement EOF )
            // InternalMickeyLang.g:4066:2: iv_ruleCreateTableStatement= ruleCreateTableStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCreateTableStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleCreateTableStatement=ruleCreateTableStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCreateTableStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCreateTableStatement"


    // $ANTLR start "ruleCreateTableStatement"
    // InternalMickeyLang.g:4072:1: ruleCreateTableStatement returns [EObject current=null] : ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'table' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= '(' ( (lv_columnDefs_6_0= ruleColumnDef ) ) (otherlv_7= ',' ( (lv_columnDefs_8_0= ruleColumnDef ) ) )* (otherlv_9= ',' ( (lv_constraints_10_0= ruleTableConstraint ) ) )* otherlv_11= ')' ) ;
    public final EObject ruleCreateTableStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_temporary_2_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        EObject lv_columnDefs_6_0 = null;

        EObject lv_columnDefs_8_0 = null;

        EObject lv_constraints_10_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:4078:2: ( ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'table' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= '(' ( (lv_columnDefs_6_0= ruleColumnDef ) ) (otherlv_7= ',' ( (lv_columnDefs_8_0= ruleColumnDef ) ) )* (otherlv_9= ',' ( (lv_constraints_10_0= ruleTableConstraint ) ) )* otherlv_11= ')' ) )
            // InternalMickeyLang.g:4079:2: ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'table' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= '(' ( (lv_columnDefs_6_0= ruleColumnDef ) ) (otherlv_7= ',' ( (lv_columnDefs_8_0= ruleColumnDef ) ) )* (otherlv_9= ',' ( (lv_constraints_10_0= ruleTableConstraint ) ) )* otherlv_11= ')' )
            {
            // InternalMickeyLang.g:4079:2: ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'table' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= '(' ( (lv_columnDefs_6_0= ruleColumnDef ) ) (otherlv_7= ',' ( (lv_columnDefs_8_0= ruleColumnDef ) ) )* (otherlv_9= ',' ( (lv_constraints_10_0= ruleTableConstraint ) ) )* otherlv_11= ')' )
            // InternalMickeyLang.g:4080:3: () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'table' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= '(' ( (lv_columnDefs_6_0= ruleColumnDef ) ) (otherlv_7= ',' ( (lv_columnDefs_8_0= ruleColumnDef ) ) )* (otherlv_9= ',' ( (lv_constraints_10_0= ruleTableConstraint ) ) )* otherlv_11= ')'
            {
            // InternalMickeyLang.g:4080:3: ()
            // InternalMickeyLang.g:4081:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getCreateTableStatementAccess().getCreateTableStatementAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,93,FOLLOW_65); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getCreateTableStatementAccess().getCreateKeyword_1());
              		
            }
            // InternalMickeyLang.g:4091:3: ( (lv_temporary_2_0= 'temp' ) )?
            int alt71=2;
            int LA71_0 = input.LA(1);

            if ( (LA71_0==94) ) {
                alt71=1;
            }
            switch (alt71) {
                case 1 :
                    // InternalMickeyLang.g:4092:4: (lv_temporary_2_0= 'temp' )
                    {
                    // InternalMickeyLang.g:4092:4: (lv_temporary_2_0= 'temp' )
                    // InternalMickeyLang.g:4093:5: lv_temporary_2_0= 'temp'
                    {
                    lv_temporary_2_0=(Token)match(input,94,FOLLOW_66); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_temporary_2_0, grammarAccess.getCreateTableStatementAccess().getTemporaryTempKeyword_2_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getCreateTableStatementRule());
                      					}
                      					setWithLastConsumed(current, "temporary", true, "temp");
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,95,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getCreateTableStatementAccess().getTableKeyword_3());
              		
            }
            // InternalMickeyLang.g:4109:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalMickeyLang.g:4110:4: (lv_name_4_0= RULE_ID )
            {
            // InternalMickeyLang.g:4110:4: (lv_name_4_0= RULE_ID )
            // InternalMickeyLang.g:4111:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_5); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getCreateTableStatementAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getCreateTableStatementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            otherlv_5=(Token)match(input,14,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getCreateTableStatementAccess().getLeftParenthesisKeyword_5());
              		
            }
            // InternalMickeyLang.g:4131:3: ( (lv_columnDefs_6_0= ruleColumnDef ) )
            // InternalMickeyLang.g:4132:4: (lv_columnDefs_6_0= ruleColumnDef )
            {
            // InternalMickeyLang.g:4132:4: (lv_columnDefs_6_0= ruleColumnDef )
            // InternalMickeyLang.g:4133:5: lv_columnDefs_6_0= ruleColumnDef
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getCreateTableStatementAccess().getColumnDefsColumnDefParserRuleCall_6_0());
              				
            }
            pushFollow(FOLLOW_7);
            lv_columnDefs_6_0=ruleColumnDef();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getCreateTableStatementRule());
              					}
              					add(
              						current,
              						"columnDefs",
              						lv_columnDefs_6_0,
              						"com.justeat.mickeydb.MickeyLang.ColumnDef");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:4150:3: (otherlv_7= ',' ( (lv_columnDefs_8_0= ruleColumnDef ) ) )*
            loop72:
            do {
                int alt72=2;
                int LA72_0 = input.LA(1);

                if ( (LA72_0==15) ) {
                    int LA72_1 = input.LA(2);

                    if ( (LA72_1==RULE_ID) ) {
                        alt72=1;
                    }


                }


                switch (alt72) {
            	case 1 :
            	    // InternalMickeyLang.g:4151:4: otherlv_7= ',' ( (lv_columnDefs_8_0= ruleColumnDef ) )
            	    {
            	    otherlv_7=(Token)match(input,15,FOLLOW_3); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_7, grammarAccess.getCreateTableStatementAccess().getCommaKeyword_7_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:4155:4: ( (lv_columnDefs_8_0= ruleColumnDef ) )
            	    // InternalMickeyLang.g:4156:5: (lv_columnDefs_8_0= ruleColumnDef )
            	    {
            	    // InternalMickeyLang.g:4156:5: (lv_columnDefs_8_0= ruleColumnDef )
            	    // InternalMickeyLang.g:4157:6: lv_columnDefs_8_0= ruleColumnDef
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getCreateTableStatementAccess().getColumnDefsColumnDefParserRuleCall_7_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_7);
            	    lv_columnDefs_8_0=ruleColumnDef();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getCreateTableStatementRule());
            	      						}
            	      						add(
            	      							current,
            	      							"columnDefs",
            	      							lv_columnDefs_8_0,
            	      							"com.justeat.mickeydb.MickeyLang.ColumnDef");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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

            // InternalMickeyLang.g:4175:3: (otherlv_9= ',' ( (lv_constraints_10_0= ruleTableConstraint ) ) )*
            loop73:
            do {
                int alt73=2;
                int LA73_0 = input.LA(1);

                if ( (LA73_0==15) ) {
                    alt73=1;
                }


                switch (alt73) {
            	case 1 :
            	    // InternalMickeyLang.g:4176:4: otherlv_9= ',' ( (lv_constraints_10_0= ruleTableConstraint ) )
            	    {
            	    otherlv_9=(Token)match(input,15,FOLLOW_67); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_9, grammarAccess.getCreateTableStatementAccess().getCommaKeyword_8_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:4180:4: ( (lv_constraints_10_0= ruleTableConstraint ) )
            	    // InternalMickeyLang.g:4181:5: (lv_constraints_10_0= ruleTableConstraint )
            	    {
            	    // InternalMickeyLang.g:4181:5: (lv_constraints_10_0= ruleTableConstraint )
            	    // InternalMickeyLang.g:4182:6: lv_constraints_10_0= ruleTableConstraint
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getCreateTableStatementAccess().getConstraintsTableConstraintParserRuleCall_8_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_7);
            	    lv_constraints_10_0=ruleTableConstraint();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getCreateTableStatementRule());
            	      						}
            	      						add(
            	      							current,
            	      							"constraints",
            	      							lv_constraints_10_0,
            	      							"com.justeat.mickeydb.MickeyLang.TableConstraint");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_11=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_11, grammarAccess.getCreateTableStatementAccess().getRightParenthesisKeyword_9());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCreateTableStatement"


    // $ANTLR start "entryRuleCreateViewStatement"
    // InternalMickeyLang.g:4208:1: entryRuleCreateViewStatement returns [EObject current=null] : iv_ruleCreateViewStatement= ruleCreateViewStatement EOF ;
    public final EObject entryRuleCreateViewStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCreateViewStatement = null;


        try {
            // InternalMickeyLang.g:4208:60: (iv_ruleCreateViewStatement= ruleCreateViewStatement EOF )
            // InternalMickeyLang.g:4209:2: iv_ruleCreateViewStatement= ruleCreateViewStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCreateViewStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleCreateViewStatement=ruleCreateViewStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCreateViewStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCreateViewStatement"


    // $ANTLR start "ruleCreateViewStatement"
    // InternalMickeyLang.g:4215:1: ruleCreateViewStatement returns [EObject current=null] : ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'view' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= 'as' ( (lv_selectStatement_6_0= ruleSelectStatement ) ) ) ;
    public final EObject ruleCreateViewStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_temporary_2_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        EObject lv_selectStatement_6_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:4221:2: ( ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'view' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= 'as' ( (lv_selectStatement_6_0= ruleSelectStatement ) ) ) )
            // InternalMickeyLang.g:4222:2: ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'view' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= 'as' ( (lv_selectStatement_6_0= ruleSelectStatement ) ) )
            {
            // InternalMickeyLang.g:4222:2: ( () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'view' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= 'as' ( (lv_selectStatement_6_0= ruleSelectStatement ) ) )
            // InternalMickeyLang.g:4223:3: () otherlv_1= 'create' ( (lv_temporary_2_0= 'temp' ) )? otherlv_3= 'view' ( (lv_name_4_0= RULE_ID ) ) otherlv_5= 'as' ( (lv_selectStatement_6_0= ruleSelectStatement ) )
            {
            // InternalMickeyLang.g:4223:3: ()
            // InternalMickeyLang.g:4224:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getCreateViewStatementAccess().getCreateViewStatementAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,93,FOLLOW_68); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getCreateViewStatementAccess().getCreateKeyword_1());
              		
            }
            // InternalMickeyLang.g:4234:3: ( (lv_temporary_2_0= 'temp' ) )?
            int alt74=2;
            int LA74_0 = input.LA(1);

            if ( (LA74_0==94) ) {
                alt74=1;
            }
            switch (alt74) {
                case 1 :
                    // InternalMickeyLang.g:4235:4: (lv_temporary_2_0= 'temp' )
                    {
                    // InternalMickeyLang.g:4235:4: (lv_temporary_2_0= 'temp' )
                    // InternalMickeyLang.g:4236:5: lv_temporary_2_0= 'temp'
                    {
                    lv_temporary_2_0=(Token)match(input,94,FOLLOW_69); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_temporary_2_0, grammarAccess.getCreateViewStatementAccess().getTemporaryTempKeyword_2_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getCreateViewStatementRule());
                      					}
                      					setWithLastConsumed(current, "temporary", true, "temp");
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,96,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getCreateViewStatementAccess().getViewKeyword_3());
              		
            }
            // InternalMickeyLang.g:4252:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalMickeyLang.g:4253:4: (lv_name_4_0= RULE_ID )
            {
            // InternalMickeyLang.g:4253:4: (lv_name_4_0= RULE_ID )
            // InternalMickeyLang.g:4254:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_45); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getCreateViewStatementAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getCreateViewStatementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            otherlv_5=(Token)match(input,68,FOLLOW_40); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getCreateViewStatementAccess().getAsKeyword_5());
              		
            }
            // InternalMickeyLang.g:4274:3: ( (lv_selectStatement_6_0= ruleSelectStatement ) )
            // InternalMickeyLang.g:4275:4: (lv_selectStatement_6_0= ruleSelectStatement )
            {
            // InternalMickeyLang.g:4275:4: (lv_selectStatement_6_0= ruleSelectStatement )
            // InternalMickeyLang.g:4276:5: lv_selectStatement_6_0= ruleSelectStatement
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getCreateViewStatementAccess().getSelectStatementSelectStatementParserRuleCall_6_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_selectStatement_6_0=ruleSelectStatement();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getCreateViewStatementRule());
              					}
              					set(
              						current,
              						"selectStatement",
              						lv_selectStatement_6_0,
              						"com.justeat.mickeydb.MickeyLang.SelectStatement");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCreateViewStatement"


    // $ANTLR start "entryRuleCreateTriggerStatement"
    // InternalMickeyLang.g:4297:1: entryRuleCreateTriggerStatement returns [EObject current=null] : iv_ruleCreateTriggerStatement= ruleCreateTriggerStatement EOF ;
    public final EObject entryRuleCreateTriggerStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCreateTriggerStatement = null;


        try {
            // InternalMickeyLang.g:4297:63: (iv_ruleCreateTriggerStatement= ruleCreateTriggerStatement EOF )
            // InternalMickeyLang.g:4298:2: iv_ruleCreateTriggerStatement= ruleCreateTriggerStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCreateTriggerStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleCreateTriggerStatement=ruleCreateTriggerStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCreateTriggerStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCreateTriggerStatement"


    // $ANTLR start "ruleCreateTriggerStatement"
    // InternalMickeyLang.g:4304:1: ruleCreateTriggerStatement returns [EObject current=null] : (otherlv_0= 'create' ( (lv_temporary_1_0= 'temp' ) )? otherlv_2= 'trigger' ( (lv_name_3_0= RULE_ID ) ) ( ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) ) )? ( ( (lv_eventType_5_0= 'delete' ) ) | ( (lv_eventType_6_0= 'insert' ) ) | ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? ) ) otherlv_12= 'on' ( (otherlv_13= RULE_ID ) ) ( (lv_forEachRow_14_0= 'for each row' ) )? (otherlv_15= 'when' ( (lv_whenExpression_16_0= ruleSqlExpression ) ) )? otherlv_17= 'begin' ( ( (lv_statements_18_0= ruleDMLStatement ) ) otherlv_19= ';' ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )* )? otherlv_22= 'end' ) ;
    public final EObject ruleCreateTriggerStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_temporary_1_0=null;
        Token otherlv_2=null;
        Token lv_name_3_0=null;
        Token lv_when_4_1=null;
        Token lv_when_4_2=null;
        Token lv_when_4_3=null;
        Token lv_eventType_5_0=null;
        Token lv_eventType_6_0=null;
        Token lv_eventType_7_0=null;
        Token otherlv_8=null;
        Token lv_updateColumnNames_9_0=null;
        Token otherlv_10=null;
        Token lv_updateColumnNames_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token lv_forEachRow_14_0=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        EObject lv_whenExpression_16_0 = null;

        EObject lv_statements_18_0 = null;

        EObject lv_statements_20_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:4310:2: ( (otherlv_0= 'create' ( (lv_temporary_1_0= 'temp' ) )? otherlv_2= 'trigger' ( (lv_name_3_0= RULE_ID ) ) ( ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) ) )? ( ( (lv_eventType_5_0= 'delete' ) ) | ( (lv_eventType_6_0= 'insert' ) ) | ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? ) ) otherlv_12= 'on' ( (otherlv_13= RULE_ID ) ) ( (lv_forEachRow_14_0= 'for each row' ) )? (otherlv_15= 'when' ( (lv_whenExpression_16_0= ruleSqlExpression ) ) )? otherlv_17= 'begin' ( ( (lv_statements_18_0= ruleDMLStatement ) ) otherlv_19= ';' ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )* )? otherlv_22= 'end' ) )
            // InternalMickeyLang.g:4311:2: (otherlv_0= 'create' ( (lv_temporary_1_0= 'temp' ) )? otherlv_2= 'trigger' ( (lv_name_3_0= RULE_ID ) ) ( ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) ) )? ( ( (lv_eventType_5_0= 'delete' ) ) | ( (lv_eventType_6_0= 'insert' ) ) | ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? ) ) otherlv_12= 'on' ( (otherlv_13= RULE_ID ) ) ( (lv_forEachRow_14_0= 'for each row' ) )? (otherlv_15= 'when' ( (lv_whenExpression_16_0= ruleSqlExpression ) ) )? otherlv_17= 'begin' ( ( (lv_statements_18_0= ruleDMLStatement ) ) otherlv_19= ';' ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )* )? otherlv_22= 'end' )
            {
            // InternalMickeyLang.g:4311:2: (otherlv_0= 'create' ( (lv_temporary_1_0= 'temp' ) )? otherlv_2= 'trigger' ( (lv_name_3_0= RULE_ID ) ) ( ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) ) )? ( ( (lv_eventType_5_0= 'delete' ) ) | ( (lv_eventType_6_0= 'insert' ) ) | ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? ) ) otherlv_12= 'on' ( (otherlv_13= RULE_ID ) ) ( (lv_forEachRow_14_0= 'for each row' ) )? (otherlv_15= 'when' ( (lv_whenExpression_16_0= ruleSqlExpression ) ) )? otherlv_17= 'begin' ( ( (lv_statements_18_0= ruleDMLStatement ) ) otherlv_19= ';' ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )* )? otherlv_22= 'end' )
            // InternalMickeyLang.g:4312:3: otherlv_0= 'create' ( (lv_temporary_1_0= 'temp' ) )? otherlv_2= 'trigger' ( (lv_name_3_0= RULE_ID ) ) ( ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) ) )? ( ( (lv_eventType_5_0= 'delete' ) ) | ( (lv_eventType_6_0= 'insert' ) ) | ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? ) ) otherlv_12= 'on' ( (otherlv_13= RULE_ID ) ) ( (lv_forEachRow_14_0= 'for each row' ) )? (otherlv_15= 'when' ( (lv_whenExpression_16_0= ruleSqlExpression ) ) )? otherlv_17= 'begin' ( ( (lv_statements_18_0= ruleDMLStatement ) ) otherlv_19= ';' ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )* )? otherlv_22= 'end'
            {
            otherlv_0=(Token)match(input,93,FOLLOW_70); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getCreateTriggerStatementAccess().getCreateKeyword_0());
              		
            }
            // InternalMickeyLang.g:4316:3: ( (lv_temporary_1_0= 'temp' ) )?
            int alt75=2;
            int LA75_0 = input.LA(1);

            if ( (LA75_0==94) ) {
                alt75=1;
            }
            switch (alt75) {
                case 1 :
                    // InternalMickeyLang.g:4317:4: (lv_temporary_1_0= 'temp' )
                    {
                    // InternalMickeyLang.g:4317:4: (lv_temporary_1_0= 'temp' )
                    // InternalMickeyLang.g:4318:5: lv_temporary_1_0= 'temp'
                    {
                    lv_temporary_1_0=(Token)match(input,94,FOLLOW_71); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_temporary_1_0, grammarAccess.getCreateTriggerStatementAccess().getTemporaryTempKeyword_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                      					}
                      					setWithLastConsumed(current, "temporary", true, "temp");
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_2=(Token)match(input,97,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getCreateTriggerStatementAccess().getTriggerKeyword_2());
              		
            }
            // InternalMickeyLang.g:4334:3: ( (lv_name_3_0= RULE_ID ) )
            // InternalMickeyLang.g:4335:4: (lv_name_3_0= RULE_ID )
            {
            // InternalMickeyLang.g:4335:4: (lv_name_3_0= RULE_ID )
            // InternalMickeyLang.g:4336:5: lv_name_3_0= RULE_ID
            {
            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_72); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_3_0, grammarAccess.getCreateTriggerStatementAccess().getNameIDTerminalRuleCall_3_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalMickeyLang.g:4352:3: ( ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) ) )?
            int alt77=2;
            int LA77_0 = input.LA(1);

            if ( ((LA77_0>=98 && LA77_0<=100)) ) {
                alt77=1;
            }
            switch (alt77) {
                case 1 :
                    // InternalMickeyLang.g:4353:4: ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) )
                    {
                    // InternalMickeyLang.g:4353:4: ( (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' ) )
                    // InternalMickeyLang.g:4354:5: (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' )
                    {
                    // InternalMickeyLang.g:4354:5: (lv_when_4_1= 'before' | lv_when_4_2= 'after' | lv_when_4_3= 'instead of' )
                    int alt76=3;
                    switch ( input.LA(1) ) {
                    case 98:
                        {
                        alt76=1;
                        }
                        break;
                    case 99:
                        {
                        alt76=2;
                        }
                        break;
                    case 100:
                        {
                        alt76=3;
                        }
                        break;
                    default:
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 76, 0, input);

                        throw nvae;
                    }

                    switch (alt76) {
                        case 1 :
                            // InternalMickeyLang.g:4355:6: lv_when_4_1= 'before'
                            {
                            lv_when_4_1=(Token)match(input,98,FOLLOW_73); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(lv_when_4_1, grammarAccess.getCreateTriggerStatementAccess().getWhenBeforeKeyword_4_0_0());
                              					
                            }
                            if ( state.backtracking==0 ) {

                              						if (current==null) {
                              							current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                              						}
                              						setWithLastConsumed(current, "when", lv_when_4_1, null);
                              					
                            }

                            }
                            break;
                        case 2 :
                            // InternalMickeyLang.g:4366:6: lv_when_4_2= 'after'
                            {
                            lv_when_4_2=(Token)match(input,99,FOLLOW_73); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(lv_when_4_2, grammarAccess.getCreateTriggerStatementAccess().getWhenAfterKeyword_4_0_1());
                              					
                            }
                            if ( state.backtracking==0 ) {

                              						if (current==null) {
                              							current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                              						}
                              						setWithLastConsumed(current, "when", lv_when_4_2, null);
                              					
                            }

                            }
                            break;
                        case 3 :
                            // InternalMickeyLang.g:4377:6: lv_when_4_3= 'instead of'
                            {
                            lv_when_4_3=(Token)match(input,100,FOLLOW_73); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(lv_when_4_3, grammarAccess.getCreateTriggerStatementAccess().getWhenInsteadOfKeyword_4_0_2());
                              					
                            }
                            if ( state.backtracking==0 ) {

                              						if (current==null) {
                              							current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                              						}
                              						setWithLastConsumed(current, "when", lv_when_4_3, null);
                              					
                            }

                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:4390:3: ( ( (lv_eventType_5_0= 'delete' ) ) | ( (lv_eventType_6_0= 'insert' ) ) | ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? ) )
            int alt80=3;
            switch ( input.LA(1) ) {
            case 101:
                {
                alt80=1;
                }
                break;
            case 102:
                {
                alt80=2;
                }
                break;
            case 103:
                {
                alt80=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 80, 0, input);

                throw nvae;
            }

            switch (alt80) {
                case 1 :
                    // InternalMickeyLang.g:4391:4: ( (lv_eventType_5_0= 'delete' ) )
                    {
                    // InternalMickeyLang.g:4391:4: ( (lv_eventType_5_0= 'delete' ) )
                    // InternalMickeyLang.g:4392:5: (lv_eventType_5_0= 'delete' )
                    {
                    // InternalMickeyLang.g:4392:5: (lv_eventType_5_0= 'delete' )
                    // InternalMickeyLang.g:4393:6: lv_eventType_5_0= 'delete'
                    {
                    lv_eventType_5_0=(Token)match(input,101,FOLLOW_14); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_eventType_5_0, grammarAccess.getCreateTriggerStatementAccess().getEventTypeDeleteKeyword_5_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                      						}
                      						setWithLastConsumed(current, "eventType", lv_eventType_5_0, "delete");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:4406:4: ( (lv_eventType_6_0= 'insert' ) )
                    {
                    // InternalMickeyLang.g:4406:4: ( (lv_eventType_6_0= 'insert' ) )
                    // InternalMickeyLang.g:4407:5: (lv_eventType_6_0= 'insert' )
                    {
                    // InternalMickeyLang.g:4407:5: (lv_eventType_6_0= 'insert' )
                    // InternalMickeyLang.g:4408:6: lv_eventType_6_0= 'insert'
                    {
                    lv_eventType_6_0=(Token)match(input,102,FOLLOW_14); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_eventType_6_0, grammarAccess.getCreateTriggerStatementAccess().getEventTypeInsertKeyword_5_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                      						}
                      						setWithLastConsumed(current, "eventType", lv_eventType_6_0, "insert");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:4421:4: ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? )
                    {
                    // InternalMickeyLang.g:4421:4: ( ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )? )
                    // InternalMickeyLang.g:4422:5: ( (lv_eventType_7_0= 'update' ) ) (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )?
                    {
                    // InternalMickeyLang.g:4422:5: ( (lv_eventType_7_0= 'update' ) )
                    // InternalMickeyLang.g:4423:6: (lv_eventType_7_0= 'update' )
                    {
                    // InternalMickeyLang.g:4423:6: (lv_eventType_7_0= 'update' )
                    // InternalMickeyLang.g:4424:7: lv_eventType_7_0= 'update'
                    {
                    lv_eventType_7_0=(Token)match(input,103,FOLLOW_74); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_eventType_7_0, grammarAccess.getCreateTriggerStatementAccess().getEventTypeUpdateKeyword_5_2_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                      							}
                      							setWithLastConsumed(current, "eventType", lv_eventType_7_0, "update");
                      						
                    }

                    }


                    }

                    // InternalMickeyLang.g:4436:5: (otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )* )?
                    int alt79=2;
                    int LA79_0 = input.LA(1);

                    if ( (LA79_0==104) ) {
                        alt79=1;
                    }
                    switch (alt79) {
                        case 1 :
                            // InternalMickeyLang.g:4437:6: otherlv_8= 'of' ( (lv_updateColumnNames_9_0= RULE_ID ) ) (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )*
                            {
                            otherlv_8=(Token)match(input,104,FOLLOW_3); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_8, grammarAccess.getCreateTriggerStatementAccess().getOfKeyword_5_2_1_0());
                              					
                            }
                            // InternalMickeyLang.g:4441:6: ( (lv_updateColumnNames_9_0= RULE_ID ) )
                            // InternalMickeyLang.g:4442:7: (lv_updateColumnNames_9_0= RULE_ID )
                            {
                            // InternalMickeyLang.g:4442:7: (lv_updateColumnNames_9_0= RULE_ID )
                            // InternalMickeyLang.g:4443:8: lv_updateColumnNames_9_0= RULE_ID
                            {
                            lv_updateColumnNames_9_0=(Token)match(input,RULE_ID,FOLLOW_75); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								newLeafNode(lv_updateColumnNames_9_0, grammarAccess.getCreateTriggerStatementAccess().getUpdateColumnNamesIDTerminalRuleCall_5_2_1_1_0());
                              							
                            }
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                              								}
                              								addWithLastConsumed(
                              									current,
                              									"updateColumnNames",
                              									lv_updateColumnNames_9_0,
                              									"org.eclipse.xtext.common.Terminals.ID");
                              							
                            }

                            }


                            }

                            // InternalMickeyLang.g:4459:6: (otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) ) )*
                            loop78:
                            do {
                                int alt78=2;
                                int LA78_0 = input.LA(1);

                                if ( (LA78_0==15) ) {
                                    alt78=1;
                                }


                                switch (alt78) {
                            	case 1 :
                            	    // InternalMickeyLang.g:4460:7: otherlv_10= ',' ( (lv_updateColumnNames_11_0= RULE_ID ) )
                            	    {
                            	    otherlv_10=(Token)match(input,15,FOLLOW_3); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							newLeafNode(otherlv_10, grammarAccess.getCreateTriggerStatementAccess().getCommaKeyword_5_2_1_2_0());
                            	      						
                            	    }
                            	    // InternalMickeyLang.g:4464:7: ( (lv_updateColumnNames_11_0= RULE_ID ) )
                            	    // InternalMickeyLang.g:4465:8: (lv_updateColumnNames_11_0= RULE_ID )
                            	    {
                            	    // InternalMickeyLang.g:4465:8: (lv_updateColumnNames_11_0= RULE_ID )
                            	    // InternalMickeyLang.g:4466:9: lv_updateColumnNames_11_0= RULE_ID
                            	    {
                            	    lv_updateColumnNames_11_0=(Token)match(input,RULE_ID,FOLLOW_75); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      									newLeafNode(lv_updateColumnNames_11_0, grammarAccess.getCreateTriggerStatementAccess().getUpdateColumnNamesIDTerminalRuleCall_5_2_1_2_1_0());
                            	      								
                            	    }
                            	    if ( state.backtracking==0 ) {

                            	      									if (current==null) {
                            	      										current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                            	      									}
                            	      									addWithLastConsumed(
                            	      										current,
                            	      										"updateColumnNames",
                            	      										lv_updateColumnNames_11_0,
                            	      										"org.eclipse.xtext.common.Terminals.ID");
                            	      								
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

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


                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            otherlv_12=(Token)match(input,22,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_12, grammarAccess.getCreateTriggerStatementAccess().getOnKeyword_6());
              		
            }
            // InternalMickeyLang.g:4490:3: ( (otherlv_13= RULE_ID ) )
            // InternalMickeyLang.g:4491:4: (otherlv_13= RULE_ID )
            {
            // InternalMickeyLang.g:4491:4: (otherlv_13= RULE_ID )
            // InternalMickeyLang.g:4492:5: otherlv_13= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
              					}
              				
            }
            otherlv_13=(Token)match(input,RULE_ID,FOLLOW_76); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_13, grammarAccess.getCreateTriggerStatementAccess().getTableTableDefinitionCrossReference_7_0());
              				
            }

            }


            }

            // InternalMickeyLang.g:4503:3: ( (lv_forEachRow_14_0= 'for each row' ) )?
            int alt81=2;
            int LA81_0 = input.LA(1);

            if ( (LA81_0==105) ) {
                alt81=1;
            }
            switch (alt81) {
                case 1 :
                    // InternalMickeyLang.g:4504:4: (lv_forEachRow_14_0= 'for each row' )
                    {
                    // InternalMickeyLang.g:4504:4: (lv_forEachRow_14_0= 'for each row' )
                    // InternalMickeyLang.g:4505:5: lv_forEachRow_14_0= 'for each row'
                    {
                    lv_forEachRow_14_0=(Token)match(input,105,FOLLOW_77); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_forEachRow_14_0, grammarAccess.getCreateTriggerStatementAccess().getForEachRowForEachRowKeyword_8_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getCreateTriggerStatementRule());
                      					}
                      					setWithLastConsumed(current, "forEachRow", lv_forEachRow_14_0, "for each row");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:4517:3: (otherlv_15= 'when' ( (lv_whenExpression_16_0= ruleSqlExpression ) ) )?
            int alt82=2;
            int LA82_0 = input.LA(1);

            if ( (LA82_0==70) ) {
                alt82=1;
            }
            switch (alt82) {
                case 1 :
                    // InternalMickeyLang.g:4518:4: otherlv_15= 'when' ( (lv_whenExpression_16_0= ruleSqlExpression ) )
                    {
                    otherlv_15=(Token)match(input,70,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_15, grammarAccess.getCreateTriggerStatementAccess().getWhenKeyword_9_0());
                      			
                    }
                    // InternalMickeyLang.g:4522:4: ( (lv_whenExpression_16_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:4523:5: (lv_whenExpression_16_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:4523:5: (lv_whenExpression_16_0= ruleSqlExpression )
                    // InternalMickeyLang.g:4524:6: lv_whenExpression_16_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getCreateTriggerStatementAccess().getWhenExpressionSqlExpressionParserRuleCall_9_1_0());
                      					
                    }
                    pushFollow(FOLLOW_78);
                    lv_whenExpression_16_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getCreateTriggerStatementRule());
                      						}
                      						set(
                      							current,
                      							"whenExpression",
                      							lv_whenExpression_16_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_17=(Token)match(input,106,FOLLOW_79); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_17, grammarAccess.getCreateTriggerStatementAccess().getBeginKeyword_10());
              		
            }
            // InternalMickeyLang.g:4546:3: ( ( (lv_statements_18_0= ruleDMLStatement ) ) otherlv_19= ';' ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )* )?
            int alt84=2;
            int LA84_0 = input.LA(1);

            if ( (LA84_0==75||(LA84_0>=101 && LA84_0<=103)||LA84_0==120) ) {
                alt84=1;
            }
            switch (alt84) {
                case 1 :
                    // InternalMickeyLang.g:4547:4: ( (lv_statements_18_0= ruleDMLStatement ) ) otherlv_19= ';' ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )*
                    {
                    // InternalMickeyLang.g:4547:4: ( (lv_statements_18_0= ruleDMLStatement ) )
                    // InternalMickeyLang.g:4548:5: (lv_statements_18_0= ruleDMLStatement )
                    {
                    // InternalMickeyLang.g:4548:5: (lv_statements_18_0= ruleDMLStatement )
                    // InternalMickeyLang.g:4549:6: lv_statements_18_0= ruleDMLStatement
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getCreateTriggerStatementAccess().getStatementsDMLStatementParserRuleCall_11_0_0());
                      					
                    }
                    pushFollow(FOLLOW_12);
                    lv_statements_18_0=ruleDMLStatement();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getCreateTriggerStatementRule());
                      						}
                      						add(
                      							current,
                      							"statements",
                      							lv_statements_18_0,
                      							"com.justeat.mickeydb.MickeyLang.DMLStatement");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    otherlv_19=(Token)match(input,19,FOLLOW_79); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_19, grammarAccess.getCreateTriggerStatementAccess().getSemicolonKeyword_11_1());
                      			
                    }
                    // InternalMickeyLang.g:4570:4: ( ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';' )*
                    loop83:
                    do {
                        int alt83=2;
                        int LA83_0 = input.LA(1);

                        if ( (LA83_0==75||(LA83_0>=101 && LA83_0<=103)||LA83_0==120) ) {
                            alt83=1;
                        }


                        switch (alt83) {
                    	case 1 :
                    	    // InternalMickeyLang.g:4571:5: ( (lv_statements_20_0= ruleDMLStatement ) ) otherlv_21= ';'
                    	    {
                    	    // InternalMickeyLang.g:4571:5: ( (lv_statements_20_0= ruleDMLStatement ) )
                    	    // InternalMickeyLang.g:4572:6: (lv_statements_20_0= ruleDMLStatement )
                    	    {
                    	    // InternalMickeyLang.g:4572:6: (lv_statements_20_0= ruleDMLStatement )
                    	    // InternalMickeyLang.g:4573:7: lv_statements_20_0= ruleDMLStatement
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getCreateTriggerStatementAccess().getStatementsDMLStatementParserRuleCall_11_2_0_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_12);
                    	    lv_statements_20_0=ruleDMLStatement();

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

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getCreateTriggerStatementRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"statements",
                    	      								lv_statements_20_0,
                    	      								"com.justeat.mickeydb.MickeyLang.DMLStatement");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }

                    	    otherlv_21=(Token)match(input,19,FOLLOW_79); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_21, grammarAccess.getCreateTriggerStatementAccess().getSemicolonKeyword_11_2_1());
                    	      				
                    	    }

                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_22=(Token)match(input,66,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_22, grammarAccess.getCreateTriggerStatementAccess().getEndKeyword_12());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCreateTriggerStatement"


    // $ANTLR start "entryRuleAlterTableRenameStatement"
    // InternalMickeyLang.g:4604:1: entryRuleAlterTableRenameStatement returns [EObject current=null] : iv_ruleAlterTableRenameStatement= ruleAlterTableRenameStatement EOF ;
    public final EObject entryRuleAlterTableRenameStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAlterTableRenameStatement = null;


        try {
            // InternalMickeyLang.g:4604:66: (iv_ruleAlterTableRenameStatement= ruleAlterTableRenameStatement EOF )
            // InternalMickeyLang.g:4605:2: iv_ruleAlterTableRenameStatement= ruleAlterTableRenameStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAlterTableRenameStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAlterTableRenameStatement=ruleAlterTableRenameStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAlterTableRenameStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAlterTableRenameStatement"


    // $ANTLR start "ruleAlterTableRenameStatement"
    // InternalMickeyLang.g:4611:1: ruleAlterTableRenameStatement returns [EObject current=null] : ( () otherlv_1= 'alter' otherlv_2= 'table' ( (otherlv_3= RULE_ID ) ) otherlv_4= 'rename to' ( (lv_name_5_0= RULE_ID ) ) ) ;
    public final EObject ruleAlterTableRenameStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_name_5_0=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:4617:2: ( ( () otherlv_1= 'alter' otherlv_2= 'table' ( (otherlv_3= RULE_ID ) ) otherlv_4= 'rename to' ( (lv_name_5_0= RULE_ID ) ) ) )
            // InternalMickeyLang.g:4618:2: ( () otherlv_1= 'alter' otherlv_2= 'table' ( (otherlv_3= RULE_ID ) ) otherlv_4= 'rename to' ( (lv_name_5_0= RULE_ID ) ) )
            {
            // InternalMickeyLang.g:4618:2: ( () otherlv_1= 'alter' otherlv_2= 'table' ( (otherlv_3= RULE_ID ) ) otherlv_4= 'rename to' ( (lv_name_5_0= RULE_ID ) ) )
            // InternalMickeyLang.g:4619:3: () otherlv_1= 'alter' otherlv_2= 'table' ( (otherlv_3= RULE_ID ) ) otherlv_4= 'rename to' ( (lv_name_5_0= RULE_ID ) )
            {
            // InternalMickeyLang.g:4619:3: ()
            // InternalMickeyLang.g:4620:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getAlterTableRenameStatementAccess().getAlterTableRenameStatementAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,107,FOLLOW_66); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getAlterTableRenameStatementAccess().getAlterKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,95,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getAlterTableRenameStatementAccess().getTableKeyword_2());
              		
            }
            // InternalMickeyLang.g:4634:3: ( (otherlv_3= RULE_ID ) )
            // InternalMickeyLang.g:4635:4: (otherlv_3= RULE_ID )
            {
            // InternalMickeyLang.g:4635:4: (otherlv_3= RULE_ID )
            // InternalMickeyLang.g:4636:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAlterTableRenameStatementRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_80); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getAlterTableRenameStatementAccess().getTableTableDefinitionCrossReference_3_0());
              				
            }

            }


            }

            otherlv_4=(Token)match(input,108,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getAlterTableRenameStatementAccess().getRenameToKeyword_4());
              		
            }
            // InternalMickeyLang.g:4651:3: ( (lv_name_5_0= RULE_ID ) )
            // InternalMickeyLang.g:4652:4: (lv_name_5_0= RULE_ID )
            {
            // InternalMickeyLang.g:4652:4: (lv_name_5_0= RULE_ID )
            // InternalMickeyLang.g:4653:5: lv_name_5_0= RULE_ID
            {
            lv_name_5_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_5_0, grammarAccess.getAlterTableRenameStatementAccess().getNameIDTerminalRuleCall_5_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAlterTableRenameStatementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_5_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAlterTableRenameStatement"


    // $ANTLR start "entryRuleAlterTableAddColumnStatement"
    // InternalMickeyLang.g:4673:1: entryRuleAlterTableAddColumnStatement returns [EObject current=null] : iv_ruleAlterTableAddColumnStatement= ruleAlterTableAddColumnStatement EOF ;
    public final EObject entryRuleAlterTableAddColumnStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAlterTableAddColumnStatement = null;


        try {
            // InternalMickeyLang.g:4673:69: (iv_ruleAlterTableAddColumnStatement= ruleAlterTableAddColumnStatement EOF )
            // InternalMickeyLang.g:4674:2: iv_ruleAlterTableAddColumnStatement= ruleAlterTableAddColumnStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAlterTableAddColumnStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAlterTableAddColumnStatement=ruleAlterTableAddColumnStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAlterTableAddColumnStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAlterTableAddColumnStatement"


    // $ANTLR start "ruleAlterTableAddColumnStatement"
    // InternalMickeyLang.g:4680:1: ruleAlterTableAddColumnStatement returns [EObject current=null] : (otherlv_0= 'alter' otherlv_1= 'table' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'add column' ( (lv_columnDef_4_0= ruleColumnDef ) ) ) ;
    public final EObject ruleAlterTableAddColumnStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        EObject lv_columnDef_4_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:4686:2: ( (otherlv_0= 'alter' otherlv_1= 'table' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'add column' ( (lv_columnDef_4_0= ruleColumnDef ) ) ) )
            // InternalMickeyLang.g:4687:2: (otherlv_0= 'alter' otherlv_1= 'table' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'add column' ( (lv_columnDef_4_0= ruleColumnDef ) ) )
            {
            // InternalMickeyLang.g:4687:2: (otherlv_0= 'alter' otherlv_1= 'table' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'add column' ( (lv_columnDef_4_0= ruleColumnDef ) ) )
            // InternalMickeyLang.g:4688:3: otherlv_0= 'alter' otherlv_1= 'table' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'add column' ( (lv_columnDef_4_0= ruleColumnDef ) )
            {
            otherlv_0=(Token)match(input,107,FOLLOW_66); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getAlterTableAddColumnStatementAccess().getAlterKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,95,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getAlterTableAddColumnStatementAccess().getTableKeyword_1());
              		
            }
            // InternalMickeyLang.g:4696:3: ( (otherlv_2= RULE_ID ) )
            // InternalMickeyLang.g:4697:4: (otherlv_2= RULE_ID )
            {
            // InternalMickeyLang.g:4697:4: (otherlv_2= RULE_ID )
            // InternalMickeyLang.g:4698:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAlterTableAddColumnStatementRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_81); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getAlterTableAddColumnStatementAccess().getTableTableDefinitionCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,109,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getAlterTableAddColumnStatementAccess().getAddColumnKeyword_3());
              		
            }
            // InternalMickeyLang.g:4713:3: ( (lv_columnDef_4_0= ruleColumnDef ) )
            // InternalMickeyLang.g:4714:4: (lv_columnDef_4_0= ruleColumnDef )
            {
            // InternalMickeyLang.g:4714:4: (lv_columnDef_4_0= ruleColumnDef )
            // InternalMickeyLang.g:4715:5: lv_columnDef_4_0= ruleColumnDef
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getAlterTableAddColumnStatementAccess().getColumnDefColumnDefParserRuleCall_4_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_columnDef_4_0=ruleColumnDef();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getAlterTableAddColumnStatementRule());
              					}
              					set(
              						current,
              						"columnDef",
              						lv_columnDef_4_0,
              						"com.justeat.mickeydb.MickeyLang.ColumnDef");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAlterTableAddColumnStatement"


    // $ANTLR start "entryRuleDropTableStatement"
    // InternalMickeyLang.g:4736:1: entryRuleDropTableStatement returns [EObject current=null] : iv_ruleDropTableStatement= ruleDropTableStatement EOF ;
    public final EObject entryRuleDropTableStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDropTableStatement = null;


        try {
            // InternalMickeyLang.g:4736:59: (iv_ruleDropTableStatement= ruleDropTableStatement EOF )
            // InternalMickeyLang.g:4737:2: iv_ruleDropTableStatement= ruleDropTableStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDropTableStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDropTableStatement=ruleDropTableStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDropTableStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDropTableStatement"


    // $ANTLR start "ruleDropTableStatement"
    // InternalMickeyLang.g:4743:1: ruleDropTableStatement returns [EObject current=null] : (otherlv_0= 'drop' otherlv_1= 'table' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) ;
    public final EObject ruleDropTableStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_ifExists_2_0=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:4749:2: ( (otherlv_0= 'drop' otherlv_1= 'table' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) )
            // InternalMickeyLang.g:4750:2: (otherlv_0= 'drop' otherlv_1= 'table' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            {
            // InternalMickeyLang.g:4750:2: (otherlv_0= 'drop' otherlv_1= 'table' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            // InternalMickeyLang.g:4751:3: otherlv_0= 'drop' otherlv_1= 'table' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,110,FOLLOW_66); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDropTableStatementAccess().getDropKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,95,FOLLOW_82); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getDropTableStatementAccess().getTableKeyword_1());
              		
            }
            // InternalMickeyLang.g:4759:3: ( (lv_ifExists_2_0= 'if exists' ) )?
            int alt85=2;
            int LA85_0 = input.LA(1);

            if ( (LA85_0==111) ) {
                alt85=1;
            }
            switch (alt85) {
                case 1 :
                    // InternalMickeyLang.g:4760:4: (lv_ifExists_2_0= 'if exists' )
                    {
                    // InternalMickeyLang.g:4760:4: (lv_ifExists_2_0= 'if exists' )
                    // InternalMickeyLang.g:4761:5: lv_ifExists_2_0= 'if exists'
                    {
                    lv_ifExists_2_0=(Token)match(input,111,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_ifExists_2_0, grammarAccess.getDropTableStatementAccess().getIfExistsIfExistsKeyword_2_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getDropTableStatementRule());
                      					}
                      					setWithLastConsumed(current, "ifExists", true, "if exists");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:4773:3: ( (otherlv_3= RULE_ID ) )
            // InternalMickeyLang.g:4774:4: (otherlv_3= RULE_ID )
            {
            // InternalMickeyLang.g:4774:4: (otherlv_3= RULE_ID )
            // InternalMickeyLang.g:4775:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDropTableStatementRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getDropTableStatementAccess().getTableTableDefinitionCrossReference_3_0());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDropTableStatement"


    // $ANTLR start "entryRuleDropTriggerStatement"
    // InternalMickeyLang.g:4790:1: entryRuleDropTriggerStatement returns [EObject current=null] : iv_ruleDropTriggerStatement= ruleDropTriggerStatement EOF ;
    public final EObject entryRuleDropTriggerStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDropTriggerStatement = null;


        try {
            // InternalMickeyLang.g:4790:61: (iv_ruleDropTriggerStatement= ruleDropTriggerStatement EOF )
            // InternalMickeyLang.g:4791:2: iv_ruleDropTriggerStatement= ruleDropTriggerStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDropTriggerStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDropTriggerStatement=ruleDropTriggerStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDropTriggerStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDropTriggerStatement"


    // $ANTLR start "ruleDropTriggerStatement"
    // InternalMickeyLang.g:4797:1: ruleDropTriggerStatement returns [EObject current=null] : (otherlv_0= 'drop' otherlv_1= 'trigger' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) ;
    public final EObject ruleDropTriggerStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_ifExists_2_0=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:4803:2: ( (otherlv_0= 'drop' otherlv_1= 'trigger' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) )
            // InternalMickeyLang.g:4804:2: (otherlv_0= 'drop' otherlv_1= 'trigger' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            {
            // InternalMickeyLang.g:4804:2: (otherlv_0= 'drop' otherlv_1= 'trigger' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            // InternalMickeyLang.g:4805:3: otherlv_0= 'drop' otherlv_1= 'trigger' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,110,FOLLOW_71); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDropTriggerStatementAccess().getDropKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,97,FOLLOW_82); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getDropTriggerStatementAccess().getTriggerKeyword_1());
              		
            }
            // InternalMickeyLang.g:4813:3: ( (lv_ifExists_2_0= 'if exists' ) )?
            int alt86=2;
            int LA86_0 = input.LA(1);

            if ( (LA86_0==111) ) {
                alt86=1;
            }
            switch (alt86) {
                case 1 :
                    // InternalMickeyLang.g:4814:4: (lv_ifExists_2_0= 'if exists' )
                    {
                    // InternalMickeyLang.g:4814:4: (lv_ifExists_2_0= 'if exists' )
                    // InternalMickeyLang.g:4815:5: lv_ifExists_2_0= 'if exists'
                    {
                    lv_ifExists_2_0=(Token)match(input,111,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_ifExists_2_0, grammarAccess.getDropTriggerStatementAccess().getIfExistsIfExistsKeyword_2_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getDropTriggerStatementRule());
                      					}
                      					setWithLastConsumed(current, "ifExists", true, "if exists");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:4827:3: ( (otherlv_3= RULE_ID ) )
            // InternalMickeyLang.g:4828:4: (otherlv_3= RULE_ID )
            {
            // InternalMickeyLang.g:4828:4: (otherlv_3= RULE_ID )
            // InternalMickeyLang.g:4829:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDropTriggerStatementRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getDropTriggerStatementAccess().getTriggerCreateTriggerStatementCrossReference_3_0());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDropTriggerStatement"


    // $ANTLR start "entryRuleDropViewStatement"
    // InternalMickeyLang.g:4844:1: entryRuleDropViewStatement returns [EObject current=null] : iv_ruleDropViewStatement= ruleDropViewStatement EOF ;
    public final EObject entryRuleDropViewStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDropViewStatement = null;


        try {
            // InternalMickeyLang.g:4844:58: (iv_ruleDropViewStatement= ruleDropViewStatement EOF )
            // InternalMickeyLang.g:4845:2: iv_ruleDropViewStatement= ruleDropViewStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDropViewStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDropViewStatement=ruleDropViewStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDropViewStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDropViewStatement"


    // $ANTLR start "ruleDropViewStatement"
    // InternalMickeyLang.g:4851:1: ruleDropViewStatement returns [EObject current=null] : (otherlv_0= 'drop' otherlv_1= 'view' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) ;
    public final EObject ruleDropViewStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_ifExists_2_0=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:4857:2: ( (otherlv_0= 'drop' otherlv_1= 'view' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) )
            // InternalMickeyLang.g:4858:2: (otherlv_0= 'drop' otherlv_1= 'view' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            {
            // InternalMickeyLang.g:4858:2: (otherlv_0= 'drop' otherlv_1= 'view' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            // InternalMickeyLang.g:4859:3: otherlv_0= 'drop' otherlv_1= 'view' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,110,FOLLOW_69); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDropViewStatementAccess().getDropKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,96,FOLLOW_82); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getDropViewStatementAccess().getViewKeyword_1());
              		
            }
            // InternalMickeyLang.g:4867:3: ( (lv_ifExists_2_0= 'if exists' ) )?
            int alt87=2;
            int LA87_0 = input.LA(1);

            if ( (LA87_0==111) ) {
                alt87=1;
            }
            switch (alt87) {
                case 1 :
                    // InternalMickeyLang.g:4868:4: (lv_ifExists_2_0= 'if exists' )
                    {
                    // InternalMickeyLang.g:4868:4: (lv_ifExists_2_0= 'if exists' )
                    // InternalMickeyLang.g:4869:5: lv_ifExists_2_0= 'if exists'
                    {
                    lv_ifExists_2_0=(Token)match(input,111,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_ifExists_2_0, grammarAccess.getDropViewStatementAccess().getIfExistsIfExistsKeyword_2_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getDropViewStatementRule());
                      					}
                      					setWithLastConsumed(current, "ifExists", true, "if exists");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:4881:3: ( (otherlv_3= RULE_ID ) )
            // InternalMickeyLang.g:4882:4: (otherlv_3= RULE_ID )
            {
            // InternalMickeyLang.g:4882:4: (otherlv_3= RULE_ID )
            // InternalMickeyLang.g:4883:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDropViewStatementRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getDropViewStatementAccess().getViewCreateViewStatementCrossReference_3_0());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDropViewStatement"


    // $ANTLR start "entryRuleCreateIndexStatement"
    // InternalMickeyLang.g:4898:1: entryRuleCreateIndexStatement returns [EObject current=null] : iv_ruleCreateIndexStatement= ruleCreateIndexStatement EOF ;
    public final EObject entryRuleCreateIndexStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCreateIndexStatement = null;


        try {
            // InternalMickeyLang.g:4898:61: (iv_ruleCreateIndexStatement= ruleCreateIndexStatement EOF )
            // InternalMickeyLang.g:4899:2: iv_ruleCreateIndexStatement= ruleCreateIndexStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCreateIndexStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleCreateIndexStatement=ruleCreateIndexStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCreateIndexStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCreateIndexStatement"


    // $ANTLR start "ruleCreateIndexStatement"
    // InternalMickeyLang.g:4905:1: ruleCreateIndexStatement returns [EObject current=null] : (otherlv_0= 'create' ( (lv_unique_1_0= 'unique' ) )? otherlv_2= 'index' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'on' ( (otherlv_5= RULE_ID ) ) otherlv_6= '(' ( (lv_columns_7_0= ruleIndexedColumn ) ) (otherlv_8= ',' ( (lv_columns_9_0= ruleIndexedColumn ) ) )* otherlv_10= ')' ) ;
    public final EObject ruleCreateIndexStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_unique_1_0=null;
        Token otherlv_2=null;
        Token lv_name_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        EObject lv_columns_7_0 = null;

        EObject lv_columns_9_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:4911:2: ( (otherlv_0= 'create' ( (lv_unique_1_0= 'unique' ) )? otherlv_2= 'index' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'on' ( (otherlv_5= RULE_ID ) ) otherlv_6= '(' ( (lv_columns_7_0= ruleIndexedColumn ) ) (otherlv_8= ',' ( (lv_columns_9_0= ruleIndexedColumn ) ) )* otherlv_10= ')' ) )
            // InternalMickeyLang.g:4912:2: (otherlv_0= 'create' ( (lv_unique_1_0= 'unique' ) )? otherlv_2= 'index' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'on' ( (otherlv_5= RULE_ID ) ) otherlv_6= '(' ( (lv_columns_7_0= ruleIndexedColumn ) ) (otherlv_8= ',' ( (lv_columns_9_0= ruleIndexedColumn ) ) )* otherlv_10= ')' )
            {
            // InternalMickeyLang.g:4912:2: (otherlv_0= 'create' ( (lv_unique_1_0= 'unique' ) )? otherlv_2= 'index' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'on' ( (otherlv_5= RULE_ID ) ) otherlv_6= '(' ( (lv_columns_7_0= ruleIndexedColumn ) ) (otherlv_8= ',' ( (lv_columns_9_0= ruleIndexedColumn ) ) )* otherlv_10= ')' )
            // InternalMickeyLang.g:4913:3: otherlv_0= 'create' ( (lv_unique_1_0= 'unique' ) )? otherlv_2= 'index' ( (lv_name_3_0= RULE_ID ) ) otherlv_4= 'on' ( (otherlv_5= RULE_ID ) ) otherlv_6= '(' ( (lv_columns_7_0= ruleIndexedColumn ) ) (otherlv_8= ',' ( (lv_columns_9_0= ruleIndexedColumn ) ) )* otherlv_10= ')'
            {
            otherlv_0=(Token)match(input,93,FOLLOW_83); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getCreateIndexStatementAccess().getCreateKeyword_0());
              		
            }
            // InternalMickeyLang.g:4917:3: ( (lv_unique_1_0= 'unique' ) )?
            int alt88=2;
            int LA88_0 = input.LA(1);

            if ( (LA88_0==23) ) {
                alt88=1;
            }
            switch (alt88) {
                case 1 :
                    // InternalMickeyLang.g:4918:4: (lv_unique_1_0= 'unique' )
                    {
                    // InternalMickeyLang.g:4918:4: (lv_unique_1_0= 'unique' )
                    // InternalMickeyLang.g:4919:5: lv_unique_1_0= 'unique'
                    {
                    lv_unique_1_0=(Token)match(input,23,FOLLOW_84); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_unique_1_0, grammarAccess.getCreateIndexStatementAccess().getUniqueUniqueKeyword_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getCreateIndexStatementRule());
                      					}
                      					setWithLastConsumed(current, "unique", true, "unique");
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_2=(Token)match(input,112,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getCreateIndexStatementAccess().getIndexKeyword_2());
              		
            }
            // InternalMickeyLang.g:4935:3: ( (lv_name_3_0= RULE_ID ) )
            // InternalMickeyLang.g:4936:4: (lv_name_3_0= RULE_ID )
            {
            // InternalMickeyLang.g:4936:4: (lv_name_3_0= RULE_ID )
            // InternalMickeyLang.g:4937:5: lv_name_3_0= RULE_ID
            {
            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_14); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_3_0, grammarAccess.getCreateIndexStatementAccess().getNameIDTerminalRuleCall_3_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getCreateIndexStatementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            otherlv_4=(Token)match(input,22,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getCreateIndexStatementAccess().getOnKeyword_4());
              		
            }
            // InternalMickeyLang.g:4957:3: ( (otherlv_5= RULE_ID ) )
            // InternalMickeyLang.g:4958:4: (otherlv_5= RULE_ID )
            {
            // InternalMickeyLang.g:4958:4: (otherlv_5= RULE_ID )
            // InternalMickeyLang.g:4959:5: otherlv_5= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getCreateIndexStatementRule());
              					}
              				
            }
            otherlv_5=(Token)match(input,RULE_ID,FOLLOW_5); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_5, grammarAccess.getCreateIndexStatementAccess().getTableTableDefinitionCrossReference_5_0());
              				
            }

            }


            }

            otherlv_6=(Token)match(input,14,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getCreateIndexStatementAccess().getLeftParenthesisKeyword_6());
              		
            }
            // InternalMickeyLang.g:4974:3: ( (lv_columns_7_0= ruleIndexedColumn ) )
            // InternalMickeyLang.g:4975:4: (lv_columns_7_0= ruleIndexedColumn )
            {
            // InternalMickeyLang.g:4975:4: (lv_columns_7_0= ruleIndexedColumn )
            // InternalMickeyLang.g:4976:5: lv_columns_7_0= ruleIndexedColumn
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getCreateIndexStatementAccess().getColumnsIndexedColumnParserRuleCall_7_0());
              				
            }
            pushFollow(FOLLOW_7);
            lv_columns_7_0=ruleIndexedColumn();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getCreateIndexStatementRule());
              					}
              					add(
              						current,
              						"columns",
              						lv_columns_7_0,
              						"com.justeat.mickeydb.MickeyLang.IndexedColumn");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:4993:3: (otherlv_8= ',' ( (lv_columns_9_0= ruleIndexedColumn ) ) )*
            loop89:
            do {
                int alt89=2;
                int LA89_0 = input.LA(1);

                if ( (LA89_0==15) ) {
                    alt89=1;
                }


                switch (alt89) {
            	case 1 :
            	    // InternalMickeyLang.g:4994:4: otherlv_8= ',' ( (lv_columns_9_0= ruleIndexedColumn ) )
            	    {
            	    otherlv_8=(Token)match(input,15,FOLLOW_3); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_8, grammarAccess.getCreateIndexStatementAccess().getCommaKeyword_8_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:4998:4: ( (lv_columns_9_0= ruleIndexedColumn ) )
            	    // InternalMickeyLang.g:4999:5: (lv_columns_9_0= ruleIndexedColumn )
            	    {
            	    // InternalMickeyLang.g:4999:5: (lv_columns_9_0= ruleIndexedColumn )
            	    // InternalMickeyLang.g:5000:6: lv_columns_9_0= ruleIndexedColumn
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getCreateIndexStatementAccess().getColumnsIndexedColumnParserRuleCall_8_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_7);
            	    lv_columns_9_0=ruleIndexedColumn();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getCreateIndexStatementRule());
            	      						}
            	      						add(
            	      							current,
            	      							"columns",
            	      							lv_columns_9_0,
            	      							"com.justeat.mickeydb.MickeyLang.IndexedColumn");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_10=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_10, grammarAccess.getCreateIndexStatementAccess().getRightParenthesisKeyword_9());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCreateIndexStatement"


    // $ANTLR start "entryRuleDropIndexStatement"
    // InternalMickeyLang.g:5026:1: entryRuleDropIndexStatement returns [EObject current=null] : iv_ruleDropIndexStatement= ruleDropIndexStatement EOF ;
    public final EObject entryRuleDropIndexStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDropIndexStatement = null;


        try {
            // InternalMickeyLang.g:5026:59: (iv_ruleDropIndexStatement= ruleDropIndexStatement EOF )
            // InternalMickeyLang.g:5027:2: iv_ruleDropIndexStatement= ruleDropIndexStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDropIndexStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDropIndexStatement=ruleDropIndexStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDropIndexStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDropIndexStatement"


    // $ANTLR start "ruleDropIndexStatement"
    // InternalMickeyLang.g:5033:1: ruleDropIndexStatement returns [EObject current=null] : (otherlv_0= 'drop' otherlv_1= 'index' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) ;
    public final EObject ruleDropIndexStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_ifExists_2_0=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:5039:2: ( (otherlv_0= 'drop' otherlv_1= 'index' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) ) )
            // InternalMickeyLang.g:5040:2: (otherlv_0= 'drop' otherlv_1= 'index' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            {
            // InternalMickeyLang.g:5040:2: (otherlv_0= 'drop' otherlv_1= 'index' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) ) )
            // InternalMickeyLang.g:5041:3: otherlv_0= 'drop' otherlv_1= 'index' ( (lv_ifExists_2_0= 'if exists' ) )? ( (otherlv_3= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,110,FOLLOW_84); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDropIndexStatementAccess().getDropKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,112,FOLLOW_82); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getDropIndexStatementAccess().getIndexKeyword_1());
              		
            }
            // InternalMickeyLang.g:5049:3: ( (lv_ifExists_2_0= 'if exists' ) )?
            int alt90=2;
            int LA90_0 = input.LA(1);

            if ( (LA90_0==111) ) {
                alt90=1;
            }
            switch (alt90) {
                case 1 :
                    // InternalMickeyLang.g:5050:4: (lv_ifExists_2_0= 'if exists' )
                    {
                    // InternalMickeyLang.g:5050:4: (lv_ifExists_2_0= 'if exists' )
                    // InternalMickeyLang.g:5051:5: lv_ifExists_2_0= 'if exists'
                    {
                    lv_ifExists_2_0=(Token)match(input,111,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_ifExists_2_0, grammarAccess.getDropIndexStatementAccess().getIfExistsIfExistsKeyword_2_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getDropIndexStatementRule());
                      					}
                      					setWithLastConsumed(current, "ifExists", true, "if exists");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:5063:3: ( (otherlv_3= RULE_ID ) )
            // InternalMickeyLang.g:5064:4: (otherlv_3= RULE_ID )
            {
            // InternalMickeyLang.g:5064:4: (otherlv_3= RULE_ID )
            // InternalMickeyLang.g:5065:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDropIndexStatementRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getDropIndexStatementAccess().getIndexCreateIndexStatementCrossReference_3_0());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDropIndexStatement"


    // $ANTLR start "entryRuleColumnDef"
    // InternalMickeyLang.g:5080:1: entryRuleColumnDef returns [EObject current=null] : iv_ruleColumnDef= ruleColumnDef EOF ;
    public final EObject entryRuleColumnDef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleColumnDef = null;


        try {
            // InternalMickeyLang.g:5080:50: (iv_ruleColumnDef= ruleColumnDef EOF )
            // InternalMickeyLang.g:5081:2: iv_ruleColumnDef= ruleColumnDef EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getColumnDefRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleColumnDef=ruleColumnDef();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleColumnDef; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleColumnDef"


    // $ANTLR start "ruleColumnDef"
    // InternalMickeyLang.g:5087:1: ruleColumnDef returns [EObject current=null] : ( () ( (lv_name_1_0= RULE_ID ) ) ( (lv_type_2_0= ruleColumnType ) ) ( (lv_constraints_3_0= ruleColumnConstraint ) )* ) ;
    public final EObject ruleColumnDef() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Enumerator lv_type_2_0 = null;

        EObject lv_constraints_3_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5093:2: ( ( () ( (lv_name_1_0= RULE_ID ) ) ( (lv_type_2_0= ruleColumnType ) ) ( (lv_constraints_3_0= ruleColumnConstraint ) )* ) )
            // InternalMickeyLang.g:5094:2: ( () ( (lv_name_1_0= RULE_ID ) ) ( (lv_type_2_0= ruleColumnType ) ) ( (lv_constraints_3_0= ruleColumnConstraint ) )* )
            {
            // InternalMickeyLang.g:5094:2: ( () ( (lv_name_1_0= RULE_ID ) ) ( (lv_type_2_0= ruleColumnType ) ) ( (lv_constraints_3_0= ruleColumnConstraint ) )* )
            // InternalMickeyLang.g:5095:3: () ( (lv_name_1_0= RULE_ID ) ) ( (lv_type_2_0= ruleColumnType ) ) ( (lv_constraints_3_0= ruleColumnConstraint ) )*
            {
            // InternalMickeyLang.g:5095:3: ()
            // InternalMickeyLang.g:5096:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getColumnDefAccess().getColumnDefAction_0(),
              					current);
              			
            }

            }

            // InternalMickeyLang.g:5102:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalMickeyLang.g:5103:4: (lv_name_1_0= RULE_ID )
            {
            // InternalMickeyLang.g:5103:4: (lv_name_1_0= RULE_ID )
            // InternalMickeyLang.g:5104:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getColumnDefAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getColumnDefRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalMickeyLang.g:5120:3: ( (lv_type_2_0= ruleColumnType ) )
            // InternalMickeyLang.g:5121:4: (lv_type_2_0= ruleColumnType )
            {
            // InternalMickeyLang.g:5121:4: (lv_type_2_0= ruleColumnType )
            // InternalMickeyLang.g:5122:5: lv_type_2_0= ruleColumnType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getColumnDefAccess().getTypeColumnTypeEnumRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_85);
            lv_type_2_0=ruleColumnType();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getColumnDefRule());
              					}
              					set(
              						current,
              						"type",
              						lv_type_2_0,
              						"com.justeat.mickeydb.MickeyLang.ColumnType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:5139:3: ( (lv_constraints_3_0= ruleColumnConstraint ) )*
            loop91:
            do {
                int alt91=2;
                int LA91_0 = input.LA(1);

                if ( (LA91_0==23||LA91_0==57||LA91_0==113||(LA91_0>=115 && LA91_0<=116)) ) {
                    alt91=1;
                }


                switch (alt91) {
            	case 1 :
            	    // InternalMickeyLang.g:5140:4: (lv_constraints_3_0= ruleColumnConstraint )
            	    {
            	    // InternalMickeyLang.g:5140:4: (lv_constraints_3_0= ruleColumnConstraint )
            	    // InternalMickeyLang.g:5141:5: lv_constraints_3_0= ruleColumnConstraint
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getColumnDefAccess().getConstraintsColumnConstraintParserRuleCall_3_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_85);
            	    lv_constraints_3_0=ruleColumnConstraint();

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

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getColumnDefRule());
            	      					}
            	      					add(
            	      						current,
            	      						"constraints",
            	      						lv_constraints_3_0,
            	      						"com.justeat.mickeydb.MickeyLang.ColumnConstraint");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleColumnDef"


    // $ANTLR start "entryRuleColumnConstraint"
    // InternalMickeyLang.g:5162:1: entryRuleColumnConstraint returns [EObject current=null] : iv_ruleColumnConstraint= ruleColumnConstraint EOF ;
    public final EObject entryRuleColumnConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleColumnConstraint = null;


        try {
            // InternalMickeyLang.g:5162:57: (iv_ruleColumnConstraint= ruleColumnConstraint EOF )
            // InternalMickeyLang.g:5163:2: iv_ruleColumnConstraint= ruleColumnConstraint EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getColumnConstraintRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleColumnConstraint=ruleColumnConstraint();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleColumnConstraint; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleColumnConstraint"


    // $ANTLR start "ruleColumnConstraint"
    // InternalMickeyLang.g:5169:1: ruleColumnConstraint returns [EObject current=null] : ( ( () otherlv_1= 'primary key' ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )? ( (lv_autoincrement_4_0= 'autoincrement' ) )? ) | ( () otherlv_6= 'not null' ( (lv_conflictClause_7_0= ruleConflictClause ) )? ) | ( () otherlv_9= 'unique' ( (lv_conflictClause_10_0= ruleConflictClause ) )? ) | ( () otherlv_12= 'default' ( (lv_defaultValue_13_0= ruleDefaultValue ) ) ) | ( () otherlv_15= 'check' otherlv_16= '(' ( (lv_expression_17_0= ruleSqlExpression ) ) otherlv_18= ')' ) ) ;
    public final EObject ruleColumnConstraint() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_asc_2_0=null;
        Token lv_desc_3_0=null;
        Token lv_autoincrement_4_0=null;
        Token otherlv_6=null;
        Token otherlv_9=null;
        Token otherlv_12=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_18=null;
        EObject lv_conflictClause_7_0 = null;

        EObject lv_conflictClause_10_0 = null;

        EObject lv_defaultValue_13_0 = null;

        EObject lv_expression_17_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5175:2: ( ( ( () otherlv_1= 'primary key' ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )? ( (lv_autoincrement_4_0= 'autoincrement' ) )? ) | ( () otherlv_6= 'not null' ( (lv_conflictClause_7_0= ruleConflictClause ) )? ) | ( () otherlv_9= 'unique' ( (lv_conflictClause_10_0= ruleConflictClause ) )? ) | ( () otherlv_12= 'default' ( (lv_defaultValue_13_0= ruleDefaultValue ) ) ) | ( () otherlv_15= 'check' otherlv_16= '(' ( (lv_expression_17_0= ruleSqlExpression ) ) otherlv_18= ')' ) ) )
            // InternalMickeyLang.g:5176:2: ( ( () otherlv_1= 'primary key' ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )? ( (lv_autoincrement_4_0= 'autoincrement' ) )? ) | ( () otherlv_6= 'not null' ( (lv_conflictClause_7_0= ruleConflictClause ) )? ) | ( () otherlv_9= 'unique' ( (lv_conflictClause_10_0= ruleConflictClause ) )? ) | ( () otherlv_12= 'default' ( (lv_defaultValue_13_0= ruleDefaultValue ) ) ) | ( () otherlv_15= 'check' otherlv_16= '(' ( (lv_expression_17_0= ruleSqlExpression ) ) otherlv_18= ')' ) )
            {
            // InternalMickeyLang.g:5176:2: ( ( () otherlv_1= 'primary key' ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )? ( (lv_autoincrement_4_0= 'autoincrement' ) )? ) | ( () otherlv_6= 'not null' ( (lv_conflictClause_7_0= ruleConflictClause ) )? ) | ( () otherlv_9= 'unique' ( (lv_conflictClause_10_0= ruleConflictClause ) )? ) | ( () otherlv_12= 'default' ( (lv_defaultValue_13_0= ruleDefaultValue ) ) ) | ( () otherlv_15= 'check' otherlv_16= '(' ( (lv_expression_17_0= ruleSqlExpression ) ) otherlv_18= ')' ) )
            int alt96=5;
            switch ( input.LA(1) ) {
            case 113:
                {
                alt96=1;
                }
                break;
            case 57:
                {
                alt96=2;
                }
                break;
            case 23:
                {
                alt96=3;
                }
                break;
            case 115:
                {
                alt96=4;
                }
                break;
            case 116:
                {
                alt96=5;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 96, 0, input);

                throw nvae;
            }

            switch (alt96) {
                case 1 :
                    // InternalMickeyLang.g:5177:3: ( () otherlv_1= 'primary key' ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )? ( (lv_autoincrement_4_0= 'autoincrement' ) )? )
                    {
                    // InternalMickeyLang.g:5177:3: ( () otherlv_1= 'primary key' ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )? ( (lv_autoincrement_4_0= 'autoincrement' ) )? )
                    // InternalMickeyLang.g:5178:4: () otherlv_1= 'primary key' ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )? ( (lv_autoincrement_4_0= 'autoincrement' ) )?
                    {
                    // InternalMickeyLang.g:5178:4: ()
                    // InternalMickeyLang.g:5179:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getColumnConstraintAccess().getPrimaryKeyColumnConstraintAction_0_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_1=(Token)match(input,113,FOLLOW_86); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getColumnConstraintAccess().getPrimaryKeyKeyword_0_1());
                      			
                    }
                    // InternalMickeyLang.g:5189:4: ( ( (lv_asc_2_0= 'asc' ) ) | ( (lv_desc_3_0= 'desc' ) ) )?
                    int alt92=3;
                    int LA92_0 = input.LA(1);

                    if ( (LA92_0==81) ) {
                        alt92=1;
                    }
                    else if ( (LA92_0==82) ) {
                        alt92=2;
                    }
                    switch (alt92) {
                        case 1 :
                            // InternalMickeyLang.g:5190:5: ( (lv_asc_2_0= 'asc' ) )
                            {
                            // InternalMickeyLang.g:5190:5: ( (lv_asc_2_0= 'asc' ) )
                            // InternalMickeyLang.g:5191:6: (lv_asc_2_0= 'asc' )
                            {
                            // InternalMickeyLang.g:5191:6: (lv_asc_2_0= 'asc' )
                            // InternalMickeyLang.g:5192:7: lv_asc_2_0= 'asc'
                            {
                            lv_asc_2_0=(Token)match(input,81,FOLLOW_87); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_asc_2_0, grammarAccess.getColumnConstraintAccess().getAscAscKeyword_0_2_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getColumnConstraintRule());
                              							}
                              							setWithLastConsumed(current, "asc", true, "asc");
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalMickeyLang.g:5205:5: ( (lv_desc_3_0= 'desc' ) )
                            {
                            // InternalMickeyLang.g:5205:5: ( (lv_desc_3_0= 'desc' ) )
                            // InternalMickeyLang.g:5206:6: (lv_desc_3_0= 'desc' )
                            {
                            // InternalMickeyLang.g:5206:6: (lv_desc_3_0= 'desc' )
                            // InternalMickeyLang.g:5207:7: lv_desc_3_0= 'desc'
                            {
                            lv_desc_3_0=(Token)match(input,82,FOLLOW_87); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_desc_3_0, grammarAccess.getColumnConstraintAccess().getDescDescKeyword_0_2_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getColumnConstraintRule());
                              							}
                              							setWithLastConsumed(current, "desc", true, "desc");
                              						
                            }

                            }


                            }


                            }
                            break;

                    }

                    // InternalMickeyLang.g:5220:4: ( (lv_autoincrement_4_0= 'autoincrement' ) )?
                    int alt93=2;
                    int LA93_0 = input.LA(1);

                    if ( (LA93_0==114) ) {
                        alt93=1;
                    }
                    switch (alt93) {
                        case 1 :
                            // InternalMickeyLang.g:5221:5: (lv_autoincrement_4_0= 'autoincrement' )
                            {
                            // InternalMickeyLang.g:5221:5: (lv_autoincrement_4_0= 'autoincrement' )
                            // InternalMickeyLang.g:5222:6: lv_autoincrement_4_0= 'autoincrement'
                            {
                            lv_autoincrement_4_0=(Token)match(input,114,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(lv_autoincrement_4_0, grammarAccess.getColumnConstraintAccess().getAutoincrementAutoincrementKeyword_0_3_0());
                              					
                            }
                            if ( state.backtracking==0 ) {

                              						if (current==null) {
                              							current = createModelElement(grammarAccess.getColumnConstraintRule());
                              						}
                              						setWithLastConsumed(current, "autoincrement", true, "autoincrement");
                              					
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:5236:3: ( () otherlv_6= 'not null' ( (lv_conflictClause_7_0= ruleConflictClause ) )? )
                    {
                    // InternalMickeyLang.g:5236:3: ( () otherlv_6= 'not null' ( (lv_conflictClause_7_0= ruleConflictClause ) )? )
                    // InternalMickeyLang.g:5237:4: () otherlv_6= 'not null' ( (lv_conflictClause_7_0= ruleConflictClause ) )?
                    {
                    // InternalMickeyLang.g:5237:4: ()
                    // InternalMickeyLang.g:5238:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getColumnConstraintAccess().getNotNullConstraintAction_1_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_6=(Token)match(input,57,FOLLOW_88); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getColumnConstraintAccess().getNotNullKeyword_1_1());
                      			
                    }
                    // InternalMickeyLang.g:5248:4: ( (lv_conflictClause_7_0= ruleConflictClause ) )?
                    int alt94=2;
                    int LA94_0 = input.LA(1);

                    if ( (LA94_0==22) ) {
                        alt94=1;
                    }
                    switch (alt94) {
                        case 1 :
                            // InternalMickeyLang.g:5249:5: (lv_conflictClause_7_0= ruleConflictClause )
                            {
                            // InternalMickeyLang.g:5249:5: (lv_conflictClause_7_0= ruleConflictClause )
                            // InternalMickeyLang.g:5250:6: lv_conflictClause_7_0= ruleConflictClause
                            {
                            if ( state.backtracking==0 ) {

                              						newCompositeNode(grammarAccess.getColumnConstraintAccess().getConflictClauseConflictClauseParserRuleCall_1_2_0());
                              					
                            }
                            pushFollow(FOLLOW_2);
                            lv_conflictClause_7_0=ruleConflictClause();

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

                              						if (current==null) {
                              							current = createModelElementForParent(grammarAccess.getColumnConstraintRule());
                              						}
                              						set(
                              							current,
                              							"conflictClause",
                              							lv_conflictClause_7_0,
                              							"com.justeat.mickeydb.MickeyLang.ConflictClause");
                              						afterParserOrEnumRuleCall();
                              					
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:5269:3: ( () otherlv_9= 'unique' ( (lv_conflictClause_10_0= ruleConflictClause ) )? )
                    {
                    // InternalMickeyLang.g:5269:3: ( () otherlv_9= 'unique' ( (lv_conflictClause_10_0= ruleConflictClause ) )? )
                    // InternalMickeyLang.g:5270:4: () otherlv_9= 'unique' ( (lv_conflictClause_10_0= ruleConflictClause ) )?
                    {
                    // InternalMickeyLang.g:5270:4: ()
                    // InternalMickeyLang.g:5271:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getColumnConstraintAccess().getUniqueConstraintAction_2_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_9=(Token)match(input,23,FOLLOW_88); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_9, grammarAccess.getColumnConstraintAccess().getUniqueKeyword_2_1());
                      			
                    }
                    // InternalMickeyLang.g:5281:4: ( (lv_conflictClause_10_0= ruleConflictClause ) )?
                    int alt95=2;
                    int LA95_0 = input.LA(1);

                    if ( (LA95_0==22) ) {
                        alt95=1;
                    }
                    switch (alt95) {
                        case 1 :
                            // InternalMickeyLang.g:5282:5: (lv_conflictClause_10_0= ruleConflictClause )
                            {
                            // InternalMickeyLang.g:5282:5: (lv_conflictClause_10_0= ruleConflictClause )
                            // InternalMickeyLang.g:5283:6: lv_conflictClause_10_0= ruleConflictClause
                            {
                            if ( state.backtracking==0 ) {

                              						newCompositeNode(grammarAccess.getColumnConstraintAccess().getConflictClauseConflictClauseParserRuleCall_2_2_0());
                              					
                            }
                            pushFollow(FOLLOW_2);
                            lv_conflictClause_10_0=ruleConflictClause();

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

                              						if (current==null) {
                              							current = createModelElementForParent(grammarAccess.getColumnConstraintRule());
                              						}
                              						set(
                              							current,
                              							"conflictClause",
                              							lv_conflictClause_10_0,
                              							"com.justeat.mickeydb.MickeyLang.ConflictClause");
                              						afterParserOrEnumRuleCall();
                              					
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:5302:3: ( () otherlv_12= 'default' ( (lv_defaultValue_13_0= ruleDefaultValue ) ) )
                    {
                    // InternalMickeyLang.g:5302:3: ( () otherlv_12= 'default' ( (lv_defaultValue_13_0= ruleDefaultValue ) ) )
                    // InternalMickeyLang.g:5303:4: () otherlv_12= 'default' ( (lv_defaultValue_13_0= ruleDefaultValue ) )
                    {
                    // InternalMickeyLang.g:5303:4: ()
                    // InternalMickeyLang.g:5304:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getColumnConstraintAccess().getDefaultConstraintAction_3_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_12=(Token)match(input,115,FOLLOW_89); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_12, grammarAccess.getColumnConstraintAccess().getDefaultKeyword_3_1());
                      			
                    }
                    // InternalMickeyLang.g:5314:4: ( (lv_defaultValue_13_0= ruleDefaultValue ) )
                    // InternalMickeyLang.g:5315:5: (lv_defaultValue_13_0= ruleDefaultValue )
                    {
                    // InternalMickeyLang.g:5315:5: (lv_defaultValue_13_0= ruleDefaultValue )
                    // InternalMickeyLang.g:5316:6: lv_defaultValue_13_0= ruleDefaultValue
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getColumnConstraintAccess().getDefaultValueDefaultValueParserRuleCall_3_2_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_defaultValue_13_0=ruleDefaultValue();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getColumnConstraintRule());
                      						}
                      						set(
                      							current,
                      							"defaultValue",
                      							lv_defaultValue_13_0,
                      							"com.justeat.mickeydb.MickeyLang.DefaultValue");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 5 :
                    // InternalMickeyLang.g:5335:3: ( () otherlv_15= 'check' otherlv_16= '(' ( (lv_expression_17_0= ruleSqlExpression ) ) otherlv_18= ')' )
                    {
                    // InternalMickeyLang.g:5335:3: ( () otherlv_15= 'check' otherlv_16= '(' ( (lv_expression_17_0= ruleSqlExpression ) ) otherlv_18= ')' )
                    // InternalMickeyLang.g:5336:4: () otherlv_15= 'check' otherlv_16= '(' ( (lv_expression_17_0= ruleSqlExpression ) ) otherlv_18= ')'
                    {
                    // InternalMickeyLang.g:5336:4: ()
                    // InternalMickeyLang.g:5337:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getColumnConstraintAccess().getCheckConstraintAction_4_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_15=(Token)match(input,116,FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_15, grammarAccess.getColumnConstraintAccess().getCheckKeyword_4_1());
                      			
                    }
                    otherlv_16=(Token)match(input,14,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_16, grammarAccess.getColumnConstraintAccess().getLeftParenthesisKeyword_4_2());
                      			
                    }
                    // InternalMickeyLang.g:5351:4: ( (lv_expression_17_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:5352:5: (lv_expression_17_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:5352:5: (lv_expression_17_0= ruleSqlExpression )
                    // InternalMickeyLang.g:5353:6: lv_expression_17_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getColumnConstraintAccess().getExpressionSqlExpressionParserRuleCall_4_3_0());
                      					
                    }
                    pushFollow(FOLLOW_38);
                    lv_expression_17_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getColumnConstraintRule());
                      						}
                      						set(
                      							current,
                      							"expression",
                      							lv_expression_17_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    otherlv_18=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_18, grammarAccess.getColumnConstraintAccess().getRightParenthesisKeyword_4_4());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleColumnConstraint"


    // $ANTLR start "entryRuleTableConstraint"
    // InternalMickeyLang.g:5379:1: entryRuleTableConstraint returns [EObject current=null] : iv_ruleTableConstraint= ruleTableConstraint EOF ;
    public final EObject entryRuleTableConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTableConstraint = null;


        try {
            // InternalMickeyLang.g:5379:56: (iv_ruleTableConstraint= ruleTableConstraint EOF )
            // InternalMickeyLang.g:5380:2: iv_ruleTableConstraint= ruleTableConstraint EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTableConstraintRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleTableConstraint=ruleTableConstraint();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTableConstraint; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTableConstraint"


    // $ANTLR start "ruleTableConstraint"
    // InternalMickeyLang.g:5386:1: ruleTableConstraint returns [EObject current=null] : (this_UniqueTableConstraint_0= ruleUniqueTableConstraint | this_PrimaryConstraint_1= rulePrimaryConstraint | this_CheckTableConstraint_2= ruleCheckTableConstraint ) ;
    public final EObject ruleTableConstraint() throws RecognitionException {
        EObject current = null;

        EObject this_UniqueTableConstraint_0 = null;

        EObject this_PrimaryConstraint_1 = null;

        EObject this_CheckTableConstraint_2 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5392:2: ( (this_UniqueTableConstraint_0= ruleUniqueTableConstraint | this_PrimaryConstraint_1= rulePrimaryConstraint | this_CheckTableConstraint_2= ruleCheckTableConstraint ) )
            // InternalMickeyLang.g:5393:2: (this_UniqueTableConstraint_0= ruleUniqueTableConstraint | this_PrimaryConstraint_1= rulePrimaryConstraint | this_CheckTableConstraint_2= ruleCheckTableConstraint )
            {
            // InternalMickeyLang.g:5393:2: (this_UniqueTableConstraint_0= ruleUniqueTableConstraint | this_PrimaryConstraint_1= rulePrimaryConstraint | this_CheckTableConstraint_2= ruleCheckTableConstraint )
            int alt97=3;
            switch ( input.LA(1) ) {
            case 117:
                {
                int LA97_1 = input.LA(2);

                if ( (LA97_1==RULE_ID) ) {
                    switch ( input.LA(3) ) {
                    case 23:
                        {
                        alt97=1;
                        }
                        break;
                    case 113:
                        {
                        alt97=2;
                        }
                        break;
                    case 116:
                        {
                        alt97=3;
                        }
                        break;
                    default:
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 97, 5, input);

                        throw nvae;
                    }

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

                    throw nvae;
                }
                }
                break;
            case 23:
                {
                alt97=1;
                }
                break;
            case 113:
                {
                alt97=2;
                }
                break;
            case 116:
                {
                alt97=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 97, 0, input);

                throw nvae;
            }

            switch (alt97) {
                case 1 :
                    // InternalMickeyLang.g:5394:3: this_UniqueTableConstraint_0= ruleUniqueTableConstraint
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getTableConstraintAccess().getUniqueTableConstraintParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_UniqueTableConstraint_0=ruleUniqueTableConstraint();

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

                      			current = this_UniqueTableConstraint_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:5403:3: this_PrimaryConstraint_1= rulePrimaryConstraint
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getTableConstraintAccess().getPrimaryConstraintParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_PrimaryConstraint_1=rulePrimaryConstraint();

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

                      			current = this_PrimaryConstraint_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:5412:3: this_CheckTableConstraint_2= ruleCheckTableConstraint
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getTableConstraintAccess().getCheckTableConstraintParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_CheckTableConstraint_2=ruleCheckTableConstraint();

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

                      			current = this_CheckTableConstraint_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTableConstraint"


    // $ANTLR start "entryRuleUniqueTableConstraint"
    // InternalMickeyLang.g:5424:1: entryRuleUniqueTableConstraint returns [EObject current=null] : iv_ruleUniqueTableConstraint= ruleUniqueTableConstraint EOF ;
    public final EObject entryRuleUniqueTableConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUniqueTableConstraint = null;


        try {
            // InternalMickeyLang.g:5424:62: (iv_ruleUniqueTableConstraint= ruleUniqueTableConstraint EOF )
            // InternalMickeyLang.g:5425:2: iv_ruleUniqueTableConstraint= ruleUniqueTableConstraint EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUniqueTableConstraintRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleUniqueTableConstraint=ruleUniqueTableConstraint();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUniqueTableConstraint; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUniqueTableConstraint"


    // $ANTLR start "ruleUniqueTableConstraint"
    // InternalMickeyLang.g:5431:1: ruleUniqueTableConstraint returns [EObject current=null] : ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'unique' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) ) ;
    public final EObject ruleUniqueTableConstraint() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_columns_4_0 = null;

        EObject lv_columns_6_0 = null;

        EObject lv_conflictClause_8_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5437:2: ( ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'unique' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) ) )
            // InternalMickeyLang.g:5438:2: ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'unique' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) )
            {
            // InternalMickeyLang.g:5438:2: ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'unique' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) )
            // InternalMickeyLang.g:5439:3: (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'unique' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) )
            {
            // InternalMickeyLang.g:5439:3: (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )?
            int alt98=2;
            int LA98_0 = input.LA(1);

            if ( (LA98_0==117) ) {
                alt98=1;
            }
            switch (alt98) {
                case 1 :
                    // InternalMickeyLang.g:5440:4: otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) )
                    {
                    otherlv_0=(Token)match(input,117,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_0, grammarAccess.getUniqueTableConstraintAccess().getConstraintKeyword_0_0());
                      			
                    }
                    // InternalMickeyLang.g:5444:4: ( (lv_name_1_0= RULE_ID ) )
                    // InternalMickeyLang.g:5445:5: (lv_name_1_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:5445:5: (lv_name_1_0= RULE_ID )
                    // InternalMickeyLang.g:5446:6: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_90); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_1_0, grammarAccess.getUniqueTableConstraintAccess().getNameIDTerminalRuleCall_0_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getUniqueTableConstraintRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_1_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_2=(Token)match(input,23,FOLLOW_5); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getUniqueTableConstraintAccess().getUniqueKeyword_1());
              		
            }
            otherlv_3=(Token)match(input,14,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getUniqueTableConstraintAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalMickeyLang.g:5471:3: ( (lv_columns_4_0= ruleIndexedColumn ) )
            // InternalMickeyLang.g:5472:4: (lv_columns_4_0= ruleIndexedColumn )
            {
            // InternalMickeyLang.g:5472:4: (lv_columns_4_0= ruleIndexedColumn )
            // InternalMickeyLang.g:5473:5: lv_columns_4_0= ruleIndexedColumn
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getUniqueTableConstraintAccess().getColumnsIndexedColumnParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_7);
            lv_columns_4_0=ruleIndexedColumn();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getUniqueTableConstraintRule());
              					}
              					add(
              						current,
              						"columns",
              						lv_columns_4_0,
              						"com.justeat.mickeydb.MickeyLang.IndexedColumn");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:5490:3: (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )*
            loop99:
            do {
                int alt99=2;
                int LA99_0 = input.LA(1);

                if ( (LA99_0==15) ) {
                    alt99=1;
                }


                switch (alt99) {
            	case 1 :
            	    // InternalMickeyLang.g:5491:4: otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) )
            	    {
            	    otherlv_5=(Token)match(input,15,FOLLOW_3); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_5, grammarAccess.getUniqueTableConstraintAccess().getCommaKeyword_4_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:5495:4: ( (lv_columns_6_0= ruleIndexedColumn ) )
            	    // InternalMickeyLang.g:5496:5: (lv_columns_6_0= ruleIndexedColumn )
            	    {
            	    // InternalMickeyLang.g:5496:5: (lv_columns_6_0= ruleIndexedColumn )
            	    // InternalMickeyLang.g:5497:6: lv_columns_6_0= ruleIndexedColumn
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getUniqueTableConstraintAccess().getColumnsIndexedColumnParserRuleCall_4_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_7);
            	    lv_columns_6_0=ruleIndexedColumn();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getUniqueTableConstraintRule());
            	      						}
            	      						add(
            	      							current,
            	      							"columns",
            	      							lv_columns_6_0,
            	      							"com.justeat.mickeydb.MickeyLang.IndexedColumn");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_7=(Token)match(input,16,FOLLOW_14); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getUniqueTableConstraintAccess().getRightParenthesisKeyword_5());
              		
            }
            // InternalMickeyLang.g:5519:3: ( (lv_conflictClause_8_0= ruleConflictClause ) )
            // InternalMickeyLang.g:5520:4: (lv_conflictClause_8_0= ruleConflictClause )
            {
            // InternalMickeyLang.g:5520:4: (lv_conflictClause_8_0= ruleConflictClause )
            // InternalMickeyLang.g:5521:5: lv_conflictClause_8_0= ruleConflictClause
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getUniqueTableConstraintAccess().getConflictClauseConflictClauseParserRuleCall_6_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_conflictClause_8_0=ruleConflictClause();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getUniqueTableConstraintRule());
              					}
              					set(
              						current,
              						"conflictClause",
              						lv_conflictClause_8_0,
              						"com.justeat.mickeydb.MickeyLang.ConflictClause");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUniqueTableConstraint"


    // $ANTLR start "entryRulePrimaryConstraint"
    // InternalMickeyLang.g:5542:1: entryRulePrimaryConstraint returns [EObject current=null] : iv_rulePrimaryConstraint= rulePrimaryConstraint EOF ;
    public final EObject entryRulePrimaryConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePrimaryConstraint = null;


        try {
            // InternalMickeyLang.g:5542:58: (iv_rulePrimaryConstraint= rulePrimaryConstraint EOF )
            // InternalMickeyLang.g:5543:2: iv_rulePrimaryConstraint= rulePrimaryConstraint EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPrimaryConstraintRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_rulePrimaryConstraint=rulePrimaryConstraint();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePrimaryConstraint; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePrimaryConstraint"


    // $ANTLR start "rulePrimaryConstraint"
    // InternalMickeyLang.g:5549:1: rulePrimaryConstraint returns [EObject current=null] : ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'primary key' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) ) ;
    public final EObject rulePrimaryConstraint() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_columns_4_0 = null;

        EObject lv_columns_6_0 = null;

        EObject lv_conflictClause_8_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5555:2: ( ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'primary key' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) ) )
            // InternalMickeyLang.g:5556:2: ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'primary key' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) )
            {
            // InternalMickeyLang.g:5556:2: ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'primary key' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) ) )
            // InternalMickeyLang.g:5557:3: (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'primary key' otherlv_3= '(' ( (lv_columns_4_0= ruleIndexedColumn ) ) (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )* otherlv_7= ')' ( (lv_conflictClause_8_0= ruleConflictClause ) )
            {
            // InternalMickeyLang.g:5557:3: (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )?
            int alt100=2;
            int LA100_0 = input.LA(1);

            if ( (LA100_0==117) ) {
                alt100=1;
            }
            switch (alt100) {
                case 1 :
                    // InternalMickeyLang.g:5558:4: otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) )
                    {
                    otherlv_0=(Token)match(input,117,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_0, grammarAccess.getPrimaryConstraintAccess().getConstraintKeyword_0_0());
                      			
                    }
                    // InternalMickeyLang.g:5562:4: ( (lv_name_1_0= RULE_ID ) )
                    // InternalMickeyLang.g:5563:5: (lv_name_1_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:5563:5: (lv_name_1_0= RULE_ID )
                    // InternalMickeyLang.g:5564:6: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_91); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_1_0, grammarAccess.getPrimaryConstraintAccess().getNameIDTerminalRuleCall_0_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPrimaryConstraintRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_1_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_2=(Token)match(input,113,FOLLOW_5); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getPrimaryConstraintAccess().getPrimaryKeyKeyword_1());
              		
            }
            otherlv_3=(Token)match(input,14,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getPrimaryConstraintAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalMickeyLang.g:5589:3: ( (lv_columns_4_0= ruleIndexedColumn ) )
            // InternalMickeyLang.g:5590:4: (lv_columns_4_0= ruleIndexedColumn )
            {
            // InternalMickeyLang.g:5590:4: (lv_columns_4_0= ruleIndexedColumn )
            // InternalMickeyLang.g:5591:5: lv_columns_4_0= ruleIndexedColumn
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getPrimaryConstraintAccess().getColumnsIndexedColumnParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_7);
            lv_columns_4_0=ruleIndexedColumn();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getPrimaryConstraintRule());
              					}
              					add(
              						current,
              						"columns",
              						lv_columns_4_0,
              						"com.justeat.mickeydb.MickeyLang.IndexedColumn");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:5608:3: (otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) ) )*
            loop101:
            do {
                int alt101=2;
                int LA101_0 = input.LA(1);

                if ( (LA101_0==15) ) {
                    alt101=1;
                }


                switch (alt101) {
            	case 1 :
            	    // InternalMickeyLang.g:5609:4: otherlv_5= ',' ( (lv_columns_6_0= ruleIndexedColumn ) )
            	    {
            	    otherlv_5=(Token)match(input,15,FOLLOW_3); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_5, grammarAccess.getPrimaryConstraintAccess().getCommaKeyword_4_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:5613:4: ( (lv_columns_6_0= ruleIndexedColumn ) )
            	    // InternalMickeyLang.g:5614:5: (lv_columns_6_0= ruleIndexedColumn )
            	    {
            	    // InternalMickeyLang.g:5614:5: (lv_columns_6_0= ruleIndexedColumn )
            	    // InternalMickeyLang.g:5615:6: lv_columns_6_0= ruleIndexedColumn
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getPrimaryConstraintAccess().getColumnsIndexedColumnParserRuleCall_4_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_7);
            	    lv_columns_6_0=ruleIndexedColumn();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getPrimaryConstraintRule());
            	      						}
            	      						add(
            	      							current,
            	      							"columns",
            	      							lv_columns_6_0,
            	      							"com.justeat.mickeydb.MickeyLang.IndexedColumn");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_7=(Token)match(input,16,FOLLOW_14); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getPrimaryConstraintAccess().getRightParenthesisKeyword_5());
              		
            }
            // InternalMickeyLang.g:5637:3: ( (lv_conflictClause_8_0= ruleConflictClause ) )
            // InternalMickeyLang.g:5638:4: (lv_conflictClause_8_0= ruleConflictClause )
            {
            // InternalMickeyLang.g:5638:4: (lv_conflictClause_8_0= ruleConflictClause )
            // InternalMickeyLang.g:5639:5: lv_conflictClause_8_0= ruleConflictClause
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getPrimaryConstraintAccess().getConflictClauseConflictClauseParserRuleCall_6_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_conflictClause_8_0=ruleConflictClause();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getPrimaryConstraintRule());
              					}
              					set(
              						current,
              						"conflictClause",
              						lv_conflictClause_8_0,
              						"com.justeat.mickeydb.MickeyLang.ConflictClause");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePrimaryConstraint"


    // $ANTLR start "entryRuleCheckTableConstraint"
    // InternalMickeyLang.g:5660:1: entryRuleCheckTableConstraint returns [EObject current=null] : iv_ruleCheckTableConstraint= ruleCheckTableConstraint EOF ;
    public final EObject entryRuleCheckTableConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCheckTableConstraint = null;


        try {
            // InternalMickeyLang.g:5660:61: (iv_ruleCheckTableConstraint= ruleCheckTableConstraint EOF )
            // InternalMickeyLang.g:5661:2: iv_ruleCheckTableConstraint= ruleCheckTableConstraint EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCheckTableConstraintRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleCheckTableConstraint=ruleCheckTableConstraint();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCheckTableConstraint; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCheckTableConstraint"


    // $ANTLR start "ruleCheckTableConstraint"
    // InternalMickeyLang.g:5667:1: ruleCheckTableConstraint returns [EObject current=null] : ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'check' otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' ) ;
    public final EObject ruleCheckTableConstraint() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_expression_4_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5673:2: ( ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'check' otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' ) )
            // InternalMickeyLang.g:5674:2: ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'check' otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' )
            {
            // InternalMickeyLang.g:5674:2: ( (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'check' otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' )
            // InternalMickeyLang.g:5675:3: (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )? otherlv_2= 'check' otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')'
            {
            // InternalMickeyLang.g:5675:3: (otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) ) )?
            int alt102=2;
            int LA102_0 = input.LA(1);

            if ( (LA102_0==117) ) {
                alt102=1;
            }
            switch (alt102) {
                case 1 :
                    // InternalMickeyLang.g:5676:4: otherlv_0= 'constraint' ( (lv_name_1_0= RULE_ID ) )
                    {
                    otherlv_0=(Token)match(input,117,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_0, grammarAccess.getCheckTableConstraintAccess().getConstraintKeyword_0_0());
                      			
                    }
                    // InternalMickeyLang.g:5680:4: ( (lv_name_1_0= RULE_ID ) )
                    // InternalMickeyLang.g:5681:5: (lv_name_1_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:5681:5: (lv_name_1_0= RULE_ID )
                    // InternalMickeyLang.g:5682:6: lv_name_1_0= RULE_ID
                    {
                    lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_92); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_name_1_0, grammarAccess.getCheckTableConstraintAccess().getNameIDTerminalRuleCall_0_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getCheckTableConstraintRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"name",
                      							lv_name_1_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_2=(Token)match(input,116,FOLLOW_5); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getCheckTableConstraintAccess().getCheckKeyword_1());
              		
            }
            otherlv_3=(Token)match(input,14,FOLLOW_27); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getCheckTableConstraintAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalMickeyLang.g:5707:3: ( (lv_expression_4_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:5708:4: (lv_expression_4_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:5708:4: (lv_expression_4_0= ruleSqlExpression )
            // InternalMickeyLang.g:5709:5: lv_expression_4_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getCheckTableConstraintAccess().getExpressionSqlExpressionParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_38);
            lv_expression_4_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getCheckTableConstraintRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_4_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_5=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getCheckTableConstraintAccess().getRightParenthesisKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCheckTableConstraint"


    // $ANTLR start "entryRuleIndexedColumn"
    // InternalMickeyLang.g:5734:1: entryRuleIndexedColumn returns [EObject current=null] : iv_ruleIndexedColumn= ruleIndexedColumn EOF ;
    public final EObject entryRuleIndexedColumn() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleIndexedColumn = null;


        try {
            // InternalMickeyLang.g:5734:54: (iv_ruleIndexedColumn= ruleIndexedColumn EOF )
            // InternalMickeyLang.g:5735:2: iv_ruleIndexedColumn= ruleIndexedColumn EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIndexedColumnRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleIndexedColumn=ruleIndexedColumn();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIndexedColumn; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIndexedColumn"


    // $ANTLR start "ruleIndexedColumn"
    // InternalMickeyLang.g:5741:1: ruleIndexedColumn returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= 'collate' ( (lv_collationName_2_0= RULE_ID ) ) )? ( ( (lv_asc_3_0= 'asc' ) ) | ( (lv_desc_4_0= 'desc' ) ) )? ) ;
    public final EObject ruleIndexedColumn() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_collationName_2_0=null;
        Token lv_asc_3_0=null;
        Token lv_desc_4_0=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:5747:2: ( ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= 'collate' ( (lv_collationName_2_0= RULE_ID ) ) )? ( ( (lv_asc_3_0= 'asc' ) ) | ( (lv_desc_4_0= 'desc' ) ) )? ) )
            // InternalMickeyLang.g:5748:2: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= 'collate' ( (lv_collationName_2_0= RULE_ID ) ) )? ( ( (lv_asc_3_0= 'asc' ) ) | ( (lv_desc_4_0= 'desc' ) ) )? )
            {
            // InternalMickeyLang.g:5748:2: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= 'collate' ( (lv_collationName_2_0= RULE_ID ) ) )? ( ( (lv_asc_3_0= 'asc' ) ) | ( (lv_desc_4_0= 'desc' ) ) )? )
            // InternalMickeyLang.g:5749:3: ( (otherlv_0= RULE_ID ) ) (otherlv_1= 'collate' ( (lv_collationName_2_0= RULE_ID ) ) )? ( ( (lv_asc_3_0= 'asc' ) ) | ( (lv_desc_4_0= 'desc' ) ) )?
            {
            // InternalMickeyLang.g:5749:3: ( (otherlv_0= RULE_ID ) )
            // InternalMickeyLang.g:5750:4: (otherlv_0= RULE_ID )
            {
            // InternalMickeyLang.g:5750:4: (otherlv_0= RULE_ID )
            // InternalMickeyLang.g:5751:5: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getIndexedColumnRule());
              					}
              				
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_93); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_0, grammarAccess.getIndexedColumnAccess().getColumnReferenceColumnDefCrossReference_0_0());
              				
            }

            }


            }

            // InternalMickeyLang.g:5762:3: (otherlv_1= 'collate' ( (lv_collationName_2_0= RULE_ID ) ) )?
            int alt103=2;
            int LA103_0 = input.LA(1);

            if ( (LA103_0==118) ) {
                alt103=1;
            }
            switch (alt103) {
                case 1 :
                    // InternalMickeyLang.g:5763:4: otherlv_1= 'collate' ( (lv_collationName_2_0= RULE_ID ) )
                    {
                    otherlv_1=(Token)match(input,118,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getIndexedColumnAccess().getCollateKeyword_1_0());
                      			
                    }
                    // InternalMickeyLang.g:5767:4: ( (lv_collationName_2_0= RULE_ID ) )
                    // InternalMickeyLang.g:5768:5: (lv_collationName_2_0= RULE_ID )
                    {
                    // InternalMickeyLang.g:5768:5: (lv_collationName_2_0= RULE_ID )
                    // InternalMickeyLang.g:5769:6: lv_collationName_2_0= RULE_ID
                    {
                    lv_collationName_2_0=(Token)match(input,RULE_ID,FOLLOW_59); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_collationName_2_0, grammarAccess.getIndexedColumnAccess().getCollationNameIDTerminalRuleCall_1_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getIndexedColumnRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"collationName",
                      							lv_collationName_2_0,
                      							"org.eclipse.xtext.common.Terminals.ID");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:5786:3: ( ( (lv_asc_3_0= 'asc' ) ) | ( (lv_desc_4_0= 'desc' ) ) )?
            int alt104=3;
            int LA104_0 = input.LA(1);

            if ( (LA104_0==81) ) {
                alt104=1;
            }
            else if ( (LA104_0==82) ) {
                alt104=2;
            }
            switch (alt104) {
                case 1 :
                    // InternalMickeyLang.g:5787:4: ( (lv_asc_3_0= 'asc' ) )
                    {
                    // InternalMickeyLang.g:5787:4: ( (lv_asc_3_0= 'asc' ) )
                    // InternalMickeyLang.g:5788:5: (lv_asc_3_0= 'asc' )
                    {
                    // InternalMickeyLang.g:5788:5: (lv_asc_3_0= 'asc' )
                    // InternalMickeyLang.g:5789:6: lv_asc_3_0= 'asc'
                    {
                    lv_asc_3_0=(Token)match(input,81,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_asc_3_0, grammarAccess.getIndexedColumnAccess().getAscAscKeyword_2_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getIndexedColumnRule());
                      						}
                      						setWithLastConsumed(current, "asc", true, "asc");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:5802:4: ( (lv_desc_4_0= 'desc' ) )
                    {
                    // InternalMickeyLang.g:5802:4: ( (lv_desc_4_0= 'desc' ) )
                    // InternalMickeyLang.g:5803:5: (lv_desc_4_0= 'desc' )
                    {
                    // InternalMickeyLang.g:5803:5: (lv_desc_4_0= 'desc' )
                    // InternalMickeyLang.g:5804:6: lv_desc_4_0= 'desc'
                    {
                    lv_desc_4_0=(Token)match(input,82,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_desc_4_0, grammarAccess.getIndexedColumnAccess().getDescDescKeyword_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getIndexedColumnRule());
                      						}
                      						setWithLastConsumed(current, "desc", true, "desc");
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIndexedColumn"


    // $ANTLR start "entryRuleDefaultValue"
    // InternalMickeyLang.g:5821:1: entryRuleDefaultValue returns [EObject current=null] : iv_ruleDefaultValue= ruleDefaultValue EOF ;
    public final EObject entryRuleDefaultValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDefaultValue = null;


        try {
            // InternalMickeyLang.g:5821:53: (iv_ruleDefaultValue= ruleDefaultValue EOF )
            // InternalMickeyLang.g:5822:2: iv_ruleDefaultValue= ruleDefaultValue EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDefaultValueRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDefaultValue=ruleDefaultValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDefaultValue; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDefaultValue"


    // $ANTLR start "ruleDefaultValue"
    // InternalMickeyLang.g:5828:1: ruleDefaultValue returns [EObject current=null] : ( ( () ( (lv_literal_1_0= ruleLiteralValue ) ) ) | ( () otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' ) ) ;
    public final EObject ruleDefaultValue() throws RecognitionException {
        EObject current = null;

        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_literal_1_0 = null;

        EObject lv_expression_4_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5834:2: ( ( ( () ( (lv_literal_1_0= ruleLiteralValue ) ) ) | ( () otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' ) ) )
            // InternalMickeyLang.g:5835:2: ( ( () ( (lv_literal_1_0= ruleLiteralValue ) ) ) | ( () otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' ) )
            {
            // InternalMickeyLang.g:5835:2: ( ( () ( (lv_literal_1_0= ruleLiteralValue ) ) ) | ( () otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' ) )
            int alt105=2;
            int LA105_0 = input.LA(1);

            if ( ((LA105_0>=RULE_STRING && LA105_0<=RULE_NUMBER)||LA105_0==34||(LA105_0>=89 && LA105_0<=92)) ) {
                alt105=1;
            }
            else if ( (LA105_0==14) ) {
                alt105=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 105, 0, input);

                throw nvae;
            }
            switch (alt105) {
                case 1 :
                    // InternalMickeyLang.g:5836:3: ( () ( (lv_literal_1_0= ruleLiteralValue ) ) )
                    {
                    // InternalMickeyLang.g:5836:3: ( () ( (lv_literal_1_0= ruleLiteralValue ) ) )
                    // InternalMickeyLang.g:5837:4: () ( (lv_literal_1_0= ruleLiteralValue ) )
                    {
                    // InternalMickeyLang.g:5837:4: ()
                    // InternalMickeyLang.g:5838:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getDefaultValueAccess().getLiteralDefaultValueAction_0_0(),
                      						current);
                      				
                    }

                    }

                    // InternalMickeyLang.g:5844:4: ( (lv_literal_1_0= ruleLiteralValue ) )
                    // InternalMickeyLang.g:5845:5: (lv_literal_1_0= ruleLiteralValue )
                    {
                    // InternalMickeyLang.g:5845:5: (lv_literal_1_0= ruleLiteralValue )
                    // InternalMickeyLang.g:5846:6: lv_literal_1_0= ruleLiteralValue
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getDefaultValueAccess().getLiteralLiteralValueParserRuleCall_0_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_literal_1_0=ruleLiteralValue();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getDefaultValueRule());
                      						}
                      						set(
                      							current,
                      							"literal",
                      							lv_literal_1_0,
                      							"com.justeat.mickeydb.MickeyLang.LiteralValue");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:5865:3: ( () otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' )
                    {
                    // InternalMickeyLang.g:5865:3: ( () otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')' )
                    // InternalMickeyLang.g:5866:4: () otherlv_3= '(' ( (lv_expression_4_0= ruleSqlExpression ) ) otherlv_5= ')'
                    {
                    // InternalMickeyLang.g:5866:4: ()
                    // InternalMickeyLang.g:5867:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getDefaultValueAccess().getExpressionDefaultValueAction_1_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_3=(Token)match(input,14,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getDefaultValueAccess().getLeftParenthesisKeyword_1_1());
                      			
                    }
                    // InternalMickeyLang.g:5877:4: ( (lv_expression_4_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:5878:5: (lv_expression_4_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:5878:5: (lv_expression_4_0= ruleSqlExpression )
                    // InternalMickeyLang.g:5879:6: lv_expression_4_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getDefaultValueAccess().getExpressionSqlExpressionParserRuleCall_1_2_0());
                      					
                    }
                    pushFollow(FOLLOW_38);
                    lv_expression_4_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getDefaultValueRule());
                      						}
                      						set(
                      							current,
                      							"expression",
                      							lv_expression_4_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    otherlv_5=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getDefaultValueAccess().getRightParenthesisKeyword_1_3());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDefaultValue"


    // $ANTLR start "entryRuleConflictClause"
    // InternalMickeyLang.g:5905:1: entryRuleConflictClause returns [EObject current=null] : iv_ruleConflictClause= ruleConflictClause EOF ;
    public final EObject entryRuleConflictClause() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConflictClause = null;


        try {
            // InternalMickeyLang.g:5905:55: (iv_ruleConflictClause= ruleConflictClause EOF )
            // InternalMickeyLang.g:5906:2: iv_ruleConflictClause= ruleConflictClause EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getConflictClauseRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleConflictClause=ruleConflictClause();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleConflictClause; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConflictClause"


    // $ANTLR start "ruleConflictClause"
    // InternalMickeyLang.g:5912:1: ruleConflictClause returns [EObject current=null] : (otherlv_0= 'on' otherlv_1= 'conflict' ( (lv_resolution_2_0= ruleConflictResolution ) ) ) ;
    public final EObject ruleConflictClause() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Enumerator lv_resolution_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5918:2: ( (otherlv_0= 'on' otherlv_1= 'conflict' ( (lv_resolution_2_0= ruleConflictResolution ) ) ) )
            // InternalMickeyLang.g:5919:2: (otherlv_0= 'on' otherlv_1= 'conflict' ( (lv_resolution_2_0= ruleConflictResolution ) ) )
            {
            // InternalMickeyLang.g:5919:2: (otherlv_0= 'on' otherlv_1= 'conflict' ( (lv_resolution_2_0= ruleConflictResolution ) ) )
            // InternalMickeyLang.g:5920:3: otherlv_0= 'on' otherlv_1= 'conflict' ( (lv_resolution_2_0= ruleConflictResolution ) )
            {
            otherlv_0=(Token)match(input,22,FOLLOW_94); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getConflictClauseAccess().getOnKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,119,FOLLOW_95); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getConflictClauseAccess().getConflictKeyword_1());
              		
            }
            // InternalMickeyLang.g:5928:3: ( (lv_resolution_2_0= ruleConflictResolution ) )
            // InternalMickeyLang.g:5929:4: (lv_resolution_2_0= ruleConflictResolution )
            {
            // InternalMickeyLang.g:5929:4: (lv_resolution_2_0= ruleConflictResolution )
            // InternalMickeyLang.g:5930:5: lv_resolution_2_0= ruleConflictResolution
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getConflictClauseAccess().getResolutionConflictResolutionEnumRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_resolution_2_0=ruleConflictResolution();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getConflictClauseRule());
              					}
              					set(
              						current,
              						"resolution",
              						lv_resolution_2_0,
              						"com.justeat.mickeydb.MickeyLang.ConflictResolution");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConflictClause"


    // $ANTLR start "entryRuleDMLStatement"
    // InternalMickeyLang.g:5951:1: entryRuleDMLStatement returns [EObject current=null] : iv_ruleDMLStatement= ruleDMLStatement EOF ;
    public final EObject entryRuleDMLStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDMLStatement = null;


        try {
            // InternalMickeyLang.g:5951:53: (iv_ruleDMLStatement= ruleDMLStatement EOF )
            // InternalMickeyLang.g:5952:2: iv_ruleDMLStatement= ruleDMLStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDMLStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDMLStatement=ruleDMLStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDMLStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDMLStatement"


    // $ANTLR start "ruleDMLStatement"
    // InternalMickeyLang.g:5958:1: ruleDMLStatement returns [EObject current=null] : (this_SelectStatement_0= ruleSelectStatement | this_InsertStatement_1= ruleInsertStatement | this_UpdateStatement_2= ruleUpdateStatement | this_DeleteStatement_3= ruleDeleteStatement ) ;
    public final EObject ruleDMLStatement() throws RecognitionException {
        EObject current = null;

        EObject this_SelectStatement_0 = null;

        EObject this_InsertStatement_1 = null;

        EObject this_UpdateStatement_2 = null;

        EObject this_DeleteStatement_3 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:5964:2: ( (this_SelectStatement_0= ruleSelectStatement | this_InsertStatement_1= ruleInsertStatement | this_UpdateStatement_2= ruleUpdateStatement | this_DeleteStatement_3= ruleDeleteStatement ) )
            // InternalMickeyLang.g:5965:2: (this_SelectStatement_0= ruleSelectStatement | this_InsertStatement_1= ruleInsertStatement | this_UpdateStatement_2= ruleUpdateStatement | this_DeleteStatement_3= ruleDeleteStatement )
            {
            // InternalMickeyLang.g:5965:2: (this_SelectStatement_0= ruleSelectStatement | this_InsertStatement_1= ruleInsertStatement | this_UpdateStatement_2= ruleUpdateStatement | this_DeleteStatement_3= ruleDeleteStatement )
            int alt106=4;
            switch ( input.LA(1) ) {
            case 75:
                {
                alt106=1;
                }
                break;
            case 102:
            case 120:
                {
                alt106=2;
                }
                break;
            case 103:
                {
                alt106=3;
                }
                break;
            case 101:
                {
                alt106=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 106, 0, input);

                throw nvae;
            }

            switch (alt106) {
                case 1 :
                    // InternalMickeyLang.g:5966:3: this_SelectStatement_0= ruleSelectStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDMLStatementAccess().getSelectStatementParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SelectStatement_0=ruleSelectStatement();

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

                      			current = this_SelectStatement_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:5975:3: this_InsertStatement_1= ruleInsertStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDMLStatementAccess().getInsertStatementParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_InsertStatement_1=ruleInsertStatement();

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

                      			current = this_InsertStatement_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:5984:3: this_UpdateStatement_2= ruleUpdateStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDMLStatementAccess().getUpdateStatementParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_UpdateStatement_2=ruleUpdateStatement();

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

                      			current = this_UpdateStatement_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:5993:3: this_DeleteStatement_3= ruleDeleteStatement
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getDMLStatementAccess().getDeleteStatementParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DeleteStatement_3=ruleDeleteStatement();

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

                      			current = this_DeleteStatement_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDMLStatement"


    // $ANTLR start "entryRuleDeleteStatement"
    // InternalMickeyLang.g:6005:1: entryRuleDeleteStatement returns [EObject current=null] : iv_ruleDeleteStatement= ruleDeleteStatement EOF ;
    public final EObject entryRuleDeleteStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDeleteStatement = null;


        try {
            // InternalMickeyLang.g:6005:56: (iv_ruleDeleteStatement= ruleDeleteStatement EOF )
            // InternalMickeyLang.g:6006:2: iv_ruleDeleteStatement= ruleDeleteStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDeleteStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDeleteStatement=ruleDeleteStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDeleteStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDeleteStatement"


    // $ANTLR start "ruleDeleteStatement"
    // InternalMickeyLang.g:6012:1: ruleDeleteStatement returns [EObject current=null] : (otherlv_0= 'delete' otherlv_1= 'from' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'where' ( (lv_expression_4_0= ruleSqlExpression ) ) )? ) ;
    public final EObject ruleDeleteStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        EObject lv_expression_4_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:6018:2: ( (otherlv_0= 'delete' otherlv_1= 'from' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'where' ( (lv_expression_4_0= ruleSqlExpression ) ) )? ) )
            // InternalMickeyLang.g:6019:2: (otherlv_0= 'delete' otherlv_1= 'from' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'where' ( (lv_expression_4_0= ruleSqlExpression ) ) )? )
            {
            // InternalMickeyLang.g:6019:2: (otherlv_0= 'delete' otherlv_1= 'from' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'where' ( (lv_expression_4_0= ruleSqlExpression ) ) )? )
            // InternalMickeyLang.g:6020:3: otherlv_0= 'delete' otherlv_1= 'from' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'where' ( (lv_expression_4_0= ruleSqlExpression ) ) )?
            {
            otherlv_0=(Token)match(input,101,FOLLOW_96); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDeleteStatementAccess().getDeleteKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,29,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getDeleteStatementAccess().getFromKeyword_1());
              		
            }
            // InternalMickeyLang.g:6028:3: ( (otherlv_2= RULE_ID ) )
            // InternalMickeyLang.g:6029:4: (otherlv_2= RULE_ID )
            {
            // InternalMickeyLang.g:6029:4: (otherlv_2= RULE_ID )
            // InternalMickeyLang.g:6030:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDeleteStatementRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_97); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getDeleteStatementAccess().getTableTableDefinitionCrossReference_2_0());
              				
            }

            }


            }

            // InternalMickeyLang.g:6041:3: (otherlv_3= 'where' ( (lv_expression_4_0= ruleSqlExpression ) ) )?
            int alt107=2;
            int LA107_0 = input.LA(1);

            if ( (LA107_0==78) ) {
                alt107=1;
            }
            switch (alt107) {
                case 1 :
                    // InternalMickeyLang.g:6042:4: otherlv_3= 'where' ( (lv_expression_4_0= ruleSqlExpression ) )
                    {
                    otherlv_3=(Token)match(input,78,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getDeleteStatementAccess().getWhereKeyword_3_0());
                      			
                    }
                    // InternalMickeyLang.g:6046:4: ( (lv_expression_4_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:6047:5: (lv_expression_4_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:6047:5: (lv_expression_4_0= ruleSqlExpression )
                    // InternalMickeyLang.g:6048:6: lv_expression_4_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getDeleteStatementAccess().getExpressionSqlExpressionParserRuleCall_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_expression_4_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getDeleteStatementRule());
                      						}
                      						set(
                      							current,
                      							"expression",
                      							lv_expression_4_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDeleteStatement"


    // $ANTLR start "entryRuleInsertStatement"
    // InternalMickeyLang.g:6070:1: entryRuleInsertStatement returns [EObject current=null] : iv_ruleInsertStatement= ruleInsertStatement EOF ;
    public final EObject entryRuleInsertStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInsertStatement = null;


        try {
            // InternalMickeyLang.g:6070:56: (iv_ruleInsertStatement= ruleInsertStatement EOF )
            // InternalMickeyLang.g:6071:2: iv_ruleInsertStatement= ruleInsertStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInsertStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleInsertStatement=ruleInsertStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInsertStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInsertStatement"


    // $ANTLR start "ruleInsertStatement"
    // InternalMickeyLang.g:6077:1: ruleInsertStatement returns [EObject current=null] : ( ( (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ) | otherlv_3= 'replace' ) otherlv_4= 'into' ( (otherlv_5= RULE_ID ) ) (otherlv_6= '(' ( (otherlv_7= RULE_ID ) ) (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )* otherlv_10= ')' )? ( ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) ) | (otherlv_18= 'default' otherlv_19= 'values' ) ) ) ;
    public final EObject ruleInsertStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_14=null;
        Token otherlv_16=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Enumerator lv_conflictResolution_2_0 = null;

        EObject lv_expressions_13_0 = null;

        EObject lv_expressions_15_0 = null;

        EObject lv_selectStatement_17_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:6083:2: ( ( ( (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ) | otherlv_3= 'replace' ) otherlv_4= 'into' ( (otherlv_5= RULE_ID ) ) (otherlv_6= '(' ( (otherlv_7= RULE_ID ) ) (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )* otherlv_10= ')' )? ( ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) ) | (otherlv_18= 'default' otherlv_19= 'values' ) ) ) )
            // InternalMickeyLang.g:6084:2: ( ( (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ) | otherlv_3= 'replace' ) otherlv_4= 'into' ( (otherlv_5= RULE_ID ) ) (otherlv_6= '(' ( (otherlv_7= RULE_ID ) ) (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )* otherlv_10= ')' )? ( ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) ) | (otherlv_18= 'default' otherlv_19= 'values' ) ) )
            {
            // InternalMickeyLang.g:6084:2: ( ( (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ) | otherlv_3= 'replace' ) otherlv_4= 'into' ( (otherlv_5= RULE_ID ) ) (otherlv_6= '(' ( (otherlv_7= RULE_ID ) ) (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )* otherlv_10= ')' )? ( ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) ) | (otherlv_18= 'default' otherlv_19= 'values' ) ) )
            // InternalMickeyLang.g:6085:3: ( (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ) | otherlv_3= 'replace' ) otherlv_4= 'into' ( (otherlv_5= RULE_ID ) ) (otherlv_6= '(' ( (otherlv_7= RULE_ID ) ) (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )* otherlv_10= ')' )? ( ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) ) | (otherlv_18= 'default' otherlv_19= 'values' ) )
            {
            // InternalMickeyLang.g:6085:3: ( (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ) | otherlv_3= 'replace' )
            int alt109=2;
            int LA109_0 = input.LA(1);

            if ( (LA109_0==102) ) {
                alt109=1;
            }
            else if ( (LA109_0==120) ) {
                alt109=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 109, 0, input);

                throw nvae;
            }
            switch (alt109) {
                case 1 :
                    // InternalMickeyLang.g:6086:4: (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? )
                    {
                    // InternalMickeyLang.g:6086:4: (otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? )
                    // InternalMickeyLang.g:6087:5: otherlv_0= 'insert' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )?
                    {
                    otherlv_0=(Token)match(input,102,FOLLOW_98); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_0, grammarAccess.getInsertStatementAccess().getInsertKeyword_0_0_0());
                      				
                    }
                    // InternalMickeyLang.g:6091:5: (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )?
                    int alt108=2;
                    int LA108_0 = input.LA(1);

                    if ( (LA108_0==55) ) {
                        alt108=1;
                    }
                    switch (alt108) {
                        case 1 :
                            // InternalMickeyLang.g:6092:6: otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) )
                            {
                            otherlv_1=(Token)match(input,55,FOLLOW_95); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_1, grammarAccess.getInsertStatementAccess().getOrKeyword_0_0_1_0());
                              					
                            }
                            // InternalMickeyLang.g:6096:6: ( (lv_conflictResolution_2_0= ruleConflictResolution ) )
                            // InternalMickeyLang.g:6097:7: (lv_conflictResolution_2_0= ruleConflictResolution )
                            {
                            // InternalMickeyLang.g:6097:7: (lv_conflictResolution_2_0= ruleConflictResolution )
                            // InternalMickeyLang.g:6098:8: lv_conflictResolution_2_0= ruleConflictResolution
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getInsertStatementAccess().getConflictResolutionConflictResolutionEnumRuleCall_0_0_1_1_0());
                              							
                            }
                            pushFollow(FOLLOW_99);
                            lv_conflictResolution_2_0=ruleConflictResolution();

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

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getInsertStatementRule());
                              								}
                              								set(
                              									current,
                              									"conflictResolution",
                              									lv_conflictResolution_2_0,
                              									"com.justeat.mickeydb.MickeyLang.ConflictResolution");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:6118:4: otherlv_3= 'replace'
                    {
                    otherlv_3=(Token)match(input,120,FOLLOW_99); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getInsertStatementAccess().getReplaceKeyword_0_1());
                      			
                    }

                    }
                    break;

            }

            otherlv_4=(Token)match(input,121,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getInsertStatementAccess().getIntoKeyword_1());
              		
            }
            // InternalMickeyLang.g:6127:3: ( (otherlv_5= RULE_ID ) )
            // InternalMickeyLang.g:6128:4: (otherlv_5= RULE_ID )
            {
            // InternalMickeyLang.g:6128:4: (otherlv_5= RULE_ID )
            // InternalMickeyLang.g:6129:5: otherlv_5= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getInsertStatementRule());
              					}
              				
            }
            otherlv_5=(Token)match(input,RULE_ID,FOLLOW_100); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_5, grammarAccess.getInsertStatementAccess().getTableTableDefinitionCrossReference_2_0());
              				
            }

            }


            }

            // InternalMickeyLang.g:6140:3: (otherlv_6= '(' ( (otherlv_7= RULE_ID ) ) (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )* otherlv_10= ')' )?
            int alt111=2;
            int LA111_0 = input.LA(1);

            if ( (LA111_0==14) ) {
                alt111=1;
            }
            switch (alt111) {
                case 1 :
                    // InternalMickeyLang.g:6141:4: otherlv_6= '(' ( (otherlv_7= RULE_ID ) ) (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )* otherlv_10= ')'
                    {
                    otherlv_6=(Token)match(input,14,FOLLOW_3); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getInsertStatementAccess().getLeftParenthesisKeyword_3_0());
                      			
                    }
                    // InternalMickeyLang.g:6145:4: ( (otherlv_7= RULE_ID ) )
                    // InternalMickeyLang.g:6146:5: (otherlv_7= RULE_ID )
                    {
                    // InternalMickeyLang.g:6146:5: (otherlv_7= RULE_ID )
                    // InternalMickeyLang.g:6147:6: otherlv_7= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getInsertStatementRule());
                      						}
                      					
                    }
                    otherlv_7=(Token)match(input,RULE_ID,FOLLOW_7); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_7, grammarAccess.getInsertStatementAccess().getColumnNamesColumnDefCrossReference_3_1_0());
                      					
                    }

                    }


                    }

                    // InternalMickeyLang.g:6158:4: (otherlv_8= ',' ( (otherlv_9= RULE_ID ) ) )*
                    loop110:
                    do {
                        int alt110=2;
                        int LA110_0 = input.LA(1);

                        if ( (LA110_0==15) ) {
                            alt110=1;
                        }


                        switch (alt110) {
                    	case 1 :
                    	    // InternalMickeyLang.g:6159:5: otherlv_8= ',' ( (otherlv_9= RULE_ID ) )
                    	    {
                    	    otherlv_8=(Token)match(input,15,FOLLOW_3); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_8, grammarAccess.getInsertStatementAccess().getCommaKeyword_3_2_0());
                    	      				
                    	    }
                    	    // InternalMickeyLang.g:6163:5: ( (otherlv_9= RULE_ID ) )
                    	    // InternalMickeyLang.g:6164:6: (otherlv_9= RULE_ID )
                    	    {
                    	    // InternalMickeyLang.g:6164:6: (otherlv_9= RULE_ID )
                    	    // InternalMickeyLang.g:6165:7: otherlv_9= RULE_ID
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElement(grammarAccess.getInsertStatementRule());
                    	      							}
                    	      						
                    	    }
                    	    otherlv_9=(Token)match(input,RULE_ID,FOLLOW_7); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							newLeafNode(otherlv_9, grammarAccess.getInsertStatementAccess().getColumnNamesColumnDefCrossReference_3_2_1_0());
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_10=(Token)match(input,16,FOLLOW_101); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_10, grammarAccess.getInsertStatementAccess().getRightParenthesisKeyword_3_3());
                      			
                    }

                    }
                    break;

            }

            // InternalMickeyLang.g:6182:3: ( ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) ) | (otherlv_18= 'default' otherlv_19= 'values' ) )
            int alt114=2;
            int LA114_0 = input.LA(1);

            if ( (LA114_0==75||LA114_0==122) ) {
                alt114=1;
            }
            else if ( (LA114_0==115) ) {
                alt114=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 114, 0, input);

                throw nvae;
            }
            switch (alt114) {
                case 1 :
                    // InternalMickeyLang.g:6183:4: ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) )
                    {
                    // InternalMickeyLang.g:6183:4: ( (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' ) | ( (lv_selectStatement_17_0= ruleSelectStatement ) ) )
                    int alt113=2;
                    int LA113_0 = input.LA(1);

                    if ( (LA113_0==122) ) {
                        alt113=1;
                    }
                    else if ( (LA113_0==75) ) {
                        alt113=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 113, 0, input);

                        throw nvae;
                    }
                    switch (alt113) {
                        case 1 :
                            // InternalMickeyLang.g:6184:5: (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' )
                            {
                            // InternalMickeyLang.g:6184:5: (otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')' )
                            // InternalMickeyLang.g:6185:6: otherlv_11= 'values' otherlv_12= '(' ( (lv_expressions_13_0= ruleSqlExpression ) ) (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )* otherlv_16= ')'
                            {
                            otherlv_11=(Token)match(input,122,FOLLOW_5); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_11, grammarAccess.getInsertStatementAccess().getValuesKeyword_4_0_0_0());
                              					
                            }
                            otherlv_12=(Token)match(input,14,FOLLOW_27); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_12, grammarAccess.getInsertStatementAccess().getLeftParenthesisKeyword_4_0_0_1());
                              					
                            }
                            // InternalMickeyLang.g:6193:6: ( (lv_expressions_13_0= ruleSqlExpression ) )
                            // InternalMickeyLang.g:6194:7: (lv_expressions_13_0= ruleSqlExpression )
                            {
                            // InternalMickeyLang.g:6194:7: (lv_expressions_13_0= ruleSqlExpression )
                            // InternalMickeyLang.g:6195:8: lv_expressions_13_0= ruleSqlExpression
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getInsertStatementAccess().getExpressionsSqlExpressionParserRuleCall_4_0_0_2_0());
                              							
                            }
                            pushFollow(FOLLOW_7);
                            lv_expressions_13_0=ruleSqlExpression();

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

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getInsertStatementRule());
                              								}
                              								add(
                              									current,
                              									"expressions",
                              									lv_expressions_13_0,
                              									"com.justeat.mickeydb.MickeyLang.SqlExpression");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }

                            // InternalMickeyLang.g:6212:6: (otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) ) )*
                            loop112:
                            do {
                                int alt112=2;
                                int LA112_0 = input.LA(1);

                                if ( (LA112_0==15) ) {
                                    alt112=1;
                                }


                                switch (alt112) {
                            	case 1 :
                            	    // InternalMickeyLang.g:6213:7: otherlv_14= ',' ( (lv_expressions_15_0= ruleSqlExpression ) )
                            	    {
                            	    otherlv_14=(Token)match(input,15,FOLLOW_27); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							newLeafNode(otherlv_14, grammarAccess.getInsertStatementAccess().getCommaKeyword_4_0_0_3_0());
                            	      						
                            	    }
                            	    // InternalMickeyLang.g:6217:7: ( (lv_expressions_15_0= ruleSqlExpression ) )
                            	    // InternalMickeyLang.g:6218:8: (lv_expressions_15_0= ruleSqlExpression )
                            	    {
                            	    // InternalMickeyLang.g:6218:8: (lv_expressions_15_0= ruleSqlExpression )
                            	    // InternalMickeyLang.g:6219:9: lv_expressions_15_0= ruleSqlExpression
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      									newCompositeNode(grammarAccess.getInsertStatementAccess().getExpressionsSqlExpressionParserRuleCall_4_0_0_3_1_0());
                            	      								
                            	    }
                            	    pushFollow(FOLLOW_7);
                            	    lv_expressions_15_0=ruleSqlExpression();

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

                            	      									if (current==null) {
                            	      										current = createModelElementForParent(grammarAccess.getInsertStatementRule());
                            	      									}
                            	      									add(
                            	      										current,
                            	      										"expressions",
                            	      										lv_expressions_15_0,
                            	      										"com.justeat.mickeydb.MickeyLang.SqlExpression");
                            	      									afterParserOrEnumRuleCall();
                            	      								
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

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

                            otherlv_16=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_16, grammarAccess.getInsertStatementAccess().getRightParenthesisKeyword_4_0_0_4());
                              					
                            }

                            }


                            }
                            break;
                        case 2 :
                            // InternalMickeyLang.g:6243:5: ( (lv_selectStatement_17_0= ruleSelectStatement ) )
                            {
                            // InternalMickeyLang.g:6243:5: ( (lv_selectStatement_17_0= ruleSelectStatement ) )
                            // InternalMickeyLang.g:6244:6: (lv_selectStatement_17_0= ruleSelectStatement )
                            {
                            // InternalMickeyLang.g:6244:6: (lv_selectStatement_17_0= ruleSelectStatement )
                            // InternalMickeyLang.g:6245:7: lv_selectStatement_17_0= ruleSelectStatement
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getInsertStatementAccess().getSelectStatementSelectStatementParserRuleCall_4_0_1_0());
                              						
                            }
                            pushFollow(FOLLOW_2);
                            lv_selectStatement_17_0=ruleSelectStatement();

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

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getInsertStatementRule());
                              							}
                              							set(
                              								current,
                              								"selectStatement",
                              								lv_selectStatement_17_0,
                              								"com.justeat.mickeydb.MickeyLang.SelectStatement");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:6264:4: (otherlv_18= 'default' otherlv_19= 'values' )
                    {
                    // InternalMickeyLang.g:6264:4: (otherlv_18= 'default' otherlv_19= 'values' )
                    // InternalMickeyLang.g:6265:5: otherlv_18= 'default' otherlv_19= 'values'
                    {
                    otherlv_18=(Token)match(input,115,FOLLOW_102); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_18, grammarAccess.getInsertStatementAccess().getDefaultKeyword_4_1_0());
                      				
                    }
                    otherlv_19=(Token)match(input,122,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_19, grammarAccess.getInsertStatementAccess().getValuesKeyword_4_1_1());
                      				
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInsertStatement"


    // $ANTLR start "entryRuleUpdateStatement"
    // InternalMickeyLang.g:6279:1: entryRuleUpdateStatement returns [EObject current=null] : iv_ruleUpdateStatement= ruleUpdateStatement EOF ;
    public final EObject entryRuleUpdateStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUpdateStatement = null;


        try {
            // InternalMickeyLang.g:6279:56: (iv_ruleUpdateStatement= ruleUpdateStatement EOF )
            // InternalMickeyLang.g:6280:2: iv_ruleUpdateStatement= ruleUpdateStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUpdateStatementRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleUpdateStatement=ruleUpdateStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUpdateStatement; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUpdateStatement"


    // $ANTLR start "ruleUpdateStatement"
    // InternalMickeyLang.g:6286:1: ruleUpdateStatement returns [EObject current=null] : (otherlv_0= 'update' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ( (otherlv_3= RULE_ID ) ) otherlv_4= 'set' ( (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression ) ) (otherlv_6= ',' ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) ) )* (otherlv_8= 'where' ( (lv_whereExpression_9_0= ruleSqlExpression ) ) )? ) ;
    public final EObject ruleUpdateStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Enumerator lv_conflictResolution_2_0 = null;

        EObject lv_updateColumnExpressions_5_0 = null;

        EObject lv_updateColumnExpressions_7_0 = null;

        EObject lv_whereExpression_9_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:6292:2: ( (otherlv_0= 'update' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ( (otherlv_3= RULE_ID ) ) otherlv_4= 'set' ( (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression ) ) (otherlv_6= ',' ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) ) )* (otherlv_8= 'where' ( (lv_whereExpression_9_0= ruleSqlExpression ) ) )? ) )
            // InternalMickeyLang.g:6293:2: (otherlv_0= 'update' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ( (otherlv_3= RULE_ID ) ) otherlv_4= 'set' ( (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression ) ) (otherlv_6= ',' ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) ) )* (otherlv_8= 'where' ( (lv_whereExpression_9_0= ruleSqlExpression ) ) )? )
            {
            // InternalMickeyLang.g:6293:2: (otherlv_0= 'update' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ( (otherlv_3= RULE_ID ) ) otherlv_4= 'set' ( (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression ) ) (otherlv_6= ',' ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) ) )* (otherlv_8= 'where' ( (lv_whereExpression_9_0= ruleSqlExpression ) ) )? )
            // InternalMickeyLang.g:6294:3: otherlv_0= 'update' (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )? ( (otherlv_3= RULE_ID ) ) otherlv_4= 'set' ( (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression ) ) (otherlv_6= ',' ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) ) )* (otherlv_8= 'where' ( (lv_whereExpression_9_0= ruleSqlExpression ) ) )?
            {
            otherlv_0=(Token)match(input,103,FOLLOW_103); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getUpdateStatementAccess().getUpdateKeyword_0());
              		
            }
            // InternalMickeyLang.g:6298:3: (otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) ) )?
            int alt115=2;
            int LA115_0 = input.LA(1);

            if ( (LA115_0==55) ) {
                alt115=1;
            }
            switch (alt115) {
                case 1 :
                    // InternalMickeyLang.g:6299:4: otherlv_1= 'or' ( (lv_conflictResolution_2_0= ruleConflictResolution ) )
                    {
                    otherlv_1=(Token)match(input,55,FOLLOW_95); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getUpdateStatementAccess().getOrKeyword_1_0());
                      			
                    }
                    // InternalMickeyLang.g:6303:4: ( (lv_conflictResolution_2_0= ruleConflictResolution ) )
                    // InternalMickeyLang.g:6304:5: (lv_conflictResolution_2_0= ruleConflictResolution )
                    {
                    // InternalMickeyLang.g:6304:5: (lv_conflictResolution_2_0= ruleConflictResolution )
                    // InternalMickeyLang.g:6305:6: lv_conflictResolution_2_0= ruleConflictResolution
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getUpdateStatementAccess().getConflictResolutionConflictResolutionEnumRuleCall_1_1_0());
                      					
                    }
                    pushFollow(FOLLOW_3);
                    lv_conflictResolution_2_0=ruleConflictResolution();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getUpdateStatementRule());
                      						}
                      						set(
                      							current,
                      							"conflictResolution",
                      							lv_conflictResolution_2_0,
                      							"com.justeat.mickeydb.MickeyLang.ConflictResolution");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalMickeyLang.g:6323:3: ( (otherlv_3= RULE_ID ) )
            // InternalMickeyLang.g:6324:4: (otherlv_3= RULE_ID )
            {
            // InternalMickeyLang.g:6324:4: (otherlv_3= RULE_ID )
            // InternalMickeyLang.g:6325:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getUpdateStatementRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_104); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getUpdateStatementAccess().getTableTableDefinitionCrossReference_2_0());
              				
            }

            }


            }

            otherlv_4=(Token)match(input,123,FOLLOW_3); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getUpdateStatementAccess().getSetKeyword_3());
              		
            }
            // InternalMickeyLang.g:6340:3: ( (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression ) )
            // InternalMickeyLang.g:6341:4: (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression )
            {
            // InternalMickeyLang.g:6341:4: (lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression )
            // InternalMickeyLang.g:6342:5: lv_updateColumnExpressions_5_0= ruleUpdateColumnExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getUpdateStatementAccess().getUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_4_0());
              				
            }
            pushFollow(FOLLOW_105);
            lv_updateColumnExpressions_5_0=ruleUpdateColumnExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getUpdateStatementRule());
              					}
              					add(
              						current,
              						"updateColumnExpressions",
              						lv_updateColumnExpressions_5_0,
              						"com.justeat.mickeydb.MickeyLang.UpdateColumnExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalMickeyLang.g:6359:3: (otherlv_6= ',' ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) ) )*
            loop116:
            do {
                int alt116=2;
                int LA116_0 = input.LA(1);

                if ( (LA116_0==15) ) {
                    alt116=1;
                }


                switch (alt116) {
            	case 1 :
            	    // InternalMickeyLang.g:6360:4: otherlv_6= ',' ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) )
            	    {
            	    otherlv_6=(Token)match(input,15,FOLLOW_3); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_6, grammarAccess.getUpdateStatementAccess().getCommaKeyword_5_0());
            	      			
            	    }
            	    // InternalMickeyLang.g:6364:4: ( (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression ) )
            	    // InternalMickeyLang.g:6365:5: (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression )
            	    {
            	    // InternalMickeyLang.g:6365:5: (lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression )
            	    // InternalMickeyLang.g:6366:6: lv_updateColumnExpressions_7_0= ruleUpdateColumnExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getUpdateStatementAccess().getUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_5_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_105);
            	    lv_updateColumnExpressions_7_0=ruleUpdateColumnExpression();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getUpdateStatementRule());
            	      						}
            	      						add(
            	      							current,
            	      							"updateColumnExpressions",
            	      							lv_updateColumnExpressions_7_0,
            	      							"com.justeat.mickeydb.MickeyLang.UpdateColumnExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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

            // InternalMickeyLang.g:6384:3: (otherlv_8= 'where' ( (lv_whereExpression_9_0= ruleSqlExpression ) ) )?
            int alt117=2;
            int LA117_0 = input.LA(1);

            if ( (LA117_0==78) ) {
                alt117=1;
            }
            switch (alt117) {
                case 1 :
                    // InternalMickeyLang.g:6385:4: otherlv_8= 'where' ( (lv_whereExpression_9_0= ruleSqlExpression ) )
                    {
                    otherlv_8=(Token)match(input,78,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_8, grammarAccess.getUpdateStatementAccess().getWhereKeyword_6_0());
                      			
                    }
                    // InternalMickeyLang.g:6389:4: ( (lv_whereExpression_9_0= ruleSqlExpression ) )
                    // InternalMickeyLang.g:6390:5: (lv_whereExpression_9_0= ruleSqlExpression )
                    {
                    // InternalMickeyLang.g:6390:5: (lv_whereExpression_9_0= ruleSqlExpression )
                    // InternalMickeyLang.g:6391:6: lv_whereExpression_9_0= ruleSqlExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getUpdateStatementAccess().getWhereExpressionSqlExpressionParserRuleCall_6_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_whereExpression_9_0=ruleSqlExpression();

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

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getUpdateStatementRule());
                      						}
                      						set(
                      							current,
                      							"whereExpression",
                      							lv_whereExpression_9_0,
                      							"com.justeat.mickeydb.MickeyLang.SqlExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUpdateStatement"


    // $ANTLR start "entryRuleUpdateColumnExpression"
    // InternalMickeyLang.g:6413:1: entryRuleUpdateColumnExpression returns [EObject current=null] : iv_ruleUpdateColumnExpression= ruleUpdateColumnExpression EOF ;
    public final EObject entryRuleUpdateColumnExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUpdateColumnExpression = null;


        try {
            // InternalMickeyLang.g:6413:63: (iv_ruleUpdateColumnExpression= ruleUpdateColumnExpression EOF )
            // InternalMickeyLang.g:6414:2: iv_ruleUpdateColumnExpression= ruleUpdateColumnExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUpdateColumnExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleUpdateColumnExpression=ruleUpdateColumnExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUpdateColumnExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUpdateColumnExpression"


    // $ANTLR start "ruleUpdateColumnExpression"
    // InternalMickeyLang.g:6420:1: ruleUpdateColumnExpression returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleSqlExpression ) ) ) ;
    public final EObject ruleUpdateColumnExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        EObject lv_expression_2_0 = null;



        	enterRule();

        try {
            // InternalMickeyLang.g:6426:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleSqlExpression ) ) ) )
            // InternalMickeyLang.g:6427:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleSqlExpression ) ) )
            {
            // InternalMickeyLang.g:6427:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleSqlExpression ) ) )
            // InternalMickeyLang.g:6428:3: ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_expression_2_0= ruleSqlExpression ) )
            {
            // InternalMickeyLang.g:6428:3: ( (otherlv_0= RULE_ID ) )
            // InternalMickeyLang.g:6429:4: (otherlv_0= RULE_ID )
            {
            // InternalMickeyLang.g:6429:4: (otherlv_0= RULE_ID )
            // InternalMickeyLang.g:6430:5: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getUpdateColumnExpressionRule());
              					}
              				
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_106); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_0, grammarAccess.getUpdateColumnExpressionAccess().getColumnNameColumnDefCrossReference_0_0());
              				
            }

            }


            }

            otherlv_1=(Token)match(input,43,FOLLOW_27); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getUpdateColumnExpressionAccess().getEqualsSignKeyword_1());
              		
            }
            // InternalMickeyLang.g:6445:3: ( (lv_expression_2_0= ruleSqlExpression ) )
            // InternalMickeyLang.g:6446:4: (lv_expression_2_0= ruleSqlExpression )
            {
            // InternalMickeyLang.g:6446:4: (lv_expression_2_0= ruleSqlExpression )
            // InternalMickeyLang.g:6447:5: lv_expression_2_0= ruleSqlExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getUpdateColumnExpressionAccess().getExpressionSqlExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_expression_2_0=ruleSqlExpression();

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

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getUpdateColumnExpressionRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_2_0,
              						"com.justeat.mickeydb.MickeyLang.SqlExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUpdateColumnExpression"


    // $ANTLR start "entryRuleSignedNumber"
    // InternalMickeyLang.g:6468:1: entryRuleSignedNumber returns [String current=null] : iv_ruleSignedNumber= ruleSignedNumber EOF ;
    public final String entryRuleSignedNumber() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleSignedNumber = null;


        try {
            // InternalMickeyLang.g:6468:52: (iv_ruleSignedNumber= ruleSignedNumber EOF )
            // InternalMickeyLang.g:6469:2: iv_ruleSignedNumber= ruleSignedNumber EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSignedNumberRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSignedNumber=ruleSignedNumber();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSignedNumber.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSignedNumber"


    // $ANTLR start "ruleSignedNumber"
    // InternalMickeyLang.g:6475:1: ruleSignedNumber returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_NUMBER_1= RULE_NUMBER ) ;
    public final AntlrDatatypeRuleToken ruleSignedNumber() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        Token this_NUMBER_1=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:6481:2: ( ( (kw= '-' )? this_NUMBER_1= RULE_NUMBER ) )
            // InternalMickeyLang.g:6482:2: ( (kw= '-' )? this_NUMBER_1= RULE_NUMBER )
            {
            // InternalMickeyLang.g:6482:2: ( (kw= '-' )? this_NUMBER_1= RULE_NUMBER )
            // InternalMickeyLang.g:6483:3: (kw= '-' )? this_NUMBER_1= RULE_NUMBER
            {
            // InternalMickeyLang.g:6483:3: (kw= '-' )?
            int alt118=2;
            int LA118_0 = input.LA(1);

            if ( (LA118_0==34) ) {
                alt118=1;
            }
            switch (alt118) {
                case 1 :
                    // InternalMickeyLang.g:6484:4: kw= '-'
                    {
                    kw=(Token)match(input,34,FOLLOW_107); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getSignedNumberAccess().getHyphenMinusKeyword_0());
                      			
                    }

                    }
                    break;

            }

            this_NUMBER_1=(Token)match(input,RULE_NUMBER,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_NUMBER_1);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_NUMBER_1, grammarAccess.getSignedNumberAccess().getNUMBERTerminalRuleCall_1());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSignedNumber"


    // $ANTLR start "entryRuleQualifiedName"
    // InternalMickeyLang.g:6501:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
    public final String entryRuleQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedName = null;


        try {
            // InternalMickeyLang.g:6501:53: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // InternalMickeyLang.g:6502:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleQualifiedName=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedName.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedName"


    // $ANTLR start "ruleQualifiedName"
    // InternalMickeyLang.g:6508:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:6514:2: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // InternalMickeyLang.g:6515:2: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // InternalMickeyLang.g:6515:2: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // InternalMickeyLang.g:6516:3: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_108); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_0);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_0, grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_0());
              		
            }
            // InternalMickeyLang.g:6523:3: (kw= '.' this_ID_2= RULE_ID )*
            loop119:
            do {
                int alt119=2;
                int LA119_0 = input.LA(1);

                if ( (LA119_0==61) ) {
                    alt119=1;
                }


                switch (alt119) {
            	case 1 :
            	    // InternalMickeyLang.g:6524:4: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)match(input,61,FOLLOW_3); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0());
            	      			
            	    }
            	    this_ID_2=(Token)match(input,RULE_ID,FOLLOW_108); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_ID_2);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(this_ID_2, grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_1_1());
            	      			
            	    }

            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedName"


    // $ANTLR start "ruleCompoundOperator"
    // InternalMickeyLang.g:6541:1: ruleCompoundOperator returns [Enumerator current=null] : ( (enumLiteral_0= 'union all' ) | (enumLiteral_1= 'union' ) | (enumLiteral_2= 'intersect' ) | (enumLiteral_3= 'except' ) ) ;
    public final Enumerator ruleCompoundOperator() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:6547:2: ( ( (enumLiteral_0= 'union all' ) | (enumLiteral_1= 'union' ) | (enumLiteral_2= 'intersect' ) | (enumLiteral_3= 'except' ) ) )
            // InternalMickeyLang.g:6548:2: ( (enumLiteral_0= 'union all' ) | (enumLiteral_1= 'union' ) | (enumLiteral_2= 'intersect' ) | (enumLiteral_3= 'except' ) )
            {
            // InternalMickeyLang.g:6548:2: ( (enumLiteral_0= 'union all' ) | (enumLiteral_1= 'union' ) | (enumLiteral_2= 'intersect' ) | (enumLiteral_3= 'except' ) )
            int alt120=4;
            switch ( input.LA(1) ) {
            case 124:
                {
                alt120=1;
                }
                break;
            case 125:
                {
                alt120=2;
                }
                break;
            case 126:
                {
                alt120=3;
                }
                break;
            case 127:
                {
                alt120=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 120, 0, input);

                throw nvae;
            }

            switch (alt120) {
                case 1 :
                    // InternalMickeyLang.g:6549:3: (enumLiteral_0= 'union all' )
                    {
                    // InternalMickeyLang.g:6549:3: (enumLiteral_0= 'union all' )
                    // InternalMickeyLang.g:6550:4: enumLiteral_0= 'union all'
                    {
                    enumLiteral_0=(Token)match(input,124,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getCompoundOperatorAccess().getUnionallEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_0, grammarAccess.getCompoundOperatorAccess().getUnionallEnumLiteralDeclaration_0());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:6557:3: (enumLiteral_1= 'union' )
                    {
                    // InternalMickeyLang.g:6557:3: (enumLiteral_1= 'union' )
                    // InternalMickeyLang.g:6558:4: enumLiteral_1= 'union'
                    {
                    enumLiteral_1=(Token)match(input,125,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getCompoundOperatorAccess().getUnionEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_1, grammarAccess.getCompoundOperatorAccess().getUnionEnumLiteralDeclaration_1());
                      			
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:6565:3: (enumLiteral_2= 'intersect' )
                    {
                    // InternalMickeyLang.g:6565:3: (enumLiteral_2= 'intersect' )
                    // InternalMickeyLang.g:6566:4: enumLiteral_2= 'intersect'
                    {
                    enumLiteral_2=(Token)match(input,126,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getCompoundOperatorAccess().getIntersectEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_2, grammarAccess.getCompoundOperatorAccess().getIntersectEnumLiteralDeclaration_2());
                      			
                    }

                    }


                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:6573:3: (enumLiteral_3= 'except' )
                    {
                    // InternalMickeyLang.g:6573:3: (enumLiteral_3= 'except' )
                    // InternalMickeyLang.g:6574:4: enumLiteral_3= 'except'
                    {
                    enumLiteral_3=(Token)match(input,127,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getCompoundOperatorAccess().getExceptEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_3, grammarAccess.getCompoundOperatorAccess().getExceptEnumLiteralDeclaration_3());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCompoundOperator"


    // $ANTLR start "ruleSqliteDataType"
    // InternalMickeyLang.g:6584:1: ruleSqliteDataType returns [Enumerator current=null] : ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'none' ) | (enumLiteral_5= 'numeric' ) ) ;
    public final Enumerator ruleSqliteDataType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;
        Token enumLiteral_4=null;
        Token enumLiteral_5=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:6590:2: ( ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'none' ) | (enumLiteral_5= 'numeric' ) ) )
            // InternalMickeyLang.g:6591:2: ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'none' ) | (enumLiteral_5= 'numeric' ) )
            {
            // InternalMickeyLang.g:6591:2: ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'none' ) | (enumLiteral_5= 'numeric' ) )
            int alt121=6;
            switch ( input.LA(1) ) {
            case 128:
                {
                alt121=1;
                }
                break;
            case 129:
                {
                alt121=2;
                }
                break;
            case 130:
                {
                alt121=3;
                }
                break;
            case 131:
                {
                alt121=4;
                }
                break;
            case 132:
                {
                alt121=5;
                }
                break;
            case 133:
                {
                alt121=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 121, 0, input);

                throw nvae;
            }

            switch (alt121) {
                case 1 :
                    // InternalMickeyLang.g:6592:3: (enumLiteral_0= 'text' )
                    {
                    // InternalMickeyLang.g:6592:3: (enumLiteral_0= 'text' )
                    // InternalMickeyLang.g:6593:4: enumLiteral_0= 'text'
                    {
                    enumLiteral_0=(Token)match(input,128,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getSqliteDataTypeAccess().getTextEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_0, grammarAccess.getSqliteDataTypeAccess().getTextEnumLiteralDeclaration_0());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:6600:3: (enumLiteral_1= 'integer' )
                    {
                    // InternalMickeyLang.g:6600:3: (enumLiteral_1= 'integer' )
                    // InternalMickeyLang.g:6601:4: enumLiteral_1= 'integer'
                    {
                    enumLiteral_1=(Token)match(input,129,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getSqliteDataTypeAccess().getIntegerEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_1, grammarAccess.getSqliteDataTypeAccess().getIntegerEnumLiteralDeclaration_1());
                      			
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:6608:3: (enumLiteral_2= 'real' )
                    {
                    // InternalMickeyLang.g:6608:3: (enumLiteral_2= 'real' )
                    // InternalMickeyLang.g:6609:4: enumLiteral_2= 'real'
                    {
                    enumLiteral_2=(Token)match(input,130,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getSqliteDataTypeAccess().getRealEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_2, grammarAccess.getSqliteDataTypeAccess().getRealEnumLiteralDeclaration_2());
                      			
                    }

                    }


                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:6616:3: (enumLiteral_3= 'blob' )
                    {
                    // InternalMickeyLang.g:6616:3: (enumLiteral_3= 'blob' )
                    // InternalMickeyLang.g:6617:4: enumLiteral_3= 'blob'
                    {
                    enumLiteral_3=(Token)match(input,131,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getSqliteDataTypeAccess().getBlobEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_3, grammarAccess.getSqliteDataTypeAccess().getBlobEnumLiteralDeclaration_3());
                      			
                    }

                    }


                    }
                    break;
                case 5 :
                    // InternalMickeyLang.g:6624:3: (enumLiteral_4= 'none' )
                    {
                    // InternalMickeyLang.g:6624:3: (enumLiteral_4= 'none' )
                    // InternalMickeyLang.g:6625:4: enumLiteral_4= 'none'
                    {
                    enumLiteral_4=(Token)match(input,132,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getSqliteDataTypeAccess().getNoneEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_4, grammarAccess.getSqliteDataTypeAccess().getNoneEnumLiteralDeclaration_4());
                      			
                    }

                    }


                    }
                    break;
                case 6 :
                    // InternalMickeyLang.g:6632:3: (enumLiteral_5= 'numeric' )
                    {
                    // InternalMickeyLang.g:6632:3: (enumLiteral_5= 'numeric' )
                    // InternalMickeyLang.g:6633:4: enumLiteral_5= 'numeric'
                    {
                    enumLiteral_5=(Token)match(input,133,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getSqliteDataTypeAccess().getNumericEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_5, grammarAccess.getSqliteDataTypeAccess().getNumericEnumLiteralDeclaration_5());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSqliteDataType"


    // $ANTLR start "ruleColumnType"
    // InternalMickeyLang.g:6643:1: ruleColumnType returns [Enumerator current=null] : ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'boolean' ) ) ;
    public final Enumerator ruleColumnType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;
        Token enumLiteral_4=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:6649:2: ( ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'boolean' ) ) )
            // InternalMickeyLang.g:6650:2: ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'boolean' ) )
            {
            // InternalMickeyLang.g:6650:2: ( (enumLiteral_0= 'text' ) | (enumLiteral_1= 'integer' ) | (enumLiteral_2= 'real' ) | (enumLiteral_3= 'blob' ) | (enumLiteral_4= 'boolean' ) )
            int alt122=5;
            switch ( input.LA(1) ) {
            case 128:
                {
                alt122=1;
                }
                break;
            case 129:
                {
                alt122=2;
                }
                break;
            case 130:
                {
                alt122=3;
                }
                break;
            case 131:
                {
                alt122=4;
                }
                break;
            case 134:
                {
                alt122=5;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 122, 0, input);

                throw nvae;
            }

            switch (alt122) {
                case 1 :
                    // InternalMickeyLang.g:6651:3: (enumLiteral_0= 'text' )
                    {
                    // InternalMickeyLang.g:6651:3: (enumLiteral_0= 'text' )
                    // InternalMickeyLang.g:6652:4: enumLiteral_0= 'text'
                    {
                    enumLiteral_0=(Token)match(input,128,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getColumnTypeAccess().getTextEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_0, grammarAccess.getColumnTypeAccess().getTextEnumLiteralDeclaration_0());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:6659:3: (enumLiteral_1= 'integer' )
                    {
                    // InternalMickeyLang.g:6659:3: (enumLiteral_1= 'integer' )
                    // InternalMickeyLang.g:6660:4: enumLiteral_1= 'integer'
                    {
                    enumLiteral_1=(Token)match(input,129,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getColumnTypeAccess().getIntegerEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_1, grammarAccess.getColumnTypeAccess().getIntegerEnumLiteralDeclaration_1());
                      			
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:6667:3: (enumLiteral_2= 'real' )
                    {
                    // InternalMickeyLang.g:6667:3: (enumLiteral_2= 'real' )
                    // InternalMickeyLang.g:6668:4: enumLiteral_2= 'real'
                    {
                    enumLiteral_2=(Token)match(input,130,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getColumnTypeAccess().getRealEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_2, grammarAccess.getColumnTypeAccess().getRealEnumLiteralDeclaration_2());
                      			
                    }

                    }


                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:6675:3: (enumLiteral_3= 'blob' )
                    {
                    // InternalMickeyLang.g:6675:3: (enumLiteral_3= 'blob' )
                    // InternalMickeyLang.g:6676:4: enumLiteral_3= 'blob'
                    {
                    enumLiteral_3=(Token)match(input,131,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getColumnTypeAccess().getBlobEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_3, grammarAccess.getColumnTypeAccess().getBlobEnumLiteralDeclaration_3());
                      			
                    }

                    }


                    }
                    break;
                case 5 :
                    // InternalMickeyLang.g:6683:3: (enumLiteral_4= 'boolean' )
                    {
                    // InternalMickeyLang.g:6683:3: (enumLiteral_4= 'boolean' )
                    // InternalMickeyLang.g:6684:4: enumLiteral_4= 'boolean'
                    {
                    enumLiteral_4=(Token)match(input,134,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getColumnTypeAccess().getBooleanEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_4, grammarAccess.getColumnTypeAccess().getBooleanEnumLiteralDeclaration_4());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleColumnType"


    // $ANTLR start "ruleConflictResolution"
    // InternalMickeyLang.g:6694:1: ruleConflictResolution returns [Enumerator current=null] : ( (enumLiteral_0= 'rollback' ) | (enumLiteral_1= 'abort' ) | (enumLiteral_2= 'fail' ) | (enumLiteral_3= 'ignore' ) | (enumLiteral_4= 'replace' ) ) ;
    public final Enumerator ruleConflictResolution() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;
        Token enumLiteral_4=null;


        	enterRule();

        try {
            // InternalMickeyLang.g:6700:2: ( ( (enumLiteral_0= 'rollback' ) | (enumLiteral_1= 'abort' ) | (enumLiteral_2= 'fail' ) | (enumLiteral_3= 'ignore' ) | (enumLiteral_4= 'replace' ) ) )
            // InternalMickeyLang.g:6701:2: ( (enumLiteral_0= 'rollback' ) | (enumLiteral_1= 'abort' ) | (enumLiteral_2= 'fail' ) | (enumLiteral_3= 'ignore' ) | (enumLiteral_4= 'replace' ) )
            {
            // InternalMickeyLang.g:6701:2: ( (enumLiteral_0= 'rollback' ) | (enumLiteral_1= 'abort' ) | (enumLiteral_2= 'fail' ) | (enumLiteral_3= 'ignore' ) | (enumLiteral_4= 'replace' ) )
            int alt123=5;
            switch ( input.LA(1) ) {
            case 135:
                {
                alt123=1;
                }
                break;
            case 136:
                {
                alt123=2;
                }
                break;
            case 137:
                {
                alt123=3;
                }
                break;
            case 138:
                {
                alt123=4;
                }
                break;
            case 120:
                {
                alt123=5;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 123, 0, input);

                throw nvae;
            }

            switch (alt123) {
                case 1 :
                    // InternalMickeyLang.g:6702:3: (enumLiteral_0= 'rollback' )
                    {
                    // InternalMickeyLang.g:6702:3: (enumLiteral_0= 'rollback' )
                    // InternalMickeyLang.g:6703:4: enumLiteral_0= 'rollback'
                    {
                    enumLiteral_0=(Token)match(input,135,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getConflictResolutionAccess().getRollbackEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_0, grammarAccess.getConflictResolutionAccess().getRollbackEnumLiteralDeclaration_0());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalMickeyLang.g:6710:3: (enumLiteral_1= 'abort' )
                    {
                    // InternalMickeyLang.g:6710:3: (enumLiteral_1= 'abort' )
                    // InternalMickeyLang.g:6711:4: enumLiteral_1= 'abort'
                    {
                    enumLiteral_1=(Token)match(input,136,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getConflictResolutionAccess().getAbortEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_1, grammarAccess.getConflictResolutionAccess().getAbortEnumLiteralDeclaration_1());
                      			
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalMickeyLang.g:6718:3: (enumLiteral_2= 'fail' )
                    {
                    // InternalMickeyLang.g:6718:3: (enumLiteral_2= 'fail' )
                    // InternalMickeyLang.g:6719:4: enumLiteral_2= 'fail'
                    {
                    enumLiteral_2=(Token)match(input,137,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getConflictResolutionAccess().getFailEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_2, grammarAccess.getConflictResolutionAccess().getFailEnumLiteralDeclaration_2());
                      			
                    }

                    }


                    }
                    break;
                case 4 :
                    // InternalMickeyLang.g:6726:3: (enumLiteral_3= 'ignore' )
                    {
                    // InternalMickeyLang.g:6726:3: (enumLiteral_3= 'ignore' )
                    // InternalMickeyLang.g:6727:4: enumLiteral_3= 'ignore'
                    {
                    enumLiteral_3=(Token)match(input,138,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getConflictResolutionAccess().getIgnoreEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_3, grammarAccess.getConflictResolutionAccess().getIgnoreEnumLiteralDeclaration_3());
                      			
                    }

                    }


                    }
                    break;
                case 5 :
                    // InternalMickeyLang.g:6734:3: (enumLiteral_4= 'replace' )
                    {
                    // InternalMickeyLang.g:6734:3: (enumLiteral_4= 'replace' )
                    // InternalMickeyLang.g:6735:4: enumLiteral_4= 'replace'
                    {
                    enumLiteral_4=(Token)match(input,120,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getConflictResolutionAccess().getReplaceEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_4, grammarAccess.getConflictResolutionAccess().getReplaceEnumLiteralDeclaration_4());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConflictResolution"

    // $ANTLR start synpred1_InternalMickeyLang
    public final void synpred1_InternalMickeyLang_fragment() throws RecognitionException {   
        // InternalMickeyLang.g:1999:7: ( ( RULE_ID ) )
        // InternalMickeyLang.g:1999:8: ( RULE_ID )
        {
        // InternalMickeyLang.g:1999:8: ( RULE_ID )
        // InternalMickeyLang.g:2000:8: RULE_ID
        {
        match(input,RULE_ID,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred1_InternalMickeyLang

    // Delegated rules

    public final boolean synpred1_InternalMickeyLang() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_InternalMickeyLang_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 DFA45 dfa45 = new DFA45(this);
    protected DFA37 dfa37 = new DFA37(this);
    protected DFA70 dfa70 = new DFA70(this);
    static final String dfa_1s = "\15\uffff";
    static final String dfa_2s = "\3\uffff\1\13\11\uffff";
    static final String dfa_3s = "\1\4\2\uffff\1\15\1\uffff\1\4\7\uffff";
    static final String dfa_4s = "\1\134\2\uffff\1\177\1\uffff\1\134\7\uffff";
    static final String dfa_5s = "\1\uffff\1\1\1\2\1\uffff\1\4\1\uffff\1\6\1\7\1\11\1\12\1\10\1\3\1\5";
    static final String dfa_6s = "\15\uffff}>";
    static final String[] dfa_7s = {
            "\1\3\2\4\7\uffff\1\5\23\uffff\1\4\30\uffff\1\1\1\2\1\uffff\2\6\1\7\2\uffff\1\10\1\uffff\1\11\23\uffff\4\4",
            "",
            "",
            "\1\13\1\12\2\13\2\uffff\1\13\1\uffff\1\13\3\uffff\1\13\1\uffff\40\13\2\uffff\1\13\3\uffff\2\13\1\uffff\1\13\1\uffff\5\13\3\uffff\7\13\1\uffff\3\13\4\uffff\1\13\14\uffff\2\13\2\uffff\1\13\15\uffff\4\13",
            "",
            "\3\14\7\uffff\1\14\23\uffff\1\14\30\uffff\2\14\1\uffff\3\14\2\uffff\1\14\1\uffff\1\14\5\uffff\1\6\15\uffff\4\14",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_1 = DFA.unpackEncodedString(dfa_1s);
    static final short[] dfa_2 = DFA.unpackEncodedString(dfa_2s);
    static final char[] dfa_3 = DFA.unpackEncodedStringToUnsignedChars(dfa_3s);
    static final char[] dfa_4 = DFA.unpackEncodedStringToUnsignedChars(dfa_4s);
    static final short[] dfa_5 = DFA.unpackEncodedString(dfa_5s);
    static final short[] dfa_6 = DFA.unpackEncodedString(dfa_6s);
    static final short[][] dfa_7 = unpackEncodedStringArray(dfa_7s);

    class DFA45 extends DFA {

        public DFA45(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 45;
            this.eot = dfa_1;
            this.eof = dfa_2;
            this.min = dfa_3;
            this.max = dfa_4;
            this.accept = dfa_5;
            this.special = dfa_6;
            this.transition = dfa_7;
        }
        public String getDescription() {
            return "1933:2: ( ( () otherlv_1= 'new.' ( (otherlv_2= RULE_ID ) ) ) | ( () otherlv_4= 'old.' ( (otherlv_5= RULE_ID ) ) ) | ( () ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) ) ) | ( () ( (lv_literalValue_15_0= ruleLiteralValue ) ) ) | ( () otherlv_17= '(' ( (lv_expression_18_0= ruleSqlExpression ) ) otherlv_19= ')' ) | ( () ( (lv_not_21_0= 'not' ) )? ( (lv_exists_22_0= 'exists' ) )? otherlv_23= '(' ( (lv_select_24_0= ruleSelectStatement ) ) otherlv_25= ')' ) | ( () otherlv_27= 'case' ( (lv_caseExpression_28_0= ruleSqlExpression ) )? ( (lv_cases_29_0= ruleCase ) )+ (otherlv_30= 'else' ( (lv_elseExpression_31_0= ruleSqlExpression ) ) )? otherlv_32= 'end' ) | ( () ( (lv_name_34_0= RULE_ID ) ) otherlv_35= '(' ( ( (lv_all_36_0= '*' ) ) | ( ( (lv_arguments_37_0= ruleSqlExpression ) ) (otherlv_38= ',' ( (lv_arguments_39_0= ruleSqlExpression ) ) )* ) ) otherlv_40= ')' ) | ( () otherlv_42= 'cast' otherlv_43= '(' ( (lv_expression_44_0= ruleSqlExpression ) ) otherlv_45= 'as' ( (lv_type_46_0= ruleSqliteDataType ) ) otherlv_47= ')' ) | ( () otherlv_49= '$' ( (otherlv_50= RULE_ID ) ) ) )";
        }
    }
    static final String dfa_8s = "\127\uffff";
    static final String dfa_9s = "\1\uffff\1\3\1\43\34\uffff\1\105\67\uffff";
    static final String dfa_10s = "\1\4\1\15\1\4\34\uffff\1\4\46\uffff\1\4\17\uffff\1\0";
    static final String dfa_11s = "\1\4\2\177\34\uffff\1\177\46\uffff\1\134\17\uffff\1\0";
    static final String dfa_12s = "\3\uffff\1\3\33\1\1\uffff\45\1\1\2\1\uffff\17\1\1\uffff";
    static final String dfa_13s = "\2\uffff\1\0\34\uffff\1\2\66\uffff\1\1}>";
    static final String[] dfa_14s = {
            "\1\1",
            "\1\3\1\uffff\2\3\2\uffff\1\3\1\uffff\1\3\3\uffff\1\3\1\uffff\40\3\2\uffff\1\2\3\uffff\2\3\1\uffff\1\3\1\uffff\5\3\3\uffff\7\3\1\uffff\3\3\4\uffff\1\3\14\uffff\2\3\2\uffff\1\3\15\uffff\4\3",
            "\1\105\10\uffff\1\54\1\uffff\1\47\1\44\2\uffff\1\62\1\uffff\1\55\3\uffff\1\40\1\uffff\1\21\1\61\1\103\1\42\1\37\1\41\1\35\1\36\1\31\1\32\1\33\1\34\1\25\1\26\1\27\1\30\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\22\1\23\1\24\1\10\1\7\1\4\1\5\1\6\6\uffff\1\52\1\46\1\uffff\1\50\1\uffff\1\45\1\51\1\71\1\72\1\53\3\uffff\1\75\1\63\1\64\1\73\1\74\1\76\1\77\1\uffff\1\100\1\101\1\102\4\uffff\1\56\14\uffff\1\104\1\57\2\uffff\1\60\15\uffff\1\65\1\66\1\67\1\70",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\111\1\113\1\112\6\uffff\1\105\1\120\2\105\2\uffff\1\105\1\uffff\1\105\3\uffff\1\105\1\uffff\7\105\1\106\30\105\1\107\1\110\1\uffff\1\121\1\122\1\123\2\105\1\124\1\105\1\125\5\105\3\uffff\7\105\1\uffff\3\105\1\114\1\115\1\116\1\117\1\105\14\uffff\2\105\2\uffff\1\105\15\uffff\4\105",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\2\105\1\126\7\uffff\1\105\23\uffff\1\105\30\uffff\2\105\1\uffff\3\105\2\uffff\1\105\1\uffff\1\105\23\uffff\4\105",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\uffff"
    };

    static final short[] dfa_8 = DFA.unpackEncodedString(dfa_8s);
    static final short[] dfa_9 = DFA.unpackEncodedString(dfa_9s);
    static final char[] dfa_10 = DFA.unpackEncodedStringToUnsignedChars(dfa_10s);
    static final char[] dfa_11 = DFA.unpackEncodedStringToUnsignedChars(dfa_11s);
    static final short[] dfa_12 = DFA.unpackEncodedString(dfa_12s);
    static final short[] dfa_13 = DFA.unpackEncodedString(dfa_13s);
    static final short[][] dfa_14 = unpackEncodedStringArray(dfa_14s);

    class DFA37 extends DFA {

        public DFA37(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 37;
            this.eot = dfa_8;
            this.eof = dfa_9;
            this.min = dfa_10;
            this.max = dfa_11;
            this.accept = dfa_12;
            this.special = dfa_13;
            this.transition = dfa_14;
        }
        public String getDescription() {
            return "1996:4: ( ( ( ( ( RULE_ID ) )=> (otherlv_7= RULE_ID ) ) otherlv_8= '.' ) | ( ( (otherlv_9= RULE_ID ) ) otherlv_10= '.' ( ( (lv_all_11_0= '*' ) ) | ( (otherlv_12= RULE_ID ) ) ) ) | ( (otherlv_13= RULE_ID ) ) )";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA37_2 = input.LA(1);

                         
                        int index37_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA37_2==56) && (synpred1_InternalMickeyLang())) {s = 4;}

                        else if ( (LA37_2==57) && (synpred1_InternalMickeyLang())) {s = 5;}

                        else if ( (LA37_2==58) && (synpred1_InternalMickeyLang())) {s = 6;}

                        else if ( (LA37_2==55) && (synpred1_InternalMickeyLang())) {s = 7;}

                        else if ( (LA37_2==54) && (synpred1_InternalMickeyLang())) {s = 8;}

                        else if ( (LA37_2==43) && (synpred1_InternalMickeyLang())) {s = 9;}

                        else if ( (LA37_2==44) && (synpred1_InternalMickeyLang())) {s = 10;}

                        else if ( (LA37_2==45) && (synpred1_InternalMickeyLang())) {s = 11;}

                        else if ( (LA37_2==46) && (synpred1_InternalMickeyLang())) {s = 12;}

                        else if ( (LA37_2==47) && (synpred1_InternalMickeyLang())) {s = 13;}

                        else if ( (LA37_2==48) && (synpred1_InternalMickeyLang())) {s = 14;}

                        else if ( (LA37_2==49) && (synpred1_InternalMickeyLang())) {s = 15;}

                        else if ( (LA37_2==50) && (synpred1_InternalMickeyLang())) {s = 16;}

                        else if ( (LA37_2==27) && (synpred1_InternalMickeyLang())) {s = 17;}

                        else if ( (LA37_2==51) && (synpred1_InternalMickeyLang())) {s = 18;}

                        else if ( (LA37_2==52) && (synpred1_InternalMickeyLang())) {s = 19;}

                        else if ( (LA37_2==53) && (synpred1_InternalMickeyLang())) {s = 20;}

                        else if ( (LA37_2==39) && (synpred1_InternalMickeyLang())) {s = 21;}

                        else if ( (LA37_2==40) && (synpred1_InternalMickeyLang())) {s = 22;}

                        else if ( (LA37_2==41) && (synpred1_InternalMickeyLang())) {s = 23;}

                        else if ( (LA37_2==42) && (synpred1_InternalMickeyLang())) {s = 24;}

                        else if ( (LA37_2==35) && (synpred1_InternalMickeyLang())) {s = 25;}

                        else if ( (LA37_2==36) && (synpred1_InternalMickeyLang())) {s = 26;}

                        else if ( (LA37_2==37) && (synpred1_InternalMickeyLang())) {s = 27;}

                        else if ( (LA37_2==38) && (synpred1_InternalMickeyLang())) {s = 28;}

                        else if ( (LA37_2==33) && (synpred1_InternalMickeyLang())) {s = 29;}

                        else if ( (LA37_2==34) && (synpred1_InternalMickeyLang())) {s = 30;}

                        else if ( (LA37_2==31) ) {s = 31;}

                        else if ( (LA37_2==25) && (synpred1_InternalMickeyLang())) {s = 32;}

                        else if ( (LA37_2==32) && (synpred1_InternalMickeyLang())) {s = 33;}

                        else if ( (LA37_2==30) && (synpred1_InternalMickeyLang())) {s = 34;}

                        else if ( (LA37_2==EOF) && (synpred1_InternalMickeyLang())) {s = 35;}

                        else if ( (LA37_2==16) && (synpred1_InternalMickeyLang())) {s = 36;}

                        else if ( (LA37_2==70) && (synpred1_InternalMickeyLang())) {s = 37;}

                        else if ( (LA37_2==66) && (synpred1_InternalMickeyLang())) {s = 38;}

                        else if ( (LA37_2==15) && (synpred1_InternalMickeyLang())) {s = 39;}

                        else if ( (LA37_2==68) && (synpred1_InternalMickeyLang())) {s = 40;}

                        else if ( (LA37_2==71) && (synpred1_InternalMickeyLang())) {s = 41;}

                        else if ( (LA37_2==65) && (synpred1_InternalMickeyLang())) {s = 42;}

                        else if ( (LA37_2==74) && (synpred1_InternalMickeyLang())) {s = 43;}

                        else if ( (LA37_2==13) && (synpred1_InternalMickeyLang())) {s = 44;}

                        else if ( (LA37_2==21) && (synpred1_InternalMickeyLang())) {s = 45;}

                        else if ( (LA37_2==93) && (synpred1_InternalMickeyLang())) {s = 46;}

                        else if ( (LA37_2==107) && (synpred1_InternalMickeyLang())) {s = 47;}

                        else if ( (LA37_2==110) && (synpred1_InternalMickeyLang())) {s = 48;}

                        else if ( (LA37_2==28) && (synpred1_InternalMickeyLang())) {s = 49;}

                        else if ( (LA37_2==19) && (synpred1_InternalMickeyLang())) {s = 50;}

                        else if ( (LA37_2==79) && (synpred1_InternalMickeyLang())) {s = 51;}

                        else if ( (LA37_2==80) && (synpred1_InternalMickeyLang())) {s = 52;}

                        else if ( (LA37_2==124) && (synpred1_InternalMickeyLang())) {s = 53;}

                        else if ( (LA37_2==125) && (synpred1_InternalMickeyLang())) {s = 54;}

                        else if ( (LA37_2==126) && (synpred1_InternalMickeyLang())) {s = 55;}

                        else if ( (LA37_2==127) && (synpred1_InternalMickeyLang())) {s = 56;}

                        else if ( (LA37_2==72) && (synpred1_InternalMickeyLang())) {s = 57;}

                        else if ( (LA37_2==73) && (synpred1_InternalMickeyLang())) {s = 58;}

                        else if ( (LA37_2==81) && (synpred1_InternalMickeyLang())) {s = 59;}

                        else if ( (LA37_2==82) && (synpred1_InternalMickeyLang())) {s = 60;}

                        else if ( (LA37_2==78) && (synpred1_InternalMickeyLang())) {s = 61;}

                        else if ( (LA37_2==83) && (synpred1_InternalMickeyLang())) {s = 62;}

                        else if ( (LA37_2==84) && (synpred1_InternalMickeyLang())) {s = 63;}

                        else if ( (LA37_2==86) && (synpred1_InternalMickeyLang())) {s = 64;}

                        else if ( (LA37_2==87) && (synpred1_InternalMickeyLang())) {s = 65;}

                        else if ( (LA37_2==88) && (synpred1_InternalMickeyLang())) {s = 66;}

                        else if ( (LA37_2==29) && (synpred1_InternalMickeyLang())) {s = 67;}

                        else if ( (LA37_2==106) && (synpred1_InternalMickeyLang())) {s = 68;}

                        else if ( (LA37_2==RULE_ID) ) {s = 69;}

                         
                        input.seek(index37_2);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA37_86 = input.LA(1);

                         
                        int index37_86 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalMickeyLang()) ) {s = 85;}

                        else if ( (true) ) {s = 69;}

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

                         
                        int index37_31 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA37_31==EOF||LA37_31==13||(LA37_31>=15 && LA37_31<=16)||LA37_31==19||LA37_31==21||LA37_31==25||(LA37_31>=27 && LA37_31<=33)||(LA37_31>=35 && LA37_31<=58)||(LA37_31>=65 && LA37_31<=66)||LA37_31==68||(LA37_31>=70 && LA37_31<=74)||(LA37_31>=78 && LA37_31<=84)||(LA37_31>=86 && LA37_31<=88)||LA37_31==93||(LA37_31>=106 && LA37_31<=107)||LA37_31==110||(LA37_31>=124 && LA37_31<=127)) ) {s = 69;}

                        else if ( (LA37_31==34) ) {s = 70;}

                        else if ( (LA37_31==59) && (synpred1_InternalMickeyLang())) {s = 71;}

                        else if ( (LA37_31==60) && (synpred1_InternalMickeyLang())) {s = 72;}

                        else if ( (LA37_31==RULE_ID) && (synpred1_InternalMickeyLang())) {s = 73;}

                        else if ( (LA37_31==RULE_NUMBER) && (synpred1_InternalMickeyLang())) {s = 74;}

                        else if ( (LA37_31==RULE_STRING) && (synpred1_InternalMickeyLang())) {s = 75;}

                        else if ( (LA37_31==89) && (synpred1_InternalMickeyLang())) {s = 76;}

                        else if ( (LA37_31==90) && (synpred1_InternalMickeyLang())) {s = 77;}

                        else if ( (LA37_31==91) && (synpred1_InternalMickeyLang())) {s = 78;}

                        else if ( (LA37_31==92) && (synpred1_InternalMickeyLang())) {s = 79;}

                        else if ( (LA37_31==14) && (synpred1_InternalMickeyLang())) {s = 80;}

                        else if ( (LA37_31==62) && (synpred1_InternalMickeyLang())) {s = 81;}

                        else if ( (LA37_31==63) && (synpred1_InternalMickeyLang())) {s = 82;}

                        else if ( (LA37_31==64) && (synpred1_InternalMickeyLang())) {s = 83;}

                        else if ( (LA37_31==67) && (synpred1_InternalMickeyLang())) {s = 84;}

                        else if ( (LA37_31==69) && (synpred1_InternalMickeyLang())) {s = 85;}

                         
                        input.seek(index37_31);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 37, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_15s = "\21\uffff";
    static final String dfa_16s = "\1\135\1\27\3\137\4\uffff\1\4\4\uffff\1\154\2\uffff";
    static final String dfa_17s = "\1\156\1\160\1\137\1\160\1\141\4\uffff\1\4\4\uffff\1\155\2\uffff";
    static final String dfa_18s = "\5\uffff\1\3\1\1\1\2\1\4\1\uffff\1\7\1\11\1\12\1\10\1\uffff\1\6\1\5";
    static final String dfa_19s = "\21\uffff}>";
    static final String[] dfa_20s = {
            "\1\1\15\uffff\1\2\2\uffff\1\3",
            "\1\10\106\uffff\1\4\1\6\1\7\1\5\16\uffff\1\10",
            "\1\11",
            "\1\12\1\13\1\15\16\uffff\1\14",
            "\1\6\1\7\1\5",
            "",
            "",
            "",
            "",
            "\1\16",
            "",
            "",
            "",
            "",
            "\1\20\1\17",
            "",
            ""
    };

    static final short[] dfa_15 = DFA.unpackEncodedString(dfa_15s);
    static final char[] dfa_16 = DFA.unpackEncodedStringToUnsignedChars(dfa_16s);
    static final char[] dfa_17 = DFA.unpackEncodedStringToUnsignedChars(dfa_17s);
    static final short[] dfa_18 = DFA.unpackEncodedString(dfa_18s);
    static final short[] dfa_19 = DFA.unpackEncodedString(dfa_19s);
    static final short[][] dfa_20 = unpackEncodedStringArray(dfa_20s);

    class DFA70 extends DFA {

        public DFA70(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 70;
            this.eot = dfa_15;
            this.eof = dfa_15;
            this.min = dfa_16;
            this.max = dfa_17;
            this.accept = dfa_18;
            this.special = dfa_19;
            this.transition = dfa_20;
        }
        public String getDescription() {
            return "3971:2: (this_CreateTableStatement_0= ruleCreateTableStatement | this_CreateViewStatement_1= ruleCreateViewStatement | this_CreateTriggerStatement_2= ruleCreateTriggerStatement | this_CreateIndexStatement_3= ruleCreateIndexStatement | this_AlterTableRenameStatement_4= ruleAlterTableRenameStatement | this_AlterTableAddColumnStatement_5= ruleAlterTableAddColumnStatement | this_DropTableStatement_6= ruleDropTableStatement | this_DropTriggerStatement_7= ruleDropTriggerStatement | this_DropViewStatement_8= ruleDropViewStatement | this_DropIndexStatement_9= ruleDropIndexStatement )";
        }
    }
 

    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000010202002L,0x0000480020000000L});
    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000010000L,0x0000000000000000L,0x000000000000004FL});
    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x000000000000004FL});
    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000060000L});
    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000100000L,0x010000E000000800L});
    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000002440010L});
    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000400000L});
    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000840002L});
    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000005100000L});
    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000001100000L});
    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000002040010L});
    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000000040010L});
    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000008000010L});
    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000020040000L});
    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000000000100000L,0x0000480020000000L});
    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0xD800000400004070L,0x000000001E000029L});
    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000000182000002L});
    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000000600000002L});
    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000007800000002L});
    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0000078000000002L});
    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x003FF80008000002L});
    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x0040000000000002L});
    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0080000000000002L});
    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0700000000000002L});
    public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x2000000000000000L});
    public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000000080000010L});
    public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x8000000000004000L});
    public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_41 = new BitSet(new long[]{0xD800000400004070L,0x000000001E000069L});
    public static final BitSet FOLLOW_42 = new BitSet(new long[]{0xD800000400004070L,0x000000001E00006FL});
    public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_44 = new BitSet(new long[]{0xD800000480004070L,0x000000001E000029L});
    public static final BitSet FOLLOW_45 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_46 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x000000000000003FL});
    public static final BitSet FOLLOW_47 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_48 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000300L});
    public static final BitSet FOLLOW_49 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L});
    public static final BitSet FOLLOW_50 = new BitSet(new long[]{0x0000000000008002L,0x0000000000000400L});
    public static final BitSet FOLLOW_51 = new BitSet(new long[]{0x0000000000008002L});
    public static final BitSet FOLLOW_52 = new BitSet(new long[]{0x0000000000000002L,0xF000000000000000L});
    public static final BitSet FOLLOW_53 = new BitSet(new long[]{0xD800000480004070L,0x000000001E003029L});
    public static final BitSet FOLLOW_54 = new BitSet(new long[]{0x0000000020000002L,0x000000000001C000L});
    public static final BitSet FOLLOW_55 = new BitSet(new long[]{0x0000000000004010L});
    public static final BitSet FOLLOW_56 = new BitSet(new long[]{0x0000000000000002L,0x000000000001C000L});
    public static final BitSet FOLLOW_57 = new BitSet(new long[]{0x0000000000000002L,0x0000000000018000L});
    public static final BitSet FOLLOW_58 = new BitSet(new long[]{0x0000000000000002L,0x0000000000010000L});
    public static final BitSet FOLLOW_59 = new BitSet(new long[]{0x0000000000000002L,0x0000000000060000L});
    public static final BitSet FOLLOW_60 = new BitSet(new long[]{0x0000000000000002L,0x0000000001D80000L});
    public static final BitSet FOLLOW_61 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000010L});
    public static final BitSet FOLLOW_62 = new BitSet(new long[]{0x0000000000000000L,0x0000000001D00000L});
    public static final BitSet FOLLOW_63 = new BitSet(new long[]{0x0000000000000000L,0x0000000001200000L});
    public static final BitSet FOLLOW_64 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
    public static final BitSet FOLLOW_65 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
    public static final BitSet FOLLOW_66 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_67 = new BitSet(new long[]{0x0000000000800000L,0x0032000000000000L});
    public static final BitSet FOLLOW_68 = new BitSet(new long[]{0x0000000000000000L,0x0000000140000000L});
    public static final BitSet FOLLOW_69 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_70 = new BitSet(new long[]{0x0000000000000000L,0x0000000240000000L});
    public static final BitSet FOLLOW_71 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_72 = new BitSet(new long[]{0x0000000000000000L,0x000000FC00000000L});
    public static final BitSet FOLLOW_73 = new BitSet(new long[]{0x0000000000000000L,0x000000E000000000L});
    public static final BitSet FOLLOW_74 = new BitSet(new long[]{0x0000000000400000L,0x0000010000000000L});
    public static final BitSet FOLLOW_75 = new BitSet(new long[]{0x0000000000408000L});
    public static final BitSet FOLLOW_76 = new BitSet(new long[]{0x0000000000000000L,0x0000060000000040L});
    public static final BitSet FOLLOW_77 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000040L});
    public static final BitSet FOLLOW_78 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
    public static final BitSet FOLLOW_79 = new BitSet(new long[]{0x0000000000000000L,0x010000E000000804L});
    public static final BitSet FOLLOW_80 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
    public static final BitSet FOLLOW_81 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
    public static final BitSet FOLLOW_82 = new BitSet(new long[]{0x0000000000000010L,0x0000800000000000L});
    public static final BitSet FOLLOW_83 = new BitSet(new long[]{0x0000000000800000L,0x0001000000000000L});
    public static final BitSet FOLLOW_84 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
    public static final BitSet FOLLOW_85 = new BitSet(new long[]{0x0200000000800002L,0x001A000000000000L});
    public static final BitSet FOLLOW_86 = new BitSet(new long[]{0x0000000000000002L,0x0004000000060000L});
    public static final BitSet FOLLOW_87 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
    public static final BitSet FOLLOW_88 = new BitSet(new long[]{0x0000000000400002L});
    public static final BitSet FOLLOW_89 = new BitSet(new long[]{0x0000000400004060L,0x000000001E000000L});
    public static final BitSet FOLLOW_90 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_91 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
    public static final BitSet FOLLOW_92 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
    public static final BitSet FOLLOW_93 = new BitSet(new long[]{0x0000000000000002L,0x0040000000060000L});
    public static final BitSet FOLLOW_94 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
    public static final BitSet FOLLOW_95 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L,0x0000000000000780L});
    public static final BitSet FOLLOW_96 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_97 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_98 = new BitSet(new long[]{0x0080000000000000L,0x0200000000000000L});
    public static final BitSet FOLLOW_99 = new BitSet(new long[]{0x0000000000000000L,0x0200000000000000L});
    public static final BitSet FOLLOW_100 = new BitSet(new long[]{0x0000000000004000L,0x0408000000000800L});
    public static final BitSet FOLLOW_101 = new BitSet(new long[]{0x0000000000000000L,0x0408000000000800L});
    public static final BitSet FOLLOW_102 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
    public static final BitSet FOLLOW_103 = new BitSet(new long[]{0x0080000000000010L});
    public static final BitSet FOLLOW_104 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L});
    public static final BitSet FOLLOW_105 = new BitSet(new long[]{0x0000000000008002L,0x0000000000004000L});
    public static final BitSet FOLLOW_106 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_107 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_108 = new BitSet(new long[]{0x2000000000000002L});

}