/*
 * generated by Xtext 2.9.2
 */
package com.justeat.mickeydb.services;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.List;
import org.eclipse.xtext.Action;
import org.eclipse.xtext.Alternatives;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.CrossReference;
import org.eclipse.xtext.EnumLiteralDeclaration;
import org.eclipse.xtext.EnumRule;
import org.eclipse.xtext.Grammar;
import org.eclipse.xtext.GrammarUtil;
import org.eclipse.xtext.Group;
import org.eclipse.xtext.Keyword;
import org.eclipse.xtext.ParserRule;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.TerminalRule;
import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
import org.eclipse.xtext.service.AbstractElementFinder.AbstractEnumRuleElementFinder;
import org.eclipse.xtext.service.AbstractElementFinder.AbstractGrammarElementFinder;
import org.eclipse.xtext.service.GrammarProvider;

@Singleton
public class MickeyLangGrammarAccess extends AbstractGrammarElementFinder {
	
	public class MickeyFileElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.MickeyFile");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDatabaseKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cDatabaseNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cDatabaseNameQualifiedNameParserRuleCall_1_0 = (RuleCall)cDatabaseNameAssignment_1.eContents().get(0);
		private final Assignment cBlocksAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cBlocksMickeyBlockParserRuleCall_2_0 = (RuleCall)cBlocksAssignment_2.eContents().get(0);
		
		/// ***********************************************************************
		// *                                                                     *
		// * CORE                                                                *
		// *                                                                     *
		// *********************************************************************** / MickeyFile:
		//	'database' databaseName=QualifiedName
		//	blocks+=MickeyBlock*;
		@Override public ParserRule getRule() { return rule; }
		
		//'database' databaseName=QualifiedName blocks+=MickeyBlock*
		public Group getGroup() { return cGroup; }
		
		//'database'
		public Keyword getDatabaseKeyword_0() { return cDatabaseKeyword_0; }
		
		//databaseName=QualifiedName
		public Assignment getDatabaseNameAssignment_1() { return cDatabaseNameAssignment_1; }
		
		//QualifiedName
		public RuleCall getDatabaseNameQualifiedNameParserRuleCall_1_0() { return cDatabaseNameQualifiedNameParserRuleCall_1_0; }
		
		//blocks+=MickeyBlock*
		public Assignment getBlocksAssignment_2() { return cBlocksAssignment_2; }
		
		//MickeyBlock
		public RuleCall getBlocksMickeyBlockParserRuleCall_2_0() { return cBlocksMickeyBlockParserRuleCall_2_0; }
	}
	public class MickeyBlockElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.MickeyBlock");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cMickeyFunctionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cActionStatementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cDDLStatementParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cMigrationBlockParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//MickeyBlock:
		//	MickeyFunction | ActionStatement | DDLStatement | MigrationBlock;
		@Override public ParserRule getRule() { return rule; }
		
		//MickeyFunction | ActionStatement | DDLStatement | MigrationBlock
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//MickeyFunction
		public RuleCall getMickeyFunctionParserRuleCall_0() { return cMickeyFunctionParserRuleCall_0; }
		
		//ActionStatement
		public RuleCall getActionStatementParserRuleCall_1() { return cActionStatementParserRuleCall_1; }
		
		//DDLStatement
		public RuleCall getDDLStatementParserRuleCall_2() { return cDDLStatementParserRuleCall_2; }
		
		//MigrationBlock
		public RuleCall getMigrationBlockParserRuleCall_3() { return cMigrationBlockParserRuleCall_3; }
	}
	public class MickeyFunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.MickeyFunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cFunctionKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Assignment cArgsAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cArgsFunctionArgParserRuleCall_3_0_0 = (RuleCall)cArgsAssignment_3_0.eContents().get(0);
		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
		private final Assignment cArgsAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cArgsFunctionArgParserRuleCall_3_1_1_0 = (RuleCall)cArgsAssignment_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cColonKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cTypeAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final CrossReference cTypeTableDefinitionCrossReference_5_1_0 = (CrossReference)cTypeAssignment_5_1.eContents().get(0);
		private final RuleCall cTypeTableDefinitionQualifiedNameParserRuleCall_5_1_0_1 = (RuleCall)cTypeTableDefinitionCrossReference_5_1_0.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Assignment cStatementsAssignment_7_0 = (Assignment)cGroup_7.eContents().get(0);
		private final RuleCall cStatementsDMLStatementParserRuleCall_7_0_0 = (RuleCall)cStatementsAssignment_7_0.eContents().get(0);
		private final Keyword cSemicolonKeyword_7_1 = (Keyword)cGroup_7.eContents().get(1);
		private final Keyword cRightCurlyBracketKeyword_8 = (Keyword)cGroup.eContents().get(8);
		
		//MickeyFunction:
		//	'function' name=ID '(' (args+=FunctionArg (',' args+=FunctionArg)*)? ')' (':' type=[TableDefinition|QualifiedName])?
		//	'{' (statements+=DMLStatement ';')*
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//'function' name=ID '(' (args+=FunctionArg (',' args+=FunctionArg)*)? ')' (':' type=[TableDefinition|QualifiedName])? '{'
		//(statements+=DMLStatement ';')* '}'
		public Group getGroup() { return cGroup; }
		
		//'function'
		public Keyword getFunctionKeyword_0() { return cFunctionKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
		
		//(args+=FunctionArg (',' args+=FunctionArg)*)?
		public Group getGroup_3() { return cGroup_3; }
		
		//args+=FunctionArg
		public Assignment getArgsAssignment_3_0() { return cArgsAssignment_3_0; }
		
		//FunctionArg
		public RuleCall getArgsFunctionArgParserRuleCall_3_0_0() { return cArgsFunctionArgParserRuleCall_3_0_0; }
		
		//(',' args+=FunctionArg)*
		public Group getGroup_3_1() { return cGroup_3_1; }
		
		//','
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
		
		//args+=FunctionArg
		public Assignment getArgsAssignment_3_1_1() { return cArgsAssignment_3_1_1; }
		
		//FunctionArg
		public RuleCall getArgsFunctionArgParserRuleCall_3_1_1_0() { return cArgsFunctionArgParserRuleCall_3_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
		
		//(':' type=[TableDefinition|QualifiedName])?
		public Group getGroup_5() { return cGroup_5; }
		
		//':'
		public Keyword getColonKeyword_5_0() { return cColonKeyword_5_0; }
		
		//type=[TableDefinition|QualifiedName]
		public Assignment getTypeAssignment_5_1() { return cTypeAssignment_5_1; }
		
		//[TableDefinition|QualifiedName]
		public CrossReference getTypeTableDefinitionCrossReference_5_1_0() { return cTypeTableDefinitionCrossReference_5_1_0; }
		
		//QualifiedName
		public RuleCall getTypeTableDefinitionQualifiedNameParserRuleCall_5_1_0_1() { return cTypeTableDefinitionQualifiedNameParserRuleCall_5_1_0_1; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
		
		//(statements+=DMLStatement ';')*
		public Group getGroup_7() { return cGroup_7; }
		
		//statements+=DMLStatement
		public Assignment getStatementsAssignment_7_0() { return cStatementsAssignment_7_0; }
		
		//DMLStatement
		public RuleCall getStatementsDMLStatementParserRuleCall_7_0_0() { return cStatementsDMLStatementParserRuleCall_7_0_0; }
		
		//';'
		public Keyword getSemicolonKeyword_7_1() { return cSemicolonKeyword_7_1; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_8() { return cRightCurlyBracketKeyword_8; }
	}
	public class ActionStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ActionStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cActionKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Assignment cUriAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cUriContentUriParserRuleCall_2_0 = (RuleCall)cUriAssignment_2.eContents().get(0);
		private final Keyword cOnKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final CrossReference cTypeTableDefinitionCrossReference_4_0 = (CrossReference)cTypeAssignment_4.eContents().get(0);
		private final RuleCall cTypeTableDefinitionQualifiedNameParserRuleCall_4_0_1 = (RuleCall)cTypeTableDefinitionCrossReference_4_0.eContents().get(1);
		private final Assignment cUniqueAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final Keyword cUniqueUniqueKeyword_5_0 = (Keyword)cUniqueAssignment_5.eContents().get(0);
		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
		private final Keyword cLeftCurlyBracketKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
		private final Assignment cParamsAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
		private final RuleCall cParamsContentUriQueryParamParserRuleCall_6_1_0 = (RuleCall)cParamsAssignment_6_1.eContents().get(0);
		private final Assignment cNotificationsAssignment_6_2 = (Assignment)cGroup_6.eContents().get(2);
		private final RuleCall cNotificationsContentNotificationUriParserRuleCall_6_2_0 = (RuleCall)cNotificationsAssignment_6_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_6_3 = (Keyword)cGroup_6.eContents().get(3);
		
		//ActionStatement:
		//	'action' name=ID uri=ContentUri 'on' type=[TableDefinition|QualifiedName] unique?='unique'? ('{'
		//	params+=ContentUriQueryParam* notifications+=ContentNotificationUri* '}')?;
		@Override public ParserRule getRule() { return rule; }
		
		//'action' name=ID uri=ContentUri 'on' type=[TableDefinition|QualifiedName] unique?='unique'? ('{'
		//params+=ContentUriQueryParam* notifications+=ContentNotificationUri* '}')?
		public Group getGroup() { return cGroup; }
		
		//'action'
		public Keyword getActionKeyword_0() { return cActionKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//uri=ContentUri
		public Assignment getUriAssignment_2() { return cUriAssignment_2; }
		
		//ContentUri
		public RuleCall getUriContentUriParserRuleCall_2_0() { return cUriContentUriParserRuleCall_2_0; }
		
		//'on'
		public Keyword getOnKeyword_3() { return cOnKeyword_3; }
		
		//type=[TableDefinition|QualifiedName]
		public Assignment getTypeAssignment_4() { return cTypeAssignment_4; }
		
		//[TableDefinition|QualifiedName]
		public CrossReference getTypeTableDefinitionCrossReference_4_0() { return cTypeTableDefinitionCrossReference_4_0; }
		
		//QualifiedName
		public RuleCall getTypeTableDefinitionQualifiedNameParserRuleCall_4_0_1() { return cTypeTableDefinitionQualifiedNameParserRuleCall_4_0_1; }
		
		//unique?='unique'?
		public Assignment getUniqueAssignment_5() { return cUniqueAssignment_5; }
		
		//'unique'
		public Keyword getUniqueUniqueKeyword_5_0() { return cUniqueUniqueKeyword_5_0; }
		
		//('{' params+=ContentUriQueryParam* notifications+=ContentNotificationUri* '}')?
		public Group getGroup_6() { return cGroup_6; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_6_0() { return cLeftCurlyBracketKeyword_6_0; }
		
		//params+=ContentUriQueryParam*
		public Assignment getParamsAssignment_6_1() { return cParamsAssignment_6_1; }
		
		//ContentUriQueryParam
		public RuleCall getParamsContentUriQueryParamParserRuleCall_6_1_0() { return cParamsContentUriQueryParamParserRuleCall_6_1_0; }
		
		//notifications+=ContentNotificationUri*
		public Assignment getNotificationsAssignment_6_2() { return cNotificationsAssignment_6_2; }
		
		//ContentNotificationUri
		public RuleCall getNotificationsContentNotificationUriParserRuleCall_6_2_0() { return cNotificationsContentNotificationUriParserRuleCall_6_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_6_3() { return cRightCurlyBracketKeyword_6_3; }
	}
	public class ContentNotificationUriElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ContentNotificationUri");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cNotifyKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cUriAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cUriNotifyContentUriParserRuleCall_1_0 = (RuleCall)cUriAssignment_1.eContents().get(0);
		
		//ContentNotificationUri:
		//	'notify' uri=NotifyContentUri;
		@Override public ParserRule getRule() { return rule; }
		
		//'notify' uri=NotifyContentUri
		public Group getGroup() { return cGroup; }
		
		//'notify'
		public Keyword getNotifyKeyword_0() { return cNotifyKeyword_0; }
		
		//uri=NotifyContentUri
		public Assignment getUriAssignment_1() { return cUriAssignment_1; }
		
		//NotifyContentUri
		public RuleCall getUriNotifyContentUriParserRuleCall_1_0() { return cUriNotifyContentUriParserRuleCall_1_0; }
	}
	public class FunctionArgElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.FunctionArg");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cTypeColumnTypeEnumRuleCall_0_0 = (RuleCall)cTypeAssignment_0.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		
		//FunctionArg:
		//	type=ColumnType name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//type=ColumnType name=ID
		public Group getGroup() { return cGroup; }
		
		//type=ColumnType
		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
		
		//ColumnType
		public RuleCall getTypeColumnTypeEnumRuleCall_0_0() { return cTypeColumnTypeEnumRuleCall_0_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class NotifyContentUriElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.NotifyContentUri");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cNotifyContentUriAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cSegmentsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSegmentsNotifyContentUriSegmentParserRuleCall_1_0 = (RuleCall)cSegmentsAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cSolidusKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cSegmentsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cSegmentsNotifyContentUriSegmentParserRuleCall_2_1_0 = (RuleCall)cSegmentsAssignment_2_1.eContents().get(0);
		
		//NotifyContentUri:
		//	{NotifyContentUri} segments+=NotifyContentUriSegment? ('/' segments+=NotifyContentUriSegment)*;
		@Override public ParserRule getRule() { return rule; }
		
		//{NotifyContentUri} segments+=NotifyContentUriSegment? ('/' segments+=NotifyContentUriSegment)*
		public Group getGroup() { return cGroup; }
		
		//{NotifyContentUri}
		public Action getNotifyContentUriAction_0() { return cNotifyContentUriAction_0; }
		
		//segments+=NotifyContentUriSegment?
		public Assignment getSegmentsAssignment_1() { return cSegmentsAssignment_1; }
		
		//NotifyContentUriSegment
		public RuleCall getSegmentsNotifyContentUriSegmentParserRuleCall_1_0() { return cSegmentsNotifyContentUriSegmentParserRuleCall_1_0; }
		
		//('/' segments+=NotifyContentUriSegment)*
		public Group getGroup_2() { return cGroup_2; }
		
		//'/'
		public Keyword getSolidusKeyword_2_0() { return cSolidusKeyword_2_0; }
		
		//segments+=NotifyContentUriSegment
		public Assignment getSegmentsAssignment_2_1() { return cSegmentsAssignment_2_1; }
		
		//NotifyContentUriSegment
		public RuleCall getSegmentsNotifyContentUriSegmentParserRuleCall_2_1_0() { return cSegmentsNotifyContentUriSegmentParserRuleCall_2_1_0; }
	}
	public class NotifyContentUriSegmentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.NotifyContentUriSegment");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cNameIDTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cNotifyContentUriParamSegmentAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cNameAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cNameIDTerminalRuleCall_1_2_0 = (RuleCall)cNameAssignment_1_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		
		//NotifyContentUriSegment:
		//	name=ID | {NotifyContentUriParamSegment} '{' name=ID '}';
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID | {NotifyContentUriParamSegment} '{' name=ID '}'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//name=ID
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0_0() { return cNameIDTerminalRuleCall_0_0; }
		
		//{NotifyContentUriParamSegment} '{' name=ID '}'
		public Group getGroup_1() { return cGroup_1; }
		
		//{NotifyContentUriParamSegment}
		public Action getNotifyContentUriParamSegmentAction_1_0() { return cNotifyContentUriParamSegmentAction_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_1_1() { return cLeftCurlyBracketKeyword_1_1; }
		
		//name=ID
		public Assignment getNameAssignment_1_2() { return cNameAssignment_1_2; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_2_0() { return cNameIDTerminalRuleCall_1_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_1_3() { return cRightCurlyBracketKeyword_1_3; }
	}
	public class ContentUriElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ContentUri");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cContentUriAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cSegmentsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSegmentsContentUriSegmentParserRuleCall_1_0 = (RuleCall)cSegmentsAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cSolidusKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cSegmentsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cSegmentsContentUriSegmentParserRuleCall_2_1_0 = (RuleCall)cSegmentsAssignment_2_1.eContents().get(0);
		
		//ContentUri:
		//	{ContentUri} segments+=ContentUriSegment? ('/' segments+=ContentUriSegment)*;
		@Override public ParserRule getRule() { return rule; }
		
		//{ContentUri} segments+=ContentUriSegment? ('/' segments+=ContentUriSegment)*
		public Group getGroup() { return cGroup; }
		
		//{ContentUri}
		public Action getContentUriAction_0() { return cContentUriAction_0; }
		
		//segments+=ContentUriSegment?
		public Assignment getSegmentsAssignment_1() { return cSegmentsAssignment_1; }
		
		//ContentUriSegment
		public RuleCall getSegmentsContentUriSegmentParserRuleCall_1_0() { return cSegmentsContentUriSegmentParserRuleCall_1_0; }
		
		//('/' segments+=ContentUriSegment)*
		public Group getGroup_2() { return cGroup_2; }
		
		//'/'
		public Keyword getSolidusKeyword_2_0() { return cSolidusKeyword_2_0; }
		
		//segments+=ContentUriSegment
		public Assignment getSegmentsAssignment_2_1() { return cSegmentsAssignment_2_1; }
		
		//ContentUriSegment
		public RuleCall getSegmentsContentUriSegmentParserRuleCall_2_1_0() { return cSegmentsContentUriSegmentParserRuleCall_2_1_0; }
	}
	public class ContentUriQueryParamElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ContentUriQueryParam");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cParamKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cLikeAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final Keyword cLikeLikeKeyword_1_0 = (Keyword)cLikeAssignment_1.eContents().get(0);
		private final Assignment cColumnAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cColumnColumnSourceCrossReference_2_0 = (CrossReference)cColumnAssignment_2.eContents().get(0);
		private final RuleCall cColumnColumnSourceIDTerminalRuleCall_2_0_1 = (RuleCall)cColumnColumnSourceCrossReference_2_0.eContents().get(1);
		
		//ContentUriQueryParam:
		//	'param' like?='like'? column=[ColumnSource];
		@Override public ParserRule getRule() { return rule; }
		
		//'param' like?='like'? column=[ColumnSource]
		public Group getGroup() { return cGroup; }
		
		//'param'
		public Keyword getParamKeyword_0() { return cParamKeyword_0; }
		
		//like?='like'?
		public Assignment getLikeAssignment_1() { return cLikeAssignment_1; }
		
		//'like'
		public Keyword getLikeLikeKeyword_1_0() { return cLikeLikeKeyword_1_0; }
		
		//column=[ColumnSource]
		public Assignment getColumnAssignment_2() { return cColumnAssignment_2; }
		
		//[ColumnSource]
		public CrossReference getColumnColumnSourceCrossReference_2_0() { return cColumnColumnSourceCrossReference_2_0; }
		
		//ID
		public RuleCall getColumnColumnSourceIDTerminalRuleCall_2_0_1() { return cColumnColumnSourceIDTerminalRuleCall_2_0_1; }
	}
	public class ContentUriSegmentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ContentUriSegment");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cNameIDTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cContentUriParamSegmentAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cParamAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final CrossReference cParamColumnSourceCrossReference_1_2_0 = (CrossReference)cParamAssignment_1_2.eContents().get(0);
		private final RuleCall cParamColumnSourceIDTerminalRuleCall_1_2_0_1 = (RuleCall)cParamColumnSourceCrossReference_1_2_0.eContents().get(1);
		private final Keyword cRightCurlyBracketKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		
		//ContentUriSegment:
		//	name=ID | {ContentUriParamSegment} '{' param=[ColumnSource] '}';
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID | {ContentUriParamSegment} '{' param=[ColumnSource] '}'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//name=ID
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0_0() { return cNameIDTerminalRuleCall_0_0; }
		
		//{ContentUriParamSegment} '{' param=[ColumnSource] '}'
		public Group getGroup_1() { return cGroup_1; }
		
		//{ContentUriParamSegment}
		public Action getContentUriParamSegmentAction_1_0() { return cContentUriParamSegmentAction_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_1_1() { return cLeftCurlyBracketKeyword_1_1; }
		
		//param=[ColumnSource]
		public Assignment getParamAssignment_1_2() { return cParamAssignment_1_2; }
		
		//[ColumnSource]
		public CrossReference getParamColumnSourceCrossReference_1_2_0() { return cParamColumnSourceCrossReference_1_2_0; }
		
		//ID
		public RuleCall getParamColumnSourceIDTerminalRuleCall_1_2_0_1() { return cParamColumnSourceIDTerminalRuleCall_1_2_0_1; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_1_3() { return cRightCurlyBracketKeyword_1_3; }
	}
	public class MigrationBlockElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.MigrationBlock");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cMigrationBlockAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cMigrateKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cNameIDTerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cFromKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cFromAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final CrossReference cFromMigrationBlockCrossReference_3_1_0 = (CrossReference)cFromAssignment_3_1.eContents().get(0);
		private final RuleCall cFromMigrationBlockQualifiedNameParserRuleCall_3_1_0_1 = (RuleCall)cFromMigrationBlockCrossReference_3_1_0.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Assignment cStatementsAssignment_5_0 = (Assignment)cGroup_5.eContents().get(0);
		private final RuleCall cStatementsDDLStatementParserRuleCall_5_0_0 = (RuleCall)cStatementsAssignment_5_0.eContents().get(0);
		private final Keyword cSemicolonKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		
		//MigrationBlock:
		//	{MigrationBlock}
		//	'migrate' name=ID ('from' from=[MigrationBlock|QualifiedName])? '{' (statements+=DDLStatement ';')* '}';
		@Override public ParserRule getRule() { return rule; }
		
		//{MigrationBlock} 'migrate' name=ID ('from' from=[MigrationBlock|QualifiedName])? '{' (statements+=DDLStatement ';')* '}'
		public Group getGroup() { return cGroup; }
		
		//{MigrationBlock}
		public Action getMigrationBlockAction_0() { return cMigrationBlockAction_0; }
		
		//'migrate'
		public Keyword getMigrateKeyword_1() { return cMigrateKeyword_1; }
		
		//name=ID
		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
		
		//('from' from=[MigrationBlock|QualifiedName])?
		public Group getGroup_3() { return cGroup_3; }
		
		//'from'
		public Keyword getFromKeyword_3_0() { return cFromKeyword_3_0; }
		
		//from=[MigrationBlock|QualifiedName]
		public Assignment getFromAssignment_3_1() { return cFromAssignment_3_1; }
		
		//[MigrationBlock|QualifiedName]
		public CrossReference getFromMigrationBlockCrossReference_3_1_0() { return cFromMigrationBlockCrossReference_3_1_0; }
		
		//QualifiedName
		public RuleCall getFromMigrationBlockQualifiedNameParserRuleCall_3_1_0_1() { return cFromMigrationBlockQualifiedNameParserRuleCall_3_1_0_1; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
		
		//(statements+=DDLStatement ';')*
		public Group getGroup_5() { return cGroup_5; }
		
		//statements+=DDLStatement
		public Assignment getStatementsAssignment_5_0() { return cStatementsAssignment_5_0; }
		
		//DDLStatement
		public RuleCall getStatementsDDLStatementParserRuleCall_5_0_0() { return cStatementsDDLStatementParserRuleCall_5_0_0; }
		
		//';'
		public Keyword getSemicolonKeyword_5_1() { return cSemicolonKeyword_5_1; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
	}
	public class SqlExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SqlExpression");
		private final RuleCall cExprConcatParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		/// ***********************************************************************
		// *                                                                     *
		// * EXPRESSIONS                                                         *
		// *                                                                     *
		// *********************************************************************** / SqlExpression Expression:
		//	ExprConcat
		@Override public ParserRule getRule() { return rule; }
		
		//ExprConcat
		public RuleCall getExprConcatParserRuleCall() { return cExprConcatParserRuleCall; }
	}
	public class ExprConcatElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprConcat");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cExprMultParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprConcatLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Keyword cOpVerticalLineVerticalLineKeyword_1_1_0 = (Keyword)cOpAssignment_1_1.eContents().get(0);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightExprMultParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprConcat Expression:
		//	ExprMult ({ExprConcat.left=current} op='||' right=ExprMult)*
		@Override public ParserRule getRule() { return rule; }
		
		//ExprMult ({ExprConcat.left=current} op='||' right=ExprMult)*
		public Group getGroup() { return cGroup; }
		
		//ExprMult
		public RuleCall getExprMultParserRuleCall_0() { return cExprMultParserRuleCall_0; }
		
		//({ExprConcat.left=current} op='||' right=ExprMult)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprConcat.left=current}
		public Action getExprConcatLeftAction_1_0() { return cExprConcatLeftAction_1_0; }
		
		//op='||'
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//'||'
		public Keyword getOpVerticalLineVerticalLineKeyword_1_1_0() { return cOpVerticalLineVerticalLineKeyword_1_1_0; }
		
		//right=ExprMult
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ExprMult
		public RuleCall getRightExprMultParserRuleCall_1_2_0() { return cRightExprMultParserRuleCall_1_2_0; }
	}
	public class ExprMultElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprMult");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cExprAddParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprMultLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Alternatives cOpAlternatives_1_1_0 = (Alternatives)cOpAssignment_1_1.eContents().get(0);
		private final Keyword cOpAsteriskKeyword_1_1_0_0 = (Keyword)cOpAlternatives_1_1_0.eContents().get(0);
		private final Keyword cOpSolidusKeyword_1_1_0_1 = (Keyword)cOpAlternatives_1_1_0.eContents().get(1);
		private final Keyword cOpPercentSignKeyword_1_1_0_2 = (Keyword)cOpAlternatives_1_1_0.eContents().get(2);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightExprAddParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprMult Expression:
		//	ExprAdd ({ExprMult.left=current} op=('*' | '/' | '%') right=ExprAdd)*
		@Override public ParserRule getRule() { return rule; }
		
		//ExprAdd ({ExprMult.left=current} op=('*' | '/' | '%') right=ExprAdd)*
		public Group getGroup() { return cGroup; }
		
		//ExprAdd
		public RuleCall getExprAddParserRuleCall_0() { return cExprAddParserRuleCall_0; }
		
		//({ExprMult.left=current} op=('*' | '/' | '%') right=ExprAdd)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprMult.left=current}
		public Action getExprMultLeftAction_1_0() { return cExprMultLeftAction_1_0; }
		
		//op=('*' | '/' | '%')
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//('*' | '/' | '%')
		public Alternatives getOpAlternatives_1_1_0() { return cOpAlternatives_1_1_0; }
		
		//'*'
		public Keyword getOpAsteriskKeyword_1_1_0_0() { return cOpAsteriskKeyword_1_1_0_0; }
		
		//'/'
		public Keyword getOpSolidusKeyword_1_1_0_1() { return cOpSolidusKeyword_1_1_0_1; }
		
		//'%'
		public Keyword getOpPercentSignKeyword_1_1_0_2() { return cOpPercentSignKeyword_1_1_0_2; }
		
		//right=ExprAdd
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ExprAdd
		public RuleCall getRightExprAddParserRuleCall_1_2_0() { return cRightExprAddParserRuleCall_1_2_0; }
	}
	public class ExprAddElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprAdd");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cExprBitParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprAddLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Alternatives cOpAlternatives_1_1_0 = (Alternatives)cOpAssignment_1_1.eContents().get(0);
		private final Keyword cOpPlusSignKeyword_1_1_0_0 = (Keyword)cOpAlternatives_1_1_0.eContents().get(0);
		private final Keyword cOpHyphenMinusKeyword_1_1_0_1 = (Keyword)cOpAlternatives_1_1_0.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightExprBitParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprAdd Expression:
		//	ExprBit ({ExprAdd.left=current} op=('+' | '-') right=ExprBit)*
		@Override public ParserRule getRule() { return rule; }
		
		//ExprBit ({ExprAdd.left=current} op=('+' | '-') right=ExprBit)*
		public Group getGroup() { return cGroup; }
		
		//ExprBit
		public RuleCall getExprBitParserRuleCall_0() { return cExprBitParserRuleCall_0; }
		
		//({ExprAdd.left=current} op=('+' | '-') right=ExprBit)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprAdd.left=current}
		public Action getExprAddLeftAction_1_0() { return cExprAddLeftAction_1_0; }
		
		//op=('+' | '-')
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//('+' | '-')
		public Alternatives getOpAlternatives_1_1_0() { return cOpAlternatives_1_1_0; }
		
		//'+'
		public Keyword getOpPlusSignKeyword_1_1_0_0() { return cOpPlusSignKeyword_1_1_0_0; }
		
		//'-'
		public Keyword getOpHyphenMinusKeyword_1_1_0_1() { return cOpHyphenMinusKeyword_1_1_0_1; }
		
		//right=ExprBit
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ExprBit
		public RuleCall getRightExprBitParserRuleCall_1_2_0() { return cRightExprBitParserRuleCall_1_2_0; }
	}
	public class ExprBitElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprBit");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cExprRelateParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprBitLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Alternatives cOpAlternatives_1_1_0 = (Alternatives)cOpAssignment_1_1.eContents().get(0);
		private final Keyword cOpLessThanSignLessThanSignKeyword_1_1_0_0 = (Keyword)cOpAlternatives_1_1_0.eContents().get(0);
		private final Keyword cOpGreaterThanSignGreaterThanSignKeyword_1_1_0_1 = (Keyword)cOpAlternatives_1_1_0.eContents().get(1);
		private final Keyword cOpAmpersandKeyword_1_1_0_2 = (Keyword)cOpAlternatives_1_1_0.eContents().get(2);
		private final Keyword cOpVerticalLineKeyword_1_1_0_3 = (Keyword)cOpAlternatives_1_1_0.eContents().get(3);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightExprRelateParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprBit Expression:
		//	ExprRelate ({ExprBit.left=current} op=('<<' | '>>' | '&' | '|') right=ExprRelate)*
		@Override public ParserRule getRule() { return rule; }
		
		//ExprRelate ({ExprBit.left=current} op=('<<' | '>>' | '&' | '|') right=ExprRelate)*
		public Group getGroup() { return cGroup; }
		
		//ExprRelate
		public RuleCall getExprRelateParserRuleCall_0() { return cExprRelateParserRuleCall_0; }
		
		//({ExprBit.left=current} op=('<<' | '>>' | '&' | '|') right=ExprRelate)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprBit.left=current}
		public Action getExprBitLeftAction_1_0() { return cExprBitLeftAction_1_0; }
		
		//op=('<<' | '>>' | '&' | '|')
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//('<<' | '>>' | '&' | '|')
		public Alternatives getOpAlternatives_1_1_0() { return cOpAlternatives_1_1_0; }
		
		//'<<'
		public Keyword getOpLessThanSignLessThanSignKeyword_1_1_0_0() { return cOpLessThanSignLessThanSignKeyword_1_1_0_0; }
		
		//'>>'
		public Keyword getOpGreaterThanSignGreaterThanSignKeyword_1_1_0_1() { return cOpGreaterThanSignGreaterThanSignKeyword_1_1_0_1; }
		
		//'&'
		public Keyword getOpAmpersandKeyword_1_1_0_2() { return cOpAmpersandKeyword_1_1_0_2; }
		
		//'|'
		public Keyword getOpVerticalLineKeyword_1_1_0_3() { return cOpVerticalLineKeyword_1_1_0_3; }
		
		//right=ExprRelate
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ExprRelate
		public RuleCall getRightExprRelateParserRuleCall_1_2_0() { return cRightExprRelateParserRuleCall_1_2_0; }
	}
	public class ExprRelateElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprRelate");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cExprEqualParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprRelateLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Alternatives cOpAlternatives_1_1_0 = (Alternatives)cOpAssignment_1_1.eContents().get(0);
		private final Keyword cOpLessThanSignKeyword_1_1_0_0 = (Keyword)cOpAlternatives_1_1_0.eContents().get(0);
		private final Keyword cOpLessThanSignEqualsSignKeyword_1_1_0_1 = (Keyword)cOpAlternatives_1_1_0.eContents().get(1);
		private final Keyword cOpGreaterThanSignKeyword_1_1_0_2 = (Keyword)cOpAlternatives_1_1_0.eContents().get(2);
		private final Keyword cOpGreaterThanSignEqualsSignKeyword_1_1_0_3 = (Keyword)cOpAlternatives_1_1_0.eContents().get(3);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightExprEqualParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprRelate Expression:
		//	ExprEqual ({ExprRelate.left=current} op=('<' | '<=' | '>' | '>=') right=ExprEqual)*
		@Override public ParserRule getRule() { return rule; }
		
		//ExprEqual ({ExprRelate.left=current} op=('<' | '<=' | '>' | '>=') right=ExprEqual)*
		public Group getGroup() { return cGroup; }
		
		//ExprEqual
		public RuleCall getExprEqualParserRuleCall_0() { return cExprEqualParserRuleCall_0; }
		
		//({ExprRelate.left=current} op=('<' | '<=' | '>' | '>=') right=ExprEqual)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprRelate.left=current}
		public Action getExprRelateLeftAction_1_0() { return cExprRelateLeftAction_1_0; }
		
		//op=('<' | '<=' | '>' | '>=')
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//('<' | '<=' | '>' | '>=')
		public Alternatives getOpAlternatives_1_1_0() { return cOpAlternatives_1_1_0; }
		
		//'<'
		public Keyword getOpLessThanSignKeyword_1_1_0_0() { return cOpLessThanSignKeyword_1_1_0_0; }
		
		//'<='
		public Keyword getOpLessThanSignEqualsSignKeyword_1_1_0_1() { return cOpLessThanSignEqualsSignKeyword_1_1_0_1; }
		
		//'>'
		public Keyword getOpGreaterThanSignKeyword_1_1_0_2() { return cOpGreaterThanSignKeyword_1_1_0_2; }
		
		//'>='
		public Keyword getOpGreaterThanSignEqualsSignKeyword_1_1_0_3() { return cOpGreaterThanSignEqualsSignKeyword_1_1_0_3; }
		
		//right=ExprEqual
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ExprEqual
		public RuleCall getRightExprEqualParserRuleCall_1_2_0() { return cRightExprEqualParserRuleCall_1_2_0; }
	}
	public class ExprEqualElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprEqual");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cExprAndParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprEqualLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Alternatives cOpAlternatives_1_1_0 = (Alternatives)cOpAssignment_1_1.eContents().get(0);
		private final Keyword cOpEqualsSignKeyword_1_1_0_0 = (Keyword)cOpAlternatives_1_1_0.eContents().get(0);
		private final Keyword cOpEqualsSignEqualsSignKeyword_1_1_0_1 = (Keyword)cOpAlternatives_1_1_0.eContents().get(1);
		private final Keyword cOpExclamationMarkEqualsSignKeyword_1_1_0_2 = (Keyword)cOpAlternatives_1_1_0.eContents().get(2);
		private final Keyword cOpLessThanSignGreaterThanSignKeyword_1_1_0_3 = (Keyword)cOpAlternatives_1_1_0.eContents().get(3);
		private final Keyword cOpIsKeyword_1_1_0_4 = (Keyword)cOpAlternatives_1_1_0.eContents().get(4);
		private final Keyword cOpIsNotKeyword_1_1_0_5 = (Keyword)cOpAlternatives_1_1_0.eContents().get(5);
		private final Keyword cOpInKeyword_1_1_0_6 = (Keyword)cOpAlternatives_1_1_0.eContents().get(6);
		private final Keyword cOpNotInKeyword_1_1_0_7 = (Keyword)cOpAlternatives_1_1_0.eContents().get(7);
		private final Keyword cOpLikeKeyword_1_1_0_8 = (Keyword)cOpAlternatives_1_1_0.eContents().get(8);
		private final Keyword cOpGlobKeyword_1_1_0_9 = (Keyword)cOpAlternatives_1_1_0.eContents().get(9);
		private final Keyword cOpMatchKeyword_1_1_0_10 = (Keyword)cOpAlternatives_1_1_0.eContents().get(10);
		private final Keyword cOpRegexpKeyword_1_1_0_11 = (Keyword)cOpAlternatives_1_1_0.eContents().get(11);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightExprAndParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprEqual Expression:
		//	ExprAnd ({ExprEqual.left=current} op=('=' | '==' | '!=' | '<>' | 'is' | 'is not' | 'in' | 'not in' | 'like' | 'glob' |
		//	'match' | 'regexp') right=ExprAnd)*
		@Override public ParserRule getRule() { return rule; }
		
		//ExprAnd ({ExprEqual.left=current} op=('=' | '==' | '!=' | '<>' | 'is' | 'is not' | 'in' | 'not in' | 'like' | 'glob' |
		//'match' | 'regexp') right=ExprAnd)*
		public Group getGroup() { return cGroup; }
		
		//ExprAnd
		public RuleCall getExprAndParserRuleCall_0() { return cExprAndParserRuleCall_0; }
		
		//({ExprEqual.left=current} op=('=' | '==' | '!=' | '<>' | 'is' | 'is not' | 'in' | 'not in' | 'like' | 'glob' | 'match' |
		//'regexp') right=ExprAnd)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprEqual.left=current}
		public Action getExprEqualLeftAction_1_0() { return cExprEqualLeftAction_1_0; }
		
		//op=('=' | '==' | '!=' | '<>' | 'is' | 'is not' | 'in' | 'not in' | 'like' | 'glob' | 'match' | 'regexp')
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//('=' | '==' | '!=' | '<>' | 'is' | 'is not' | 'in' | 'not in' | 'like' | 'glob' | 'match' | 'regexp')
		public Alternatives getOpAlternatives_1_1_0() { return cOpAlternatives_1_1_0; }
		
		//'='
		public Keyword getOpEqualsSignKeyword_1_1_0_0() { return cOpEqualsSignKeyword_1_1_0_0; }
		
		//'=='
		public Keyword getOpEqualsSignEqualsSignKeyword_1_1_0_1() { return cOpEqualsSignEqualsSignKeyword_1_1_0_1; }
		
		//'!='
		public Keyword getOpExclamationMarkEqualsSignKeyword_1_1_0_2() { return cOpExclamationMarkEqualsSignKeyword_1_1_0_2; }
		
		//'<>'
		public Keyword getOpLessThanSignGreaterThanSignKeyword_1_1_0_3() { return cOpLessThanSignGreaterThanSignKeyword_1_1_0_3; }
		
		//'is'
		public Keyword getOpIsKeyword_1_1_0_4() { return cOpIsKeyword_1_1_0_4; }
		
		//'is not'
		public Keyword getOpIsNotKeyword_1_1_0_5() { return cOpIsNotKeyword_1_1_0_5; }
		
		//'in'
		public Keyword getOpInKeyword_1_1_0_6() { return cOpInKeyword_1_1_0_6; }
		
		//'not in'
		public Keyword getOpNotInKeyword_1_1_0_7() { return cOpNotInKeyword_1_1_0_7; }
		
		//'like'
		public Keyword getOpLikeKeyword_1_1_0_8() { return cOpLikeKeyword_1_1_0_8; }
		
		//'glob'
		public Keyword getOpGlobKeyword_1_1_0_9() { return cOpGlobKeyword_1_1_0_9; }
		
		//'match'
		public Keyword getOpMatchKeyword_1_1_0_10() { return cOpMatchKeyword_1_1_0_10; }
		
		//'regexp'
		public Keyword getOpRegexpKeyword_1_1_0_11() { return cOpRegexpKeyword_1_1_0_11; }
		
		//right=ExprAnd
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ExprAnd
		public RuleCall getRightExprAndParserRuleCall_1_2_0() { return cRightExprAndParserRuleCall_1_2_0; }
	}
	public class ExprAndElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprAnd");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cExprOrParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprAndLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Keyword cOpAndKeyword_1_1_0 = (Keyword)cOpAssignment_1_1.eContents().get(0);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightExprOrParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprAnd Expression:
		//	ExprOr ({ExprAnd.left=current} op='and' right=ExprOr)*
		@Override public ParserRule getRule() { return rule; }
		
		//ExprOr ({ExprAnd.left=current} op='and' right=ExprOr)*
		public Group getGroup() { return cGroup; }
		
		//ExprOr
		public RuleCall getExprOrParserRuleCall_0() { return cExprOrParserRuleCall_0; }
		
		//({ExprAnd.left=current} op='and' right=ExprOr)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprAnd.left=current}
		public Action getExprAndLeftAction_1_0() { return cExprAndLeftAction_1_0; }
		
		//op='and'
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//'and'
		public Keyword getOpAndKeyword_1_1_0() { return cOpAndKeyword_1_1_0; }
		
		//right=ExprOr
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ExprOr
		public RuleCall getRightExprOrParserRuleCall_1_2_0() { return cRightExprOrParserRuleCall_1_2_0; }
	}
	public class ExprOrElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ExprOr");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cNullCheckExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cExprOrLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final Keyword cOpOrKeyword_1_1_0 = (Keyword)cOpAssignment_1_1.eContents().get(0);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightNullCheckExpressionParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ExprOr Expression:
		//	NullCheckExpression ({ExprOr.left=current} op='or' right=NullCheckExpression)*
		@Override public ParserRule getRule() { return rule; }
		
		//NullCheckExpression ({ExprOr.left=current} op='or' right=NullCheckExpression)*
		public Group getGroup() { return cGroup; }
		
		//NullCheckExpression
		public RuleCall getNullCheckExpressionParserRuleCall_0() { return cNullCheckExpressionParserRuleCall_0; }
		
		//({ExprOr.left=current} op='or' right=NullCheckExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExprOr.left=current}
		public Action getExprOrLeftAction_1_0() { return cExprOrLeftAction_1_0; }
		
		//op='or'
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//'or'
		public Keyword getOpOrKeyword_1_1_0() { return cOpOrKeyword_1_1_0; }
		
		//right=NullCheckExpression
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//NullCheckExpression
		public RuleCall getRightNullCheckExpressionParserRuleCall_1_2_0() { return cRightNullCheckExpressionParserRuleCall_1_2_0; }
	}
	public class NullCheckExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.NullCheckExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPrimaryExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cNullCheckExpressionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cRightAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cRightNullExpressionParserRuleCall_1_1_0 = (RuleCall)cRightAssignment_1_1.eContents().get(0);
		
		//NullCheckExpression Expression:
		//	PrimaryExpression ({NullCheckExpression.left=current} right=NullExpression)?
		@Override public ParserRule getRule() { return rule; }
		
		//PrimaryExpression ({NullCheckExpression.left=current} right=NullExpression)?
		public Group getGroup() { return cGroup; }
		
		//PrimaryExpression
		public RuleCall getPrimaryExpressionParserRuleCall_0() { return cPrimaryExpressionParserRuleCall_0; }
		
		//({NullCheckExpression.left=current} right=NullExpression)?
		public Group getGroup_1() { return cGroup_1; }
		
		//{NullCheckExpression.left=current}
		public Action getNullCheckExpressionLeftAction_1_0() { return cNullCheckExpressionLeftAction_1_0; }
		
		//right=NullExpression
		public Assignment getRightAssignment_1_1() { return cRightAssignment_1_1; }
		
		//NullExpression
		public RuleCall getRightNullExpressionParserRuleCall_1_1_0() { return cRightNullExpressionParserRuleCall_1_1_0; }
	}
	public class NullExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.NullExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cIsNullAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Keyword cIsNullKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cNotNullAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Alternatives cAlternatives_1_1 = (Alternatives)cGroup_1.eContents().get(1);
		private final Keyword cNotNullKeyword_1_1_0 = (Keyword)cAlternatives_1_1.eContents().get(0);
		private final Keyword cNotnullKeyword_1_1_1 = (Keyword)cAlternatives_1_1.eContents().get(1);
		
		//NullExpression Expression:
		//	{IsNull} 'is null' | {NotNull} ('not null' | 'notnull')
		@Override public ParserRule getRule() { return rule; }
		
		//{IsNull} 'is null' | {NotNull} ('not null' | 'notnull')
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{IsNull} 'is null'
		public Group getGroup_0() { return cGroup_0; }
		
		//{IsNull}
		public Action getIsNullAction_0_0() { return cIsNullAction_0_0; }
		
		//'is null'
		public Keyword getIsNullKeyword_0_1() { return cIsNullKeyword_0_1; }
		
		//{NotNull} ('not null' | 'notnull')
		public Group getGroup_1() { return cGroup_1; }
		
		//{NotNull}
		public Action getNotNullAction_1_0() { return cNotNullAction_1_0; }
		
		//('not null' | 'notnull')
		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
		
		//'not null'
		public Keyword getNotNullKeyword_1_1_0() { return cNotNullKeyword_1_1_0; }
		
		//'notnull'
		public Keyword getNotnullKeyword_1_1_1() { return cNotnullKeyword_1_1_1; }
	}
	public class PrimaryExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.PrimaryExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cNewColumnAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Keyword cNewKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Assignment cColumnAssignment_0_2 = (Assignment)cGroup_0.eContents().get(2);
		private final CrossReference cColumnColumnSourceCrossReference_0_2_0 = (CrossReference)cColumnAssignment_0_2.eContents().get(0);
		private final RuleCall cColumnColumnSourceIDTerminalRuleCall_0_2_0_1 = (RuleCall)cColumnColumnSourceCrossReference_0_2_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cOldColumnAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cOldKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cColumnAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final CrossReference cColumnColumnSourceCrossReference_1_2_0 = (CrossReference)cColumnAssignment_1_2.eContents().get(0);
		private final RuleCall cColumnColumnSourceIDTerminalRuleCall_1_2_0_1 = (RuleCall)cColumnColumnSourceCrossReference_1_2_0.eContents().get(1);
		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
		private final Action cColumnSourceRefAction_2_0 = (Action)cGroup_2.eContents().get(0);
		private final Alternatives cAlternatives_2_1 = (Alternatives)cGroup_2.eContents().get(1);
		private final Group cGroup_2_1_0 = (Group)cAlternatives_2_1.eContents().get(0);
		private final Assignment cSourceAssignment_2_1_0_0 = (Assignment)cGroup_2_1_0.eContents().get(0);
		private final CrossReference cSourceSelectSourceCrossReference_2_1_0_0_0 = (CrossReference)cSourceAssignment_2_1_0_0.eContents().get(0);
		private final RuleCall cSourceSelectSourceIDTerminalRuleCall_2_1_0_0_0_1 = (RuleCall)cSourceSelectSourceCrossReference_2_1_0_0_0.eContents().get(1);
		private final Keyword cFullStopKeyword_2_1_0_1 = (Keyword)cGroup_2_1_0.eContents().get(1);
		private final Group cGroup_2_1_1 = (Group)cAlternatives_2_1.eContents().get(1);
		private final Assignment cSourceAssignment_2_1_1_0 = (Assignment)cGroup_2_1_1.eContents().get(0);
		private final CrossReference cSourceSelectSourceCrossReference_2_1_1_0_0 = (CrossReference)cSourceAssignment_2_1_1_0.eContents().get(0);
		private final RuleCall cSourceSelectSourceIDTerminalRuleCall_2_1_1_0_0_1 = (RuleCall)cSourceSelectSourceCrossReference_2_1_1_0_0.eContents().get(1);
		private final Keyword cFullStopKeyword_2_1_1_1 = (Keyword)cGroup_2_1_1.eContents().get(1);
		private final Alternatives cAlternatives_2_1_1_2 = (Alternatives)cGroup_2_1_1.eContents().get(2);
		private final Assignment cAllAssignment_2_1_1_2_0 = (Assignment)cAlternatives_2_1_1_2.eContents().get(0);
		private final Keyword cAllAsteriskKeyword_2_1_1_2_0_0 = (Keyword)cAllAssignment_2_1_1_2_0.eContents().get(0);
		private final Assignment cColumnAssignment_2_1_1_2_1 = (Assignment)cAlternatives_2_1_1_2.eContents().get(1);
		private final CrossReference cColumnColumnSourceCrossReference_2_1_1_2_1_0 = (CrossReference)cColumnAssignment_2_1_1_2_1.eContents().get(0);
		private final RuleCall cColumnColumnSourceIDTerminalRuleCall_2_1_1_2_1_0_1 = (RuleCall)cColumnColumnSourceCrossReference_2_1_1_2_1_0.eContents().get(1);
		private final Assignment cColumnAssignment_2_1_2 = (Assignment)cAlternatives_2_1.eContents().get(2);
		private final CrossReference cColumnColumnSourceCrossReference_2_1_2_0 = (CrossReference)cColumnAssignment_2_1_2.eContents().get(0);
		private final RuleCall cColumnColumnSourceIDTerminalRuleCall_2_1_2_0_1 = (RuleCall)cColumnColumnSourceCrossReference_2_1_2_0.eContents().get(1);
		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
		private final Action cLiteralAction_3_0 = (Action)cGroup_3.eContents().get(0);
		private final Assignment cLiteralValueAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cLiteralValueLiteralValueParserRuleCall_3_1_0 = (RuleCall)cLiteralValueAssignment_3_1.eContents().get(0);
		private final Group cGroup_4 = (Group)cAlternatives.eContents().get(4);
		private final Action cNestedExpressionAction_4_0 = (Action)cGroup_4.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
		private final Assignment cExpressionAssignment_4_2 = (Assignment)cGroup_4.eContents().get(2);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_4_2_0 = (RuleCall)cExpressionAssignment_4_2.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4_3 = (Keyword)cGroup_4.eContents().get(3);
		private final Group cGroup_5 = (Group)cAlternatives.eContents().get(5);
		private final Action cSelectStatementExpressionAction_5_0 = (Action)cGroup_5.eContents().get(0);
		private final Assignment cNotAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final Keyword cNotNotKeyword_5_1_0 = (Keyword)cNotAssignment_5_1.eContents().get(0);
		private final Assignment cExistsAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
		private final Keyword cExistsExistsKeyword_5_2_0 = (Keyword)cExistsAssignment_5_2.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_5_3 = (Keyword)cGroup_5.eContents().get(3);
		private final Assignment cSelectAssignment_5_4 = (Assignment)cGroup_5.eContents().get(4);
		private final RuleCall cSelectSelectStatementParserRuleCall_5_4_0 = (RuleCall)cSelectAssignment_5_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5_5 = (Keyword)cGroup_5.eContents().get(5);
		private final Group cGroup_6 = (Group)cAlternatives.eContents().get(6);
		private final Action cCaseExpressionAction_6_0 = (Action)cGroup_6.eContents().get(0);
		private final Keyword cCaseKeyword_6_1 = (Keyword)cGroup_6.eContents().get(1);
		private final Assignment cCaseExpressionAssignment_6_2 = (Assignment)cGroup_6.eContents().get(2);
		private final RuleCall cCaseExpressionSqlExpressionParserRuleCall_6_2_0 = (RuleCall)cCaseExpressionAssignment_6_2.eContents().get(0);
		private final Assignment cCasesAssignment_6_3 = (Assignment)cGroup_6.eContents().get(3);
		private final RuleCall cCasesCaseParserRuleCall_6_3_0 = (RuleCall)cCasesAssignment_6_3.eContents().get(0);
		private final Group cGroup_6_4 = (Group)cGroup_6.eContents().get(4);
		private final Keyword cElseKeyword_6_4_0 = (Keyword)cGroup_6_4.eContents().get(0);
		private final Assignment cElseExpressionAssignment_6_4_1 = (Assignment)cGroup_6_4.eContents().get(1);
		private final RuleCall cElseExpressionSqlExpressionParserRuleCall_6_4_1_0 = (RuleCall)cElseExpressionAssignment_6_4_1.eContents().get(0);
		private final Keyword cEndKeyword_6_5 = (Keyword)cGroup_6.eContents().get(5);
		private final Group cGroup_7 = (Group)cAlternatives.eContents().get(7);
		private final Action cFunctionAction_7_0 = (Action)cGroup_7.eContents().get(0);
		private final Assignment cNameAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_7_1_0 = (RuleCall)cNameAssignment_7_1.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_7_2 = (Keyword)cGroup_7.eContents().get(2);
		private final Alternatives cAlternatives_7_3 = (Alternatives)cGroup_7.eContents().get(3);
		private final Assignment cAllAssignment_7_3_0 = (Assignment)cAlternatives_7_3.eContents().get(0);
		private final Keyword cAllAsteriskKeyword_7_3_0_0 = (Keyword)cAllAssignment_7_3_0.eContents().get(0);
		private final Group cGroup_7_3_1 = (Group)cAlternatives_7_3.eContents().get(1);
		private final Assignment cArgumentsAssignment_7_3_1_0 = (Assignment)cGroup_7_3_1.eContents().get(0);
		private final RuleCall cArgumentsSqlExpressionParserRuleCall_7_3_1_0_0 = (RuleCall)cArgumentsAssignment_7_3_1_0.eContents().get(0);
		private final Group cGroup_7_3_1_1 = (Group)cGroup_7_3_1.eContents().get(1);
		private final Keyword cCommaKeyword_7_3_1_1_0 = (Keyword)cGroup_7_3_1_1.eContents().get(0);
		private final Assignment cArgumentsAssignment_7_3_1_1_1 = (Assignment)cGroup_7_3_1_1.eContents().get(1);
		private final RuleCall cArgumentsSqlExpressionParserRuleCall_7_3_1_1_1_0 = (RuleCall)cArgumentsAssignment_7_3_1_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_7_4 = (Keyword)cGroup_7.eContents().get(4);
		private final Group cGroup_8 = (Group)cAlternatives.eContents().get(8);
		private final Action cCastExpressionAction_8_0 = (Action)cGroup_8.eContents().get(0);
		private final Keyword cCastKeyword_8_1 = (Keyword)cGroup_8.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_8_2 = (Keyword)cGroup_8.eContents().get(2);
		private final Assignment cExpressionAssignment_8_3 = (Assignment)cGroup_8.eContents().get(3);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_8_3_0 = (RuleCall)cExpressionAssignment_8_3.eContents().get(0);
		private final Keyword cAsKeyword_8_4 = (Keyword)cGroup_8.eContents().get(4);
		private final Assignment cTypeAssignment_8_5 = (Assignment)cGroup_8.eContents().get(5);
		private final RuleCall cTypeSqliteDataTypeEnumRuleCall_8_5_0 = (RuleCall)cTypeAssignment_8_5.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_8_6 = (Keyword)cGroup_8.eContents().get(6);
		private final Group cGroup_9 = (Group)cAlternatives.eContents().get(9);
		private final Action cFunctionArgumentAction_9_0 = (Action)cGroup_9.eContents().get(0);
		private final Keyword cDollarSignKeyword_9_1 = (Keyword)cGroup_9.eContents().get(1);
		private final Assignment cArgAssignment_9_2 = (Assignment)cGroup_9.eContents().get(2);
		private final CrossReference cArgFunctionArgCrossReference_9_2_0 = (CrossReference)cArgAssignment_9_2.eContents().get(0);
		private final RuleCall cArgFunctionArgIDTerminalRuleCall_9_2_0_1 = (RuleCall)cArgFunctionArgCrossReference_9_2_0.eContents().get(1);
		
		//PrimaryExpression Expression:
		//	{NewColumn} 'new.' column=[ColumnSource] | {OldColumn} 'old.' column=[ColumnSource] | {ColumnSourceRef} (=>
		//	source=[SelectSource] '.' | source=[SelectSource] '.' (all?='*' | column=[ColumnSource]) | column=[ColumnSource]) |
		//	{Literal} literalValue=LiteralValue | {NestedExpression} '(' expression=SqlExpression ')' |
		//	{SelectStatementExpression} not?='not'? exists?='exists'? '(' select=SelectStatement ')' | {CaseExpression} 'case'
		//	caseExpression=SqlExpression?
		//	cases+=Case+ ('else' elseExpression=SqlExpression)? 'end' | {Function} name=ID '(' (all?='*' |
		//	arguments+=SqlExpression (',' arguments+=SqlExpression)*) ')' | {CastExpression} 'cast' '(' expression=SqlExpression
		//	'as' type=SqliteDataType ')' | {FunctionArgument} '$' arg=[FunctionArg]
		@Override public ParserRule getRule() { return rule; }
		
		//{NewColumn} 'new.' column=[ColumnSource] | {OldColumn} 'old.' column=[ColumnSource] | {ColumnSourceRef} (=>
		//source=[SelectSource] '.' | source=[SelectSource] '.' (all?='*' | column=[ColumnSource]) | column=[ColumnSource]) |
		//{Literal} literalValue=LiteralValue | {NestedExpression} '(' expression=SqlExpression ')' | {SelectStatementExpression}
		//not?='not'? exists?='exists'? '(' select=SelectStatement ')' | {CaseExpression} 'case' caseExpression=SqlExpression?
		//cases+=Case+ ('else' elseExpression=SqlExpression)? 'end' | {Function} name=ID '(' (all?='*' | arguments+=SqlExpression
		//(',' arguments+=SqlExpression)*) ')' | {CastExpression} 'cast' '(' expression=SqlExpression 'as' type=SqliteDataType
		//')' | {FunctionArgument} '$' arg=[FunctionArg]
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{NewColumn} 'new.' column=[ColumnSource]
		public Group getGroup_0() { return cGroup_0; }
		
		//{NewColumn}
		public Action getNewColumnAction_0_0() { return cNewColumnAction_0_0; }
		
		//'new.'
		public Keyword getNewKeyword_0_1() { return cNewKeyword_0_1; }
		
		//column=[ColumnSource]
		public Assignment getColumnAssignment_0_2() { return cColumnAssignment_0_2; }
		
		//[ColumnSource]
		public CrossReference getColumnColumnSourceCrossReference_0_2_0() { return cColumnColumnSourceCrossReference_0_2_0; }
		
		//ID
		public RuleCall getColumnColumnSourceIDTerminalRuleCall_0_2_0_1() { return cColumnColumnSourceIDTerminalRuleCall_0_2_0_1; }
		
		//{OldColumn} 'old.' column=[ColumnSource]
		public Group getGroup_1() { return cGroup_1; }
		
		//{OldColumn}
		public Action getOldColumnAction_1_0() { return cOldColumnAction_1_0; }
		
		//'old.'
		public Keyword getOldKeyword_1_1() { return cOldKeyword_1_1; }
		
		//column=[ColumnSource]
		public Assignment getColumnAssignment_1_2() { return cColumnAssignment_1_2; }
		
		//[ColumnSource]
		public CrossReference getColumnColumnSourceCrossReference_1_2_0() { return cColumnColumnSourceCrossReference_1_2_0; }
		
		//ID
		public RuleCall getColumnColumnSourceIDTerminalRuleCall_1_2_0_1() { return cColumnColumnSourceIDTerminalRuleCall_1_2_0_1; }
		
		//{ColumnSourceRef} (=> source=[SelectSource] '.' | source=[SelectSource] '.' (all?='*' | column=[ColumnSource]) |
		//column=[ColumnSource])
		public Group getGroup_2() { return cGroup_2; }
		
		//{ColumnSourceRef}
		public Action getColumnSourceRefAction_2_0() { return cColumnSourceRefAction_2_0; }
		
		//(=> source=[SelectSource] '.' | source=[SelectSource] '.' (all?='*' | column=[ColumnSource]) | column=[ColumnSource])
		public Alternatives getAlternatives_2_1() { return cAlternatives_2_1; }
		
		//=> source=[SelectSource] '.'
		public Group getGroup_2_1_0() { return cGroup_2_1_0; }
		
		//=> source=[SelectSource]
		public Assignment getSourceAssignment_2_1_0_0() { return cSourceAssignment_2_1_0_0; }
		
		//[SelectSource]
		public CrossReference getSourceSelectSourceCrossReference_2_1_0_0_0() { return cSourceSelectSourceCrossReference_2_1_0_0_0; }
		
		//ID
		public RuleCall getSourceSelectSourceIDTerminalRuleCall_2_1_0_0_0_1() { return cSourceSelectSourceIDTerminalRuleCall_2_1_0_0_0_1; }
		
		//'.'
		public Keyword getFullStopKeyword_2_1_0_1() { return cFullStopKeyword_2_1_0_1; }
		
		//source=[SelectSource] '.' (all?='*' | column=[ColumnSource])
		public Group getGroup_2_1_1() { return cGroup_2_1_1; }
		
		//source=[SelectSource]
		public Assignment getSourceAssignment_2_1_1_0() { return cSourceAssignment_2_1_1_0; }
		
		//[SelectSource]
		public CrossReference getSourceSelectSourceCrossReference_2_1_1_0_0() { return cSourceSelectSourceCrossReference_2_1_1_0_0; }
		
		//ID
		public RuleCall getSourceSelectSourceIDTerminalRuleCall_2_1_1_0_0_1() { return cSourceSelectSourceIDTerminalRuleCall_2_1_1_0_0_1; }
		
		//'.'
		public Keyword getFullStopKeyword_2_1_1_1() { return cFullStopKeyword_2_1_1_1; }
		
		//(all?='*' | column=[ColumnSource])
		public Alternatives getAlternatives_2_1_1_2() { return cAlternatives_2_1_1_2; }
		
		//all?='*'
		public Assignment getAllAssignment_2_1_1_2_0() { return cAllAssignment_2_1_1_2_0; }
		
		//'*'
		public Keyword getAllAsteriskKeyword_2_1_1_2_0_0() { return cAllAsteriskKeyword_2_1_1_2_0_0; }
		
		//column=[ColumnSource]
		public Assignment getColumnAssignment_2_1_1_2_1() { return cColumnAssignment_2_1_1_2_1; }
		
		//[ColumnSource]
		public CrossReference getColumnColumnSourceCrossReference_2_1_1_2_1_0() { return cColumnColumnSourceCrossReference_2_1_1_2_1_0; }
		
		//ID
		public RuleCall getColumnColumnSourceIDTerminalRuleCall_2_1_1_2_1_0_1() { return cColumnColumnSourceIDTerminalRuleCall_2_1_1_2_1_0_1; }
		
		//column=[ColumnSource]
		public Assignment getColumnAssignment_2_1_2() { return cColumnAssignment_2_1_2; }
		
		//[ColumnSource]
		public CrossReference getColumnColumnSourceCrossReference_2_1_2_0() { return cColumnColumnSourceCrossReference_2_1_2_0; }
		
		//ID
		public RuleCall getColumnColumnSourceIDTerminalRuleCall_2_1_2_0_1() { return cColumnColumnSourceIDTerminalRuleCall_2_1_2_0_1; }
		
		//{Literal} literalValue=LiteralValue
		public Group getGroup_3() { return cGroup_3; }
		
		//{Literal}
		public Action getLiteralAction_3_0() { return cLiteralAction_3_0; }
		
		//literalValue=LiteralValue
		public Assignment getLiteralValueAssignment_3_1() { return cLiteralValueAssignment_3_1; }
		
		//LiteralValue
		public RuleCall getLiteralValueLiteralValueParserRuleCall_3_1_0() { return cLiteralValueLiteralValueParserRuleCall_3_1_0; }
		
		//{NestedExpression} '(' expression=SqlExpression ')'
		public Group getGroup_4() { return cGroup_4; }
		
		//{NestedExpression}
		public Action getNestedExpressionAction_4_0() { return cNestedExpressionAction_4_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_4_1() { return cLeftParenthesisKeyword_4_1; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_4_2() { return cExpressionAssignment_4_2; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_4_2_0() { return cExpressionSqlExpressionParserRuleCall_4_2_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4_3() { return cRightParenthesisKeyword_4_3; }
		
		//{SelectStatementExpression} not?='not'? exists?='exists'? '(' select=SelectStatement ')'
		public Group getGroup_5() { return cGroup_5; }
		
		//{SelectStatementExpression}
		public Action getSelectStatementExpressionAction_5_0() { return cSelectStatementExpressionAction_5_0; }
		
		//not?='not'?
		public Assignment getNotAssignment_5_1() { return cNotAssignment_5_1; }
		
		//'not'
		public Keyword getNotNotKeyword_5_1_0() { return cNotNotKeyword_5_1_0; }
		
		//exists?='exists'?
		public Assignment getExistsAssignment_5_2() { return cExistsAssignment_5_2; }
		
		//'exists'
		public Keyword getExistsExistsKeyword_5_2_0() { return cExistsExistsKeyword_5_2_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_5_3() { return cLeftParenthesisKeyword_5_3; }
		
		//select=SelectStatement
		public Assignment getSelectAssignment_5_4() { return cSelectAssignment_5_4; }
		
		//SelectStatement
		public RuleCall getSelectSelectStatementParserRuleCall_5_4_0() { return cSelectSelectStatementParserRuleCall_5_4_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5_5() { return cRightParenthesisKeyword_5_5; }
		
		//{CaseExpression} 'case' caseExpression=SqlExpression? cases+=Case+ ('else' elseExpression=SqlExpression)? 'end'
		public Group getGroup_6() { return cGroup_6; }
		
		//{CaseExpression}
		public Action getCaseExpressionAction_6_0() { return cCaseExpressionAction_6_0; }
		
		//'case'
		public Keyword getCaseKeyword_6_1() { return cCaseKeyword_6_1; }
		
		//caseExpression=SqlExpression?
		public Assignment getCaseExpressionAssignment_6_2() { return cCaseExpressionAssignment_6_2; }
		
		//SqlExpression
		public RuleCall getCaseExpressionSqlExpressionParserRuleCall_6_2_0() { return cCaseExpressionSqlExpressionParserRuleCall_6_2_0; }
		
		//cases+=Case+
		public Assignment getCasesAssignment_6_3() { return cCasesAssignment_6_3; }
		
		//Case
		public RuleCall getCasesCaseParserRuleCall_6_3_0() { return cCasesCaseParserRuleCall_6_3_0; }
		
		//('else' elseExpression=SqlExpression)?
		public Group getGroup_6_4() { return cGroup_6_4; }
		
		//'else'
		public Keyword getElseKeyword_6_4_0() { return cElseKeyword_6_4_0; }
		
		//elseExpression=SqlExpression
		public Assignment getElseExpressionAssignment_6_4_1() { return cElseExpressionAssignment_6_4_1; }
		
		//SqlExpression
		public RuleCall getElseExpressionSqlExpressionParserRuleCall_6_4_1_0() { return cElseExpressionSqlExpressionParserRuleCall_6_4_1_0; }
		
		//'end'
		public Keyword getEndKeyword_6_5() { return cEndKeyword_6_5; }
		
		//{Function} name=ID '(' (all?='*' | arguments+=SqlExpression (',' arguments+=SqlExpression)*) ')'
		public Group getGroup_7() { return cGroup_7; }
		
		//{Function}
		public Action getFunctionAction_7_0() { return cFunctionAction_7_0; }
		
		//name=ID
		public Assignment getNameAssignment_7_1() { return cNameAssignment_7_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_7_1_0() { return cNameIDTerminalRuleCall_7_1_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_7_2() { return cLeftParenthesisKeyword_7_2; }
		
		//(all?='*' | arguments+=SqlExpression (',' arguments+=SqlExpression)*)
		public Alternatives getAlternatives_7_3() { return cAlternatives_7_3; }
		
		//all?='*'
		public Assignment getAllAssignment_7_3_0() { return cAllAssignment_7_3_0; }
		
		//'*'
		public Keyword getAllAsteriskKeyword_7_3_0_0() { return cAllAsteriskKeyword_7_3_0_0; }
		
		//arguments+=SqlExpression (',' arguments+=SqlExpression)*
		public Group getGroup_7_3_1() { return cGroup_7_3_1; }
		
		//arguments+=SqlExpression
		public Assignment getArgumentsAssignment_7_3_1_0() { return cArgumentsAssignment_7_3_1_0; }
		
		//SqlExpression
		public RuleCall getArgumentsSqlExpressionParserRuleCall_7_3_1_0_0() { return cArgumentsSqlExpressionParserRuleCall_7_3_1_0_0; }
		
		//(',' arguments+=SqlExpression)*
		public Group getGroup_7_3_1_1() { return cGroup_7_3_1_1; }
		
		//','
		public Keyword getCommaKeyword_7_3_1_1_0() { return cCommaKeyword_7_3_1_1_0; }
		
		//arguments+=SqlExpression
		public Assignment getArgumentsAssignment_7_3_1_1_1() { return cArgumentsAssignment_7_3_1_1_1; }
		
		//SqlExpression
		public RuleCall getArgumentsSqlExpressionParserRuleCall_7_3_1_1_1_0() { return cArgumentsSqlExpressionParserRuleCall_7_3_1_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_7_4() { return cRightParenthesisKeyword_7_4; }
		
		//{CastExpression} 'cast' '(' expression=SqlExpression 'as' type=SqliteDataType ')'
		public Group getGroup_8() { return cGroup_8; }
		
		//{CastExpression}
		public Action getCastExpressionAction_8_0() { return cCastExpressionAction_8_0; }
		
		//'cast'
		public Keyword getCastKeyword_8_1() { return cCastKeyword_8_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_8_2() { return cLeftParenthesisKeyword_8_2; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_8_3() { return cExpressionAssignment_8_3; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_8_3_0() { return cExpressionSqlExpressionParserRuleCall_8_3_0; }
		
		//'as'
		public Keyword getAsKeyword_8_4() { return cAsKeyword_8_4; }
		
		//type=SqliteDataType
		public Assignment getTypeAssignment_8_5() { return cTypeAssignment_8_5; }
		
		//SqliteDataType
		public RuleCall getTypeSqliteDataTypeEnumRuleCall_8_5_0() { return cTypeSqliteDataTypeEnumRuleCall_8_5_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_8_6() { return cRightParenthesisKeyword_8_6; }
		
		//{FunctionArgument} '$' arg=[FunctionArg]
		public Group getGroup_9() { return cGroup_9; }
		
		//{FunctionArgument}
		public Action getFunctionArgumentAction_9_0() { return cFunctionArgumentAction_9_0; }
		
		//'$'
		public Keyword getDollarSignKeyword_9_1() { return cDollarSignKeyword_9_1; }
		
		//arg=[FunctionArg]
		public Assignment getArgAssignment_9_2() { return cArgAssignment_9_2; }
		
		//[FunctionArg]
		public CrossReference getArgFunctionArgCrossReference_9_2_0() { return cArgFunctionArgCrossReference_9_2_0; }
		
		//ID
		public RuleCall getArgFunctionArgIDTerminalRuleCall_9_2_0_1() { return cArgFunctionArgIDTerminalRuleCall_9_2_0_1; }
	}
	public class CaseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.Case");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cWhenKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cWhenExpressionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cWhenExpressionSqlExpressionParserRuleCall_1_0 = (RuleCall)cWhenExpressionAssignment_1.eContents().get(0);
		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cThenExpressionAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cThenExpressionSqlExpressionParserRuleCall_3_0 = (RuleCall)cThenExpressionAssignment_3.eContents().get(0);
		
		//Case:
		//	'when' whenExpression=SqlExpression 'then' thenExpression=SqlExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//'when' whenExpression=SqlExpression 'then' thenExpression=SqlExpression
		public Group getGroup() { return cGroup; }
		
		//'when'
		public Keyword getWhenKeyword_0() { return cWhenKeyword_0; }
		
		//whenExpression=SqlExpression
		public Assignment getWhenExpressionAssignment_1() { return cWhenExpressionAssignment_1; }
		
		//SqlExpression
		public RuleCall getWhenExpressionSqlExpressionParserRuleCall_1_0() { return cWhenExpressionSqlExpressionParserRuleCall_1_0; }
		
		//'then'
		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
		
		//thenExpression=SqlExpression
		public Assignment getThenExpressionAssignment_3() { return cThenExpressionAssignment_3; }
		
		//SqlExpression
		public RuleCall getThenExpressionSqlExpressionParserRuleCall_3_0() { return cThenExpressionSqlExpressionParserRuleCall_3_0; }
	}
	public class SelectStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SelectStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cCoreAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cCoreSelectCoreParserRuleCall_0_0 = (RuleCall)cCoreAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cOrderByKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cOrderbyAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOrderbyOrderingTermListParserRuleCall_1_1_0 = (RuleCall)cOrderbyAssignment_1_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLimitKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cLimitAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cLimitSqlExpressionParserRuleCall_2_1_0 = (RuleCall)cLimitAssignment_2_1.eContents().get(0);
		private final Group cGroup_2_2 = (Group)cGroup_2.eContents().get(2);
		private final Alternatives cAlternatives_2_2_0 = (Alternatives)cGroup_2_2.eContents().get(0);
		private final Keyword cOffsetKeyword_2_2_0_0 = (Keyword)cAlternatives_2_2_0.eContents().get(0);
		private final Keyword cCommaKeyword_2_2_0_1 = (Keyword)cAlternatives_2_2_0.eContents().get(1);
		private final Assignment cLimitOffsetAssignment_2_2_1 = (Assignment)cGroup_2_2.eContents().get(1);
		private final RuleCall cLimitOffsetSqlExpressionParserRuleCall_2_2_1_0 = (RuleCall)cLimitOffsetAssignment_2_2_1.eContents().get(0);
		
		//SelectStatement:
		//	core=SelectCore ('order by' orderby=OrderingTermList)? ('limit' limit=SqlExpression (('offset' | ',')
		//	limitOffset=SqlExpression)?)?;
		@Override public ParserRule getRule() { return rule; }
		
		//core=SelectCore ('order by' orderby=OrderingTermList)? ('limit' limit=SqlExpression (('offset' | ',')
		//limitOffset=SqlExpression)?)?
		public Group getGroup() { return cGroup; }
		
		//core=SelectCore
		public Assignment getCoreAssignment_0() { return cCoreAssignment_0; }
		
		//SelectCore
		public RuleCall getCoreSelectCoreParserRuleCall_0_0() { return cCoreSelectCoreParserRuleCall_0_0; }
		
		//('order by' orderby=OrderingTermList)?
		public Group getGroup_1() { return cGroup_1; }
		
		//'order by'
		public Keyword getOrderByKeyword_1_0() { return cOrderByKeyword_1_0; }
		
		//orderby=OrderingTermList
		public Assignment getOrderbyAssignment_1_1() { return cOrderbyAssignment_1_1; }
		
		//OrderingTermList
		public RuleCall getOrderbyOrderingTermListParserRuleCall_1_1_0() { return cOrderbyOrderingTermListParserRuleCall_1_1_0; }
		
		//('limit' limit=SqlExpression (('offset' | ',') limitOffset=SqlExpression)?)?
		public Group getGroup_2() { return cGroup_2; }
		
		//'limit'
		public Keyword getLimitKeyword_2_0() { return cLimitKeyword_2_0; }
		
		//limit=SqlExpression
		public Assignment getLimitAssignment_2_1() { return cLimitAssignment_2_1; }
		
		//SqlExpression
		public RuleCall getLimitSqlExpressionParserRuleCall_2_1_0() { return cLimitSqlExpressionParserRuleCall_2_1_0; }
		
		//(('offset' | ',') limitOffset=SqlExpression)?
		public Group getGroup_2_2() { return cGroup_2_2; }
		
		//('offset' | ',')
		public Alternatives getAlternatives_2_2_0() { return cAlternatives_2_2_0; }
		
		//'offset'
		public Keyword getOffsetKeyword_2_2_0_0() { return cOffsetKeyword_2_2_0_0; }
		
		//','
		public Keyword getCommaKeyword_2_2_0_1() { return cCommaKeyword_2_2_0_1; }
		
		//limitOffset=SqlExpression
		public Assignment getLimitOffsetAssignment_2_2_1() { return cLimitOffsetAssignment_2_2_1; }
		
		//SqlExpression
		public RuleCall getLimitOffsetSqlExpressionParserRuleCall_2_2_1_0() { return cLimitOffsetSqlExpressionParserRuleCall_2_2_1_0; }
	}
	public class OrderingTermListElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.OrderingTermList");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cOrderingTermsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cOrderingTermsOrderingTermParserRuleCall_0_0 = (RuleCall)cOrderingTermsAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cCommaKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cOrderingTermsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOrderingTermsOrderingTermParserRuleCall_1_1_0 = (RuleCall)cOrderingTermsAssignment_1_1.eContents().get(0);
		
		//OrderingTermList:
		//	orderingTerms+=OrderingTerm (',' orderingTerms+=OrderingTerm)*;
		@Override public ParserRule getRule() { return rule; }
		
		//orderingTerms+=OrderingTerm (',' orderingTerms+=OrderingTerm)*
		public Group getGroup() { return cGroup; }
		
		//orderingTerms+=OrderingTerm
		public Assignment getOrderingTermsAssignment_0() { return cOrderingTermsAssignment_0; }
		
		//OrderingTerm
		public RuleCall getOrderingTermsOrderingTermParserRuleCall_0_0() { return cOrderingTermsOrderingTermParserRuleCall_0_0; }
		
		//(',' orderingTerms+=OrderingTerm)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//orderingTerms+=OrderingTerm
		public Assignment getOrderingTermsAssignment_1_1() { return cOrderingTermsAssignment_1_1; }
		
		//OrderingTerm
		public RuleCall getOrderingTermsOrderingTermParserRuleCall_1_1_0() { return cOrderingTermsOrderingTermParserRuleCall_1_1_0; }
	}
	public class SelectCoreElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SelectCore");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cSelectExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cSelectCoreLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOpAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOpCompoundOperatorEnumRuleCall_1_1_0 = (RuleCall)cOpAssignment_1_1.eContents().get(0);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightSelectExpressionParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//SelectCore SelectCoreExpression:
		//	SelectExpression ({SelectCore.left=current} op=CompoundOperator right=SelectExpression)*
		@Override public ParserRule getRule() { return rule; }
		
		//SelectExpression ({SelectCore.left=current} op=CompoundOperator right=SelectExpression)*
		public Group getGroup() { return cGroup; }
		
		//SelectExpression
		public RuleCall getSelectExpressionParserRuleCall_0() { return cSelectExpressionParserRuleCall_0; }
		
		//({SelectCore.left=current} op=CompoundOperator right=SelectExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{SelectCore.left=current}
		public Action getSelectCoreLeftAction_1_0() { return cSelectCoreLeftAction_1_0; }
		
		//op=CompoundOperator
		public Assignment getOpAssignment_1_1() { return cOpAssignment_1_1; }
		
		//CompoundOperator
		public RuleCall getOpCompoundOperatorEnumRuleCall_1_1_0() { return cOpCompoundOperatorEnumRuleCall_1_1_0; }
		
		//right=SelectExpression
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//SelectExpression
		public RuleCall getRightSelectExpressionParserRuleCall_1_2_0() { return cRightSelectExpressionParserRuleCall_1_2_0; }
	}
	public class SelectExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SelectExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cSelectExpressionAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cSelectKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
		private final Assignment cDistinctAssignment_2_0 = (Assignment)cAlternatives_2.eContents().get(0);
		private final Keyword cDistinctDistinctKeyword_2_0_0 = (Keyword)cDistinctAssignment_2_0.eContents().get(0);
		private final Assignment cAllAssignment_2_1 = (Assignment)cAlternatives_2.eContents().get(1);
		private final Keyword cAllAllKeyword_2_1_0 = (Keyword)cAllAssignment_2_1.eContents().get(0);
		private final Alternatives cAlternatives_3 = (Alternatives)cGroup.eContents().get(3);
		private final Assignment cAllColumnsAssignment_3_0 = (Assignment)cAlternatives_3.eContents().get(0);
		private final Keyword cAllColumnsAsteriskKeyword_3_0_0 = (Keyword)cAllColumnsAssignment_3_0.eContents().get(0);
		private final Assignment cSelectListAssignment_3_1 = (Assignment)cAlternatives_3.eContents().get(1);
		private final RuleCall cSelectListSelectListParserRuleCall_3_1_0 = (RuleCall)cSelectListAssignment_3_1.eContents().get(0);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cFromKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cSourceAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final RuleCall cSourceJoinSourceParserRuleCall_4_1_0 = (RuleCall)cSourceAssignment_4_1.eContents().get(0);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cWhereKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cWhereAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cWhereWhereExpressionsParserRuleCall_5_1_0 = (RuleCall)cWhereAssignment_5_1.eContents().get(0);
		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
		private final Keyword cGroupByKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
		private final Assignment cGroupByAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
		private final RuleCall cGroupByGroupByExpressionsParserRuleCall_6_1_0 = (RuleCall)cGroupByAssignment_6_1.eContents().get(0);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Keyword cHavingKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
		private final Assignment cHavingAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
		private final RuleCall cHavingHavingExpressionsParserRuleCall_7_1_0 = (RuleCall)cHavingAssignment_7_1.eContents().get(0);
		
		//SelectExpression SelectCoreExpression:
		//	{SelectExpression}
		//	'select' (distinct?='distinct' | all?='all')? (allColumns?='*' | selectList=SelectList) ('from' source=JoinSource)?
		//	('where' where=WhereExpressions)? ('group by' groupBy=GroupByExpressions)? ('having' having=HavingExpressions)?
		@Override public ParserRule getRule() { return rule; }
		
		//{SelectExpression} 'select' (distinct?='distinct' | all?='all')? (allColumns?='*' | selectList=SelectList) ('from'
		//source=JoinSource)? ('where' where=WhereExpressions)? ('group by' groupBy=GroupByExpressions)? ('having'
		//having=HavingExpressions)?
		public Group getGroup() { return cGroup; }
		
		//{SelectExpression}
		public Action getSelectExpressionAction_0() { return cSelectExpressionAction_0; }
		
		//'select'
		public Keyword getSelectKeyword_1() { return cSelectKeyword_1; }
		
		//(distinct?='distinct' | all?='all')?
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//distinct?='distinct'
		public Assignment getDistinctAssignment_2_0() { return cDistinctAssignment_2_0; }
		
		//'distinct'
		public Keyword getDistinctDistinctKeyword_2_0_0() { return cDistinctDistinctKeyword_2_0_0; }
		
		//all?='all'
		public Assignment getAllAssignment_2_1() { return cAllAssignment_2_1; }
		
		//'all'
		public Keyword getAllAllKeyword_2_1_0() { return cAllAllKeyword_2_1_0; }
		
		//(allColumns?='*' | selectList=SelectList)
		public Alternatives getAlternatives_3() { return cAlternatives_3; }
		
		//allColumns?='*'
		public Assignment getAllColumnsAssignment_3_0() { return cAllColumnsAssignment_3_0; }
		
		//'*'
		public Keyword getAllColumnsAsteriskKeyword_3_0_0() { return cAllColumnsAsteriskKeyword_3_0_0; }
		
		//selectList=SelectList
		public Assignment getSelectListAssignment_3_1() { return cSelectListAssignment_3_1; }
		
		//SelectList
		public RuleCall getSelectListSelectListParserRuleCall_3_1_0() { return cSelectListSelectListParserRuleCall_3_1_0; }
		
		//('from' source=JoinSource)?
		public Group getGroup_4() { return cGroup_4; }
		
		//'from'
		public Keyword getFromKeyword_4_0() { return cFromKeyword_4_0; }
		
		//source=JoinSource
		public Assignment getSourceAssignment_4_1() { return cSourceAssignment_4_1; }
		
		//JoinSource
		public RuleCall getSourceJoinSourceParserRuleCall_4_1_0() { return cSourceJoinSourceParserRuleCall_4_1_0; }
		
		//('where' where=WhereExpressions)?
		public Group getGroup_5() { return cGroup_5; }
		
		//'where'
		public Keyword getWhereKeyword_5_0() { return cWhereKeyword_5_0; }
		
		//where=WhereExpressions
		public Assignment getWhereAssignment_5_1() { return cWhereAssignment_5_1; }
		
		//WhereExpressions
		public RuleCall getWhereWhereExpressionsParserRuleCall_5_1_0() { return cWhereWhereExpressionsParserRuleCall_5_1_0; }
		
		//('group by' groupBy=GroupByExpressions)?
		public Group getGroup_6() { return cGroup_6; }
		
		//'group by'
		public Keyword getGroupByKeyword_6_0() { return cGroupByKeyword_6_0; }
		
		//groupBy=GroupByExpressions
		public Assignment getGroupByAssignment_6_1() { return cGroupByAssignment_6_1; }
		
		//GroupByExpressions
		public RuleCall getGroupByGroupByExpressionsParserRuleCall_6_1_0() { return cGroupByGroupByExpressionsParserRuleCall_6_1_0; }
		
		//('having' having=HavingExpressions)?
		public Group getGroup_7() { return cGroup_7; }
		
		//'having'
		public Keyword getHavingKeyword_7_0() { return cHavingKeyword_7_0; }
		
		//having=HavingExpressions
		public Assignment getHavingAssignment_7_1() { return cHavingAssignment_7_1; }
		
		//HavingExpressions
		public RuleCall getHavingHavingExpressionsParserRuleCall_7_1_0() { return cHavingHavingExpressionsParserRuleCall_7_1_0; }
	}
	public class SelectListElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SelectList");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cResultColumnsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cResultColumnsResultColumnParserRuleCall_0_0 = (RuleCall)cResultColumnsAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cCommaKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cResultColumnsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cResultColumnsResultColumnParserRuleCall_1_1_0 = (RuleCall)cResultColumnsAssignment_1_1.eContents().get(0);
		
		//SelectList:
		//	resultColumns+=ResultColumn (',' resultColumns+=ResultColumn)*;
		@Override public ParserRule getRule() { return rule; }
		
		//resultColumns+=ResultColumn (',' resultColumns+=ResultColumn)*
		public Group getGroup() { return cGroup; }
		
		//resultColumns+=ResultColumn
		public Assignment getResultColumnsAssignment_0() { return cResultColumnsAssignment_0; }
		
		//ResultColumn
		public RuleCall getResultColumnsResultColumnParserRuleCall_0_0() { return cResultColumnsResultColumnParserRuleCall_0_0; }
		
		//(',' resultColumns+=ResultColumn)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//resultColumns+=ResultColumn
		public Assignment getResultColumnsAssignment_1_1() { return cResultColumnsAssignment_1_1; }
		
		//ResultColumn
		public RuleCall getResultColumnsResultColumnParserRuleCall_1_1_0() { return cResultColumnsResultColumnParserRuleCall_1_1_0; }
	}
	public class WhereExpressionsElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.WhereExpressions");
		private final Assignment cExpressionAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_0 = (RuleCall)cExpressionAssignment.eContents().get(0);
		
		//WhereExpressions:
		//	expression=SqlExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment() { return cExpressionAssignment; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_0() { return cExpressionSqlExpressionParserRuleCall_0; }
	}
	public class GroupByExpressionsElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.GroupByExpressions");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cGroupByExpressionsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cGroupByExpressionsSqlExpressionParserRuleCall_0_0 = (RuleCall)cGroupByExpressionsAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cCommaKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cGroupByExpressionsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cGroupByExpressionsSqlExpressionParserRuleCall_1_1_0 = (RuleCall)cGroupByExpressionsAssignment_1_1.eContents().get(0);
		
		//GroupByExpressions:
		//	groupByExpressions+=SqlExpression (',' groupByExpressions+=SqlExpression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//groupByExpressions+=SqlExpression (',' groupByExpressions+=SqlExpression)*
		public Group getGroup() { return cGroup; }
		
		//groupByExpressions+=SqlExpression
		public Assignment getGroupByExpressionsAssignment_0() { return cGroupByExpressionsAssignment_0; }
		
		//SqlExpression
		public RuleCall getGroupByExpressionsSqlExpressionParserRuleCall_0_0() { return cGroupByExpressionsSqlExpressionParserRuleCall_0_0; }
		
		//(',' groupByExpressions+=SqlExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//groupByExpressions+=SqlExpression
		public Assignment getGroupByExpressionsAssignment_1_1() { return cGroupByExpressionsAssignment_1_1; }
		
		//SqlExpression
		public RuleCall getGroupByExpressionsSqlExpressionParserRuleCall_1_1_0() { return cGroupByExpressionsSqlExpressionParserRuleCall_1_1_0; }
	}
	public class HavingExpressionsElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.HavingExpressions");
		private final Assignment cExpressionAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_0 = (RuleCall)cExpressionAssignment.eContents().get(0);
		
		//HavingExpressions:
		//	expression=SqlExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment() { return cExpressionAssignment; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_0() { return cExpressionSqlExpressionParserRuleCall_0; }
	}
	public class OrderingTermElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.OrderingTerm");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cExpressionAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_0_0 = (RuleCall)cExpressionAssignment_0.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Assignment cAscAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
		private final Keyword cAscAscKeyword_1_0_0 = (Keyword)cAscAssignment_1_0.eContents().get(0);
		private final Assignment cDescAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
		private final Keyword cDescDescKeyword_1_1_0 = (Keyword)cDescAssignment_1_1.eContents().get(0);
		
		//OrderingTerm:
		//	expression=SqlExpression (asc?='asc' | desc?='desc')?;
		@Override public ParserRule getRule() { return rule; }
		
		//expression=SqlExpression (asc?='asc' | desc?='desc')?
		public Group getGroup() { return cGroup; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_0() { return cExpressionAssignment_0; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_0_0() { return cExpressionSqlExpressionParserRuleCall_0_0; }
		
		//(asc?='asc' | desc?='desc')?
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//asc?='asc'
		public Assignment getAscAssignment_1_0() { return cAscAssignment_1_0; }
		
		//'asc'
		public Keyword getAscAscKeyword_1_0_0() { return cAscAscKeyword_1_0_0; }
		
		//desc?='desc'
		public Assignment getDescAssignment_1_1() { return cDescAssignment_1_1; }
		
		//'desc'
		public Keyword getDescDescKeyword_1_1_0() { return cDescDescKeyword_1_1_0; }
	}
	public class JoinSourceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.JoinSource");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cSourceAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cSourceSingleSourceParserRuleCall_0_0 = (RuleCall)cSourceAssignment_0.eContents().get(0);
		private final Assignment cJoinStatementsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cJoinStatementsJoinStatementParserRuleCall_1_0 = (RuleCall)cJoinStatementsAssignment_1.eContents().get(0);
		
		//JoinSource:
		//	source=SingleSource joinStatements+=JoinStatement*;
		@Override public ParserRule getRule() { return rule; }
		
		//source=SingleSource joinStatements+=JoinStatement*
		public Group getGroup() { return cGroup; }
		
		//source=SingleSource
		public Assignment getSourceAssignment_0() { return cSourceAssignment_0; }
		
		//SingleSource
		public RuleCall getSourceSingleSourceParserRuleCall_0_0() { return cSourceSingleSourceParserRuleCall_0_0; }
		
		//joinStatements+=JoinStatement*
		public Assignment getJoinStatementsAssignment_1() { return cJoinStatementsAssignment_1; }
		
		//JoinStatement
		public RuleCall getJoinStatementsJoinStatementParserRuleCall_1_0() { return cJoinStatementsJoinStatementParserRuleCall_1_0; }
	}
	public class SingleSourceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SingleSource");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cSingleSourceTableParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cSingleSourceSelectStatementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cSingleSourceJoinParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//SingleSource:
		//	SingleSourceTable | SingleSourceSelectStatement | SingleSourceJoin;
		@Override public ParserRule getRule() { return rule; }
		
		//SingleSourceTable | SingleSourceSelectStatement | SingleSourceJoin
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//SingleSourceTable
		public RuleCall getSingleSourceTableParserRuleCall_0() { return cSingleSourceTableParserRuleCall_0; }
		
		//SingleSourceSelectStatement
		public RuleCall getSingleSourceSelectStatementParserRuleCall_1() { return cSingleSourceSelectStatementParserRuleCall_1; }
		
		//SingleSourceJoin
		public RuleCall getSingleSourceJoinParserRuleCall_2() { return cSingleSourceJoinParserRuleCall_2; }
	}
	public class SingleSourceTableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SingleSourceTable");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cSingleSourceTableAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cTableReferenceAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cTableReferenceTableDefinitionCrossReference_1_0 = (CrossReference)cTableReferenceAssignment_1.eContents().get(0);
		private final RuleCall cTableReferenceTableDefinitionQualifiedNameParserRuleCall_1_0_1 = (RuleCall)cTableReferenceTableDefinitionCrossReference_1_0.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cAsKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cNameAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_2_1_0 = (RuleCall)cNameAssignment_2_1.eContents().get(0);
		
		//SingleSourceTable SelectSource:
		//	{SingleSourceTable} tableReference=[TableDefinition|QualifiedName] ('as' name=ID)?
		@Override public ParserRule getRule() { return rule; }
		
		//{SingleSourceTable} tableReference=[TableDefinition|QualifiedName] ('as' name=ID)?
		public Group getGroup() { return cGroup; }
		
		//{SingleSourceTable}
		public Action getSingleSourceTableAction_0() { return cSingleSourceTableAction_0; }
		
		//tableReference=[TableDefinition|QualifiedName]
		public Assignment getTableReferenceAssignment_1() { return cTableReferenceAssignment_1; }
		
		//[TableDefinition|QualifiedName]
		public CrossReference getTableReferenceTableDefinitionCrossReference_1_0() { return cTableReferenceTableDefinitionCrossReference_1_0; }
		
		//QualifiedName
		public RuleCall getTableReferenceTableDefinitionQualifiedNameParserRuleCall_1_0_1() { return cTableReferenceTableDefinitionQualifiedNameParserRuleCall_1_0_1; }
		
		//('as' name=ID)?
		public Group getGroup_2() { return cGroup_2; }
		
		//'as'
		public Keyword getAsKeyword_2_0() { return cAsKeyword_2_0; }
		
		//name=ID
		public Assignment getNameAssignment_2_1() { return cNameAssignment_2_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_2_1_0() { return cNameIDTerminalRuleCall_2_1_0; }
	}
	public class SingleSourceSelectStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SingleSourceSelectStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cSingleSourceSelectStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cSelectStatementAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cSelectStatementSelectStatementParserRuleCall_2_0 = (RuleCall)cSelectStatementAssignment_2.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cAsKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cNameAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_4_1_0 = (RuleCall)cNameAssignment_4_1.eContents().get(0);
		
		//SingleSourceSelectStatement SelectSource:
		//	{SingleSourceSelectStatement}
		//	'(' selectStatement=SelectStatement ')' ('as' name=ID)?
		@Override public ParserRule getRule() { return rule; }
		
		//{SingleSourceSelectStatement} '(' selectStatement=SelectStatement ')' ('as' name=ID)?
		public Group getGroup() { return cGroup; }
		
		//{SingleSourceSelectStatement}
		public Action getSingleSourceSelectStatementAction_0() { return cSingleSourceSelectStatementAction_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
		
		//selectStatement=SelectStatement
		public Assignment getSelectStatementAssignment_2() { return cSelectStatementAssignment_2; }
		
		//SelectStatement
		public RuleCall getSelectStatementSelectStatementParserRuleCall_2_0() { return cSelectStatementSelectStatementParserRuleCall_2_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }
		
		//('as' name=ID)?
		public Group getGroup_4() { return cGroup_4; }
		
		//'as'
		public Keyword getAsKeyword_4_0() { return cAsKeyword_4_0; }
		
		//name=ID
		public Assignment getNameAssignment_4_1() { return cNameAssignment_4_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_4_1_0() { return cNameIDTerminalRuleCall_4_1_0; }
	}
	public class SingleSourceJoinElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SingleSourceJoin");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cJoinSourceAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cJoinSourceJoinSourceParserRuleCall_1_0 = (RuleCall)cJoinSourceAssignment_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//SingleSourceJoin:
		//	'(' joinSource=JoinSource ')';
		@Override public ParserRule getRule() { return rule; }
		
		//'(' joinSource=JoinSource ')'
		public Group getGroup() { return cGroup; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_0() { return cLeftParenthesisKeyword_0; }
		
		//joinSource=JoinSource
		public Assignment getJoinSourceAssignment_1() { return cJoinSourceAssignment_1; }
		
		//JoinSource
		public RuleCall getJoinSourceJoinSourceParserRuleCall_1_0() { return cJoinSourceJoinSourceParserRuleCall_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_2() { return cRightParenthesisKeyword_2; }
	}
	public class JoinStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.JoinStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cJoinStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cNaturalAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final Keyword cNaturalNaturalKeyword_1_0 = (Keyword)cNaturalAssignment_1.eContents().get(0);
		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
		private final Group cGroup_2_0 = (Group)cAlternatives_2.eContents().get(0);
		private final Assignment cLeftAssignment_2_0_0 = (Assignment)cGroup_2_0.eContents().get(0);
		private final Keyword cLeftLeftKeyword_2_0_0_0 = (Keyword)cLeftAssignment_2_0_0.eContents().get(0);
		private final Assignment cOuterAssignment_2_0_1 = (Assignment)cGroup_2_0.eContents().get(1);
		private final Keyword cOuterOuterKeyword_2_0_1_0 = (Keyword)cOuterAssignment_2_0_1.eContents().get(0);
		private final Assignment cInnerAssignment_2_1 = (Assignment)cAlternatives_2.eContents().get(1);
		private final Keyword cInnerInnerKeyword_2_1_0 = (Keyword)cInnerAssignment_2_1.eContents().get(0);
		private final Assignment cCrossAssignment_2_2 = (Assignment)cAlternatives_2.eContents().get(2);
		private final Keyword cCrossCrossKeyword_2_2_0 = (Keyword)cCrossAssignment_2_2.eContents().get(0);
		private final Keyword cJoinKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cSingleSourceAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cSingleSourceSingleSourceParserRuleCall_4_0 = (RuleCall)cSingleSourceAssignment_4.eContents().get(0);
		private final Keyword cOnKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cExpressionAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_6_0 = (RuleCall)cExpressionAssignment_6.eContents().get(0);
		
		//JoinStatement:
		//	{JoinStatement} natural?='natural'? (left?='left' outer?='outer'? | inner?='inner' | cross?='cross')? 'join'
		//	singleSource=SingleSource 'on' expression=SqlExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//{JoinStatement} natural?='natural'? (left?='left' outer?='outer'? | inner?='inner' | cross?='cross')? 'join'
		//singleSource=SingleSource 'on' expression=SqlExpression
		public Group getGroup() { return cGroup; }
		
		//{JoinStatement}
		public Action getJoinStatementAction_0() { return cJoinStatementAction_0; }
		
		//natural?='natural'?
		public Assignment getNaturalAssignment_1() { return cNaturalAssignment_1; }
		
		//'natural'
		public Keyword getNaturalNaturalKeyword_1_0() { return cNaturalNaturalKeyword_1_0; }
		
		//(left?='left' outer?='outer'? | inner?='inner' | cross?='cross')?
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//left?='left' outer?='outer'?
		public Group getGroup_2_0() { return cGroup_2_0; }
		
		//left?='left'
		public Assignment getLeftAssignment_2_0_0() { return cLeftAssignment_2_0_0; }
		
		//'left'
		public Keyword getLeftLeftKeyword_2_0_0_0() { return cLeftLeftKeyword_2_0_0_0; }
		
		//outer?='outer'?
		public Assignment getOuterAssignment_2_0_1() { return cOuterAssignment_2_0_1; }
		
		//'outer'
		public Keyword getOuterOuterKeyword_2_0_1_0() { return cOuterOuterKeyword_2_0_1_0; }
		
		//inner?='inner'
		public Assignment getInnerAssignment_2_1() { return cInnerAssignment_2_1; }
		
		//'inner'
		public Keyword getInnerInnerKeyword_2_1_0() { return cInnerInnerKeyword_2_1_0; }
		
		//cross?='cross'
		public Assignment getCrossAssignment_2_2() { return cCrossAssignment_2_2; }
		
		//'cross'
		public Keyword getCrossCrossKeyword_2_2_0() { return cCrossCrossKeyword_2_2_0; }
		
		//'join'
		public Keyword getJoinKeyword_3() { return cJoinKeyword_3; }
		
		//singleSource=SingleSource
		public Assignment getSingleSourceAssignment_4() { return cSingleSourceAssignment_4; }
		
		//SingleSource
		public RuleCall getSingleSourceSingleSourceParserRuleCall_4_0() { return cSingleSourceSingleSourceParserRuleCall_4_0; }
		
		//'on'
		public Keyword getOnKeyword_5() { return cOnKeyword_5; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_6() { return cExpressionAssignment_6; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_6_0() { return cExpressionSqlExpressionParserRuleCall_6_0; }
	}
	public class ResultColumnElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ResultColumn");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cResultColumnAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cExpressionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_1_0 = (RuleCall)cExpressionAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cAsKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cNameAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_2_1_0 = (RuleCall)cNameAssignment_2_1.eContents().get(0);
		
		//ResultColumn ColumnSource:
		//	{ResultColumn} expression=SqlExpression ('as' name=ID)?
		@Override public ParserRule getRule() { return rule; }
		
		//{ResultColumn} expression=SqlExpression ('as' name=ID)?
		public Group getGroup() { return cGroup; }
		
		//{ResultColumn}
		public Action getResultColumnAction_0() { return cResultColumnAction_0; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_1() { return cExpressionAssignment_1; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_1_0() { return cExpressionSqlExpressionParserRuleCall_1_0; }
		
		//('as' name=ID)?
		public Group getGroup_2() { return cGroup_2; }
		
		//'as'
		public Keyword getAsKeyword_2_0() { return cAsKeyword_2_0; }
		
		//name=ID
		public Assignment getNameAssignment_2_1() { return cNameAssignment_2_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_2_1_0() { return cNameIDTerminalRuleCall_2_1_0; }
	}
	public class LiteralValueElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.LiteralValue");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cNumericLiteralAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Assignment cNumberAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cNumberSignedNumberParserRuleCall_0_1_0 = (RuleCall)cNumberAssignment_0_1.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cStringLiteralAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cLiteralAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cLiteralSTRINGTerminalRuleCall_1_1_0 = (RuleCall)cLiteralAssignment_1_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
		private final Action cNullLiteralAction_2_0 = (Action)cGroup_2.eContents().get(0);
		private final Assignment cLiteralAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final Keyword cLiteralNullKeyword_2_1_0 = (Keyword)cLiteralAssignment_2_1.eContents().get(0);
		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
		private final Action cCurrentTimeLiteralAction_3_0 = (Action)cGroup_3.eContents().get(0);
		private final Assignment cLiteralAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final Keyword cLiteralCurrent_timeKeyword_3_1_0 = (Keyword)cLiteralAssignment_3_1.eContents().get(0);
		private final Group cGroup_4 = (Group)cAlternatives.eContents().get(4);
		private final Action cCurrentDateLiteralAction_4_0 = (Action)cGroup_4.eContents().get(0);
		private final Assignment cLiteralAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final Keyword cLiteralCurrent_dateKeyword_4_1_0 = (Keyword)cLiteralAssignment_4_1.eContents().get(0);
		private final Group cGroup_5 = (Group)cAlternatives.eContents().get(5);
		private final Action cCurrentTimeStampLiteralAction_5_0 = (Action)cGroup_5.eContents().get(0);
		private final Assignment cLiteralAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final Keyword cLiteralCurrent_timestampKeyword_5_1_0 = (Keyword)cLiteralAssignment_5_1.eContents().get(0);
		
		//LiteralValue:
		//	{NumericLiteral} number=SignedNumber | {StringLiteral} literal=STRING | {NullLiteral} literal='null' |
		//	{CurrentTimeLiteral} literal='current_time' | {CurrentDateLiteral} literal='current_date' | {CurrentTimeStampLiteral}
		//	literal='current_timestamp';
		@Override public ParserRule getRule() { return rule; }
		
		//{NumericLiteral} number=SignedNumber | {StringLiteral} literal=STRING | {NullLiteral} literal='null' |
		//{CurrentTimeLiteral} literal='current_time' | {CurrentDateLiteral} literal='current_date' | {CurrentTimeStampLiteral}
		//literal='current_timestamp'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{NumericLiteral} number=SignedNumber
		public Group getGroup_0() { return cGroup_0; }
		
		//{NumericLiteral}
		public Action getNumericLiteralAction_0_0() { return cNumericLiteralAction_0_0; }
		
		//number=SignedNumber
		public Assignment getNumberAssignment_0_1() { return cNumberAssignment_0_1; }
		
		//SignedNumber
		public RuleCall getNumberSignedNumberParserRuleCall_0_1_0() { return cNumberSignedNumberParserRuleCall_0_1_0; }
		
		//{StringLiteral} literal=STRING
		public Group getGroup_1() { return cGroup_1; }
		
		//{StringLiteral}
		public Action getStringLiteralAction_1_0() { return cStringLiteralAction_1_0; }
		
		//literal=STRING
		public Assignment getLiteralAssignment_1_1() { return cLiteralAssignment_1_1; }
		
		//STRING
		public RuleCall getLiteralSTRINGTerminalRuleCall_1_1_0() { return cLiteralSTRINGTerminalRuleCall_1_1_0; }
		
		//{NullLiteral} literal='null'
		public Group getGroup_2() { return cGroup_2; }
		
		//{NullLiteral}
		public Action getNullLiteralAction_2_0() { return cNullLiteralAction_2_0; }
		
		//literal='null'
		public Assignment getLiteralAssignment_2_1() { return cLiteralAssignment_2_1; }
		
		//'null'
		public Keyword getLiteralNullKeyword_2_1_0() { return cLiteralNullKeyword_2_1_0; }
		
		//{CurrentTimeLiteral} literal='current_time'
		public Group getGroup_3() { return cGroup_3; }
		
		//{CurrentTimeLiteral}
		public Action getCurrentTimeLiteralAction_3_0() { return cCurrentTimeLiteralAction_3_0; }
		
		//literal='current_time'
		public Assignment getLiteralAssignment_3_1() { return cLiteralAssignment_3_1; }
		
		//'current_time'
		public Keyword getLiteralCurrent_timeKeyword_3_1_0() { return cLiteralCurrent_timeKeyword_3_1_0; }
		
		//{CurrentDateLiteral} literal='current_date'
		public Group getGroup_4() { return cGroup_4; }
		
		//{CurrentDateLiteral}
		public Action getCurrentDateLiteralAction_4_0() { return cCurrentDateLiteralAction_4_0; }
		
		//literal='current_date'
		public Assignment getLiteralAssignment_4_1() { return cLiteralAssignment_4_1; }
		
		//'current_date'
		public Keyword getLiteralCurrent_dateKeyword_4_1_0() { return cLiteralCurrent_dateKeyword_4_1_0; }
		
		//{CurrentTimeStampLiteral} literal='current_timestamp'
		public Group getGroup_5() { return cGroup_5; }
		
		//{CurrentTimeStampLiteral}
		public Action getCurrentTimeStampLiteralAction_5_0() { return cCurrentTimeStampLiteralAction_5_0; }
		
		//literal='current_timestamp'
		public Assignment getLiteralAssignment_5_1() { return cLiteralAssignment_5_1; }
		
		//'current_timestamp'
		public Keyword getLiteralCurrent_timestampKeyword_5_1_0() { return cLiteralCurrent_timestampKeyword_5_1_0; }
	}
	public class DDLStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DDLStatement");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cCreateTableStatementParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cCreateViewStatementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cCreateTriggerStatementParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cCreateIndexStatementParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cAlterTableRenameStatementParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cAlterTableAddColumnStatementParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cDropTableStatementParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cDropTriggerStatementParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		private final RuleCall cDropViewStatementParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
		private final RuleCall cDropIndexStatementParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
		
		/// ***********************************************************************
		// *                                                                     *
		// * DDL                                                                 *
		// *                                                                     *
		// *********************************************************************** / DDLStatement:
		//	CreateTableStatement
		//	| CreateViewStatement
		//	| CreateTriggerStatement
		//	| CreateIndexStatement
		//	| AlterTableRenameStatement
		//	| AlterTableAddColumnStatement
		//	| DropTableStatement
		//	| DropTriggerStatement
		//	| DropViewStatement
		//	| DropIndexStatement;
		@Override public ParserRule getRule() { return rule; }
		
		//CreateTableStatement | CreateViewStatement | CreateTriggerStatement | CreateIndexStatement | AlterTableRenameStatement |
		//AlterTableAddColumnStatement | DropTableStatement | DropTriggerStatement | DropViewStatement | DropIndexStatement
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//CreateTableStatement
		public RuleCall getCreateTableStatementParserRuleCall_0() { return cCreateTableStatementParserRuleCall_0; }
		
		//CreateViewStatement
		public RuleCall getCreateViewStatementParserRuleCall_1() { return cCreateViewStatementParserRuleCall_1; }
		
		//CreateTriggerStatement
		public RuleCall getCreateTriggerStatementParserRuleCall_2() { return cCreateTriggerStatementParserRuleCall_2; }
		
		//CreateIndexStatement
		public RuleCall getCreateIndexStatementParserRuleCall_3() { return cCreateIndexStatementParserRuleCall_3; }
		
		//AlterTableRenameStatement
		public RuleCall getAlterTableRenameStatementParserRuleCall_4() { return cAlterTableRenameStatementParserRuleCall_4; }
		
		//AlterTableAddColumnStatement
		public RuleCall getAlterTableAddColumnStatementParserRuleCall_5() { return cAlterTableAddColumnStatementParserRuleCall_5; }
		
		//DropTableStatement
		public RuleCall getDropTableStatementParserRuleCall_6() { return cDropTableStatementParserRuleCall_6; }
		
		//DropTriggerStatement
		public RuleCall getDropTriggerStatementParserRuleCall_7() { return cDropTriggerStatementParserRuleCall_7; }
		
		//DropViewStatement
		public RuleCall getDropViewStatementParserRuleCall_8() { return cDropViewStatementParserRuleCall_8; }
		
		//DropIndexStatement
		public RuleCall getDropIndexStatementParserRuleCall_9() { return cDropIndexStatementParserRuleCall_9; }
	}
	public class CreateTableStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.CreateTableStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cCreateTableStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cCreateKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cTemporaryAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final Keyword cTemporaryTempKeyword_2_0 = (Keyword)cTemporaryAssignment_2.eContents().get(0);
		private final Keyword cTableKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cNameAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cNameIDTerminalRuleCall_4_0 = (RuleCall)cNameAssignment_4.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cColumnDefsAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cColumnDefsColumnDefParserRuleCall_6_0 = (RuleCall)cColumnDefsAssignment_6.eContents().get(0);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Keyword cCommaKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
		private final Assignment cColumnDefsAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
		private final RuleCall cColumnDefsColumnDefParserRuleCall_7_1_0 = (RuleCall)cColumnDefsAssignment_7_1.eContents().get(0);
		private final Group cGroup_8 = (Group)cGroup.eContents().get(8);
		private final Keyword cCommaKeyword_8_0 = (Keyword)cGroup_8.eContents().get(0);
		private final Assignment cConstraintsAssignment_8_1 = (Assignment)cGroup_8.eContents().get(1);
		private final RuleCall cConstraintsTableConstraintParserRuleCall_8_1_0 = (RuleCall)cConstraintsAssignment_8_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_9 = (Keyword)cGroup.eContents().get(9);
		
		//CreateTableStatement TableDefinition:
		//	{CreateTableStatement} 'create' temporary?='temp'? 'table' name=ID '('
		//	columnDefs+=ColumnDef (',' columnDefs+=ColumnDef)* (',' constraints+=TableConstraint)*
		//	')'
		@Override public ParserRule getRule() { return rule; }
		
		//{CreateTableStatement} 'create' temporary?='temp'? 'table' name=ID '(' columnDefs+=ColumnDef (','
		//columnDefs+=ColumnDef)* (',' constraints+=TableConstraint)* ')'
		public Group getGroup() { return cGroup; }
		
		//{CreateTableStatement}
		public Action getCreateTableStatementAction_0() { return cCreateTableStatementAction_0; }
		
		//'create'
		public Keyword getCreateKeyword_1() { return cCreateKeyword_1; }
		
		//temporary?='temp'?
		public Assignment getTemporaryAssignment_2() { return cTemporaryAssignment_2; }
		
		//'temp'
		public Keyword getTemporaryTempKeyword_2_0() { return cTemporaryTempKeyword_2_0; }
		
		//'table'
		public Keyword getTableKeyword_3() { return cTableKeyword_3; }
		
		//name=ID
		public Assignment getNameAssignment_4() { return cNameAssignment_4; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_4_0() { return cNameIDTerminalRuleCall_4_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_5() { return cLeftParenthesisKeyword_5; }
		
		//columnDefs+=ColumnDef
		public Assignment getColumnDefsAssignment_6() { return cColumnDefsAssignment_6; }
		
		//ColumnDef
		public RuleCall getColumnDefsColumnDefParserRuleCall_6_0() { return cColumnDefsColumnDefParserRuleCall_6_0; }
		
		//(',' columnDefs+=ColumnDef)*
		public Group getGroup_7() { return cGroup_7; }
		
		//','
		public Keyword getCommaKeyword_7_0() { return cCommaKeyword_7_0; }
		
		//columnDefs+=ColumnDef
		public Assignment getColumnDefsAssignment_7_1() { return cColumnDefsAssignment_7_1; }
		
		//ColumnDef
		public RuleCall getColumnDefsColumnDefParserRuleCall_7_1_0() { return cColumnDefsColumnDefParserRuleCall_7_1_0; }
		
		//(',' constraints+=TableConstraint)*
		public Group getGroup_8() { return cGroup_8; }
		
		//','
		public Keyword getCommaKeyword_8_0() { return cCommaKeyword_8_0; }
		
		//constraints+=TableConstraint
		public Assignment getConstraintsAssignment_8_1() { return cConstraintsAssignment_8_1; }
		
		//TableConstraint
		public RuleCall getConstraintsTableConstraintParserRuleCall_8_1_0() { return cConstraintsTableConstraintParserRuleCall_8_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_9() { return cRightParenthesisKeyword_9; }
	}
	public class CreateViewStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.CreateViewStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cCreateViewStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cCreateKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cTemporaryAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final Keyword cTemporaryTempKeyword_2_0 = (Keyword)cTemporaryAssignment_2.eContents().get(0);
		private final Keyword cViewKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cNameAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cNameIDTerminalRuleCall_4_0 = (RuleCall)cNameAssignment_4.eContents().get(0);
		private final Keyword cAsKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cSelectStatementAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cSelectStatementSelectStatementParserRuleCall_6_0 = (RuleCall)cSelectStatementAssignment_6.eContents().get(0);
		
		//CreateViewStatement TableDefinition:
		//	{CreateViewStatement}
		//	'create' temporary?='temp'? 'view' name=ID 'as' selectStatement=SelectStatement
		@Override public ParserRule getRule() { return rule; }
		
		//{CreateViewStatement} 'create' temporary?='temp'? 'view' name=ID 'as' selectStatement=SelectStatement
		public Group getGroup() { return cGroup; }
		
		//{CreateViewStatement}
		public Action getCreateViewStatementAction_0() { return cCreateViewStatementAction_0; }
		
		//'create'
		public Keyword getCreateKeyword_1() { return cCreateKeyword_1; }
		
		//temporary?='temp'?
		public Assignment getTemporaryAssignment_2() { return cTemporaryAssignment_2; }
		
		//'temp'
		public Keyword getTemporaryTempKeyword_2_0() { return cTemporaryTempKeyword_2_0; }
		
		//'view'
		public Keyword getViewKeyword_3() { return cViewKeyword_3; }
		
		//name=ID
		public Assignment getNameAssignment_4() { return cNameAssignment_4; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_4_0() { return cNameIDTerminalRuleCall_4_0; }
		
		//'as'
		public Keyword getAsKeyword_5() { return cAsKeyword_5; }
		
		//selectStatement=SelectStatement
		public Assignment getSelectStatementAssignment_6() { return cSelectStatementAssignment_6; }
		
		//SelectStatement
		public RuleCall getSelectStatementSelectStatementParserRuleCall_6_0() { return cSelectStatementSelectStatementParserRuleCall_6_0; }
	}
	public class CreateTriggerStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.CreateTriggerStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCreateKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cTemporaryAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final Keyword cTemporaryTempKeyword_1_0 = (Keyword)cTemporaryAssignment_1.eContents().get(0);
		private final Keyword cTriggerKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cNameAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cNameIDTerminalRuleCall_3_0 = (RuleCall)cNameAssignment_3.eContents().get(0);
		private final Assignment cWhenAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final Alternatives cWhenAlternatives_4_0 = (Alternatives)cWhenAssignment_4.eContents().get(0);
		private final Keyword cWhenBeforeKeyword_4_0_0 = (Keyword)cWhenAlternatives_4_0.eContents().get(0);
		private final Keyword cWhenAfterKeyword_4_0_1 = (Keyword)cWhenAlternatives_4_0.eContents().get(1);
		private final Keyword cWhenInsteadOfKeyword_4_0_2 = (Keyword)cWhenAlternatives_4_0.eContents().get(2);
		private final Alternatives cAlternatives_5 = (Alternatives)cGroup.eContents().get(5);
		private final Assignment cEventTypeAssignment_5_0 = (Assignment)cAlternatives_5.eContents().get(0);
		private final Keyword cEventTypeDeleteKeyword_5_0_0 = (Keyword)cEventTypeAssignment_5_0.eContents().get(0);
		private final Assignment cEventTypeAssignment_5_1 = (Assignment)cAlternatives_5.eContents().get(1);
		private final Keyword cEventTypeInsertKeyword_5_1_0 = (Keyword)cEventTypeAssignment_5_1.eContents().get(0);
		private final Group cGroup_5_2 = (Group)cAlternatives_5.eContents().get(2);
		private final Assignment cEventTypeAssignment_5_2_0 = (Assignment)cGroup_5_2.eContents().get(0);
		private final Keyword cEventTypeUpdateKeyword_5_2_0_0 = (Keyword)cEventTypeAssignment_5_2_0.eContents().get(0);
		private final Group cGroup_5_2_1 = (Group)cGroup_5_2.eContents().get(1);
		private final Keyword cOfKeyword_5_2_1_0 = (Keyword)cGroup_5_2_1.eContents().get(0);
		private final Assignment cUpdateColumnNamesAssignment_5_2_1_1 = (Assignment)cGroup_5_2_1.eContents().get(1);
		private final RuleCall cUpdateColumnNamesIDTerminalRuleCall_5_2_1_1_0 = (RuleCall)cUpdateColumnNamesAssignment_5_2_1_1.eContents().get(0);
		private final Group cGroup_5_2_1_2 = (Group)cGroup_5_2_1.eContents().get(2);
		private final Keyword cCommaKeyword_5_2_1_2_0 = (Keyword)cGroup_5_2_1_2.eContents().get(0);
		private final Assignment cUpdateColumnNamesAssignment_5_2_1_2_1 = (Assignment)cGroup_5_2_1_2.eContents().get(1);
		private final RuleCall cUpdateColumnNamesIDTerminalRuleCall_5_2_1_2_1_0 = (RuleCall)cUpdateColumnNamesAssignment_5_2_1_2_1.eContents().get(0);
		private final Keyword cOnKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Assignment cTableAssignment_7 = (Assignment)cGroup.eContents().get(7);
		private final CrossReference cTableTableDefinitionCrossReference_7_0 = (CrossReference)cTableAssignment_7.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_7_0_1 = (RuleCall)cTableTableDefinitionCrossReference_7_0.eContents().get(1);
		private final Assignment cForEachRowAssignment_8 = (Assignment)cGroup.eContents().get(8);
		private final Keyword cForEachRowForEachRowKeyword_8_0 = (Keyword)cForEachRowAssignment_8.eContents().get(0);
		private final Group cGroup_9 = (Group)cGroup.eContents().get(9);
		private final Keyword cWhenKeyword_9_0 = (Keyword)cGroup_9.eContents().get(0);
		private final Assignment cWhenExpressionAssignment_9_1 = (Assignment)cGroup_9.eContents().get(1);
		private final RuleCall cWhenExpressionSqlExpressionParserRuleCall_9_1_0 = (RuleCall)cWhenExpressionAssignment_9_1.eContents().get(0);
		private final Keyword cBeginKeyword_10 = (Keyword)cGroup.eContents().get(10);
		private final Group cGroup_11 = (Group)cGroup.eContents().get(11);
		private final Assignment cStatementsAssignment_11_0 = (Assignment)cGroup_11.eContents().get(0);
		private final RuleCall cStatementsDMLStatementParserRuleCall_11_0_0 = (RuleCall)cStatementsAssignment_11_0.eContents().get(0);
		private final Keyword cSemicolonKeyword_11_1 = (Keyword)cGroup_11.eContents().get(1);
		private final Group cGroup_11_2 = (Group)cGroup_11.eContents().get(2);
		private final Assignment cStatementsAssignment_11_2_0 = (Assignment)cGroup_11_2.eContents().get(0);
		private final RuleCall cStatementsDMLStatementParserRuleCall_11_2_0_0 = (RuleCall)cStatementsAssignment_11_2_0.eContents().get(0);
		private final Keyword cSemicolonKeyword_11_2_1 = (Keyword)cGroup_11_2.eContents().get(1);
		private final Keyword cEndKeyword_12 = (Keyword)cGroup.eContents().get(12);
		
		//CreateTriggerStatement:
		//	'create' temporary?='temp'? 'trigger' name=ID when=('before' | 'after' | 'instead of')? (eventType='delete' |
		//	eventType='insert' | eventType='update' ('of' updateColumnNames+=ID (',' updateColumnNames+=ID)*)?)
		//	'on' table=[TableDefinition] forEachRow='for each row'? ('when' whenExpression=SqlExpression)?
		//	'begin' (statements+=DMLStatement ';' (statements+=DMLStatement ';')*)? 'end';
		@Override public ParserRule getRule() { return rule; }
		
		//'create' temporary?='temp'? 'trigger' name=ID when=('before' | 'after' | 'instead of')? (eventType='delete' |
		//eventType='insert' | eventType='update' ('of' updateColumnNames+=ID (',' updateColumnNames+=ID)*)?) 'on'
		//table=[TableDefinition] forEachRow='for each row'? ('when' whenExpression=SqlExpression)? 'begin'
		//(statements+=DMLStatement ';' (statements+=DMLStatement ';')*)? 'end'
		public Group getGroup() { return cGroup; }
		
		//'create'
		public Keyword getCreateKeyword_0() { return cCreateKeyword_0; }
		
		//temporary?='temp'?
		public Assignment getTemporaryAssignment_1() { return cTemporaryAssignment_1; }
		
		//'temp'
		public Keyword getTemporaryTempKeyword_1_0() { return cTemporaryTempKeyword_1_0; }
		
		//'trigger'
		public Keyword getTriggerKeyword_2() { return cTriggerKeyword_2; }
		
		//name=ID
		public Assignment getNameAssignment_3() { return cNameAssignment_3; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_3_0() { return cNameIDTerminalRuleCall_3_0; }
		
		//when=('before' | 'after' | 'instead of')?
		public Assignment getWhenAssignment_4() { return cWhenAssignment_4; }
		
		//('before' | 'after' | 'instead of')
		public Alternatives getWhenAlternatives_4_0() { return cWhenAlternatives_4_0; }
		
		//'before'
		public Keyword getWhenBeforeKeyword_4_0_0() { return cWhenBeforeKeyword_4_0_0; }
		
		//'after'
		public Keyword getWhenAfterKeyword_4_0_1() { return cWhenAfterKeyword_4_0_1; }
		
		//'instead of'
		public Keyword getWhenInsteadOfKeyword_4_0_2() { return cWhenInsteadOfKeyword_4_0_2; }
		
		//(eventType='delete' | eventType='insert' | eventType='update' ('of' updateColumnNames+=ID (','
		//updateColumnNames+=ID)*)?)
		public Alternatives getAlternatives_5() { return cAlternatives_5; }
		
		//eventType='delete'
		public Assignment getEventTypeAssignment_5_0() { return cEventTypeAssignment_5_0; }
		
		//'delete'
		public Keyword getEventTypeDeleteKeyword_5_0_0() { return cEventTypeDeleteKeyword_5_0_0; }
		
		//eventType='insert'
		public Assignment getEventTypeAssignment_5_1() { return cEventTypeAssignment_5_1; }
		
		//'insert'
		public Keyword getEventTypeInsertKeyword_5_1_0() { return cEventTypeInsertKeyword_5_1_0; }
		
		//eventType='update' ('of' updateColumnNames+=ID (',' updateColumnNames+=ID)*)?
		public Group getGroup_5_2() { return cGroup_5_2; }
		
		//eventType='update'
		public Assignment getEventTypeAssignment_5_2_0() { return cEventTypeAssignment_5_2_0; }
		
		//'update'
		public Keyword getEventTypeUpdateKeyword_5_2_0_0() { return cEventTypeUpdateKeyword_5_2_0_0; }
		
		//('of' updateColumnNames+=ID (',' updateColumnNames+=ID)*)?
		public Group getGroup_5_2_1() { return cGroup_5_2_1; }
		
		//'of'
		public Keyword getOfKeyword_5_2_1_0() { return cOfKeyword_5_2_1_0; }
		
		//updateColumnNames+=ID
		public Assignment getUpdateColumnNamesAssignment_5_2_1_1() { return cUpdateColumnNamesAssignment_5_2_1_1; }
		
		//ID
		public RuleCall getUpdateColumnNamesIDTerminalRuleCall_5_2_1_1_0() { return cUpdateColumnNamesIDTerminalRuleCall_5_2_1_1_0; }
		
		//(',' updateColumnNames+=ID)*
		public Group getGroup_5_2_1_2() { return cGroup_5_2_1_2; }
		
		//','
		public Keyword getCommaKeyword_5_2_1_2_0() { return cCommaKeyword_5_2_1_2_0; }
		
		//updateColumnNames+=ID
		public Assignment getUpdateColumnNamesAssignment_5_2_1_2_1() { return cUpdateColumnNamesAssignment_5_2_1_2_1; }
		
		//ID
		public RuleCall getUpdateColumnNamesIDTerminalRuleCall_5_2_1_2_1_0() { return cUpdateColumnNamesIDTerminalRuleCall_5_2_1_2_1_0; }
		
		//'on'
		public Keyword getOnKeyword_6() { return cOnKeyword_6; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_7() { return cTableAssignment_7; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_7_0() { return cTableTableDefinitionCrossReference_7_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_7_0_1() { return cTableTableDefinitionIDTerminalRuleCall_7_0_1; }
		
		//forEachRow='for each row'?
		public Assignment getForEachRowAssignment_8() { return cForEachRowAssignment_8; }
		
		//'for each row'
		public Keyword getForEachRowForEachRowKeyword_8_0() { return cForEachRowForEachRowKeyword_8_0; }
		
		//('when' whenExpression=SqlExpression)?
		public Group getGroup_9() { return cGroup_9; }
		
		//'when'
		public Keyword getWhenKeyword_9_0() { return cWhenKeyword_9_0; }
		
		//whenExpression=SqlExpression
		public Assignment getWhenExpressionAssignment_9_1() { return cWhenExpressionAssignment_9_1; }
		
		//SqlExpression
		public RuleCall getWhenExpressionSqlExpressionParserRuleCall_9_1_0() { return cWhenExpressionSqlExpressionParserRuleCall_9_1_0; }
		
		//'begin'
		public Keyword getBeginKeyword_10() { return cBeginKeyword_10; }
		
		//(statements+=DMLStatement ';' (statements+=DMLStatement ';')*)?
		public Group getGroup_11() { return cGroup_11; }
		
		//statements+=DMLStatement
		public Assignment getStatementsAssignment_11_0() { return cStatementsAssignment_11_0; }
		
		//DMLStatement
		public RuleCall getStatementsDMLStatementParserRuleCall_11_0_0() { return cStatementsDMLStatementParserRuleCall_11_0_0; }
		
		//';'
		public Keyword getSemicolonKeyword_11_1() { return cSemicolonKeyword_11_1; }
		
		//(statements+=DMLStatement ';')*
		public Group getGroup_11_2() { return cGroup_11_2; }
		
		//statements+=DMLStatement
		public Assignment getStatementsAssignment_11_2_0() { return cStatementsAssignment_11_2_0; }
		
		//DMLStatement
		public RuleCall getStatementsDMLStatementParserRuleCall_11_2_0_0() { return cStatementsDMLStatementParserRuleCall_11_2_0_0; }
		
		//';'
		public Keyword getSemicolonKeyword_11_2_1() { return cSemicolonKeyword_11_2_1; }
		
		//'end'
		public Keyword getEndKeyword_12() { return cEndKeyword_12; }
	}
	public class AlterTableRenameStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.AlterTableRenameStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cAlterTableRenameStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cAlterKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cTableKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTableAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final CrossReference cTableTableDefinitionCrossReference_3_0 = (CrossReference)cTableAssignment_3.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_3_0_1 = (RuleCall)cTableTableDefinitionCrossReference_3_0.eContents().get(1);
		private final Keyword cRenameToKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cNameAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cNameIDTerminalRuleCall_5_0 = (RuleCall)cNameAssignment_5.eContents().get(0);
		
		//AlterTableRenameStatement TableDefinition:
		//	{AlterTableRenameStatement}
		//	'alter' 'table' table=[TableDefinition] 'rename to' name=ID
		@Override public ParserRule getRule() { return rule; }
		
		//{AlterTableRenameStatement} 'alter' 'table' table=[TableDefinition] 'rename to' name=ID
		public Group getGroup() { return cGroup; }
		
		//{AlterTableRenameStatement}
		public Action getAlterTableRenameStatementAction_0() { return cAlterTableRenameStatementAction_0; }
		
		//'alter'
		public Keyword getAlterKeyword_1() { return cAlterKeyword_1; }
		
		//'table'
		public Keyword getTableKeyword_2() { return cTableKeyword_2; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_3() { return cTableAssignment_3; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_3_0() { return cTableTableDefinitionCrossReference_3_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_3_0_1() { return cTableTableDefinitionIDTerminalRuleCall_3_0_1; }
		
		//'rename to'
		public Keyword getRenameToKeyword_4() { return cRenameToKeyword_4; }
		
		//name=ID
		public Assignment getNameAssignment_5() { return cNameAssignment_5; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_5_0() { return cNameIDTerminalRuleCall_5_0; }
	}
	public class AlterTableAddColumnStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.AlterTableAddColumnStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cAlterKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cTableKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cTableAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cTableTableDefinitionCrossReference_2_0 = (CrossReference)cTableAssignment_2.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_2_0_1 = (RuleCall)cTableTableDefinitionCrossReference_2_0.eContents().get(1);
		private final Keyword cAddColumnKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cColumnDefAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cColumnDefColumnDefParserRuleCall_4_0 = (RuleCall)cColumnDefAssignment_4.eContents().get(0);
		
		//AlterTableAddColumnStatement:
		//	'alter' 'table' table=[TableDefinition] 'add column' columnDef=ColumnDef;
		@Override public ParserRule getRule() { return rule; }
		
		//'alter' 'table' table=[TableDefinition] 'add column' columnDef=ColumnDef
		public Group getGroup() { return cGroup; }
		
		//'alter'
		public Keyword getAlterKeyword_0() { return cAlterKeyword_0; }
		
		//'table'
		public Keyword getTableKeyword_1() { return cTableKeyword_1; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_2() { return cTableAssignment_2; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_2_0() { return cTableTableDefinitionCrossReference_2_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_2_0_1() { return cTableTableDefinitionIDTerminalRuleCall_2_0_1; }
		
		//'add column'
		public Keyword getAddColumnKeyword_3() { return cAddColumnKeyword_3; }
		
		//columnDef=ColumnDef
		public Assignment getColumnDefAssignment_4() { return cColumnDefAssignment_4; }
		
		//ColumnDef
		public RuleCall getColumnDefColumnDefParserRuleCall_4_0() { return cColumnDefColumnDefParserRuleCall_4_0; }
	}
	public class DropTableStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DropTableStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDropKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cTableKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cIfExistsAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final Keyword cIfExistsIfExistsKeyword_2_0 = (Keyword)cIfExistsAssignment_2.eContents().get(0);
		private final Assignment cTableAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final CrossReference cTableTableDefinitionCrossReference_3_0 = (CrossReference)cTableAssignment_3.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_3_0_1 = (RuleCall)cTableTableDefinitionCrossReference_3_0.eContents().get(1);
		
		//DropTableStatement:
		//	'drop' 'table' ifExists?='if exists'? table=[TableDefinition];
		@Override public ParserRule getRule() { return rule; }
		
		//'drop' 'table' ifExists?='if exists'? table=[TableDefinition]
		public Group getGroup() { return cGroup; }
		
		//'drop'
		public Keyword getDropKeyword_0() { return cDropKeyword_0; }
		
		//'table'
		public Keyword getTableKeyword_1() { return cTableKeyword_1; }
		
		//ifExists?='if exists'?
		public Assignment getIfExistsAssignment_2() { return cIfExistsAssignment_2; }
		
		//'if exists'
		public Keyword getIfExistsIfExistsKeyword_2_0() { return cIfExistsIfExistsKeyword_2_0; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_3() { return cTableAssignment_3; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_3_0() { return cTableTableDefinitionCrossReference_3_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_3_0_1() { return cTableTableDefinitionIDTerminalRuleCall_3_0_1; }
	}
	public class DropTriggerStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DropTriggerStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDropKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cTriggerKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cIfExistsAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final Keyword cIfExistsIfExistsKeyword_2_0 = (Keyword)cIfExistsAssignment_2.eContents().get(0);
		private final Assignment cTriggerAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final CrossReference cTriggerCreateTriggerStatementCrossReference_3_0 = (CrossReference)cTriggerAssignment_3.eContents().get(0);
		private final RuleCall cTriggerCreateTriggerStatementIDTerminalRuleCall_3_0_1 = (RuleCall)cTriggerCreateTriggerStatementCrossReference_3_0.eContents().get(1);
		
		//DropTriggerStatement:
		//	'drop' 'trigger' ifExists?='if exists'? trigger=[CreateTriggerStatement];
		@Override public ParserRule getRule() { return rule; }
		
		//'drop' 'trigger' ifExists?='if exists'? trigger=[CreateTriggerStatement]
		public Group getGroup() { return cGroup; }
		
		//'drop'
		public Keyword getDropKeyword_0() { return cDropKeyword_0; }
		
		//'trigger'
		public Keyword getTriggerKeyword_1() { return cTriggerKeyword_1; }
		
		//ifExists?='if exists'?
		public Assignment getIfExistsAssignment_2() { return cIfExistsAssignment_2; }
		
		//'if exists'
		public Keyword getIfExistsIfExistsKeyword_2_0() { return cIfExistsIfExistsKeyword_2_0; }
		
		//trigger=[CreateTriggerStatement]
		public Assignment getTriggerAssignment_3() { return cTriggerAssignment_3; }
		
		//[CreateTriggerStatement]
		public CrossReference getTriggerCreateTriggerStatementCrossReference_3_0() { return cTriggerCreateTriggerStatementCrossReference_3_0; }
		
		//ID
		public RuleCall getTriggerCreateTriggerStatementIDTerminalRuleCall_3_0_1() { return cTriggerCreateTriggerStatementIDTerminalRuleCall_3_0_1; }
	}
	public class DropViewStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DropViewStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDropKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cViewKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cIfExistsAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final Keyword cIfExistsIfExistsKeyword_2_0 = (Keyword)cIfExistsAssignment_2.eContents().get(0);
		private final Assignment cViewAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final CrossReference cViewCreateViewStatementCrossReference_3_0 = (CrossReference)cViewAssignment_3.eContents().get(0);
		private final RuleCall cViewCreateViewStatementIDTerminalRuleCall_3_0_1 = (RuleCall)cViewCreateViewStatementCrossReference_3_0.eContents().get(1);
		
		//DropViewStatement:
		//	'drop' 'view' ifExists?='if exists'? view=[CreateViewStatement];
		@Override public ParserRule getRule() { return rule; }
		
		//'drop' 'view' ifExists?='if exists'? view=[CreateViewStatement]
		public Group getGroup() { return cGroup; }
		
		//'drop'
		public Keyword getDropKeyword_0() { return cDropKeyword_0; }
		
		//'view'
		public Keyword getViewKeyword_1() { return cViewKeyword_1; }
		
		//ifExists?='if exists'?
		public Assignment getIfExistsAssignment_2() { return cIfExistsAssignment_2; }
		
		//'if exists'
		public Keyword getIfExistsIfExistsKeyword_2_0() { return cIfExistsIfExistsKeyword_2_0; }
		
		//view=[CreateViewStatement]
		public Assignment getViewAssignment_3() { return cViewAssignment_3; }
		
		//[CreateViewStatement]
		public CrossReference getViewCreateViewStatementCrossReference_3_0() { return cViewCreateViewStatementCrossReference_3_0; }
		
		//ID
		public RuleCall getViewCreateViewStatementIDTerminalRuleCall_3_0_1() { return cViewCreateViewStatementIDTerminalRuleCall_3_0_1; }
	}
	public class CreateIndexStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.CreateIndexStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCreateKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cUniqueAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final Keyword cUniqueUniqueKeyword_1_0 = (Keyword)cUniqueAssignment_1.eContents().get(0);
		private final Keyword cIndexKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cNameAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cNameIDTerminalRuleCall_3_0 = (RuleCall)cNameAssignment_3.eContents().get(0);
		private final Keyword cOnKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cTableAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final CrossReference cTableTableDefinitionCrossReference_5_0 = (CrossReference)cTableAssignment_5.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_5_0_1 = (RuleCall)cTableTableDefinitionCrossReference_5_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Assignment cColumnsAssignment_7 = (Assignment)cGroup.eContents().get(7);
		private final RuleCall cColumnsIndexedColumnParserRuleCall_7_0 = (RuleCall)cColumnsAssignment_7.eContents().get(0);
		private final Group cGroup_8 = (Group)cGroup.eContents().get(8);
		private final Keyword cCommaKeyword_8_0 = (Keyword)cGroup_8.eContents().get(0);
		private final Assignment cColumnsAssignment_8_1 = (Assignment)cGroup_8.eContents().get(1);
		private final RuleCall cColumnsIndexedColumnParserRuleCall_8_1_0 = (RuleCall)cColumnsAssignment_8_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_9 = (Keyword)cGroup.eContents().get(9);
		
		//CreateIndexStatement:
		//	'create' unique?='unique'? 'index' name=ID 'on' table=[TableDefinition]
		//	'(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')';
		@Override public ParserRule getRule() { return rule; }
		
		//'create' unique?='unique'? 'index' name=ID 'on' table=[TableDefinition] '(' columns+=IndexedColumn (','
		//columns+=IndexedColumn)* ')'
		public Group getGroup() { return cGroup; }
		
		//'create'
		public Keyword getCreateKeyword_0() { return cCreateKeyword_0; }
		
		//unique?='unique'?
		public Assignment getUniqueAssignment_1() { return cUniqueAssignment_1; }
		
		//'unique'
		public Keyword getUniqueUniqueKeyword_1_0() { return cUniqueUniqueKeyword_1_0; }
		
		//'index'
		public Keyword getIndexKeyword_2() { return cIndexKeyword_2; }
		
		//name=ID
		public Assignment getNameAssignment_3() { return cNameAssignment_3; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_3_0() { return cNameIDTerminalRuleCall_3_0; }
		
		//'on'
		public Keyword getOnKeyword_4() { return cOnKeyword_4; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_5() { return cTableAssignment_5; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_5_0() { return cTableTableDefinitionCrossReference_5_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_5_0_1() { return cTableTableDefinitionIDTerminalRuleCall_5_0_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_6() { return cLeftParenthesisKeyword_6; }
		
		//columns+=IndexedColumn
		public Assignment getColumnsAssignment_7() { return cColumnsAssignment_7; }
		
		//IndexedColumn
		public RuleCall getColumnsIndexedColumnParserRuleCall_7_0() { return cColumnsIndexedColumnParserRuleCall_7_0; }
		
		//(',' columns+=IndexedColumn)*
		public Group getGroup_8() { return cGroup_8; }
		
		//','
		public Keyword getCommaKeyword_8_0() { return cCommaKeyword_8_0; }
		
		//columns+=IndexedColumn
		public Assignment getColumnsAssignment_8_1() { return cColumnsAssignment_8_1; }
		
		//IndexedColumn
		public RuleCall getColumnsIndexedColumnParserRuleCall_8_1_0() { return cColumnsIndexedColumnParserRuleCall_8_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_9() { return cRightParenthesisKeyword_9; }
	}
	public class DropIndexStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DropIndexStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDropKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cIndexKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cIfExistsAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final Keyword cIfExistsIfExistsKeyword_2_0 = (Keyword)cIfExistsAssignment_2.eContents().get(0);
		private final Assignment cIndexAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final CrossReference cIndexCreateIndexStatementCrossReference_3_0 = (CrossReference)cIndexAssignment_3.eContents().get(0);
		private final RuleCall cIndexCreateIndexStatementIDTerminalRuleCall_3_0_1 = (RuleCall)cIndexCreateIndexStatementCrossReference_3_0.eContents().get(1);
		
		//DropIndexStatement:
		//	'drop' 'index' ifExists?='if exists'? index=[CreateIndexStatement];
		@Override public ParserRule getRule() { return rule; }
		
		//'drop' 'index' ifExists?='if exists'? index=[CreateIndexStatement]
		public Group getGroup() { return cGroup; }
		
		//'drop'
		public Keyword getDropKeyword_0() { return cDropKeyword_0; }
		
		//'index'
		public Keyword getIndexKeyword_1() { return cIndexKeyword_1; }
		
		//ifExists?='if exists'?
		public Assignment getIfExistsAssignment_2() { return cIfExistsAssignment_2; }
		
		//'if exists'
		public Keyword getIfExistsIfExistsKeyword_2_0() { return cIfExistsIfExistsKeyword_2_0; }
		
		//index=[CreateIndexStatement]
		public Assignment getIndexAssignment_3() { return cIndexAssignment_3; }
		
		//[CreateIndexStatement]
		public CrossReference getIndexCreateIndexStatementCrossReference_3_0() { return cIndexCreateIndexStatementCrossReference_3_0; }
		
		//ID
		public RuleCall getIndexCreateIndexStatementIDTerminalRuleCall_3_0_1() { return cIndexCreateIndexStatementIDTerminalRuleCall_3_0_1; }
	}
	public class ColumnDefElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ColumnDef");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cColumnDefAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cTypeColumnTypeEnumRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
		private final Assignment cConstraintsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cConstraintsColumnConstraintParserRuleCall_3_0 = (RuleCall)cConstraintsAssignment_3.eContents().get(0);
		
		//ColumnDef ColumnSource:
		//	{ColumnDef} name=ID type=ColumnType constraints+=ColumnConstraint*
		@Override public ParserRule getRule() { return rule; }
		
		//{ColumnDef} name=ID type=ColumnType constraints+=ColumnConstraint*
		public Group getGroup() { return cGroup; }
		
		//{ColumnDef}
		public Action getColumnDefAction_0() { return cColumnDefAction_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//type=ColumnType
		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
		
		//ColumnType
		public RuleCall getTypeColumnTypeEnumRuleCall_2_0() { return cTypeColumnTypeEnumRuleCall_2_0; }
		
		//constraints+=ColumnConstraint*
		public Assignment getConstraintsAssignment_3() { return cConstraintsAssignment_3; }
		
		//ColumnConstraint
		public RuleCall getConstraintsColumnConstraintParserRuleCall_3_0() { return cConstraintsColumnConstraintParserRuleCall_3_0; }
	}
	public class ColumnConstraintElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ColumnConstraint");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cPrimaryKeyColumnConstraintAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Keyword cPrimaryKeyKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Alternatives cAlternatives_0_2 = (Alternatives)cGroup_0.eContents().get(2);
		private final Assignment cAscAssignment_0_2_0 = (Assignment)cAlternatives_0_2.eContents().get(0);
		private final Keyword cAscAscKeyword_0_2_0_0 = (Keyword)cAscAssignment_0_2_0.eContents().get(0);
		private final Assignment cDescAssignment_0_2_1 = (Assignment)cAlternatives_0_2.eContents().get(1);
		private final Keyword cDescDescKeyword_0_2_1_0 = (Keyword)cDescAssignment_0_2_1.eContents().get(0);
		private final Assignment cAutoincrementAssignment_0_3 = (Assignment)cGroup_0.eContents().get(3);
		private final Keyword cAutoincrementAutoincrementKeyword_0_3_0 = (Keyword)cAutoincrementAssignment_0_3.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cNotNullConstraintAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cNotNullKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cConflictClauseAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cConflictClauseConflictClauseParserRuleCall_1_2_0 = (RuleCall)cConflictClauseAssignment_1_2.eContents().get(0);
		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
		private final Action cUniqueConstraintAction_2_0 = (Action)cGroup_2.eContents().get(0);
		private final Keyword cUniqueKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
		private final Assignment cConflictClauseAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
		private final RuleCall cConflictClauseConflictClauseParserRuleCall_2_2_0 = (RuleCall)cConflictClauseAssignment_2_2.eContents().get(0);
		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
		private final Action cDefaultConstraintAction_3_0 = (Action)cGroup_3.eContents().get(0);
		private final Keyword cDefaultKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
		private final Assignment cDefaultValueAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
		private final RuleCall cDefaultValueDefaultValueParserRuleCall_3_2_0 = (RuleCall)cDefaultValueAssignment_3_2.eContents().get(0);
		private final Group cGroup_4 = (Group)cAlternatives.eContents().get(4);
		private final Action cCheckConstraintAction_4_0 = (Action)cGroup_4.eContents().get(0);
		private final Keyword cCheckKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_4_2 = (Keyword)cGroup_4.eContents().get(2);
		private final Assignment cExpressionAssignment_4_3 = (Assignment)cGroup_4.eContents().get(3);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_4_3_0 = (RuleCall)cExpressionAssignment_4_3.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4_4 = (Keyword)cGroup_4.eContents().get(4);
		
		//ColumnConstraint:
		//	{PrimaryKeyColumnConstraint} 'primary key' (asc?='asc' | desc?='desc')? autoincrement?='autoincrement'? |
		//	{NotNullConstraint} 'not null' conflictClause=ConflictClause? | {UniqueConstraint} 'unique'
		//	conflictClause=ConflictClause? | {DefaultConstraint} 'default' defaultValue=DefaultValue | {CheckConstraint} 'check'
		//	'(' expression=SqlExpression ')';
		@Override public ParserRule getRule() { return rule; }
		
		//{PrimaryKeyColumnConstraint} 'primary key' (asc?='asc' | desc?='desc')? autoincrement?='autoincrement'? |
		//{NotNullConstraint} 'not null' conflictClause=ConflictClause? | {UniqueConstraint} 'unique'
		//conflictClause=ConflictClause? | {DefaultConstraint} 'default' defaultValue=DefaultValue | {CheckConstraint} 'check'
		//'(' expression=SqlExpression ')'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{PrimaryKeyColumnConstraint} 'primary key' (asc?='asc' | desc?='desc')? autoincrement?='autoincrement'?
		public Group getGroup_0() { return cGroup_0; }
		
		//{PrimaryKeyColumnConstraint}
		public Action getPrimaryKeyColumnConstraintAction_0_0() { return cPrimaryKeyColumnConstraintAction_0_0; }
		
		//'primary key'
		public Keyword getPrimaryKeyKeyword_0_1() { return cPrimaryKeyKeyword_0_1; }
		
		//(asc?='asc' | desc?='desc')?
		public Alternatives getAlternatives_0_2() { return cAlternatives_0_2; }
		
		//asc?='asc'
		public Assignment getAscAssignment_0_2_0() { return cAscAssignment_0_2_0; }
		
		//'asc'
		public Keyword getAscAscKeyword_0_2_0_0() { return cAscAscKeyword_0_2_0_0; }
		
		//desc?='desc'
		public Assignment getDescAssignment_0_2_1() { return cDescAssignment_0_2_1; }
		
		//'desc'
		public Keyword getDescDescKeyword_0_2_1_0() { return cDescDescKeyword_0_2_1_0; }
		
		//autoincrement?='autoincrement'?
		public Assignment getAutoincrementAssignment_0_3() { return cAutoincrementAssignment_0_3; }
		
		//'autoincrement'
		public Keyword getAutoincrementAutoincrementKeyword_0_3_0() { return cAutoincrementAutoincrementKeyword_0_3_0; }
		
		//{NotNullConstraint} 'not null' conflictClause=ConflictClause?
		public Group getGroup_1() { return cGroup_1; }
		
		//{NotNullConstraint}
		public Action getNotNullConstraintAction_1_0() { return cNotNullConstraintAction_1_0; }
		
		//'not null'
		public Keyword getNotNullKeyword_1_1() { return cNotNullKeyword_1_1; }
		
		//conflictClause=ConflictClause?
		public Assignment getConflictClauseAssignment_1_2() { return cConflictClauseAssignment_1_2; }
		
		//ConflictClause
		public RuleCall getConflictClauseConflictClauseParserRuleCall_1_2_0() { return cConflictClauseConflictClauseParserRuleCall_1_2_0; }
		
		//{UniqueConstraint} 'unique' conflictClause=ConflictClause?
		public Group getGroup_2() { return cGroup_2; }
		
		//{UniqueConstraint}
		public Action getUniqueConstraintAction_2_0() { return cUniqueConstraintAction_2_0; }
		
		//'unique'
		public Keyword getUniqueKeyword_2_1() { return cUniqueKeyword_2_1; }
		
		//conflictClause=ConflictClause?
		public Assignment getConflictClauseAssignment_2_2() { return cConflictClauseAssignment_2_2; }
		
		//ConflictClause
		public RuleCall getConflictClauseConflictClauseParserRuleCall_2_2_0() { return cConflictClauseConflictClauseParserRuleCall_2_2_0; }
		
		//{DefaultConstraint} 'default' defaultValue=DefaultValue
		public Group getGroup_3() { return cGroup_3; }
		
		//{DefaultConstraint}
		public Action getDefaultConstraintAction_3_0() { return cDefaultConstraintAction_3_0; }
		
		//'default'
		public Keyword getDefaultKeyword_3_1() { return cDefaultKeyword_3_1; }
		
		//defaultValue=DefaultValue
		public Assignment getDefaultValueAssignment_3_2() { return cDefaultValueAssignment_3_2; }
		
		//DefaultValue
		public RuleCall getDefaultValueDefaultValueParserRuleCall_3_2_0() { return cDefaultValueDefaultValueParserRuleCall_3_2_0; }
		
		//{CheckConstraint} 'check' '(' expression=SqlExpression ')'
		public Group getGroup_4() { return cGroup_4; }
		
		//{CheckConstraint}
		public Action getCheckConstraintAction_4_0() { return cCheckConstraintAction_4_0; }
		
		//'check'
		public Keyword getCheckKeyword_4_1() { return cCheckKeyword_4_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_4_2() { return cLeftParenthesisKeyword_4_2; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_4_3() { return cExpressionAssignment_4_3; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_4_3_0() { return cExpressionSqlExpressionParserRuleCall_4_3_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4_4() { return cRightParenthesisKeyword_4_4; }
	}
	public class TableConstraintElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.TableConstraint");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cUniqueTableConstraintParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cPrimaryConstraintParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cCheckTableConstraintParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//TableConstraint:
		//	UniqueTableConstraint | PrimaryConstraint | CheckTableConstraint;
		@Override public ParserRule getRule() { return rule; }
		
		//UniqueTableConstraint | PrimaryConstraint | CheckTableConstraint
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//UniqueTableConstraint
		public RuleCall getUniqueTableConstraintParserRuleCall_0() { return cUniqueTableConstraintParserRuleCall_0; }
		
		//PrimaryConstraint
		public RuleCall getPrimaryConstraintParserRuleCall_1() { return cPrimaryConstraintParserRuleCall_1; }
		
		//CheckTableConstraint
		public RuleCall getCheckTableConstraintParserRuleCall_2() { return cCheckTableConstraintParserRuleCall_2; }
	}
	public class UniqueTableConstraintElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.UniqueTableConstraint");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Keyword cConstraintKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
		private final Assignment cNameAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0_1_0 = (RuleCall)cNameAssignment_0_1.eContents().get(0);
		private final Keyword cUniqueKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cColumnsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cColumnsIndexedColumnParserRuleCall_3_0 = (RuleCall)cColumnsAssignment_3.eContents().get(0);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cCommaKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cColumnsAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final RuleCall cColumnsIndexedColumnParserRuleCall_4_1_0 = (RuleCall)cColumnsAssignment_4_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cConflictClauseAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cConflictClauseConflictClauseParserRuleCall_6_0 = (RuleCall)cConflictClauseAssignment_6.eContents().get(0);
		
		//UniqueTableConstraint:
		//	('constraint' name=ID)? 'unique' '(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')'
		//	conflictClause=ConflictClause;
		@Override public ParserRule getRule() { return rule; }
		
		//('constraint' name=ID)? 'unique' '(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')'
		//conflictClause=ConflictClause
		public Group getGroup() { return cGroup; }
		
		//('constraint' name=ID)?
		public Group getGroup_0() { return cGroup_0; }
		
		//'constraint'
		public Keyword getConstraintKeyword_0_0() { return cConstraintKeyword_0_0; }
		
		//name=ID
		public Assignment getNameAssignment_0_1() { return cNameAssignment_0_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0_1_0() { return cNameIDTerminalRuleCall_0_1_0; }
		
		//'unique'
		public Keyword getUniqueKeyword_1() { return cUniqueKeyword_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
		
		//columns+=IndexedColumn
		public Assignment getColumnsAssignment_3() { return cColumnsAssignment_3; }
		
		//IndexedColumn
		public RuleCall getColumnsIndexedColumnParserRuleCall_3_0() { return cColumnsIndexedColumnParserRuleCall_3_0; }
		
		//(',' columns+=IndexedColumn)*
		public Group getGroup_4() { return cGroup_4; }
		
		//','
		public Keyword getCommaKeyword_4_0() { return cCommaKeyword_4_0; }
		
		//columns+=IndexedColumn
		public Assignment getColumnsAssignment_4_1() { return cColumnsAssignment_4_1; }
		
		//IndexedColumn
		public RuleCall getColumnsIndexedColumnParserRuleCall_4_1_0() { return cColumnsIndexedColumnParserRuleCall_4_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
		
		//conflictClause=ConflictClause
		public Assignment getConflictClauseAssignment_6() { return cConflictClauseAssignment_6; }
		
		//ConflictClause
		public RuleCall getConflictClauseConflictClauseParserRuleCall_6_0() { return cConflictClauseConflictClauseParserRuleCall_6_0; }
	}
	public class PrimaryConstraintElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.PrimaryConstraint");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Keyword cConstraintKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
		private final Assignment cNameAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0_1_0 = (RuleCall)cNameAssignment_0_1.eContents().get(0);
		private final Keyword cPrimaryKeyKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cColumnsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cColumnsIndexedColumnParserRuleCall_3_0 = (RuleCall)cColumnsAssignment_3.eContents().get(0);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cCommaKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cColumnsAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final RuleCall cColumnsIndexedColumnParserRuleCall_4_1_0 = (RuleCall)cColumnsAssignment_4_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cConflictClauseAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cConflictClauseConflictClauseParserRuleCall_6_0 = (RuleCall)cConflictClauseAssignment_6.eContents().get(0);
		
		//PrimaryConstraint:
		//	('constraint' name=ID)? 'primary key' '(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')'
		//	conflictClause=ConflictClause;
		@Override public ParserRule getRule() { return rule; }
		
		//('constraint' name=ID)? 'primary key' '(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')'
		//conflictClause=ConflictClause
		public Group getGroup() { return cGroup; }
		
		//('constraint' name=ID)?
		public Group getGroup_0() { return cGroup_0; }
		
		//'constraint'
		public Keyword getConstraintKeyword_0_0() { return cConstraintKeyword_0_0; }
		
		//name=ID
		public Assignment getNameAssignment_0_1() { return cNameAssignment_0_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0_1_0() { return cNameIDTerminalRuleCall_0_1_0; }
		
		//'primary key'
		public Keyword getPrimaryKeyKeyword_1() { return cPrimaryKeyKeyword_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
		
		//columns+=IndexedColumn
		public Assignment getColumnsAssignment_3() { return cColumnsAssignment_3; }
		
		//IndexedColumn
		public RuleCall getColumnsIndexedColumnParserRuleCall_3_0() { return cColumnsIndexedColumnParserRuleCall_3_0; }
		
		//(',' columns+=IndexedColumn)*
		public Group getGroup_4() { return cGroup_4; }
		
		//','
		public Keyword getCommaKeyword_4_0() { return cCommaKeyword_4_0; }
		
		//columns+=IndexedColumn
		public Assignment getColumnsAssignment_4_1() { return cColumnsAssignment_4_1; }
		
		//IndexedColumn
		public RuleCall getColumnsIndexedColumnParserRuleCall_4_1_0() { return cColumnsIndexedColumnParserRuleCall_4_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
		
		//conflictClause=ConflictClause
		public Assignment getConflictClauseAssignment_6() { return cConflictClauseAssignment_6; }
		
		//ConflictClause
		public RuleCall getConflictClauseConflictClauseParserRuleCall_6_0() { return cConflictClauseConflictClauseParserRuleCall_6_0; }
	}
	public class CheckTableConstraintElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.CheckTableConstraint");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Keyword cConstraintKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
		private final Assignment cNameAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0_1_0 = (RuleCall)cNameAssignment_0_1.eContents().get(0);
		private final Keyword cCheckKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cExpressionAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_3_0 = (RuleCall)cExpressionAssignment_3.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//CheckTableConstraint:
		//	('constraint' name=ID)? 'check' '(' expression=SqlExpression ')';
		@Override public ParserRule getRule() { return rule; }
		
		//('constraint' name=ID)? 'check' '(' expression=SqlExpression ')'
		public Group getGroup() { return cGroup; }
		
		//('constraint' name=ID)?
		public Group getGroup_0() { return cGroup_0; }
		
		//'constraint'
		public Keyword getConstraintKeyword_0_0() { return cConstraintKeyword_0_0; }
		
		//name=ID
		public Assignment getNameAssignment_0_1() { return cNameAssignment_0_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0_1_0() { return cNameIDTerminalRuleCall_0_1_0; }
		
		//'check'
		public Keyword getCheckKeyword_1() { return cCheckKeyword_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_3() { return cExpressionAssignment_3; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_3_0() { return cExpressionSqlExpressionParserRuleCall_3_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
	}
	public class IndexedColumnElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.IndexedColumn");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cColumnReferenceAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cColumnReferenceColumnDefCrossReference_0_0 = (CrossReference)cColumnReferenceAssignment_0.eContents().get(0);
		private final RuleCall cColumnReferenceColumnDefIDTerminalRuleCall_0_0_1 = (RuleCall)cColumnReferenceColumnDefCrossReference_0_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cCollateKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cCollationNameAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cCollationNameIDTerminalRuleCall_1_1_0 = (RuleCall)cCollationNameAssignment_1_1.eContents().get(0);
		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
		private final Assignment cAscAssignment_2_0 = (Assignment)cAlternatives_2.eContents().get(0);
		private final Keyword cAscAscKeyword_2_0_0 = (Keyword)cAscAssignment_2_0.eContents().get(0);
		private final Assignment cDescAssignment_2_1 = (Assignment)cAlternatives_2.eContents().get(1);
		private final Keyword cDescDescKeyword_2_1_0 = (Keyword)cDescAssignment_2_1.eContents().get(0);
		
		//IndexedColumn:
		//	columnReference=[ColumnDef] ('collate' collationName=ID)? (asc?='asc' | desc?='desc')?;
		@Override public ParserRule getRule() { return rule; }
		
		//columnReference=[ColumnDef] ('collate' collationName=ID)? (asc?='asc' | desc?='desc')?
		public Group getGroup() { return cGroup; }
		
		//columnReference=[ColumnDef]
		public Assignment getColumnReferenceAssignment_0() { return cColumnReferenceAssignment_0; }
		
		//[ColumnDef]
		public CrossReference getColumnReferenceColumnDefCrossReference_0_0() { return cColumnReferenceColumnDefCrossReference_0_0; }
		
		//ID
		public RuleCall getColumnReferenceColumnDefIDTerminalRuleCall_0_0_1() { return cColumnReferenceColumnDefIDTerminalRuleCall_0_0_1; }
		
		//('collate' collationName=ID)?
		public Group getGroup_1() { return cGroup_1; }
		
		//'collate'
		public Keyword getCollateKeyword_1_0() { return cCollateKeyword_1_0; }
		
		//collationName=ID
		public Assignment getCollationNameAssignment_1_1() { return cCollationNameAssignment_1_1; }
		
		//ID
		public RuleCall getCollationNameIDTerminalRuleCall_1_1_0() { return cCollationNameIDTerminalRuleCall_1_1_0; }
		
		//(asc?='asc' | desc?='desc')?
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//asc?='asc'
		public Assignment getAscAssignment_2_0() { return cAscAssignment_2_0; }
		
		//'asc'
		public Keyword getAscAscKeyword_2_0_0() { return cAscAscKeyword_2_0_0; }
		
		//desc?='desc'
		public Assignment getDescAssignment_2_1() { return cDescAssignment_2_1; }
		
		//'desc'
		public Keyword getDescDescKeyword_2_1_0() { return cDescDescKeyword_2_1_0; }
	}
	public class DefaultValueElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DefaultValue");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cLiteralDefaultValueAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Assignment cLiteralAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cLiteralLiteralValueParserRuleCall_0_1_0 = (RuleCall)cLiteralAssignment_0_1.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cExpressionDefaultValueAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cExpressionAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_1_2_0 = (RuleCall)cExpressionAssignment_1_2.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		
		//DefaultValue:
		//	{LiteralDefaultValue} literal=LiteralValue | {ExpressionDefaultValue} '(' expression=SqlExpression ')';
		@Override public ParserRule getRule() { return rule; }
		
		//{LiteralDefaultValue} literal=LiteralValue | {ExpressionDefaultValue} '(' expression=SqlExpression ')'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{LiteralDefaultValue} literal=LiteralValue
		public Group getGroup_0() { return cGroup_0; }
		
		//{LiteralDefaultValue}
		public Action getLiteralDefaultValueAction_0_0() { return cLiteralDefaultValueAction_0_0; }
		
		//literal=LiteralValue
		public Assignment getLiteralAssignment_0_1() { return cLiteralAssignment_0_1; }
		
		//LiteralValue
		public RuleCall getLiteralLiteralValueParserRuleCall_0_1_0() { return cLiteralLiteralValueParserRuleCall_0_1_0; }
		
		//{ExpressionDefaultValue} '(' expression=SqlExpression ')'
		public Group getGroup_1() { return cGroup_1; }
		
		//{ExpressionDefaultValue}
		public Action getExpressionDefaultValueAction_1_0() { return cExpressionDefaultValueAction_1_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1_1() { return cLeftParenthesisKeyword_1_1; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_1_2() { return cExpressionAssignment_1_2; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_1_2_0() { return cExpressionSqlExpressionParserRuleCall_1_2_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_1_3() { return cRightParenthesisKeyword_1_3; }
	}
	public class ConflictClauseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ConflictClause");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cOnKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cConflictKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cResolutionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cResolutionConflictResolutionEnumRuleCall_2_0 = (RuleCall)cResolutionAssignment_2.eContents().get(0);
		
		//ConflictClause:
		//	'on' 'conflict' resolution=ConflictResolution;
		@Override public ParserRule getRule() { return rule; }
		
		//'on' 'conflict' resolution=ConflictResolution
		public Group getGroup() { return cGroup; }
		
		//'on'
		public Keyword getOnKeyword_0() { return cOnKeyword_0; }
		
		//'conflict'
		public Keyword getConflictKeyword_1() { return cConflictKeyword_1; }
		
		//resolution=ConflictResolution
		public Assignment getResolutionAssignment_2() { return cResolutionAssignment_2; }
		
		//ConflictResolution
		public RuleCall getResolutionConflictResolutionEnumRuleCall_2_0() { return cResolutionConflictResolutionEnumRuleCall_2_0; }
	}
	public class DMLStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DMLStatement");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cSelectStatementParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cInsertStatementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cUpdateStatementParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cDeleteStatementParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		/// ***********************************************************************
		// *                                                                     *
		// * DML                                                                 *
		// *                                                                     *
		// *********************************************************************** / DMLStatement:
		//	SelectStatement
		//	| InsertStatement
		//	| UpdateStatement
		//	| DeleteStatement;
		@Override public ParserRule getRule() { return rule; }
		
		//SelectStatement | InsertStatement | UpdateStatement | DeleteStatement
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//SelectStatement
		public RuleCall getSelectStatementParserRuleCall_0() { return cSelectStatementParserRuleCall_0; }
		
		//InsertStatement
		public RuleCall getInsertStatementParserRuleCall_1() { return cInsertStatementParserRuleCall_1; }
		
		//UpdateStatement
		public RuleCall getUpdateStatementParserRuleCall_2() { return cUpdateStatementParserRuleCall_2; }
		
		//DeleteStatement
		public RuleCall getDeleteStatementParserRuleCall_3() { return cDeleteStatementParserRuleCall_3; }
	}
	public class DeleteStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.DeleteStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDeleteKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cFromKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cTableAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cTableTableDefinitionCrossReference_2_0 = (CrossReference)cTableAssignment_2.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_2_0_1 = (RuleCall)cTableTableDefinitionCrossReference_2_0.eContents().get(1);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cWhereKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cExpressionAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_3_1_0 = (RuleCall)cExpressionAssignment_3_1.eContents().get(0);
		
		//DeleteStatement:
		//	'delete' 'from' table=[TableDefinition] ('where' expression=SqlExpression)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'delete' 'from' table=[TableDefinition] ('where' expression=SqlExpression)?
		public Group getGroup() { return cGroup; }
		
		//'delete'
		public Keyword getDeleteKeyword_0() { return cDeleteKeyword_0; }
		
		//'from'
		public Keyword getFromKeyword_1() { return cFromKeyword_1; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_2() { return cTableAssignment_2; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_2_0() { return cTableTableDefinitionCrossReference_2_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_2_0_1() { return cTableTableDefinitionIDTerminalRuleCall_2_0_1; }
		
		//('where' expression=SqlExpression)?
		public Group getGroup_3() { return cGroup_3; }
		
		//'where'
		public Keyword getWhereKeyword_3_0() { return cWhereKeyword_3_0; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_3_1() { return cExpressionAssignment_3_1; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_3_1_0() { return cExpressionSqlExpressionParserRuleCall_3_1_0; }
	}
	public class InsertStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.InsertStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
		private final Keyword cInsertKeyword_0_0_0 = (Keyword)cGroup_0_0.eContents().get(0);
		private final Group cGroup_0_0_1 = (Group)cGroup_0_0.eContents().get(1);
		private final Keyword cOrKeyword_0_0_1_0 = (Keyword)cGroup_0_0_1.eContents().get(0);
		private final Assignment cConflictResolutionAssignment_0_0_1_1 = (Assignment)cGroup_0_0_1.eContents().get(1);
		private final RuleCall cConflictResolutionConflictResolutionEnumRuleCall_0_0_1_1_0 = (RuleCall)cConflictResolutionAssignment_0_0_1_1.eContents().get(0);
		private final Keyword cReplaceKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
		private final Keyword cIntoKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cTableAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cTableTableDefinitionCrossReference_2_0 = (CrossReference)cTableAssignment_2.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_2_0_1 = (RuleCall)cTableTableDefinitionCrossReference_2_0.eContents().get(1);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cColumnNamesAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final CrossReference cColumnNamesColumnDefCrossReference_3_1_0 = (CrossReference)cColumnNamesAssignment_3_1.eContents().get(0);
		private final RuleCall cColumnNamesColumnDefIDTerminalRuleCall_3_1_0_1 = (RuleCall)cColumnNamesColumnDefCrossReference_3_1_0.eContents().get(1);
		private final Group cGroup_3_2 = (Group)cGroup_3.eContents().get(2);
		private final Keyword cCommaKeyword_3_2_0 = (Keyword)cGroup_3_2.eContents().get(0);
		private final Assignment cColumnNamesAssignment_3_2_1 = (Assignment)cGroup_3_2.eContents().get(1);
		private final CrossReference cColumnNamesColumnDefCrossReference_3_2_1_0 = (CrossReference)cColumnNamesAssignment_3_2_1.eContents().get(0);
		private final RuleCall cColumnNamesColumnDefIDTerminalRuleCall_3_2_1_0_1 = (RuleCall)cColumnNamesColumnDefCrossReference_3_2_1_0.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_3_3 = (Keyword)cGroup_3.eContents().get(3);
		private final Alternatives cAlternatives_4 = (Alternatives)cGroup.eContents().get(4);
		private final Alternatives cAlternatives_4_0 = (Alternatives)cAlternatives_4.eContents().get(0);
		private final Group cGroup_4_0_0 = (Group)cAlternatives_4_0.eContents().get(0);
		private final Keyword cValuesKeyword_4_0_0_0 = (Keyword)cGroup_4_0_0.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_4_0_0_1 = (Keyword)cGroup_4_0_0.eContents().get(1);
		private final Assignment cExpressionsAssignment_4_0_0_2 = (Assignment)cGroup_4_0_0.eContents().get(2);
		private final RuleCall cExpressionsSqlExpressionParserRuleCall_4_0_0_2_0 = (RuleCall)cExpressionsAssignment_4_0_0_2.eContents().get(0);
		private final Group cGroup_4_0_0_3 = (Group)cGroup_4_0_0.eContents().get(3);
		private final Keyword cCommaKeyword_4_0_0_3_0 = (Keyword)cGroup_4_0_0_3.eContents().get(0);
		private final Assignment cExpressionsAssignment_4_0_0_3_1 = (Assignment)cGroup_4_0_0_3.eContents().get(1);
		private final RuleCall cExpressionsSqlExpressionParserRuleCall_4_0_0_3_1_0 = (RuleCall)cExpressionsAssignment_4_0_0_3_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4_0_0_4 = (Keyword)cGroup_4_0_0.eContents().get(4);
		private final Assignment cSelectStatementAssignment_4_0_1 = (Assignment)cAlternatives_4_0.eContents().get(1);
		private final RuleCall cSelectStatementSelectStatementParserRuleCall_4_0_1_0 = (RuleCall)cSelectStatementAssignment_4_0_1.eContents().get(0);
		private final Group cGroup_4_1 = (Group)cAlternatives_4.eContents().get(1);
		private final Keyword cDefaultKeyword_4_1_0 = (Keyword)cGroup_4_1.eContents().get(0);
		private final Keyword cValuesKeyword_4_1_1 = (Keyword)cGroup_4_1.eContents().get(1);
		
		//InsertStatement:
		//	('insert' ('or' conflictResolution=ConflictResolution)? | 'replace') 'into' table=[TableDefinition] ('('
		//	columnNames+=[ColumnDef] (',' columnNames+=[ColumnDef])* ')')? (('values'
		//	'(' expressions+=SqlExpression (',' expressions+=SqlExpression)* ')'
		//	| selectStatement=SelectStatement) | 'default' 'values');
		@Override public ParserRule getRule() { return rule; }
		
		//('insert' ('or' conflictResolution=ConflictResolution)? | 'replace') 'into' table=[TableDefinition] ('('
		//columnNames+=[ColumnDef] (',' columnNames+=[ColumnDef])* ')')? (('values' '(' expressions+=SqlExpression (','
		//expressions+=SqlExpression)* ')' | selectStatement=SelectStatement) | 'default' 'values')
		public Group getGroup() { return cGroup; }
		
		//('insert' ('or' conflictResolution=ConflictResolution)? | 'replace')
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//'insert' ('or' conflictResolution=ConflictResolution)?
		public Group getGroup_0_0() { return cGroup_0_0; }
		
		//'insert'
		public Keyword getInsertKeyword_0_0_0() { return cInsertKeyword_0_0_0; }
		
		//('or' conflictResolution=ConflictResolution)?
		public Group getGroup_0_0_1() { return cGroup_0_0_1; }
		
		//'or'
		public Keyword getOrKeyword_0_0_1_0() { return cOrKeyword_0_0_1_0; }
		
		//conflictResolution=ConflictResolution
		public Assignment getConflictResolutionAssignment_0_0_1_1() { return cConflictResolutionAssignment_0_0_1_1; }
		
		//ConflictResolution
		public RuleCall getConflictResolutionConflictResolutionEnumRuleCall_0_0_1_1_0() { return cConflictResolutionConflictResolutionEnumRuleCall_0_0_1_1_0; }
		
		//'replace'
		public Keyword getReplaceKeyword_0_1() { return cReplaceKeyword_0_1; }
		
		//'into'
		public Keyword getIntoKeyword_1() { return cIntoKeyword_1; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_2() { return cTableAssignment_2; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_2_0() { return cTableTableDefinitionCrossReference_2_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_2_0_1() { return cTableTableDefinitionIDTerminalRuleCall_2_0_1; }
		
		//('(' columnNames+=[ColumnDef] (',' columnNames+=[ColumnDef])* ')')?
		public Group getGroup_3() { return cGroup_3; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_3_0() { return cLeftParenthesisKeyword_3_0; }
		
		//columnNames+=[ColumnDef]
		public Assignment getColumnNamesAssignment_3_1() { return cColumnNamesAssignment_3_1; }
		
		//[ColumnDef]
		public CrossReference getColumnNamesColumnDefCrossReference_3_1_0() { return cColumnNamesColumnDefCrossReference_3_1_0; }
		
		//ID
		public RuleCall getColumnNamesColumnDefIDTerminalRuleCall_3_1_0_1() { return cColumnNamesColumnDefIDTerminalRuleCall_3_1_0_1; }
		
		//(',' columnNames+=[ColumnDef])*
		public Group getGroup_3_2() { return cGroup_3_2; }
		
		//','
		public Keyword getCommaKeyword_3_2_0() { return cCommaKeyword_3_2_0; }
		
		//columnNames+=[ColumnDef]
		public Assignment getColumnNamesAssignment_3_2_1() { return cColumnNamesAssignment_3_2_1; }
		
		//[ColumnDef]
		public CrossReference getColumnNamesColumnDefCrossReference_3_2_1_0() { return cColumnNamesColumnDefCrossReference_3_2_1_0; }
		
		//ID
		public RuleCall getColumnNamesColumnDefIDTerminalRuleCall_3_2_1_0_1() { return cColumnNamesColumnDefIDTerminalRuleCall_3_2_1_0_1; }
		
		//')'
		public Keyword getRightParenthesisKeyword_3_3() { return cRightParenthesisKeyword_3_3; }
		
		//(('values' '(' expressions+=SqlExpression (',' expressions+=SqlExpression)* ')' | selectStatement=SelectStatement) |
		//'default' 'values')
		public Alternatives getAlternatives_4() { return cAlternatives_4; }
		
		//('values' '(' expressions+=SqlExpression (',' expressions+=SqlExpression)* ')' | selectStatement=SelectStatement)
		public Alternatives getAlternatives_4_0() { return cAlternatives_4_0; }
		
		//'values' '(' expressions+=SqlExpression (',' expressions+=SqlExpression)* ')'
		public Group getGroup_4_0_0() { return cGroup_4_0_0; }
		
		//'values'
		public Keyword getValuesKeyword_4_0_0_0() { return cValuesKeyword_4_0_0_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_4_0_0_1() { return cLeftParenthesisKeyword_4_0_0_1; }
		
		//expressions+=SqlExpression
		public Assignment getExpressionsAssignment_4_0_0_2() { return cExpressionsAssignment_4_0_0_2; }
		
		//SqlExpression
		public RuleCall getExpressionsSqlExpressionParserRuleCall_4_0_0_2_0() { return cExpressionsSqlExpressionParserRuleCall_4_0_0_2_0; }
		
		//(',' expressions+=SqlExpression)*
		public Group getGroup_4_0_0_3() { return cGroup_4_0_0_3; }
		
		//','
		public Keyword getCommaKeyword_4_0_0_3_0() { return cCommaKeyword_4_0_0_3_0; }
		
		//expressions+=SqlExpression
		public Assignment getExpressionsAssignment_4_0_0_3_1() { return cExpressionsAssignment_4_0_0_3_1; }
		
		//SqlExpression
		public RuleCall getExpressionsSqlExpressionParserRuleCall_4_0_0_3_1_0() { return cExpressionsSqlExpressionParserRuleCall_4_0_0_3_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4_0_0_4() { return cRightParenthesisKeyword_4_0_0_4; }
		
		//selectStatement=SelectStatement
		public Assignment getSelectStatementAssignment_4_0_1() { return cSelectStatementAssignment_4_0_1; }
		
		//SelectStatement
		public RuleCall getSelectStatementSelectStatementParserRuleCall_4_0_1_0() { return cSelectStatementSelectStatementParserRuleCall_4_0_1_0; }
		
		//'default' 'values'
		public Group getGroup_4_1() { return cGroup_4_1; }
		
		//'default'
		public Keyword getDefaultKeyword_4_1_0() { return cDefaultKeyword_4_1_0; }
		
		//'values'
		public Keyword getValuesKeyword_4_1_1() { return cValuesKeyword_4_1_1; }
	}
	public class UpdateStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.UpdateStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cUpdateKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cOrKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cConflictResolutionAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cConflictResolutionConflictResolutionEnumRuleCall_1_1_0 = (RuleCall)cConflictResolutionAssignment_1_1.eContents().get(0);
		private final Assignment cTableAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cTableTableDefinitionCrossReference_2_0 = (CrossReference)cTableAssignment_2.eContents().get(0);
		private final RuleCall cTableTableDefinitionIDTerminalRuleCall_2_0_1 = (RuleCall)cTableTableDefinitionCrossReference_2_0.eContents().get(1);
		private final Keyword cSetKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cUpdateColumnExpressionsAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_4_0 = (RuleCall)cUpdateColumnExpressionsAssignment_4.eContents().get(0);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cCommaKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cUpdateColumnExpressionsAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_5_1_0 = (RuleCall)cUpdateColumnExpressionsAssignment_5_1.eContents().get(0);
		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
		private final Keyword cWhereKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
		private final Assignment cWhereExpressionAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
		private final RuleCall cWhereExpressionSqlExpressionParserRuleCall_6_1_0 = (RuleCall)cWhereExpressionAssignment_6_1.eContents().get(0);
		
		//UpdateStatement:
		//	'update' ('or' conflictResolution=ConflictResolution)? table=[TableDefinition]
		//	'set' updateColumnExpressions+=UpdateColumnExpression (',' updateColumnExpressions+=UpdateColumnExpression)* ('where'
		//	whereExpression=SqlExpression)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'update' ('or' conflictResolution=ConflictResolution)? table=[TableDefinition] 'set'
		//updateColumnExpressions+=UpdateColumnExpression (',' updateColumnExpressions+=UpdateColumnExpression)* ('where'
		//whereExpression=SqlExpression)?
		public Group getGroup() { return cGroup; }
		
		//'update'
		public Keyword getUpdateKeyword_0() { return cUpdateKeyword_0; }
		
		//('or' conflictResolution=ConflictResolution)?
		public Group getGroup_1() { return cGroup_1; }
		
		//'or'
		public Keyword getOrKeyword_1_0() { return cOrKeyword_1_0; }
		
		//conflictResolution=ConflictResolution
		public Assignment getConflictResolutionAssignment_1_1() { return cConflictResolutionAssignment_1_1; }
		
		//ConflictResolution
		public RuleCall getConflictResolutionConflictResolutionEnumRuleCall_1_1_0() { return cConflictResolutionConflictResolutionEnumRuleCall_1_1_0; }
		
		//table=[TableDefinition]
		public Assignment getTableAssignment_2() { return cTableAssignment_2; }
		
		//[TableDefinition]
		public CrossReference getTableTableDefinitionCrossReference_2_0() { return cTableTableDefinitionCrossReference_2_0; }
		
		//ID
		public RuleCall getTableTableDefinitionIDTerminalRuleCall_2_0_1() { return cTableTableDefinitionIDTerminalRuleCall_2_0_1; }
		
		//'set'
		public Keyword getSetKeyword_3() { return cSetKeyword_3; }
		
		//updateColumnExpressions+=UpdateColumnExpression
		public Assignment getUpdateColumnExpressionsAssignment_4() { return cUpdateColumnExpressionsAssignment_4; }
		
		//UpdateColumnExpression
		public RuleCall getUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_4_0() { return cUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_4_0; }
		
		//(',' updateColumnExpressions+=UpdateColumnExpression)*
		public Group getGroup_5() { return cGroup_5; }
		
		//','
		public Keyword getCommaKeyword_5_0() { return cCommaKeyword_5_0; }
		
		//updateColumnExpressions+=UpdateColumnExpression
		public Assignment getUpdateColumnExpressionsAssignment_5_1() { return cUpdateColumnExpressionsAssignment_5_1; }
		
		//UpdateColumnExpression
		public RuleCall getUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_5_1_0() { return cUpdateColumnExpressionsUpdateColumnExpressionParserRuleCall_5_1_0; }
		
		//('where' whereExpression=SqlExpression)?
		public Group getGroup_6() { return cGroup_6; }
		
		//'where'
		public Keyword getWhereKeyword_6_0() { return cWhereKeyword_6_0; }
		
		//whereExpression=SqlExpression
		public Assignment getWhereExpressionAssignment_6_1() { return cWhereExpressionAssignment_6_1; }
		
		//SqlExpression
		public RuleCall getWhereExpressionSqlExpressionParserRuleCall_6_1_0() { return cWhereExpressionSqlExpressionParserRuleCall_6_1_0; }
	}
	public class UpdateColumnExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.UpdateColumnExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cColumnNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cColumnNameColumnDefCrossReference_0_0 = (CrossReference)cColumnNameAssignment_0.eContents().get(0);
		private final RuleCall cColumnNameColumnDefIDTerminalRuleCall_0_0_1 = (RuleCall)cColumnNameColumnDefCrossReference_0_0.eContents().get(1);
		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cExpressionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cExpressionSqlExpressionParserRuleCall_2_0 = (RuleCall)cExpressionAssignment_2.eContents().get(0);
		
		//UpdateColumnExpression:
		//	columnName=[ColumnDef] '=' expression=SqlExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//columnName=[ColumnDef] '=' expression=SqlExpression
		public Group getGroup() { return cGroup; }
		
		//columnName=[ColumnDef]
		public Assignment getColumnNameAssignment_0() { return cColumnNameAssignment_0; }
		
		//[ColumnDef]
		public CrossReference getColumnNameColumnDefCrossReference_0_0() { return cColumnNameColumnDefCrossReference_0_0; }
		
		//ID
		public RuleCall getColumnNameColumnDefIDTerminalRuleCall_0_0_1() { return cColumnNameColumnDefIDTerminalRuleCall_0_0_1; }
		
		//'='
		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }
		
		//expression=SqlExpression
		public Assignment getExpressionAssignment_2() { return cExpressionAssignment_2; }
		
		//SqlExpression
		public RuleCall getExpressionSqlExpressionParserRuleCall_2_0() { return cExpressionSqlExpressionParserRuleCall_2_0; }
	}
	public class SignedNumberElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SignedNumber");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final RuleCall cNUMBERTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
		
		/// ***********************************************************************
		// *                                                                     *
		// * DATATYPE & TERMINAL RULES                                           *
		// *                                                                     *
		// *********************************************************************** / SignedNumber ecore::EBigDecimal:
		//	'-'? NUMBER
		@Override public ParserRule getRule() { return rule; }
		
		//'-'? NUMBER
		public Group getGroup() { return cGroup; }
		
		//'-'?
		public Keyword getHyphenMinusKeyword_0() { return cHyphenMinusKeyword_0; }
		
		//NUMBER
		public RuleCall getNUMBERTerminalRuleCall_1() { return cNUMBERTerminalRuleCall_1; }
	}
	public class QualifiedNameElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.QualifiedName");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cIDTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cFullStopKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final RuleCall cIDTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
		
		//QualifiedName:
		//	ID ("." ID)*;
		@Override public ParserRule getRule() { return rule; }
		
		//ID ("." ID)*
		public Group getGroup() { return cGroup; }
		
		//ID
		public RuleCall getIDTerminalRuleCall_0() { return cIDTerminalRuleCall_0; }
		
		//("." ID)*
		public Group getGroup_1() { return cGroup_1; }
		
		//"."
		public Keyword getFullStopKeyword_1_0() { return cFullStopKeyword_1_0; }
		
		//ID
		public RuleCall getIDTerminalRuleCall_1_1() { return cIDTerminalRuleCall_1_1; }
	}
	
	public class CompoundOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.CompoundOperator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cUnionallEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cUnionallUnionAllKeyword_0_0 = (Keyword)cUnionallEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cUnionEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cUnionUnionKeyword_1_0 = (Keyword)cUnionEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cIntersectEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cIntersectIntersectKeyword_2_0 = (Keyword)cIntersectEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cExceptEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cExceptExceptKeyword_3_0 = (Keyword)cExceptEnumLiteralDeclaration_3.eContents().get(0);
		
		//enum CompoundOperator:
		//	unionall='union all' | union | intersect | except;
		public EnumRule getRule() { return rule; }
		
		//unionall='union all' | union | intersect | except
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//unionall='union all'
		public EnumLiteralDeclaration getUnionallEnumLiteralDeclaration_0() { return cUnionallEnumLiteralDeclaration_0; }
		
		//'union all'
		public Keyword getUnionallUnionAllKeyword_0_0() { return cUnionallUnionAllKeyword_0_0; }
		
		//union
		public EnumLiteralDeclaration getUnionEnumLiteralDeclaration_1() { return cUnionEnumLiteralDeclaration_1; }
		
		//'union'
		public Keyword getUnionUnionKeyword_1_0() { return cUnionUnionKeyword_1_0; }
		
		//intersect
		public EnumLiteralDeclaration getIntersectEnumLiteralDeclaration_2() { return cIntersectEnumLiteralDeclaration_2; }
		
		//'intersect'
		public Keyword getIntersectIntersectKeyword_2_0() { return cIntersectIntersectKeyword_2_0; }
		
		//except
		public EnumLiteralDeclaration getExceptEnumLiteralDeclaration_3() { return cExceptEnumLiteralDeclaration_3; }
		
		//'except'
		public Keyword getExceptExceptKeyword_3_0() { return cExceptExceptKeyword_3_0; }
	}
	public class SqliteDataTypeElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.SqliteDataType");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cTextEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cTextTextKeyword_0_0 = (Keyword)cTextEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cIntegerEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cIntegerIntegerKeyword_1_0 = (Keyword)cIntegerEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cRealEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cRealRealKeyword_2_0 = (Keyword)cRealEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cBlobEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cBlobBlobKeyword_3_0 = (Keyword)cBlobEnumLiteralDeclaration_3.eContents().get(0);
		private final EnumLiteralDeclaration cNoneEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
		private final Keyword cNoneNoneKeyword_4_0 = (Keyword)cNoneEnumLiteralDeclaration_4.eContents().get(0);
		private final EnumLiteralDeclaration cNumericEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
		private final Keyword cNumericNumericKeyword_5_0 = (Keyword)cNumericEnumLiteralDeclaration_5.eContents().get(0);
		
		//enum SqliteDataType:
		//	text | integer | real | blob | none | numeric;
		public EnumRule getRule() { return rule; }
		
		//text | integer | real | blob | none | numeric
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//text
		public EnumLiteralDeclaration getTextEnumLiteralDeclaration_0() { return cTextEnumLiteralDeclaration_0; }
		
		//"text"
		public Keyword getTextTextKeyword_0_0() { return cTextTextKeyword_0_0; }
		
		//integer
		public EnumLiteralDeclaration getIntegerEnumLiteralDeclaration_1() { return cIntegerEnumLiteralDeclaration_1; }
		
		//"integer"
		public Keyword getIntegerIntegerKeyword_1_0() { return cIntegerIntegerKeyword_1_0; }
		
		//real
		public EnumLiteralDeclaration getRealEnumLiteralDeclaration_2() { return cRealEnumLiteralDeclaration_2; }
		
		//"real"
		public Keyword getRealRealKeyword_2_0() { return cRealRealKeyword_2_0; }
		
		//blob
		public EnumLiteralDeclaration getBlobEnumLiteralDeclaration_3() { return cBlobEnumLiteralDeclaration_3; }
		
		//"blob"
		public Keyword getBlobBlobKeyword_3_0() { return cBlobBlobKeyword_3_0; }
		
		//none
		public EnumLiteralDeclaration getNoneEnumLiteralDeclaration_4() { return cNoneEnumLiteralDeclaration_4; }
		
		//"none"
		public Keyword getNoneNoneKeyword_4_0() { return cNoneNoneKeyword_4_0; }
		
		//numeric
		public EnumLiteralDeclaration getNumericEnumLiteralDeclaration_5() { return cNumericEnumLiteralDeclaration_5; }
		
		//"numeric"
		public Keyword getNumericNumericKeyword_5_0() { return cNumericNumericKeyword_5_0; }
	}
	public class ColumnTypeElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ColumnType");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cTextEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cTextTextKeyword_0_0 = (Keyword)cTextEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cIntegerEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cIntegerIntegerKeyword_1_0 = (Keyword)cIntegerEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cRealEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cRealRealKeyword_2_0 = (Keyword)cRealEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cBlobEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cBlobBlobKeyword_3_0 = (Keyword)cBlobEnumLiteralDeclaration_3.eContents().get(0);
		private final EnumLiteralDeclaration cBooleanEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
		private final Keyword cBooleanBooleanKeyword_4_0 = (Keyword)cBooleanEnumLiteralDeclaration_4.eContents().get(0);
		
		//enum ColumnType:
		//	text | integer | real | blob | boolean;
		public EnumRule getRule() { return rule; }
		
		//text | integer | real | blob | boolean
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//text
		public EnumLiteralDeclaration getTextEnumLiteralDeclaration_0() { return cTextEnumLiteralDeclaration_0; }
		
		//"text"
		public Keyword getTextTextKeyword_0_0() { return cTextTextKeyword_0_0; }
		
		//integer
		public EnumLiteralDeclaration getIntegerEnumLiteralDeclaration_1() { return cIntegerEnumLiteralDeclaration_1; }
		
		//"integer"
		public Keyword getIntegerIntegerKeyword_1_0() { return cIntegerIntegerKeyword_1_0; }
		
		//real
		public EnumLiteralDeclaration getRealEnumLiteralDeclaration_2() { return cRealEnumLiteralDeclaration_2; }
		
		//"real"
		public Keyword getRealRealKeyword_2_0() { return cRealRealKeyword_2_0; }
		
		//blob
		public EnumLiteralDeclaration getBlobEnumLiteralDeclaration_3() { return cBlobEnumLiteralDeclaration_3; }
		
		//"blob"
		public Keyword getBlobBlobKeyword_3_0() { return cBlobBlobKeyword_3_0; }
		
		//boolean
		public EnumLiteralDeclaration getBooleanEnumLiteralDeclaration_4() { return cBooleanEnumLiteralDeclaration_4; }
		
		//"boolean"
		public Keyword getBooleanBooleanKeyword_4_0() { return cBooleanBooleanKeyword_4_0; }
	}
	public class ConflictResolutionElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.ConflictResolution");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cRollbackEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cRollbackRollbackKeyword_0_0 = (Keyword)cRollbackEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cAbortEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cAbortAbortKeyword_1_0 = (Keyword)cAbortEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cFailEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cFailFailKeyword_2_0 = (Keyword)cFailEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cIgnoreEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cIgnoreIgnoreKeyword_3_0 = (Keyword)cIgnoreEnumLiteralDeclaration_3.eContents().get(0);
		private final EnumLiteralDeclaration cReplaceEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
		private final Keyword cReplaceReplaceKeyword_4_0 = (Keyword)cReplaceEnumLiteralDeclaration_4.eContents().get(0);
		
		//enum ConflictResolution:
		//	rollback | abort | fail | ignore | replace;
		public EnumRule getRule() { return rule; }
		
		//rollback | abort | fail | ignore | replace
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//rollback
		public EnumLiteralDeclaration getRollbackEnumLiteralDeclaration_0() { return cRollbackEnumLiteralDeclaration_0; }
		
		//"rollback"
		public Keyword getRollbackRollbackKeyword_0_0() { return cRollbackRollbackKeyword_0_0; }
		
		//abort
		public EnumLiteralDeclaration getAbortEnumLiteralDeclaration_1() { return cAbortEnumLiteralDeclaration_1; }
		
		//"abort"
		public Keyword getAbortAbortKeyword_1_0() { return cAbortAbortKeyword_1_0; }
		
		//fail
		public EnumLiteralDeclaration getFailEnumLiteralDeclaration_2() { return cFailEnumLiteralDeclaration_2; }
		
		//"fail"
		public Keyword getFailFailKeyword_2_0() { return cFailFailKeyword_2_0; }
		
		//ignore
		public EnumLiteralDeclaration getIgnoreEnumLiteralDeclaration_3() { return cIgnoreEnumLiteralDeclaration_3; }
		
		//"ignore"
		public Keyword getIgnoreIgnoreKeyword_3_0() { return cIgnoreIgnoreKeyword_3_0; }
		
		//replace
		public EnumLiteralDeclaration getReplaceEnumLiteralDeclaration_4() { return cReplaceEnumLiteralDeclaration_4; }
		
		//"replace"
		public Keyword getReplaceReplaceKeyword_4_0() { return cReplaceReplaceKeyword_4_0; }
	}
	
	private final MickeyFileElements pMickeyFile;
	private final MickeyBlockElements pMickeyBlock;
	private final MickeyFunctionElements pMickeyFunction;
	private final ActionStatementElements pActionStatement;
	private final ContentNotificationUriElements pContentNotificationUri;
	private final FunctionArgElements pFunctionArg;
	private final NotifyContentUriElements pNotifyContentUri;
	private final NotifyContentUriSegmentElements pNotifyContentUriSegment;
	private final ContentUriElements pContentUri;
	private final ContentUriQueryParamElements pContentUriQueryParam;
	private final ContentUriSegmentElements pContentUriSegment;
	private final MigrationBlockElements pMigrationBlock;
	private final SqlExpressionElements pSqlExpression;
	private final ExprConcatElements pExprConcat;
	private final ExprMultElements pExprMult;
	private final ExprAddElements pExprAdd;
	private final ExprBitElements pExprBit;
	private final ExprRelateElements pExprRelate;
	private final ExprEqualElements pExprEqual;
	private final ExprAndElements pExprAnd;
	private final ExprOrElements pExprOr;
	private final NullCheckExpressionElements pNullCheckExpression;
	private final NullExpressionElements pNullExpression;
	private final PrimaryExpressionElements pPrimaryExpression;
	private final CaseElements pCase;
	private final SelectStatementElements pSelectStatement;
	private final OrderingTermListElements pOrderingTermList;
	private final SelectCoreElements pSelectCore;
	private final SelectExpressionElements pSelectExpression;
	private final SelectListElements pSelectList;
	private final WhereExpressionsElements pWhereExpressions;
	private final GroupByExpressionsElements pGroupByExpressions;
	private final HavingExpressionsElements pHavingExpressions;
	private final CompoundOperatorElements eCompoundOperator;
	private final OrderingTermElements pOrderingTerm;
	private final JoinSourceElements pJoinSource;
	private final SingleSourceElements pSingleSource;
	private final SingleSourceTableElements pSingleSourceTable;
	private final SingleSourceSelectStatementElements pSingleSourceSelectStatement;
	private final SingleSourceJoinElements pSingleSourceJoin;
	private final JoinStatementElements pJoinStatement;
	private final ResultColumnElements pResultColumn;
	private final LiteralValueElements pLiteralValue;
	private final SqliteDataTypeElements eSqliteDataType;
	private final DDLStatementElements pDDLStatement;
	private final CreateTableStatementElements pCreateTableStatement;
	private final CreateViewStatementElements pCreateViewStatement;
	private final CreateTriggerStatementElements pCreateTriggerStatement;
	private final AlterTableRenameStatementElements pAlterTableRenameStatement;
	private final AlterTableAddColumnStatementElements pAlterTableAddColumnStatement;
	private final DropTableStatementElements pDropTableStatement;
	private final DropTriggerStatementElements pDropTriggerStatement;
	private final DropViewStatementElements pDropViewStatement;
	private final CreateIndexStatementElements pCreateIndexStatement;
	private final DropIndexStatementElements pDropIndexStatement;
	private final ColumnDefElements pColumnDef;
	private final ColumnConstraintElements pColumnConstraint;
	private final TableConstraintElements pTableConstraint;
	private final UniqueTableConstraintElements pUniqueTableConstraint;
	private final PrimaryConstraintElements pPrimaryConstraint;
	private final CheckTableConstraintElements pCheckTableConstraint;
	private final IndexedColumnElements pIndexedColumn;
	private final DefaultValueElements pDefaultValue;
	private final ConflictClauseElements pConflictClause;
	private final ColumnTypeElements eColumnType;
	private final ConflictResolutionElements eConflictResolution;
	private final DMLStatementElements pDMLStatement;
	private final DeleteStatementElements pDeleteStatement;
	private final InsertStatementElements pInsertStatement;
	private final UpdateStatementElements pUpdateStatement;
	private final UpdateColumnExpressionElements pUpdateColumnExpression;
	private final SignedNumberElements pSignedNumber;
	private final QualifiedNameElements pQualifiedName;
	private final TerminalRule tNUMBER;
	private final TerminalRule tINT;
	private final TerminalRule tSTRING;
	
	private final Grammar grammar;
	
	private final TerminalsGrammarAccess gaTerminals;

	@Inject
	public MickeyLangGrammarAccess(GrammarProvider grammarProvider,
			TerminalsGrammarAccess gaTerminals) {
		this.grammar = internalFindGrammar(grammarProvider);
		this.gaTerminals = gaTerminals;
		this.pMickeyFile = new MickeyFileElements();
		this.pMickeyBlock = new MickeyBlockElements();
		this.pMickeyFunction = new MickeyFunctionElements();
		this.pActionStatement = new ActionStatementElements();
		this.pContentNotificationUri = new ContentNotificationUriElements();
		this.pFunctionArg = new FunctionArgElements();
		this.pNotifyContentUri = new NotifyContentUriElements();
		this.pNotifyContentUriSegment = new NotifyContentUriSegmentElements();
		this.pContentUri = new ContentUriElements();
		this.pContentUriQueryParam = new ContentUriQueryParamElements();
		this.pContentUriSegment = new ContentUriSegmentElements();
		this.pMigrationBlock = new MigrationBlockElements();
		this.pSqlExpression = new SqlExpressionElements();
		this.pExprConcat = new ExprConcatElements();
		this.pExprMult = new ExprMultElements();
		this.pExprAdd = new ExprAddElements();
		this.pExprBit = new ExprBitElements();
		this.pExprRelate = new ExprRelateElements();
		this.pExprEqual = new ExprEqualElements();
		this.pExprAnd = new ExprAndElements();
		this.pExprOr = new ExprOrElements();
		this.pNullCheckExpression = new NullCheckExpressionElements();
		this.pNullExpression = new NullExpressionElements();
		this.pPrimaryExpression = new PrimaryExpressionElements();
		this.pCase = new CaseElements();
		this.pSelectStatement = new SelectStatementElements();
		this.pOrderingTermList = new OrderingTermListElements();
		this.pSelectCore = new SelectCoreElements();
		this.pSelectExpression = new SelectExpressionElements();
		this.pSelectList = new SelectListElements();
		this.pWhereExpressions = new WhereExpressionsElements();
		this.pGroupByExpressions = new GroupByExpressionsElements();
		this.pHavingExpressions = new HavingExpressionsElements();
		this.eCompoundOperator = new CompoundOperatorElements();
		this.pOrderingTerm = new OrderingTermElements();
		this.pJoinSource = new JoinSourceElements();
		this.pSingleSource = new SingleSourceElements();
		this.pSingleSourceTable = new SingleSourceTableElements();
		this.pSingleSourceSelectStatement = new SingleSourceSelectStatementElements();
		this.pSingleSourceJoin = new SingleSourceJoinElements();
		this.pJoinStatement = new JoinStatementElements();
		this.pResultColumn = new ResultColumnElements();
		this.pLiteralValue = new LiteralValueElements();
		this.eSqliteDataType = new SqliteDataTypeElements();
		this.pDDLStatement = new DDLStatementElements();
		this.pCreateTableStatement = new CreateTableStatementElements();
		this.pCreateViewStatement = new CreateViewStatementElements();
		this.pCreateTriggerStatement = new CreateTriggerStatementElements();
		this.pAlterTableRenameStatement = new AlterTableRenameStatementElements();
		this.pAlterTableAddColumnStatement = new AlterTableAddColumnStatementElements();
		this.pDropTableStatement = new DropTableStatementElements();
		this.pDropTriggerStatement = new DropTriggerStatementElements();
		this.pDropViewStatement = new DropViewStatementElements();
		this.pCreateIndexStatement = new CreateIndexStatementElements();
		this.pDropIndexStatement = new DropIndexStatementElements();
		this.pColumnDef = new ColumnDefElements();
		this.pColumnConstraint = new ColumnConstraintElements();
		this.pTableConstraint = new TableConstraintElements();
		this.pUniqueTableConstraint = new UniqueTableConstraintElements();
		this.pPrimaryConstraint = new PrimaryConstraintElements();
		this.pCheckTableConstraint = new CheckTableConstraintElements();
		this.pIndexedColumn = new IndexedColumnElements();
		this.pDefaultValue = new DefaultValueElements();
		this.pConflictClause = new ConflictClauseElements();
		this.eColumnType = new ColumnTypeElements();
		this.eConflictResolution = new ConflictResolutionElements();
		this.pDMLStatement = new DMLStatementElements();
		this.pDeleteStatement = new DeleteStatementElements();
		this.pInsertStatement = new InsertStatementElements();
		this.pUpdateStatement = new UpdateStatementElements();
		this.pUpdateColumnExpression = new UpdateColumnExpressionElements();
		this.pSignedNumber = new SignedNumberElements();
		this.pQualifiedName = new QualifiedNameElements();
		this.tNUMBER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.NUMBER");
		this.tINT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.INT");
		this.tSTRING = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "com.justeat.mickeydb.MickeyLang.STRING");
	}
	
	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
		Grammar grammar = grammarProvider.getGrammar(this);
		while (grammar != null) {
			if ("com.justeat.mickeydb.MickeyLang".equals(grammar.getName())) {
				return grammar;
			}
			List<Grammar> grammars = grammar.getUsedGrammars();
			if (!grammars.isEmpty()) {
				grammar = grammars.iterator().next();
			} else {
				return null;
			}
		}
		return grammar;
	}
	
	@Override
	public Grammar getGrammar() {
		return grammar;
	}
	
	
	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
		return gaTerminals;
	}

	
	/// ***********************************************************************
	// *                                                                     *
	// * CORE                                                                *
	// *                                                                     *
	// *********************************************************************** / MickeyFile:
	//	'database' databaseName=QualifiedName
	//	blocks+=MickeyBlock*;
	public MickeyFileElements getMickeyFileAccess() {
		return pMickeyFile;
	}
	
	public ParserRule getMickeyFileRule() {
		return getMickeyFileAccess().getRule();
	}
	
	//MickeyBlock:
	//	MickeyFunction | ActionStatement | DDLStatement | MigrationBlock;
	public MickeyBlockElements getMickeyBlockAccess() {
		return pMickeyBlock;
	}
	
	public ParserRule getMickeyBlockRule() {
		return getMickeyBlockAccess().getRule();
	}
	
	//MickeyFunction:
	//	'function' name=ID '(' (args+=FunctionArg (',' args+=FunctionArg)*)? ')' (':' type=[TableDefinition|QualifiedName])?
	//	'{' (statements+=DMLStatement ';')*
	//	'}';
	public MickeyFunctionElements getMickeyFunctionAccess() {
		return pMickeyFunction;
	}
	
	public ParserRule getMickeyFunctionRule() {
		return getMickeyFunctionAccess().getRule();
	}
	
	//ActionStatement:
	//	'action' name=ID uri=ContentUri 'on' type=[TableDefinition|QualifiedName] unique?='unique'? ('{'
	//	params+=ContentUriQueryParam* notifications+=ContentNotificationUri* '}')?;
	public ActionStatementElements getActionStatementAccess() {
		return pActionStatement;
	}
	
	public ParserRule getActionStatementRule() {
		return getActionStatementAccess().getRule();
	}
	
	//ContentNotificationUri:
	//	'notify' uri=NotifyContentUri;
	public ContentNotificationUriElements getContentNotificationUriAccess() {
		return pContentNotificationUri;
	}
	
	public ParserRule getContentNotificationUriRule() {
		return getContentNotificationUriAccess().getRule();
	}
	
	//FunctionArg:
	//	type=ColumnType name=ID;
	public FunctionArgElements getFunctionArgAccess() {
		return pFunctionArg;
	}
	
	public ParserRule getFunctionArgRule() {
		return getFunctionArgAccess().getRule();
	}
	
	//NotifyContentUri:
	//	{NotifyContentUri} segments+=NotifyContentUriSegment? ('/' segments+=NotifyContentUriSegment)*;
	public NotifyContentUriElements getNotifyContentUriAccess() {
		return pNotifyContentUri;
	}
	
	public ParserRule getNotifyContentUriRule() {
		return getNotifyContentUriAccess().getRule();
	}
	
	//NotifyContentUriSegment:
	//	name=ID | {NotifyContentUriParamSegment} '{' name=ID '}';
	public NotifyContentUriSegmentElements getNotifyContentUriSegmentAccess() {
		return pNotifyContentUriSegment;
	}
	
	public ParserRule getNotifyContentUriSegmentRule() {
		return getNotifyContentUriSegmentAccess().getRule();
	}
	
	//ContentUri:
	//	{ContentUri} segments+=ContentUriSegment? ('/' segments+=ContentUriSegment)*;
	public ContentUriElements getContentUriAccess() {
		return pContentUri;
	}
	
	public ParserRule getContentUriRule() {
		return getContentUriAccess().getRule();
	}
	
	//ContentUriQueryParam:
	//	'param' like?='like'? column=[ColumnSource];
	public ContentUriQueryParamElements getContentUriQueryParamAccess() {
		return pContentUriQueryParam;
	}
	
	public ParserRule getContentUriQueryParamRule() {
		return getContentUriQueryParamAccess().getRule();
	}
	
	//ContentUriSegment:
	//	name=ID | {ContentUriParamSegment} '{' param=[ColumnSource] '}';
	public ContentUriSegmentElements getContentUriSegmentAccess() {
		return pContentUriSegment;
	}
	
	public ParserRule getContentUriSegmentRule() {
		return getContentUriSegmentAccess().getRule();
	}
	
	//MigrationBlock:
	//	{MigrationBlock}
	//	'migrate' name=ID ('from' from=[MigrationBlock|QualifiedName])? '{' (statements+=DDLStatement ';')* '}';
	public MigrationBlockElements getMigrationBlockAccess() {
		return pMigrationBlock;
	}
	
	public ParserRule getMigrationBlockRule() {
		return getMigrationBlockAccess().getRule();
	}
	
	/// ***********************************************************************
	// *                                                                     *
	// * EXPRESSIONS                                                         *
	// *                                                                     *
	// *********************************************************************** / SqlExpression Expression:
	//	ExprConcat
	public SqlExpressionElements getSqlExpressionAccess() {
		return pSqlExpression;
	}
	
	public ParserRule getSqlExpressionRule() {
		return getSqlExpressionAccess().getRule();
	}
	
	//ExprConcat Expression:
	//	ExprMult ({ExprConcat.left=current} op='||' right=ExprMult)*
	public ExprConcatElements getExprConcatAccess() {
		return pExprConcat;
	}
	
	public ParserRule getExprConcatRule() {
		return getExprConcatAccess().getRule();
	}
	
	//ExprMult Expression:
	//	ExprAdd ({ExprMult.left=current} op=('*' | '/' | '%') right=ExprAdd)*
	public ExprMultElements getExprMultAccess() {
		return pExprMult;
	}
	
	public ParserRule getExprMultRule() {
		return getExprMultAccess().getRule();
	}
	
	//ExprAdd Expression:
	//	ExprBit ({ExprAdd.left=current} op=('+' | '-') right=ExprBit)*
	public ExprAddElements getExprAddAccess() {
		return pExprAdd;
	}
	
	public ParserRule getExprAddRule() {
		return getExprAddAccess().getRule();
	}
	
	//ExprBit Expression:
	//	ExprRelate ({ExprBit.left=current} op=('<<' | '>>' | '&' | '|') right=ExprRelate)*
	public ExprBitElements getExprBitAccess() {
		return pExprBit;
	}
	
	public ParserRule getExprBitRule() {
		return getExprBitAccess().getRule();
	}
	
	//ExprRelate Expression:
	//	ExprEqual ({ExprRelate.left=current} op=('<' | '<=' | '>' | '>=') right=ExprEqual)*
	public ExprRelateElements getExprRelateAccess() {
		return pExprRelate;
	}
	
	public ParserRule getExprRelateRule() {
		return getExprRelateAccess().getRule();
	}
	
	//ExprEqual Expression:
	//	ExprAnd ({ExprEqual.left=current} op=('=' | '==' | '!=' | '<>' | 'is' | 'is not' | 'in' | 'not in' | 'like' | 'glob' |
	//	'match' | 'regexp') right=ExprAnd)*
	public ExprEqualElements getExprEqualAccess() {
		return pExprEqual;
	}
	
	public ParserRule getExprEqualRule() {
		return getExprEqualAccess().getRule();
	}
	
	//ExprAnd Expression:
	//	ExprOr ({ExprAnd.left=current} op='and' right=ExprOr)*
	public ExprAndElements getExprAndAccess() {
		return pExprAnd;
	}
	
	public ParserRule getExprAndRule() {
		return getExprAndAccess().getRule();
	}
	
	//ExprOr Expression:
	//	NullCheckExpression ({ExprOr.left=current} op='or' right=NullCheckExpression)*
	public ExprOrElements getExprOrAccess() {
		return pExprOr;
	}
	
	public ParserRule getExprOrRule() {
		return getExprOrAccess().getRule();
	}
	
	//NullCheckExpression Expression:
	//	PrimaryExpression ({NullCheckExpression.left=current} right=NullExpression)?
	public NullCheckExpressionElements getNullCheckExpressionAccess() {
		return pNullCheckExpression;
	}
	
	public ParserRule getNullCheckExpressionRule() {
		return getNullCheckExpressionAccess().getRule();
	}
	
	//NullExpression Expression:
	//	{IsNull} 'is null' | {NotNull} ('not null' | 'notnull')
	public NullExpressionElements getNullExpressionAccess() {
		return pNullExpression;
	}
	
	public ParserRule getNullExpressionRule() {
		return getNullExpressionAccess().getRule();
	}
	
	//PrimaryExpression Expression:
	//	{NewColumn} 'new.' column=[ColumnSource] | {OldColumn} 'old.' column=[ColumnSource] | {ColumnSourceRef} (=>
	//	source=[SelectSource] '.' | source=[SelectSource] '.' (all?='*' | column=[ColumnSource]) | column=[ColumnSource]) |
	//	{Literal} literalValue=LiteralValue | {NestedExpression} '(' expression=SqlExpression ')' |
	//	{SelectStatementExpression} not?='not'? exists?='exists'? '(' select=SelectStatement ')' | {CaseExpression} 'case'
	//	caseExpression=SqlExpression?
	//	cases+=Case+ ('else' elseExpression=SqlExpression)? 'end' | {Function} name=ID '(' (all?='*' |
	//	arguments+=SqlExpression (',' arguments+=SqlExpression)*) ')' | {CastExpression} 'cast' '(' expression=SqlExpression
	//	'as' type=SqliteDataType ')' | {FunctionArgument} '$' arg=[FunctionArg]
	public PrimaryExpressionElements getPrimaryExpressionAccess() {
		return pPrimaryExpression;
	}
	
	public ParserRule getPrimaryExpressionRule() {
		return getPrimaryExpressionAccess().getRule();
	}
	
	//Case:
	//	'when' whenExpression=SqlExpression 'then' thenExpression=SqlExpression;
	public CaseElements getCaseAccess() {
		return pCase;
	}
	
	public ParserRule getCaseRule() {
		return getCaseAccess().getRule();
	}
	
	//SelectStatement:
	//	core=SelectCore ('order by' orderby=OrderingTermList)? ('limit' limit=SqlExpression (('offset' | ',')
	//	limitOffset=SqlExpression)?)?;
	public SelectStatementElements getSelectStatementAccess() {
		return pSelectStatement;
	}
	
	public ParserRule getSelectStatementRule() {
		return getSelectStatementAccess().getRule();
	}
	
	//OrderingTermList:
	//	orderingTerms+=OrderingTerm (',' orderingTerms+=OrderingTerm)*;
	public OrderingTermListElements getOrderingTermListAccess() {
		return pOrderingTermList;
	}
	
	public ParserRule getOrderingTermListRule() {
		return getOrderingTermListAccess().getRule();
	}
	
	//SelectCore SelectCoreExpression:
	//	SelectExpression ({SelectCore.left=current} op=CompoundOperator right=SelectExpression)*
	public SelectCoreElements getSelectCoreAccess() {
		return pSelectCore;
	}
	
	public ParserRule getSelectCoreRule() {
		return getSelectCoreAccess().getRule();
	}
	
	//SelectExpression SelectCoreExpression:
	//	{SelectExpression}
	//	'select' (distinct?='distinct' | all?='all')? (allColumns?='*' | selectList=SelectList) ('from' source=JoinSource)?
	//	('where' where=WhereExpressions)? ('group by' groupBy=GroupByExpressions)? ('having' having=HavingExpressions)?
	public SelectExpressionElements getSelectExpressionAccess() {
		return pSelectExpression;
	}
	
	public ParserRule getSelectExpressionRule() {
		return getSelectExpressionAccess().getRule();
	}
	
	//SelectList:
	//	resultColumns+=ResultColumn (',' resultColumns+=ResultColumn)*;
	public SelectListElements getSelectListAccess() {
		return pSelectList;
	}
	
	public ParserRule getSelectListRule() {
		return getSelectListAccess().getRule();
	}
	
	//WhereExpressions:
	//	expression=SqlExpression;
	public WhereExpressionsElements getWhereExpressionsAccess() {
		return pWhereExpressions;
	}
	
	public ParserRule getWhereExpressionsRule() {
		return getWhereExpressionsAccess().getRule();
	}
	
	//GroupByExpressions:
	//	groupByExpressions+=SqlExpression (',' groupByExpressions+=SqlExpression)*;
	public GroupByExpressionsElements getGroupByExpressionsAccess() {
		return pGroupByExpressions;
	}
	
	public ParserRule getGroupByExpressionsRule() {
		return getGroupByExpressionsAccess().getRule();
	}
	
	//HavingExpressions:
	//	expression=SqlExpression;
	public HavingExpressionsElements getHavingExpressionsAccess() {
		return pHavingExpressions;
	}
	
	public ParserRule getHavingExpressionsRule() {
		return getHavingExpressionsAccess().getRule();
	}
	
	//enum CompoundOperator:
	//	unionall='union all' | union | intersect | except;
	public CompoundOperatorElements getCompoundOperatorAccess() {
		return eCompoundOperator;
	}
	
	public EnumRule getCompoundOperatorRule() {
		return getCompoundOperatorAccess().getRule();
	}
	
	//OrderingTerm:
	//	expression=SqlExpression (asc?='asc' | desc?='desc')?;
	public OrderingTermElements getOrderingTermAccess() {
		return pOrderingTerm;
	}
	
	public ParserRule getOrderingTermRule() {
		return getOrderingTermAccess().getRule();
	}
	
	//JoinSource:
	//	source=SingleSource joinStatements+=JoinStatement*;
	public JoinSourceElements getJoinSourceAccess() {
		return pJoinSource;
	}
	
	public ParserRule getJoinSourceRule() {
		return getJoinSourceAccess().getRule();
	}
	
	//SingleSource:
	//	SingleSourceTable | SingleSourceSelectStatement | SingleSourceJoin;
	public SingleSourceElements getSingleSourceAccess() {
		return pSingleSource;
	}
	
	public ParserRule getSingleSourceRule() {
		return getSingleSourceAccess().getRule();
	}
	
	//SingleSourceTable SelectSource:
	//	{SingleSourceTable} tableReference=[TableDefinition|QualifiedName] ('as' name=ID)?
	public SingleSourceTableElements getSingleSourceTableAccess() {
		return pSingleSourceTable;
	}
	
	public ParserRule getSingleSourceTableRule() {
		return getSingleSourceTableAccess().getRule();
	}
	
	//SingleSourceSelectStatement SelectSource:
	//	{SingleSourceSelectStatement}
	//	'(' selectStatement=SelectStatement ')' ('as' name=ID)?
	public SingleSourceSelectStatementElements getSingleSourceSelectStatementAccess() {
		return pSingleSourceSelectStatement;
	}
	
	public ParserRule getSingleSourceSelectStatementRule() {
		return getSingleSourceSelectStatementAccess().getRule();
	}
	
	//SingleSourceJoin:
	//	'(' joinSource=JoinSource ')';
	public SingleSourceJoinElements getSingleSourceJoinAccess() {
		return pSingleSourceJoin;
	}
	
	public ParserRule getSingleSourceJoinRule() {
		return getSingleSourceJoinAccess().getRule();
	}
	
	//JoinStatement:
	//	{JoinStatement} natural?='natural'? (left?='left' outer?='outer'? | inner?='inner' | cross?='cross')? 'join'
	//	singleSource=SingleSource 'on' expression=SqlExpression;
	public JoinStatementElements getJoinStatementAccess() {
		return pJoinStatement;
	}
	
	public ParserRule getJoinStatementRule() {
		return getJoinStatementAccess().getRule();
	}
	
	//ResultColumn ColumnSource:
	//	{ResultColumn} expression=SqlExpression ('as' name=ID)?
	public ResultColumnElements getResultColumnAccess() {
		return pResultColumn;
	}
	
	public ParserRule getResultColumnRule() {
		return getResultColumnAccess().getRule();
	}
	
	//LiteralValue:
	//	{NumericLiteral} number=SignedNumber | {StringLiteral} literal=STRING | {NullLiteral} literal='null' |
	//	{CurrentTimeLiteral} literal='current_time' | {CurrentDateLiteral} literal='current_date' | {CurrentTimeStampLiteral}
	//	literal='current_timestamp';
	public LiteralValueElements getLiteralValueAccess() {
		return pLiteralValue;
	}
	
	public ParserRule getLiteralValueRule() {
		return getLiteralValueAccess().getRule();
	}
	
	//enum SqliteDataType:
	//	text | integer | real | blob | none | numeric;
	public SqliteDataTypeElements getSqliteDataTypeAccess() {
		return eSqliteDataType;
	}
	
	public EnumRule getSqliteDataTypeRule() {
		return getSqliteDataTypeAccess().getRule();
	}
	
	/// ***********************************************************************
	// *                                                                     *
	// * DDL                                                                 *
	// *                                                                     *
	// *********************************************************************** / DDLStatement:
	//	CreateTableStatement
	//	| CreateViewStatement
	//	| CreateTriggerStatement
	//	| CreateIndexStatement
	//	| AlterTableRenameStatement
	//	| AlterTableAddColumnStatement
	//	| DropTableStatement
	//	| DropTriggerStatement
	//	| DropViewStatement
	//	| DropIndexStatement;
	public DDLStatementElements getDDLStatementAccess() {
		return pDDLStatement;
	}
	
	public ParserRule getDDLStatementRule() {
		return getDDLStatementAccess().getRule();
	}
	
	//CreateTableStatement TableDefinition:
	//	{CreateTableStatement} 'create' temporary?='temp'? 'table' name=ID '('
	//	columnDefs+=ColumnDef (',' columnDefs+=ColumnDef)* (',' constraints+=TableConstraint)*
	//	')'
	public CreateTableStatementElements getCreateTableStatementAccess() {
		return pCreateTableStatement;
	}
	
	public ParserRule getCreateTableStatementRule() {
		return getCreateTableStatementAccess().getRule();
	}
	
	//CreateViewStatement TableDefinition:
	//	{CreateViewStatement}
	//	'create' temporary?='temp'? 'view' name=ID 'as' selectStatement=SelectStatement
	public CreateViewStatementElements getCreateViewStatementAccess() {
		return pCreateViewStatement;
	}
	
	public ParserRule getCreateViewStatementRule() {
		return getCreateViewStatementAccess().getRule();
	}
	
	//CreateTriggerStatement:
	//	'create' temporary?='temp'? 'trigger' name=ID when=('before' | 'after' | 'instead of')? (eventType='delete' |
	//	eventType='insert' | eventType='update' ('of' updateColumnNames+=ID (',' updateColumnNames+=ID)*)?)
	//	'on' table=[TableDefinition] forEachRow='for each row'? ('when' whenExpression=SqlExpression)?
	//	'begin' (statements+=DMLStatement ';' (statements+=DMLStatement ';')*)? 'end';
	public CreateTriggerStatementElements getCreateTriggerStatementAccess() {
		return pCreateTriggerStatement;
	}
	
	public ParserRule getCreateTriggerStatementRule() {
		return getCreateTriggerStatementAccess().getRule();
	}
	
	//AlterTableRenameStatement TableDefinition:
	//	{AlterTableRenameStatement}
	//	'alter' 'table' table=[TableDefinition] 'rename to' name=ID
	public AlterTableRenameStatementElements getAlterTableRenameStatementAccess() {
		return pAlterTableRenameStatement;
	}
	
	public ParserRule getAlterTableRenameStatementRule() {
		return getAlterTableRenameStatementAccess().getRule();
	}
	
	//AlterTableAddColumnStatement:
	//	'alter' 'table' table=[TableDefinition] 'add column' columnDef=ColumnDef;
	public AlterTableAddColumnStatementElements getAlterTableAddColumnStatementAccess() {
		return pAlterTableAddColumnStatement;
	}
	
	public ParserRule getAlterTableAddColumnStatementRule() {
		return getAlterTableAddColumnStatementAccess().getRule();
	}
	
	//DropTableStatement:
	//	'drop' 'table' ifExists?='if exists'? table=[TableDefinition];
	public DropTableStatementElements getDropTableStatementAccess() {
		return pDropTableStatement;
	}
	
	public ParserRule getDropTableStatementRule() {
		return getDropTableStatementAccess().getRule();
	}
	
	//DropTriggerStatement:
	//	'drop' 'trigger' ifExists?='if exists'? trigger=[CreateTriggerStatement];
	public DropTriggerStatementElements getDropTriggerStatementAccess() {
		return pDropTriggerStatement;
	}
	
	public ParserRule getDropTriggerStatementRule() {
		return getDropTriggerStatementAccess().getRule();
	}
	
	//DropViewStatement:
	//	'drop' 'view' ifExists?='if exists'? view=[CreateViewStatement];
	public DropViewStatementElements getDropViewStatementAccess() {
		return pDropViewStatement;
	}
	
	public ParserRule getDropViewStatementRule() {
		return getDropViewStatementAccess().getRule();
	}
	
	//CreateIndexStatement:
	//	'create' unique?='unique'? 'index' name=ID 'on' table=[TableDefinition]
	//	'(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')';
	public CreateIndexStatementElements getCreateIndexStatementAccess() {
		return pCreateIndexStatement;
	}
	
	public ParserRule getCreateIndexStatementRule() {
		return getCreateIndexStatementAccess().getRule();
	}
	
	//DropIndexStatement:
	//	'drop' 'index' ifExists?='if exists'? index=[CreateIndexStatement];
	public DropIndexStatementElements getDropIndexStatementAccess() {
		return pDropIndexStatement;
	}
	
	public ParserRule getDropIndexStatementRule() {
		return getDropIndexStatementAccess().getRule();
	}
	
	//ColumnDef ColumnSource:
	//	{ColumnDef} name=ID type=ColumnType constraints+=ColumnConstraint*
	public ColumnDefElements getColumnDefAccess() {
		return pColumnDef;
	}
	
	public ParserRule getColumnDefRule() {
		return getColumnDefAccess().getRule();
	}
	
	//ColumnConstraint:
	//	{PrimaryKeyColumnConstraint} 'primary key' (asc?='asc' | desc?='desc')? autoincrement?='autoincrement'? |
	//	{NotNullConstraint} 'not null' conflictClause=ConflictClause? | {UniqueConstraint} 'unique'
	//	conflictClause=ConflictClause? | {DefaultConstraint} 'default' defaultValue=DefaultValue | {CheckConstraint} 'check'
	//	'(' expression=SqlExpression ')';
	public ColumnConstraintElements getColumnConstraintAccess() {
		return pColumnConstraint;
	}
	
	public ParserRule getColumnConstraintRule() {
		return getColumnConstraintAccess().getRule();
	}
	
	//TableConstraint:
	//	UniqueTableConstraint | PrimaryConstraint | CheckTableConstraint;
	public TableConstraintElements getTableConstraintAccess() {
		return pTableConstraint;
	}
	
	public ParserRule getTableConstraintRule() {
		return getTableConstraintAccess().getRule();
	}
	
	//UniqueTableConstraint:
	//	('constraint' name=ID)? 'unique' '(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')'
	//	conflictClause=ConflictClause;
	public UniqueTableConstraintElements getUniqueTableConstraintAccess() {
		return pUniqueTableConstraint;
	}
	
	public ParserRule getUniqueTableConstraintRule() {
		return getUniqueTableConstraintAccess().getRule();
	}
	
	//PrimaryConstraint:
	//	('constraint' name=ID)? 'primary key' '(' columns+=IndexedColumn (',' columns+=IndexedColumn)* ')'
	//	conflictClause=ConflictClause;
	public PrimaryConstraintElements getPrimaryConstraintAccess() {
		return pPrimaryConstraint;
	}
	
	public ParserRule getPrimaryConstraintRule() {
		return getPrimaryConstraintAccess().getRule();
	}
	
	//CheckTableConstraint:
	//	('constraint' name=ID)? 'check' '(' expression=SqlExpression ')';
	public CheckTableConstraintElements getCheckTableConstraintAccess() {
		return pCheckTableConstraint;
	}
	
	public ParserRule getCheckTableConstraintRule() {
		return getCheckTableConstraintAccess().getRule();
	}
	
	//IndexedColumn:
	//	columnReference=[ColumnDef] ('collate' collationName=ID)? (asc?='asc' | desc?='desc')?;
	public IndexedColumnElements getIndexedColumnAccess() {
		return pIndexedColumn;
	}
	
	public ParserRule getIndexedColumnRule() {
		return getIndexedColumnAccess().getRule();
	}
	
	//DefaultValue:
	//	{LiteralDefaultValue} literal=LiteralValue | {ExpressionDefaultValue} '(' expression=SqlExpression ')';
	public DefaultValueElements getDefaultValueAccess() {
		return pDefaultValue;
	}
	
	public ParserRule getDefaultValueRule() {
		return getDefaultValueAccess().getRule();
	}
	
	//ConflictClause:
	//	'on' 'conflict' resolution=ConflictResolution;
	public ConflictClauseElements getConflictClauseAccess() {
		return pConflictClause;
	}
	
	public ParserRule getConflictClauseRule() {
		return getConflictClauseAccess().getRule();
	}
	
	//enum ColumnType:
	//	text | integer | real | blob | boolean;
	public ColumnTypeElements getColumnTypeAccess() {
		return eColumnType;
	}
	
	public EnumRule getColumnTypeRule() {
		return getColumnTypeAccess().getRule();
	}
	
	//enum ConflictResolution:
	//	rollback | abort | fail | ignore | replace;
	public ConflictResolutionElements getConflictResolutionAccess() {
		return eConflictResolution;
	}
	
	public EnumRule getConflictResolutionRule() {
		return getConflictResolutionAccess().getRule();
	}
	
	/// ***********************************************************************
	// *                                                                     *
	// * DML                                                                 *
	// *                                                                     *
	// *********************************************************************** / DMLStatement:
	//	SelectStatement
	//	| InsertStatement
	//	| UpdateStatement
	//	| DeleteStatement;
	public DMLStatementElements getDMLStatementAccess() {
		return pDMLStatement;
	}
	
	public ParserRule getDMLStatementRule() {
		return getDMLStatementAccess().getRule();
	}
	
	//DeleteStatement:
	//	'delete' 'from' table=[TableDefinition] ('where' expression=SqlExpression)?;
	public DeleteStatementElements getDeleteStatementAccess() {
		return pDeleteStatement;
	}
	
	public ParserRule getDeleteStatementRule() {
		return getDeleteStatementAccess().getRule();
	}
	
	//InsertStatement:
	//	('insert' ('or' conflictResolution=ConflictResolution)? | 'replace') 'into' table=[TableDefinition] ('('
	//	columnNames+=[ColumnDef] (',' columnNames+=[ColumnDef])* ')')? (('values'
	//	'(' expressions+=SqlExpression (',' expressions+=SqlExpression)* ')'
	//	| selectStatement=SelectStatement) | 'default' 'values');
	public InsertStatementElements getInsertStatementAccess() {
		return pInsertStatement;
	}
	
	public ParserRule getInsertStatementRule() {
		return getInsertStatementAccess().getRule();
	}
	
	//UpdateStatement:
	//	'update' ('or' conflictResolution=ConflictResolution)? table=[TableDefinition]
	//	'set' updateColumnExpressions+=UpdateColumnExpression (',' updateColumnExpressions+=UpdateColumnExpression)* ('where'
	//	whereExpression=SqlExpression)?;
	public UpdateStatementElements getUpdateStatementAccess() {
		return pUpdateStatement;
	}
	
	public ParserRule getUpdateStatementRule() {
		return getUpdateStatementAccess().getRule();
	}
	
	//UpdateColumnExpression:
	//	columnName=[ColumnDef] '=' expression=SqlExpression;
	public UpdateColumnExpressionElements getUpdateColumnExpressionAccess() {
		return pUpdateColumnExpression;
	}
	
	public ParserRule getUpdateColumnExpressionRule() {
		return getUpdateColumnExpressionAccess().getRule();
	}
	
	/// ***********************************************************************
	// *                                                                     *
	// * DATATYPE & TERMINAL RULES                                           *
	// *                                                                     *
	// *********************************************************************** / SignedNumber ecore::EBigDecimal:
	//	'-'? NUMBER
	public SignedNumberElements getSignedNumberAccess() {
		return pSignedNumber;
	}
	
	public ParserRule getSignedNumberRule() {
		return getSignedNumberAccess().getRule();
	}
	
	//QualifiedName:
	//	ID ("." ID)*;
	public QualifiedNameElements getQualifiedNameAccess() {
		return pQualifiedName;
	}
	
	public ParserRule getQualifiedNameRule() {
		return getQualifiedNameAccess().getRule();
	}
	
	//terminal NUMBER returns ecore::EBigDecimal:
	//	'0'..'9'* ('.' '0'..'9'+)?;
	public TerminalRule getNUMBERRule() {
		return tNUMBER;
	}
	
	//terminal INT returns ecore::EInt:
	//	"$$$don't use this anymore$$$";
	public TerminalRule getINTRule() {
		return tINT;
	}
	
	//terminal STRING:
	//	'"' ('\\' ('b' | 't' | 'n' | 'f' | 'r' | 'u' | '"' | "'" | '\\') | !('\\' | '"'))* '"' |
	//	"'" ('\\' ('b' | 't' | 'n' | 'f' | 'r' | 'u' | '"' | "'" | '\\') | !('\\' | "'"))* "'";
	public TerminalRule getSTRINGRule() {
		return tSTRING;
	}
	
	//terminal ID:
	//	'^'? ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
	public TerminalRule getIDRule() {
		return gaTerminals.getIDRule();
	}
	
	//terminal ML_COMMENT:
	//	'/ *'->'* /';
	public TerminalRule getML_COMMENTRule() {
		return gaTerminals.getML_COMMENTRule();
	}
	
	//terminal SL_COMMENT:
	//	'//' !('\n' | '\r')* ('\r'? '\n')?;
	public TerminalRule getSL_COMMENTRule() {
		return gaTerminals.getSL_COMMENTRule();
	}
	
	//terminal WS:
	//	' ' | '\t' | '\r' | '\n'+;
	public TerminalRule getWSRule() {
		return gaTerminals.getWSRule();
	}
	
	//terminal ANY_OTHER:
	//	.;
	public TerminalRule getANY_OTHERRule() {
		return gaTerminals.getANY_OTHERRule();
	}
}
