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

org.openxma.dsl.ddl.parseTreeConstruction.DdlDslParsetreeConstructor Maven / Gradle / Ivy

The newest version!
/*
* generated by Xtext
*/
package org.openxma.dsl.ddl.parseTreeConstruction;

import org.eclipse.emf.ecore.*;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parsetree.reconstr.IEObjectConsumer;
import org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor;

import org.openxma.dsl.ddl.services.DdlDslGrammarAccess;

import com.google.inject.Inject;

@SuppressWarnings("all")
public class DdlDslParsetreeConstructor extends AbstractParseTreeConstructor {
		
	@Inject
	private DdlDslGrammarAccess grammarAccess;
	
	@Override
	protected AbstractToken getRootToken(IEObjectConsumer inst) {
		return new ThisRootNode(inst);	
	}
	
protected class ThisRootNode extends RootToken {
	public ThisRootNode(IEObjectConsumer inst) {
		super(inst);
	}
	
	@Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Ddl_Group(this, this, 0, inst);
			case 1: return new DdlStatement_Alternatives(this, this, 1, inst);
			case 2: return new Alter_Group(this, this, 2, inst);
			case 3: return new AlterTableAction_Alternatives(this, this, 3, inst);
			case 4: return new DropTableConstraint_Group(this, this, 4, inst);
			case 5: return new Comment_Alternatives(this, this, 5, inst);
			case 6: return new TableComment_Group(this, this, 6, inst);
			case 7: return new ColumnComment_Group(this, this, 7, inst);
			case 8: return new AddTableConstraint_Group(this, this, 8, inst);
			case 9: return new Create_Alternatives(this, this, 9, inst);
			case 10: return new CreateTable_Group(this, this, 10, inst);
			case 11: return new CreateIndex_Group(this, this, 11, inst);
			case 12: return new TableProperty_Alternatives(this, this, 12, inst);
			case 13: return new Column_Group(this, this, 13, inst);
			case 14: return new Drop_Group(this, this, 14, inst);
			case 15: return new Constraint_Group(this, this, 15, inst);
			case 16: return new NullableConstraint_Group(this, this, 16, inst);
			case 17: return new UniqueKeyConstraint_Group(this, this, 17, inst);
			case 18: return new PrimaryKeyConstraint_Group(this, this, 18, inst);
			case 19: return new ForeignKeyConstraint_Group(this, this, 19, inst);
			case 20: return new ReferenceClause_Group(this, this, 20, inst);
			case 21: return new SqlDataType_Group(this, this, 21, inst);
			case 22: return new SqlCharacter_Group(this, this, 22, inst);
			case 23: return new SqlNumber_Group(this, this, 23, inst);
			case 24: return new LongRaw_Alternatives(this, this, 24, inst);
			case 25: return new Long_Group(this, this, 25, inst);
			case 26: return new Raw_Group(this, this, 26, inst);
			case 27: return new SqlDateTime_Alternatives(this, this, 27, inst);
			case 28: return new SqlDate_NameAssignment(this, this, 28, inst);
			case 29: return new SqlTimeStamp_Group(this, this, 29, inst);
			case 30: return new SqlInterval_Alternatives(this, this, 30, inst);
			case 31: return new LargeObjectType_Group(this, this, 31, inst);
			case 32: return new RowIdType_Group(this, this, 32, inst);
			case 33: return new SqlBoolean_NameAssignment(this, this, 33, inst);
			default: return null;
		}	
	}	
}
	

/************ begin Rule Ddl ****************
 *
 * //http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_1001.htm#sthref3207
 * Ddl:
 * 	{Ddl} statements+=DdlStatement*;
 *
 **/

// {Ddl} statements+=DdlStatement*
protected class Ddl_Group extends GroupToken {
	
	public Ddl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDdlAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Ddl_StatementsAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Ddl_DdlAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDdlAccess().getDdlAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {Ddl}
protected class Ddl_DdlAction_0 extends ActionToken  {

	public Ddl_DdlAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getDdlAccess().getDdlAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// statements+=DdlStatement*
protected class Ddl_StatementsAssignment_1 extends AssignmentToken  {
	
	public Ddl_StatementsAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDdlAccess().getStatementsAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DdlStatement_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("statements",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("statements");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDdlStatementRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDdlAccess().getStatementsDdlStatementParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Ddl_StatementsAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Ddl_DdlAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule Ddl ****************/


/************ begin Rule DdlStatement ****************
 *
 * DdlStatement:
 * 	Alter | Create | Drop | Comment | OtherStatement;
 *
 **/

// Alter | Create | Drop | Comment | OtherStatement
protected class DdlStatement_Alternatives extends AlternativesToken {

	public DdlStatement_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDdlStatementAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DdlStatement_AlterParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DdlStatement_CreateParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DdlStatement_DropParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new DdlStatement_CommentParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new DdlStatement_OtherStatementParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAlterRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getColumnCommentRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCreateIndexRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCreateTableRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDropRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTableCommentRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Alter
protected class DdlStatement_AlterParserRuleCall_0 extends RuleCallToken {
	
	public DdlStatement_AlterParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDdlStatementAccess().getAlterParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Alter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAlterRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Alter_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Create
protected class DdlStatement_CreateParserRuleCall_1 extends RuleCallToken {
	
	public DdlStatement_CreateParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDdlStatementAccess().getCreateParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Create_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCreateIndexRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCreateTableRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Create_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Drop
protected class DdlStatement_DropParserRuleCall_2 extends RuleCallToken {
	
	public DdlStatement_DropParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDdlStatementAccess().getDropParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Drop_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDropRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Drop_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Comment
protected class DdlStatement_CommentParserRuleCall_3 extends RuleCallToken {
	
	public DdlStatement_CommentParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDdlStatementAccess().getCommentParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Comment_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnCommentRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTableCommentRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Comment_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// OtherStatement
protected class DdlStatement_OtherStatementParserRuleCall_4 extends UnassignedTextToken {

	public DdlStatement_OtherStatementParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getDdlStatementAccess().getOtherStatementParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}


/************ end Rule DdlStatement ****************/



/************ begin Rule Alter ****************
 *
 * Alter:
 * 	"ALTER" "TABLE" table=[CreateTable|QID] action=AlterTableAction Other* ";";
 *
 **/

// "ALTER" "TABLE" table=[CreateTable|QID] action=AlterTableAction Other* ";"
protected class Alter_Group extends GroupToken {
	
	public Alter_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAlterAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Alter_SemicolonKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAlterRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "ALTER"
protected class Alter_ALTERKeyword_0 extends KeywordToken  {
	
	public Alter_ALTERKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAlterAccess().getALTERKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "TABLE"
protected class Alter_TABLEKeyword_1 extends KeywordToken  {
	
	public Alter_TABLEKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAlterAccess().getTABLEKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Alter_ALTERKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// table=[CreateTable|QID]
protected class Alter_TableAssignment_2 extends AssignmentToken  {
	
	public Alter_TableAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAlterAccess().getTableAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Alter_TABLEKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("table",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("table");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAlterAccess().getTableCreateTableCrossReference_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getAlterAccess().getTableCreateTableCrossReference_2_0(); 
				return obj;
			}
		}
		return null;
	}

}

// action=AlterTableAction
protected class Alter_ActionAssignment_3 extends AssignmentToken  {
	
	public Alter_ActionAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAlterAccess().getActionAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AlterTableAction_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("action",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("action");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAlterTableActionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAlterAccess().getActionAlterTableActionParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Alter_TableAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ";"
protected class Alter_SemicolonKeyword_5 extends KeywordToken  {
	
	public Alter_SemicolonKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAlterAccess().getSemicolonKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Alter_ActionAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule Alter ****************/


/************ begin Rule AlterTableAction ****************
 *
 * AlterTableAction:
 * 	AddTableConstraint | DropTableConstraint | AlterTableActionOther;
 *
 **/

// AddTableConstraint | DropTableConstraint | AlterTableActionOther
protected class AlterTableAction_Alternatives extends AlternativesToken {

	public AlterTableAction_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAlterTableActionAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AlterTableAction_AddTableConstraintParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AlterTableAction_DropTableConstraintParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AlterTableAction_AlterTableActionOtherParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddTableConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getDropTableConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// AddTableConstraint
protected class AlterTableAction_AddTableConstraintParserRuleCall_0 extends RuleCallToken {
	
	public AlterTableAction_AddTableConstraintParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAlterTableActionAccess().getAddTableConstraintParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddTableConstraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddTableConstraintRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AddTableConstraint_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// DropTableConstraint
protected class AlterTableAction_DropTableConstraintParserRuleCall_1 extends RuleCallToken {
	
	public AlterTableAction_DropTableConstraintParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAlterTableActionAccess().getDropTableConstraintParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DropTableConstraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDropTableConstraintRule().getType().getClassifier())
			return null;
		if(checkForRecursion(DropTableConstraint_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// AlterTableActionOther
protected class AlterTableAction_AlterTableActionOtherParserRuleCall_2 extends UnassignedTextToken {

	public AlterTableAction_AlterTableActionOtherParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAlterTableActionAccess().getAlterTableActionOtherParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}


/************ end Rule AlterTableAction ****************/



/************ begin Rule DropTableConstraint ****************
 *
 * DropTableConstraint:
 * 	"DROP" "CONSTRAINT"? (constraintRef=[Constraint] | constraint=Constraint);
 *
 **/

// "DROP" "CONSTRAINT"? (constraintRef=[Constraint] | constraint=Constraint)
protected class DropTableConstraint_Group extends GroupToken {
	
	public DropTableConstraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDropTableConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DropTableConstraint_Alternatives_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDropTableConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "DROP"
protected class DropTableConstraint_DROPKeyword_0 extends KeywordToken  {
	
	public DropTableConstraint_DROPKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDropTableConstraintAccess().getDROPKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// constraintRef=[Constraint] | constraint=Constraint
protected class DropTableConstraint_Alternatives_2 extends AlternativesToken {

	public DropTableConstraint_Alternatives_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getDropTableConstraintAccess().getAlternatives_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DropTableConstraint_ConstraintRefAssignment_2_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DropTableConstraint_ConstraintAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// constraintRef=[Constraint]
protected class DropTableConstraint_ConstraintRefAssignment_2_0 extends AssignmentToken  {
	
	public DropTableConstraint_ConstraintRefAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDropTableConstraintAccess().getConstraintRefAssignment_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DropTableConstraint_DROPKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("constraintRef",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constraintRef");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDropTableConstraintAccess().getConstraintRefConstraintCrossReference_2_0_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getDropTableConstraintAccess().getConstraintRefConstraintCrossReference_2_0_0(); 
				return obj;
			}
		}
		return null;
	}

}

// constraint=Constraint
protected class DropTableConstraint_ConstraintAssignment_2_1 extends AssignmentToken  {
	
	public DropTableConstraint_ConstraintAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDropTableConstraintAccess().getConstraintAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("constraint",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constraint");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConstraintRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDropTableConstraintAccess().getConstraintConstraintParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DropTableConstraint_DROPKeyword_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule DropTableConstraint ****************/


/************ begin Rule Comment ****************
 *
 * Comment:
 * 	TableComment | ColumnComment;
 *
 **/

// TableComment | ColumnComment
protected class Comment_Alternatives extends AlternativesToken {

	public Comment_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCommentAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Comment_TableCommentParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Comment_ColumnCommentParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnCommentRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getTableCommentRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// TableComment
protected class Comment_TableCommentParserRuleCall_0 extends RuleCallToken {
	
	public Comment_TableCommentParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCommentAccess().getTableCommentParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTableCommentRule().getType().getClassifier())
			return null;
		if(checkForRecursion(TableComment_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ColumnComment
protected class Comment_ColumnCommentParserRuleCall_1 extends RuleCallToken {
	
	public Comment_ColumnCommentParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCommentAccess().getColumnCommentParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnCommentRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ColumnComment_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule Comment ****************/


/************ begin Rule TableComment ****************
 *
 * TableComment:
 * 	"COMMENT" "ON" "TABLE" table=[CreateTable|QID] "is" comment=STRING ";";
 *
 **/

// "COMMENT" "ON" "TABLE" table=[CreateTable|QID] "is" comment=STRING ";"
protected class TableComment_Group extends GroupToken {
	
	public TableComment_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_SemicolonKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getTableCommentRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "COMMENT"
protected class TableComment_COMMENTKeyword_0 extends KeywordToken  {
	
	public TableComment_COMMENTKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getCOMMENTKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "ON"
protected class TableComment_ONKeyword_1 extends KeywordToken  {
	
	public TableComment_ONKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getONKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_COMMENTKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "TABLE"
protected class TableComment_TABLEKeyword_2 extends KeywordToken  {
	
	public TableComment_TABLEKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getTABLEKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_ONKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// table=[CreateTable|QID]
protected class TableComment_TableAssignment_3 extends AssignmentToken  {
	
	public TableComment_TableAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getTableAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_TABLEKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("table",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("table");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getTableCommentAccess().getTableCreateTableCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getTableCommentAccess().getTableCreateTableCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "is"
protected class TableComment_IsKeyword_4 extends KeywordToken  {
	
	public TableComment_IsKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getIsKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_TableAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// comment=STRING
protected class TableComment_CommentAssignment_5 extends AssignmentToken  {
	
	public TableComment_CommentAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getCommentAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_IsKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("comment",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("comment");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getTableCommentAccess().getCommentSTRINGTerminalRuleCall_5_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getTableCommentAccess().getCommentSTRINGTerminalRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// ";"
protected class TableComment_SemicolonKeyword_6 extends KeywordToken  {
	
	public TableComment_SemicolonKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getTableCommentAccess().getSemicolonKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableComment_CommentAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule TableComment ****************/


/************ begin Rule ColumnComment ****************
 *
 * ColumnComment:
 * 	"COMMENT" "ON" "COLUMN" column=[Column|QID] "is" comment=STRING ";";
 *
 **/

// "COMMENT" "ON" "COLUMN" column=[Column|QID] "is" comment=STRING ";"
protected class ColumnComment_Group extends GroupToken {
	
	public ColumnComment_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_SemicolonKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnCommentRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "COMMENT"
protected class ColumnComment_COMMENTKeyword_0 extends KeywordToken  {
	
	public ColumnComment_COMMENTKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getCOMMENTKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "ON"
protected class ColumnComment_ONKeyword_1 extends KeywordToken  {
	
	public ColumnComment_ONKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getONKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_COMMENTKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "COLUMN"
protected class ColumnComment_COLUMNKeyword_2 extends KeywordToken  {
	
	public ColumnComment_COLUMNKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getCOLUMNKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_ONKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// column=[Column|QID]
protected class ColumnComment_ColumnAssignment_3 extends AssignmentToken  {
	
	public ColumnComment_ColumnAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getColumnAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_COLUMNKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("column",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("column");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getColumnCommentAccess().getColumnColumnCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getColumnCommentAccess().getColumnColumnCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "is"
protected class ColumnComment_IsKeyword_4 extends KeywordToken  {
	
	public ColumnComment_IsKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getIsKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_ColumnAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// comment=STRING
protected class ColumnComment_CommentAssignment_5 extends AssignmentToken  {
	
	public ColumnComment_CommentAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getCommentAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_IsKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("comment",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("comment");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getColumnCommentAccess().getCommentSTRINGTerminalRuleCall_5_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getColumnCommentAccess().getCommentSTRINGTerminalRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// ";"
protected class ColumnComment_SemicolonKeyword_6 extends KeywordToken  {
	
	public ColumnComment_SemicolonKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getColumnCommentAccess().getSemicolonKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ColumnComment_CommentAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule ColumnComment ****************/


/************ begin Rule AddTableConstraint ****************
 *
 * AddTableConstraint:
 * 	"ADD" "("? "CONSTRAINT" name=QID constraint=Constraint;
 *
 **/

// "ADD" "("? "CONSTRAINT" name=QID constraint=Constraint
protected class AddTableConstraint_Group extends GroupToken {
	
	public AddTableConstraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddTableConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddTableConstraint_ConstraintAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddTableConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "ADD"
protected class AddTableConstraint_ADDKeyword_0 extends KeywordToken  {
	
	public AddTableConstraint_ADDKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddTableConstraintAccess().getADDKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "CONSTRAINT"
protected class AddTableConstraint_CONSTRAINTKeyword_2 extends KeywordToken  {
	
	public AddTableConstraint_CONSTRAINTKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddTableConstraintAccess().getCONSTRAINTKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddTableConstraint_ADDKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=QID
protected class AddTableConstraint_NameAssignment_3 extends AssignmentToken  {
	
	public AddTableConstraint_NameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddTableConstraintAccess().getNameAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddTableConstraint_CONSTRAINTKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddTableConstraintAccess().getNameQIDParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddTableConstraintAccess().getNameQIDParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// constraint=Constraint
protected class AddTableConstraint_ConstraintAssignment_4 extends AssignmentToken  {
	
	public AddTableConstraint_ConstraintAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddTableConstraintAccess().getConstraintAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("constraint",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constraint");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConstraintRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAddTableConstraintAccess().getConstraintConstraintParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AddTableConstraint_NameAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule AddTableConstraint ****************/


/************ begin Rule Create ****************
 *
 * Create:
 * 	CreateTable | CreateIndex | CreateOther;
 *
 **/

// CreateTable | CreateIndex | CreateOther
protected class Create_Alternatives extends AlternativesToken {

	public Create_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCreateAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Create_CreateTableParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Create_CreateIndexParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Create_CreateOtherParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCreateIndexRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCreateTableRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// CreateTable
protected class Create_CreateTableParserRuleCall_0 extends RuleCallToken {
	
	public Create_CreateTableParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCreateAccess().getCreateTableParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCreateTableRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CreateTable_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CreateIndex
protected class Create_CreateIndexParserRuleCall_1 extends RuleCallToken {
	
	public Create_CreateIndexParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCreateAccess().getCreateIndexParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCreateIndexRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CreateIndex_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CreateOther
protected class Create_CreateOtherParserRuleCall_2 extends UnassignedTextToken {

	public Create_CreateOtherParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCreateAccess().getCreateOtherParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}


/************ end Rule Create ****************/


/************ begin Rule CreateTable ****************
 *
 * CreateTable:
 * 	"CREATE" ("GLOBAL" "TEMPORARY")? "TABLE" name=QID "(" properties+=TableProperty ("," properties+=TableProperty)* ")"
 * 	Other* ";";
 *
 **/

// "CREATE" ("GLOBAL" "TEMPORARY")? "TABLE" name=QID "(" properties+=TableProperty ("," properties+=TableProperty)* ")"
// Other* ";"
protected class CreateTable_Group extends GroupToken {
	
	public CreateTable_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_SemicolonKeyword_9(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCreateTableRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "CREATE"
protected class CreateTable_CREATEKeyword_0 extends KeywordToken  {
	
	public CreateTable_CREATEKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getCREATEKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "TABLE"
protected class CreateTable_TABLEKeyword_2 extends KeywordToken  {
	
	public CreateTable_TABLEKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getTABLEKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_CREATEKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=QID
protected class CreateTable_NameAssignment_3 extends AssignmentToken  {
	
	public CreateTable_NameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getNameAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_TABLEKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCreateTableAccess().getNameQIDParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getCreateTableAccess().getNameQIDParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class CreateTable_LeftParenthesisKeyword_4 extends KeywordToken  {
	
	public CreateTable_LeftParenthesisKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getLeftParenthesisKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_NameAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// properties+=TableProperty
protected class CreateTable_PropertiesAssignment_5 extends AssignmentToken  {
	
	public CreateTable_PropertiesAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getPropertiesAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableProperty_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("properties",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getTablePropertyRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCreateTableAccess().getPropertiesTablePropertyParserRuleCall_5_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CreateTable_LeftParenthesisKeyword_4(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ("," properties+=TableProperty)*
protected class CreateTable_Group_6 extends GroupToken {
	
	public CreateTable_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_PropertiesAssignment_6_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class CreateTable_CommaKeyword_6_0 extends KeywordToken  {
	
	public CreateTable_CommaKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getCommaKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CreateTable_PropertiesAssignment_5(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// properties+=TableProperty
protected class CreateTable_PropertiesAssignment_6_1 extends AssignmentToken  {
	
	public CreateTable_PropertiesAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getPropertiesAssignment_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableProperty_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("properties",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getTablePropertyRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCreateTableAccess().getPropertiesTablePropertyParserRuleCall_6_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CreateTable_CommaKeyword_6_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ")"
protected class CreateTable_RightParenthesisKeyword_7 extends KeywordToken  {
	
	public CreateTable_RightParenthesisKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getRightParenthesisKeyword_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CreateTable_PropertiesAssignment_5(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// ";"
protected class CreateTable_SemicolonKeyword_9 extends KeywordToken  {
	
	public CreateTable_SemicolonKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateTableAccess().getSemicolonKeyword_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateTable_RightParenthesisKeyword_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule CreateTable ****************/


/************ begin Rule CreateIndex ****************
 *
 * CreateIndex:
 * 	"CREATE" unique?="UNIQUE"? "INDEX" name=QID "ON" table=[CreateTable|QID] "(" columns+=[Column]
 * 	sortOrders+=SortDirectionEnum? ("," columns+=[Column] sortOrders+=SortDirectionEnum?)* ")" Other* ";";
 *
 **/

// "CREATE" unique?="UNIQUE"? "INDEX" name=QID "ON" table=[CreateTable|QID] "(" columns+=[Column]
// sortOrders+=SortDirectionEnum? ("," columns+=[Column] sortOrders+=SortDirectionEnum?)* ")" Other* ";"
protected class CreateIndex_Group extends GroupToken {
	
	public CreateIndex_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_SemicolonKeyword_12(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCreateIndexRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "CREATE"
protected class CreateIndex_CREATEKeyword_0 extends KeywordToken  {
	
	public CreateIndex_CREATEKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getCREATEKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// unique?="UNIQUE"?
protected class CreateIndex_UniqueAssignment_1 extends AssignmentToken  {
	
	public CreateIndex_UniqueAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getUniqueAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_CREATEKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("unique",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("unique");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCreateIndexAccess().getUniqueUNIQUEKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// "INDEX"
protected class CreateIndex_INDEXKeyword_2 extends KeywordToken  {
	
	public CreateIndex_INDEXKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getINDEXKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_UniqueAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CreateIndex_CREATEKeyword_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// name=QID
protected class CreateIndex_NameAssignment_3 extends AssignmentToken  {
	
	public CreateIndex_NameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getNameAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_INDEXKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCreateIndexAccess().getNameQIDParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getCreateIndexAccess().getNameQIDParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// "ON"
protected class CreateIndex_ONKeyword_4 extends KeywordToken  {
	
	public CreateIndex_ONKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getONKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_NameAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// table=[CreateTable|QID]
protected class CreateIndex_TableAssignment_5 extends AssignmentToken  {
	
	public CreateIndex_TableAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getTableAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_ONKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("table",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("table");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCreateIndexAccess().getTableCreateTableCrossReference_5_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCreateIndexAccess().getTableCreateTableCrossReference_5_0(); 
				return obj;
			}
		}
		return null;
	}

}

// "("
protected class CreateIndex_LeftParenthesisKeyword_6 extends KeywordToken  {
	
	public CreateIndex_LeftParenthesisKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getLeftParenthesisKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_TableAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columns+=[Column]
protected class CreateIndex_ColumnsAssignment_7 extends AssignmentToken  {
	
	public CreateIndex_ColumnsAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getColumnsAssignment_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_LeftParenthesisKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCreateIndexAccess().getColumnsColumnCrossReference_7_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCreateIndexAccess().getColumnsColumnCrossReference_7_0(); 
				return obj;
			}
		}
		return null;
	}

}

// sortOrders+=SortDirectionEnum?
protected class CreateIndex_SortOrdersAssignment_8 extends AssignmentToken  {
	
	public CreateIndex_SortOrdersAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getSortOrdersAssignment_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_ColumnsAssignment_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sortOrders",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sortOrders");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCreateIndexAccess().getSortOrdersSortDirectionEnumEnumRuleCall_8_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getCreateIndexAccess().getSortOrdersSortDirectionEnumEnumRuleCall_8_0();
			return obj;
		}
		return null;
	}

}

// ("," columns+=[Column] sortOrders+=SortDirectionEnum?)*
protected class CreateIndex_Group_9 extends GroupToken {
	
	public CreateIndex_Group_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getGroup_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_SortOrdersAssignment_9_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CreateIndex_ColumnsAssignment_9_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// ","
protected class CreateIndex_CommaKeyword_9_0 extends KeywordToken  {
	
	public CreateIndex_CommaKeyword_9_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getCommaKeyword_9_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_Group_9(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CreateIndex_SortOrdersAssignment_8(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CreateIndex_ColumnsAssignment_7(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// columns+=[Column]
protected class CreateIndex_ColumnsAssignment_9_1 extends AssignmentToken  {
	
	public CreateIndex_ColumnsAssignment_9_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getColumnsAssignment_9_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_CommaKeyword_9_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCreateIndexAccess().getColumnsColumnCrossReference_9_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCreateIndexAccess().getColumnsColumnCrossReference_9_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// sortOrders+=SortDirectionEnum?
protected class CreateIndex_SortOrdersAssignment_9_2 extends AssignmentToken  {
	
	public CreateIndex_SortOrdersAssignment_9_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getSortOrdersAssignment_9_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_ColumnsAssignment_9_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sortOrders",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sortOrders");
		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getCreateIndexAccess().getSortOrdersSortDirectionEnumEnumRuleCall_9_2_0(), value, null)) { 
			type = AssignmentType.ENUM_RULE_CALL;
			element = grammarAccess.getCreateIndexAccess().getSortOrdersSortDirectionEnumEnumRuleCall_9_2_0();
			return obj;
		}
		return null;
	}

}


// ")"
protected class CreateIndex_RightParenthesisKeyword_10 extends KeywordToken  {
	
	public CreateIndex_RightParenthesisKeyword_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getRightParenthesisKeyword_10();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_Group_9(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CreateIndex_SortOrdersAssignment_8(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CreateIndex_ColumnsAssignment_7(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// ";"
protected class CreateIndex_SemicolonKeyword_12 extends KeywordToken  {
	
	public CreateIndex_SemicolonKeyword_12(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCreateIndexAccess().getSemicolonKeyword_12();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CreateIndex_RightParenthesisKeyword_10(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule CreateIndex ****************/


/************ begin Rule TableProperty ****************
 *
 * TableProperty:
 * 	Column | Constraint;
 *
 **/

// Column | Constraint
protected class TableProperty_Alternatives extends AlternativesToken {

	public TableProperty_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getTablePropertyAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new TableProperty_ColumnParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new TableProperty_ConstraintParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getForeignKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullableConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrimaryKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUniqueKeyConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Column
protected class TableProperty_ColumnParserRuleCall_0 extends RuleCallToken {
	
	public TableProperty_ColumnParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getTablePropertyAccess().getColumnParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Column_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Constraint
protected class TableProperty_ConstraintParserRuleCall_1 extends RuleCallToken {
	
	public TableProperty_ConstraintParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getTablePropertyAccess().getConstraintParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getForeignKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullableConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrimaryKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUniqueKeyConstraintRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Constraint_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule TableProperty ****************/


/************ begin Rule Column ****************
 *
 * Column:
 * 	name=ID type=SqlDataType (sorted?="SORT" | constraint=Constraint | default=ColumnDefault |
 * 	reference=ReferenceClause)*;
 *
 **/

// name=ID type=SqlDataType (sorted?="SORT" | constraint=Constraint | default=ColumnDefault | reference=ReferenceClause)*
protected class Column_Group extends GroupToken {
	
	public Column_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getColumnAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Alternatives_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_TypeAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getColumnRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=ID
protected class Column_NameAssignment_0 extends AssignmentToken  {
	
	public Column_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getColumnAccess().getNameIDTerminalRuleCall_0_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getColumnAccess().getNameIDTerminalRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// type=SqlDataType
protected class Column_TypeAssignment_1 extends AssignmentToken  {
	
	public Column_TypeAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getTypeAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlDataType_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSqlDataTypeRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getColumnAccess().getTypeSqlDataTypeParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Column_NameAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (sorted?="SORT" | constraint=Constraint | default=ColumnDefault | reference=ReferenceClause)*
protected class Column_Alternatives_2 extends AlternativesToken {

	public Column_Alternatives_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getColumnAccess().getAlternatives_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_SortedAssignment_2_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_ConstraintAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Column_DefaultAssignment_2_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Column_ReferenceAssignment_2_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}

// sorted?="SORT"
protected class Column_SortedAssignment_2_0 extends AssignmentToken  {
	
	public Column_SortedAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getSortedAssignment_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Alternatives_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_TypeAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sorted",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sorted");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getColumnAccess().getSortedSORTKeyword_2_0_0();
			return obj;
		}
		return null;
	}

}

// constraint=Constraint
protected class Column_ConstraintAssignment_2_1 extends AssignmentToken  {
	
	public Column_ConstraintAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getConstraintAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("constraint",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("constraint");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getConstraintRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getColumnAccess().getConstraintConstraintParserRuleCall_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Column_Alternatives_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Column_TypeAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// default=ColumnDefault
protected class Column_DefaultAssignment_2_2 extends AssignmentToken  {
	
	public Column_DefaultAssignment_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getDefaultAssignment_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Column_Alternatives_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Column_TypeAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("default",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("default");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getColumnAccess().getDefaultColumnDefaultParserRuleCall_2_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getColumnAccess().getDefaultColumnDefaultParserRuleCall_2_2_0();
			return obj;
		}
		return null;
	}

}

// reference=ReferenceClause
protected class Column_ReferenceAssignment_2_3 extends AssignmentToken  {
	
	public Column_ReferenceAssignment_2_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getColumnAccess().getReferenceAssignment_2_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("reference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("reference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getReferenceClauseRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getColumnAccess().getReferenceReferenceClauseParserRuleCall_2_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Column_Alternatives_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Column_TypeAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule Column ****************/




/************ begin Rule Drop ****************
 *
 * Drop:
 * 	"DROP" object=DataBaseObject Other* ";";
 *
 **/

// "DROP" object=DataBaseObject Other* ";"
protected class Drop_Group extends GroupToken {
	
	public Drop_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDropAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Drop_SemicolonKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDropRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "DROP"
protected class Drop_DROPKeyword_0 extends KeywordToken  {
	
	public Drop_DROPKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDropAccess().getDROPKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// object=DataBaseObject
protected class Drop_ObjectAssignment_1 extends AssignmentToken  {
	
	public Drop_ObjectAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDropAccess().getObjectAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Drop_DROPKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("object",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("object");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDropAccess().getObjectDataBaseObjectParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDropAccess().getObjectDataBaseObjectParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ";"
protected class Drop_SemicolonKeyword_3 extends KeywordToken  {
	
	public Drop_SemicolonKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDropAccess().getSemicolonKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Drop_ObjectAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule Drop ****************/




/************ begin Rule Constraint ****************
 *
 * Constraint:
 * 	(NullableConstraint | UniqueKeyConstraint | PrimaryKeyConstraint | ForeignKeyConstraint | CheckConstraint) name=ID?;
 *
 **/

// (NullableConstraint | UniqueKeyConstraint | PrimaryKeyConstraint | ForeignKeyConstraint | CheckConstraint) name=ID?
protected class Constraint_Group extends GroupToken {
	
	public Constraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Constraint_Alternatives_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getForeignKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullableConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrimaryKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUniqueKeyConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// NullableConstraint | UniqueKeyConstraint | PrimaryKeyConstraint | ForeignKeyConstraint | CheckConstraint
protected class Constraint_Alternatives_0 extends AlternativesToken {

	public Constraint_Alternatives_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getConstraintAccess().getAlternatives_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_NullableConstraintParserRuleCall_0_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Constraint_UniqueKeyConstraintParserRuleCall_0_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Constraint_PrimaryKeyConstraintParserRuleCall_0_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Constraint_ForeignKeyConstraintParserRuleCall_0_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Constraint_CheckConstraintParserRuleCall_0_4(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getForeignKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getNullableConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getPrimaryKeyConstraintRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getUniqueKeyConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// NullableConstraint
protected class Constraint_NullableConstraintParserRuleCall_0_0 extends RuleCallToken {
	
	public Constraint_NullableConstraintParserRuleCall_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getConstraintAccess().getNullableConstraintParserRuleCall_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullableConstraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getNullableConstraintRule().getType().getClassifier())
			return null;
		if(checkForRecursion(NullableConstraint_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// UniqueKeyConstraint
protected class Constraint_UniqueKeyConstraintParserRuleCall_0_1 extends RuleCallToken {
	
	public Constraint_UniqueKeyConstraintParserRuleCall_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getConstraintAccess().getUniqueKeyConstraintParserRuleCall_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getUniqueKeyConstraintRule().getType().getClassifier())
			return null;
		if(checkForRecursion(UniqueKeyConstraint_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// PrimaryKeyConstraint
protected class Constraint_PrimaryKeyConstraintParserRuleCall_0_2 extends RuleCallToken {
	
	public Constraint_PrimaryKeyConstraintParserRuleCall_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getConstraintAccess().getPrimaryKeyConstraintParserRuleCall_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPrimaryKeyConstraintRule().getType().getClassifier())
			return null;
		if(checkForRecursion(PrimaryKeyConstraint_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ForeignKeyConstraint
protected class Constraint_ForeignKeyConstraintParserRuleCall_0_3 extends RuleCallToken {
	
	public Constraint_ForeignKeyConstraintParserRuleCall_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getConstraintAccess().getForeignKeyConstraintParserRuleCall_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getForeignKeyConstraintRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ForeignKeyConstraint_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CheckConstraint
protected class Constraint_CheckConstraintParserRuleCall_0_4 extends UnassignedTextToken {

	public Constraint_CheckConstraintParserRuleCall_0_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getConstraintAccess().getCheckConstraintParserRuleCall_0_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}


// name=ID?
protected class Constraint_NameAssignment_1 extends AssignmentToken  {
	
	public Constraint_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getConstraintAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Constraint_Alternatives_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getConstraintAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getConstraintAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Constraint ****************/


/************ begin Rule NullableConstraint ****************
 *
 * NullableConstraint:
 * 	("CONSTRAINT" name=ID)? not?="NOT"? "NULL";
 *
 **/

// ("CONSTRAINT" name=ID)? not?="NOT"? "NULL"
protected class NullableConstraint_Group extends GroupToken {
	
	public NullableConstraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getNullableConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullableConstraint_NULLKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getNullableConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ("CONSTRAINT" name=ID)?
protected class NullableConstraint_Group_0 extends GroupToken {
	
	public NullableConstraint_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getNullableConstraintAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullableConstraint_NameAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "CONSTRAINT"
protected class NullableConstraint_CONSTRAINTKeyword_0_0 extends KeywordToken  {
	
	public NullableConstraint_CONSTRAINTKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getNullableConstraintAccess().getCONSTRAINTKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class NullableConstraint_NameAssignment_0_1 extends AssignmentToken  {
	
	public NullableConstraint_NameAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getNullableConstraintAccess().getNameAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullableConstraint_CONSTRAINTKeyword_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getNullableConstraintAccess().getNameIDTerminalRuleCall_0_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getNullableConstraintAccess().getNameIDTerminalRuleCall_0_1_0();
			return obj;
		}
		return null;
	}

}


// not?="NOT"?
protected class NullableConstraint_NotAssignment_1 extends AssignmentToken  {
	
	public NullableConstraint_NotAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getNullableConstraintAccess().getNotAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullableConstraint_Group_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("not",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("not");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getNullableConstraintAccess().getNotNOTKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// "NULL"
protected class NullableConstraint_NULLKeyword_2 extends KeywordToken  {
	
	public NullableConstraint_NULLKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getNullableConstraintAccess().getNULLKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new NullableConstraint_NotAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new NullableConstraint_Group_0(lastRuleCallOrigin, this, 1, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 2, inst);
		}	
	}

}


/************ end Rule NullableConstraint ****************/


/************ begin Rule UniqueKeyConstraint ****************
 *
 * UniqueKeyConstraint:
 * 	("CONSTRAINT" name=ID)? "UNIQUE" "KEY"? ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")?;
 *
 **/

// ("CONSTRAINT" name=ID)? "UNIQUE" "KEY"? ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")?
protected class UniqueKeyConstraint_Group extends GroupToken {
	
	public UniqueKeyConstraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UniqueKeyConstraint_UNIQUEKeyword_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getUniqueKeyConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ("CONSTRAINT" name=ID)?
protected class UniqueKeyConstraint_Group_0 extends GroupToken {
	
	public UniqueKeyConstraint_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_NameAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "CONSTRAINT"
protected class UniqueKeyConstraint_CONSTRAINTKeyword_0_0 extends KeywordToken  {
	
	public UniqueKeyConstraint_CONSTRAINTKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getCONSTRAINTKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class UniqueKeyConstraint_NameAssignment_0_1 extends AssignmentToken  {
	
	public UniqueKeyConstraint_NameAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getNameAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_CONSTRAINTKeyword_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getUniqueKeyConstraintAccess().getNameIDTerminalRuleCall_0_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getUniqueKeyConstraintAccess().getNameIDTerminalRuleCall_0_1_0();
			return obj;
		}
		return null;
	}

}


// "UNIQUE"
protected class UniqueKeyConstraint_UNIQUEKeyword_1 extends KeywordToken  {
	
	public UniqueKeyConstraint_UNIQUEKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getUNIQUEKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_Group_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")?
protected class UniqueKeyConstraint_Group_3 extends GroupToken {
	
	public UniqueKeyConstraint_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_RightParenthesisKeyword_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class UniqueKeyConstraint_LeftParenthesisKeyword_3_0 extends KeywordToken  {
	
	public UniqueKeyConstraint_LeftParenthesisKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getLeftParenthesisKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_UNIQUEKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class UniqueKeyConstraint_ColumnsAssignment_3_1 extends AssignmentToken  {
	
	public UniqueKeyConstraint_ColumnsAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getColumnsAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_LeftParenthesisKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUniqueKeyConstraintAccess().getColumnsColumnCrossReference_3_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getUniqueKeyConstraintAccess().getColumnsColumnCrossReference_3_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("," columns+=[Column|QID])*
protected class UniqueKeyConstraint_Group_3_2 extends GroupToken {
	
	public UniqueKeyConstraint_Group_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getGroup_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_ColumnsAssignment_3_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class UniqueKeyConstraint_CommaKeyword_3_2_0 extends KeywordToken  {
	
	public UniqueKeyConstraint_CommaKeyword_3_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getCommaKeyword_3_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UniqueKeyConstraint_ColumnsAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class UniqueKeyConstraint_ColumnsAssignment_3_2_1 extends AssignmentToken  {
	
	public UniqueKeyConstraint_ColumnsAssignment_3_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getColumnsAssignment_3_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_CommaKeyword_3_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getUniqueKeyConstraintAccess().getColumnsColumnCrossReference_3_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getUniqueKeyConstraintAccess().getColumnsColumnCrossReference_3_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ")"
protected class UniqueKeyConstraint_RightParenthesisKeyword_3_3 extends KeywordToken  {
	
	public UniqueKeyConstraint_RightParenthesisKeyword_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getUniqueKeyConstraintAccess().getRightParenthesisKeyword_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new UniqueKeyConstraint_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new UniqueKeyConstraint_ColumnsAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule UniqueKeyConstraint ****************/


/************ begin Rule PrimaryKeyConstraint ****************
 *
 * PrimaryKeyConstraint:
 * 	("CONSTRAINT" name=ID)? "PRIMARY" "KEY" ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")?;
 *
 **/

// ("CONSTRAINT" name=ID)? "PRIMARY" "KEY" ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")?
protected class PrimaryKeyConstraint_Group extends GroupToken {
	
	public PrimaryKeyConstraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PrimaryKeyConstraint_KEYKeyword_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPrimaryKeyConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// ("CONSTRAINT" name=ID)?
protected class PrimaryKeyConstraint_Group_0 extends GroupToken {
	
	public PrimaryKeyConstraint_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_NameAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "CONSTRAINT"
protected class PrimaryKeyConstraint_CONSTRAINTKeyword_0_0 extends KeywordToken  {
	
	public PrimaryKeyConstraint_CONSTRAINTKeyword_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getCONSTRAINTKeyword_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// name=ID
protected class PrimaryKeyConstraint_NameAssignment_0_1 extends AssignmentToken  {
	
	public PrimaryKeyConstraint_NameAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getNameAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_CONSTRAINTKeyword_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPrimaryKeyConstraintAccess().getNameIDTerminalRuleCall_0_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getPrimaryKeyConstraintAccess().getNameIDTerminalRuleCall_0_1_0();
			return obj;
		}
		return null;
	}

}


// "PRIMARY"
protected class PrimaryKeyConstraint_PRIMARYKeyword_1 extends KeywordToken  {
	
	public PrimaryKeyConstraint_PRIMARYKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getPRIMARYKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_Group_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// "KEY"
protected class PrimaryKeyConstraint_KEYKeyword_2 extends KeywordToken  {
	
	public PrimaryKeyConstraint_KEYKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getKEYKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_PRIMARYKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")?
protected class PrimaryKeyConstraint_Group_3 extends GroupToken {
	
	public PrimaryKeyConstraint_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_RightParenthesisKeyword_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class PrimaryKeyConstraint_LeftParenthesisKeyword_3_0 extends KeywordToken  {
	
	public PrimaryKeyConstraint_LeftParenthesisKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getLeftParenthesisKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_KEYKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class PrimaryKeyConstraint_ColumnsAssignment_3_1 extends AssignmentToken  {
	
	public PrimaryKeyConstraint_ColumnsAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getColumnsAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_LeftParenthesisKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPrimaryKeyConstraintAccess().getColumnsColumnCrossReference_3_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getPrimaryKeyConstraintAccess().getColumnsColumnCrossReference_3_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("," columns+=[Column|QID])*
protected class PrimaryKeyConstraint_Group_3_2 extends GroupToken {
	
	public PrimaryKeyConstraint_Group_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getGroup_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_ColumnsAssignment_3_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class PrimaryKeyConstraint_CommaKeyword_3_2_0 extends KeywordToken  {
	
	public PrimaryKeyConstraint_CommaKeyword_3_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getCommaKeyword_3_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PrimaryKeyConstraint_ColumnsAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class PrimaryKeyConstraint_ColumnsAssignment_3_2_1 extends AssignmentToken  {
	
	public PrimaryKeyConstraint_ColumnsAssignment_3_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getColumnsAssignment_3_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_CommaKeyword_3_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPrimaryKeyConstraintAccess().getColumnsColumnCrossReference_3_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getPrimaryKeyConstraintAccess().getColumnsColumnCrossReference_3_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ")"
protected class PrimaryKeyConstraint_RightParenthesisKeyword_3_3 extends KeywordToken  {
	
	public PrimaryKeyConstraint_RightParenthesisKeyword_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPrimaryKeyConstraintAccess().getRightParenthesisKeyword_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PrimaryKeyConstraint_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PrimaryKeyConstraint_ColumnsAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule PrimaryKeyConstraint ****************/



/************ begin Rule ForeignKeyConstraint ****************
 *
 * ForeignKeyConstraint:
 * 	"FOREIGN" "KEY" "(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")" reference=ReferenceClause;
 *
 **/

// "FOREIGN" "KEY" "(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")" reference=ReferenceClause
protected class ForeignKeyConstraint_Group extends GroupToken {
	
	public ForeignKeyConstraint_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_ReferenceAssignment_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getForeignKeyConstraintRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "FOREIGN"
protected class ForeignKeyConstraint_FOREIGNKeyword_0 extends KeywordToken  {
	
	public ForeignKeyConstraint_FOREIGNKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getFOREIGNKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "KEY"
protected class ForeignKeyConstraint_KEYKeyword_1 extends KeywordToken  {
	
	public ForeignKeyConstraint_KEYKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getKEYKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_FOREIGNKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class ForeignKeyConstraint_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public ForeignKeyConstraint_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_KEYKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class ForeignKeyConstraint_ColumnsAssignment_3 extends AssignmentToken  {
	
	public ForeignKeyConstraint_ColumnsAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getColumnsAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_LeftParenthesisKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getForeignKeyConstraintAccess().getColumnsColumnCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getForeignKeyConstraintAccess().getColumnsColumnCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("," columns+=[Column|QID])*
protected class ForeignKeyConstraint_Group_4 extends GroupToken {
	
	public ForeignKeyConstraint_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_ColumnsAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class ForeignKeyConstraint_CommaKeyword_4_0 extends KeywordToken  {
	
	public ForeignKeyConstraint_CommaKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getCommaKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ForeignKeyConstraint_ColumnsAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class ForeignKeyConstraint_ColumnsAssignment_4_1 extends AssignmentToken  {
	
	public ForeignKeyConstraint_ColumnsAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getColumnsAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_CommaKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getForeignKeyConstraintAccess().getColumnsColumnCrossReference_4_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getForeignKeyConstraintAccess().getColumnsColumnCrossReference_4_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ")"
protected class ForeignKeyConstraint_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public ForeignKeyConstraint_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ForeignKeyConstraint_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ForeignKeyConstraint_ColumnsAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// reference=ReferenceClause
protected class ForeignKeyConstraint_ReferenceAssignment_6 extends AssignmentToken  {
	
	public ForeignKeyConstraint_ReferenceAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getForeignKeyConstraintAccess().getReferenceAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("reference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("reference");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getReferenceClauseRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getForeignKeyConstraintAccess().getReferenceReferenceClauseParserRuleCall_6_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ForeignKeyConstraint_RightParenthesisKeyword_5(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule ForeignKeyConstraint ****************/


/************ begin Rule ReferenceClause ****************
 *
 * ReferenceClause:
 * 	"REFERENCES" table=[CreateTable|QID] ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")? Other*;
 *
 **/

// "REFERENCES" table=[CreateTable|QID] ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")? Other*
protected class ReferenceClause_Group extends GroupToken {
	
	public ReferenceClause_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceClause_TableAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getReferenceClauseRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "REFERENCES"
protected class ReferenceClause_REFERENCESKeyword_0 extends KeywordToken  {
	
	public ReferenceClause_REFERENCESKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getREFERENCESKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// table=[CreateTable|QID]
protected class ReferenceClause_TableAssignment_1 extends AssignmentToken  {
	
	public ReferenceClause_TableAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getTableAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_REFERENCESKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("table",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("table");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getReferenceClauseAccess().getTableCreateTableCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getReferenceClauseAccess().getTableCreateTableCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("(" columns+=[Column|QID] ("," columns+=[Column|QID])* ")")?
protected class ReferenceClause_Group_2 extends GroupToken {
	
	public ReferenceClause_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_RightParenthesisKeyword_2_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class ReferenceClause_LeftParenthesisKeyword_2_0 extends KeywordToken  {
	
	public ReferenceClause_LeftParenthesisKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getLeftParenthesisKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_TableAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class ReferenceClause_ColumnsAssignment_2_1 extends AssignmentToken  {
	
	public ReferenceClause_ColumnsAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getColumnsAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_LeftParenthesisKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getReferenceClauseAccess().getColumnsColumnCrossReference_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getReferenceClauseAccess().getColumnsColumnCrossReference_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// ("," columns+=[Column|QID])*
protected class ReferenceClause_Group_2_2 extends GroupToken {
	
	public ReferenceClause_Group_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getGroup_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_ColumnsAssignment_2_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class ReferenceClause_CommaKeyword_2_2_0 extends KeywordToken  {
	
	public ReferenceClause_CommaKeyword_2_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getCommaKeyword_2_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_Group_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceClause_ColumnsAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// columns+=[Column|QID]
protected class ReferenceClause_ColumnsAssignment_2_2_1 extends AssignmentToken  {
	
	public ReferenceClause_ColumnsAssignment_2_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getColumnsAssignment_2_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_CommaKeyword_2_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("columns",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("columns");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getReferenceClauseAccess().getColumnsColumnCrossReference_2_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getReferenceClauseAccess().getColumnsColumnCrossReference_2_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// ")"
protected class ReferenceClause_RightParenthesisKeyword_2_3 extends KeywordToken  {
	
	public ReferenceClause_RightParenthesisKeyword_2_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceClauseAccess().getRightParenthesisKeyword_2_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceClause_Group_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceClause_ColumnsAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule ReferenceClause ****************/


/************ begin Rule SqlDataType ****************
 *
 * SqlDataType:
 * 	(SqlCharacter | SqlNumber | LongRaw | SqlDateTime | LargeObjectType | RowIdType | SqlBoolean) name=ID?;
 *
 **/

// (SqlCharacter | SqlNumber | LongRaw | SqlDateTime | LargeObjectType | RowIdType | SqlBoolean) name=ID?
protected class SqlDataType_Group extends GroupToken {
	
	public SqlDataType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlDataType_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlDataType_Alternatives_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLargeObjectTypeRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getLongRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRawRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRowIdTypeRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlBooleanRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlCharacterRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlDateRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlIntervalRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlNumberRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlTimeStampRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// SqlCharacter | SqlNumber | LongRaw | SqlDateTime | LargeObjectType | RowIdType | SqlBoolean
protected class SqlDataType_Alternatives_0 extends AlternativesToken {

	public SqlDataType_Alternatives_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getAlternatives_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlDataType_SqlCharacterParserRuleCall_0_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlDataType_SqlNumberParserRuleCall_0_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SqlDataType_LongRawParserRuleCall_0_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new SqlDataType_SqlDateTimeParserRuleCall_0_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new SqlDataType_LargeObjectTypeParserRuleCall_0_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new SqlDataType_RowIdTypeParserRuleCall_0_5(lastRuleCallOrigin, this, 5, inst);
			case 6: return new SqlDataType_SqlBooleanParserRuleCall_0_6(lastRuleCallOrigin, this, 6, inst);
			default: return null;
		}	
	}

}

// SqlCharacter
protected class SqlDataType_SqlCharacterParserRuleCall_0_0 extends RuleCallToken {
	
	public SqlDataType_SqlCharacterParserRuleCall_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getSqlCharacterParserRuleCall_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlCharacter_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlCharacterRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SqlCharacter_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// SqlNumber
protected class SqlDataType_SqlNumberParserRuleCall_0_1 extends RuleCallToken {
	
	public SqlDataType_SqlNumberParserRuleCall_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getSqlNumberParserRuleCall_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlNumberRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SqlNumber_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// LongRaw
protected class SqlDataType_LongRawParserRuleCall_0_2 extends RuleCallToken {
	
	public SqlDataType_LongRawParserRuleCall_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getLongRawParserRuleCall_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LongRaw_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLongRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRawRule().getType().getClassifier())
			return null;
		if(checkForRecursion(LongRaw_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// SqlDateTime
protected class SqlDataType_SqlDateTimeParserRuleCall_0_3 extends RuleCallToken {
	
	public SqlDataType_SqlDateTimeParserRuleCall_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getSqlDateTimeParserRuleCall_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlDateTime_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlDateRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlIntervalRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlTimeStampRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SqlDateTime_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// LargeObjectType
protected class SqlDataType_LargeObjectTypeParserRuleCall_0_4 extends RuleCallToken {
	
	public SqlDataType_LargeObjectTypeParserRuleCall_0_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getLargeObjectTypeParserRuleCall_0_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LargeObjectType_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLargeObjectTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(LargeObjectType_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// RowIdType
protected class SqlDataType_RowIdTypeParserRuleCall_0_5 extends RuleCallToken {
	
	public SqlDataType_RowIdTypeParserRuleCall_0_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getRowIdTypeParserRuleCall_0_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RowIdType_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRowIdTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(RowIdType_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// SqlBoolean
protected class SqlDataType_SqlBooleanParserRuleCall_0_6 extends RuleCallToken {
	
	public SqlDataType_SqlBooleanParserRuleCall_0_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getSqlBooleanParserRuleCall_0_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlBoolean_NameAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlBooleanRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SqlBoolean_NameAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


// name=ID?
protected class SqlDataType_NameAssignment_1 extends AssignmentToken  {
	
	public SqlDataType_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlDataTypeAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlDataType_Alternatives_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlDataTypeAccess().getNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlDataTypeAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule SqlDataType ****************/


/************ begin Rule SqlCharacter ****************
 *
 * SqlCharacter:
 * 	national?="NATIONAL"? name=("CHAR" | "VARCHAR2" | "VARCHAR" | "CHARACTER" | "NCHAR" | "NVARCHAR2") "VARYING"? ("("
 * 	size=INT ("BYTE" | "CHAR")? ")")?;
 *
 **/

// national?="NATIONAL"? name=("CHAR" | "VARCHAR2" | "VARCHAR" | "CHARACTER" | "NCHAR" | "NVARCHAR2") "VARYING"? ("("
// size=INT ("BYTE" | "CHAR")? ")")?
protected class SqlCharacter_Group extends GroupToken {
	
	public SqlCharacter_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlCharacterAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlCharacter_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlCharacter_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlCharacterRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// national?="NATIONAL"?
protected class SqlCharacter_NationalAssignment_0 extends AssignmentToken  {
	
	public SqlCharacter_NationalAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlCharacterAccess().getNationalAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("national",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("national");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlCharacterAccess().getNationalNATIONALKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// name=("CHAR" | "VARCHAR2" | "VARCHAR" | "CHARACTER" | "NCHAR" | "NVARCHAR2")
protected class SqlCharacter_NameAssignment_1 extends AssignmentToken  {
	
	public SqlCharacter_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlCharacterAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlCharacter_NationalAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlCharacterAccess().getNameCHARKeyword_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlCharacterAccess().getNameCHARKeyword_1_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlCharacterAccess().getNameVARCHAR2Keyword_1_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlCharacterAccess().getNameVARCHAR2Keyword_1_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlCharacterAccess().getNameVARCHARKeyword_1_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlCharacterAccess().getNameVARCHARKeyword_1_0_2();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlCharacterAccess().getNameCHARACTERKeyword_1_0_3(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlCharacterAccess().getNameCHARACTERKeyword_1_0_3();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlCharacterAccess().getNameNCHARKeyword_1_0_4(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlCharacterAccess().getNameNCHARKeyword_1_0_4();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlCharacterAccess().getNameNVARCHAR2Keyword_1_0_5(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlCharacterAccess().getNameNVARCHAR2Keyword_1_0_5();
			return obj;
		}
		return null;
	}

}

// ("(" size=INT ("BYTE" | "CHAR")? ")")?
protected class SqlCharacter_Group_3 extends GroupToken {
	
	public SqlCharacter_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlCharacterAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlCharacter_RightParenthesisKeyword_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class SqlCharacter_LeftParenthesisKeyword_3_0 extends KeywordToken  {
	
	public SqlCharacter_LeftParenthesisKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlCharacterAccess().getLeftParenthesisKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlCharacter_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// size=INT
protected class SqlCharacter_SizeAssignment_3_1 extends AssignmentToken  {
	
	public SqlCharacter_SizeAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlCharacterAccess().getSizeAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlCharacter_LeftParenthesisKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("size",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("size");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlCharacterAccess().getSizeINTTerminalRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlCharacterAccess().getSizeINTTerminalRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class SqlCharacter_RightParenthesisKeyword_3_3 extends KeywordToken  {
	
	public SqlCharacter_RightParenthesisKeyword_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlCharacterAccess().getRightParenthesisKeyword_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlCharacter_SizeAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule SqlCharacter ****************/


/************ begin Rule SqlNumber ****************
 *
 * SqlNumber:
 * 	name=("NUMBER" | "NUMERIC" | "DECIMAL" | "DEC" | "INTEGER" | "INT" | "SMALLINT" | "BIGINT" | "FLOAT" | "DOUBLE" |
 * 	"REAL" | "BINARY_FLOAT" | "BINARY_DOUBLE") hasPrecision?="PRECISION"? ("(" precision=INT ("," scale=INT)? ")")?;
 *
 **/

// name=("NUMBER" | "NUMERIC" | "DECIMAL" | "DEC" | "INTEGER" | "INT" | "SMALLINT" | "BIGINT" | "FLOAT" | "DOUBLE" | "REAL"
// | "BINARY_FLOAT" | "BINARY_DOUBLE") hasPrecision?="PRECISION"? ("(" precision=INT ("," scale=INT)? ")")?
protected class SqlNumber_Group extends GroupToken {
	
	public SqlNumber_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlNumber_HasPrecisionAssignment_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SqlNumber_NameAssignment_0(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlNumberRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=("NUMBER" | "NUMERIC" | "DECIMAL" | "DEC" | "INTEGER" | "INT" | "SMALLINT" | "BIGINT" | "FLOAT" | "DOUBLE" | "REAL"
// | "BINARY_FLOAT" | "BINARY_DOUBLE")
protected class SqlNumber_NameAssignment_0 extends AssignmentToken  {
	
	public SqlNumber_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameNUMBERKeyword_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameNUMBERKeyword_0_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameNUMERICKeyword_0_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameNUMERICKeyword_0_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameDECIMALKeyword_0_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameDECIMALKeyword_0_0_2();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameDECKeyword_0_0_3(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameDECKeyword_0_0_3();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameINTEGERKeyword_0_0_4(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameINTEGERKeyword_0_0_4();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameINTKeyword_0_0_5(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameINTKeyword_0_0_5();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameSMALLINTKeyword_0_0_6(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameSMALLINTKeyword_0_0_6();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameBIGINTKeyword_0_0_7(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameBIGINTKeyword_0_0_7();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameFLOATKeyword_0_0_8(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameFLOATKeyword_0_0_8();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameDOUBLEKeyword_0_0_9(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameDOUBLEKeyword_0_0_9();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameREALKeyword_0_0_10(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameREALKeyword_0_0_10();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameBINARY_FLOATKeyword_0_0_11(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameBINARY_FLOATKeyword_0_0_11();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getNameBINARY_DOUBLEKeyword_0_0_12(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getNameBINARY_DOUBLEKeyword_0_0_12();
			return obj;
		}
		return null;
	}

}

// hasPrecision?="PRECISION"?
protected class SqlNumber_HasPrecisionAssignment_1 extends AssignmentToken  {
	
	public SqlNumber_HasPrecisionAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getHasPrecisionAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("hasPrecision",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("hasPrecision");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlNumberAccess().getHasPrecisionPRECISIONKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// ("(" precision=INT ("," scale=INT)? ")")?
protected class SqlNumber_Group_2 extends GroupToken {
	
	public SqlNumber_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_RightParenthesisKeyword_2_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class SqlNumber_LeftParenthesisKeyword_2_0 extends KeywordToken  {
	
	public SqlNumber_LeftParenthesisKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getLeftParenthesisKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_HasPrecisionAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlNumber_NameAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// precision=INT
protected class SqlNumber_PrecisionAssignment_2_1 extends AssignmentToken  {
	
	public SqlNumber_PrecisionAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getPrecisionAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_LeftParenthesisKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("precision",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("precision");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getPrecisionINTTerminalRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlNumberAccess().getPrecisionINTTerminalRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}

// ("," scale=INT)?
protected class SqlNumber_Group_2_2 extends GroupToken {
	
	public SqlNumber_Group_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getGroup_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_ScaleAssignment_2_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class SqlNumber_CommaKeyword_2_2_0 extends KeywordToken  {
	
	public SqlNumber_CommaKeyword_2_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getCommaKeyword_2_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_PrecisionAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// scale=INT
protected class SqlNumber_ScaleAssignment_2_2_1 extends AssignmentToken  {
	
	public SqlNumber_ScaleAssignment_2_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getScaleAssignment_2_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_CommaKeyword_2_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("scale",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("scale");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlNumberAccess().getScaleINTTerminalRuleCall_2_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlNumberAccess().getScaleINTTerminalRuleCall_2_2_1_0();
			return obj;
		}
		return null;
	}

}


// ")"
protected class SqlNumber_RightParenthesisKeyword_2_3 extends KeywordToken  {
	
	public SqlNumber_RightParenthesisKeyword_2_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlNumberAccess().getRightParenthesisKeyword_2_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlNumber_Group_2_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlNumber_PrecisionAssignment_2_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule SqlNumber ****************/


/************ begin Rule LongRaw ****************
 *
 * LongRaw:
 * 	Long | Raw;
 *
 **/

// Long | Raw
protected class LongRaw_Alternatives extends AlternativesToken {

	public LongRaw_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getLongRawAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LongRaw_LongParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new LongRaw_RawParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLongRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getRawRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// Long
protected class LongRaw_LongParserRuleCall_0 extends RuleCallToken {
	
	public LongRaw_LongParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLongRawAccess().getLongParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Long_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLongRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Long_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// Raw
protected class LongRaw_RawParserRuleCall_1 extends RuleCallToken {
	
	public LongRaw_RawParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getLongRawAccess().getRawParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Raw_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRawRule().getType().getClassifier())
			return null;
		if(checkForRecursion(Raw_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule LongRaw ****************/


/************ begin Rule Long ****************
 *
 * Long:
 * 	name="LONG" raw?="RAW";
 *
 **/

// name="LONG" raw?="RAW"
protected class Long_Group extends GroupToken {
	
	public Long_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getLongAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Long_RawAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLongRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name="LONG"
protected class Long_NameAssignment_0 extends AssignmentToken  {
	
	public Long_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLongAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLongAccess().getNameLONGKeyword_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLongAccess().getNameLONGKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// raw?="RAW"
protected class Long_RawAssignment_1 extends AssignmentToken  {
	
	public Long_RawAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLongAccess().getRawAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Long_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("raw",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("raw");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLongAccess().getRawRAWKeyword_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Long ****************/


/************ begin Rule Raw ****************
 *
 * Raw:
 * 	name="RAW" "(" size=INT ")";
 *
 **/

// name="RAW" "(" size=INT ")"
protected class Raw_Group extends GroupToken {
	
	public Raw_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRawAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Raw_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRawRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name="RAW"
protected class Raw_NameAssignment_0 extends AssignmentToken  {
	
	public Raw_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRawAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRawAccess().getNameRAWKeyword_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRawAccess().getNameRAWKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class Raw_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public Raw_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRawAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Raw_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// size=INT
protected class Raw_SizeAssignment_2 extends AssignmentToken  {
	
	public Raw_SizeAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRawAccess().getSizeAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Raw_LeftParenthesisKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("size",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("size");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getRawAccess().getSizeINTTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getRawAccess().getSizeINTTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class Raw_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public Raw_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRawAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Raw_SizeAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule Raw ****************/


/************ begin Rule SqlDateTime ****************
 *
 * SqlDateTime:
 * 	SqlDate | SqlTimeStamp | SqlInterval;
 *
 **/

// SqlDate | SqlTimeStamp | SqlInterval
protected class SqlDateTime_Alternatives extends AlternativesToken {

	public SqlDateTime_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getSqlDateTimeAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlDateTime_SqlDateParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlDateTime_SqlTimeStampParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SqlDateTime_SqlIntervalParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlDateRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlIntervalRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getSqlTimeStampRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// SqlDate
protected class SqlDateTime_SqlDateParserRuleCall_0 extends RuleCallToken {
	
	public SqlDateTime_SqlDateParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDateTimeAccess().getSqlDateParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlDate_NameAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlDateRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SqlDate_NameAssignment.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// SqlTimeStamp
protected class SqlDateTime_SqlTimeStampParserRuleCall_1 extends RuleCallToken {
	
	public SqlDateTime_SqlTimeStampParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDateTimeAccess().getSqlTimeStampParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlTimeStamp_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlTimeStampRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SqlTimeStamp_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// SqlInterval
protected class SqlDateTime_SqlIntervalParserRuleCall_2 extends RuleCallToken {
	
	public SqlDateTime_SqlIntervalParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getSqlDateTimeAccess().getSqlIntervalParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlIntervalRule().getType().getClassifier())
			return null;
		if(checkForRecursion(SqlInterval_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule SqlDateTime ****************/


/************ begin Rule SqlDate ****************
 *
 * SqlDate:
 * 	name="DATE";
 *
 **/

// name="DATE"
protected class SqlDate_NameAssignment extends AssignmentToken  {
	
	public SqlDate_NameAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlDateAccess().getNameAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlDateRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlDateAccess().getNameDATEKeyword_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlDateAccess().getNameDATEKeyword_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule SqlDate ****************/


/************ begin Rule SqlTimeStamp ****************
 *
 * SqlTimeStamp:
 * 	name="TIMESTAMP" ("(" precision=INT ")")? ("WITH" "LOCAL"? "TIME" "ZONE")?;
 *
 **/

// name="TIMESTAMP" ("(" precision=INT ")")? ("WITH" "LOCAL"? "TIME" "ZONE")?
protected class SqlTimeStamp_Group extends GroupToken {
	
	public SqlTimeStamp_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlTimeStampAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlTimeStamp_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlTimeStamp_NameAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlTimeStampRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name="TIMESTAMP"
protected class SqlTimeStamp_NameAssignment_0 extends AssignmentToken  {
	
	public SqlTimeStamp_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlTimeStampAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlTimeStampAccess().getNameTIMESTAMPKeyword_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlTimeStampAccess().getNameTIMESTAMPKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// ("(" precision=INT ")")?
protected class SqlTimeStamp_Group_1 extends GroupToken {
	
	public SqlTimeStamp_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlTimeStampAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlTimeStamp_RightParenthesisKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class SqlTimeStamp_LeftParenthesisKeyword_1_0 extends KeywordToken  {
	
	public SqlTimeStamp_LeftParenthesisKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlTimeStampAccess().getLeftParenthesisKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlTimeStamp_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// precision=INT
protected class SqlTimeStamp_PrecisionAssignment_1_1 extends AssignmentToken  {
	
	public SqlTimeStamp_PrecisionAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlTimeStampAccess().getPrecisionAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlTimeStamp_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("precision",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("precision");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlTimeStampAccess().getPrecisionINTTerminalRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlTimeStampAccess().getPrecisionINTTerminalRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class SqlTimeStamp_RightParenthesisKeyword_1_2 extends KeywordToken  {
	
	public SqlTimeStamp_RightParenthesisKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlTimeStampAccess().getRightParenthesisKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlTimeStamp_PrecisionAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule SqlTimeStamp ****************/


/************ begin Rule SqlInterval ****************
 *
 * SqlInterval:
 * 	name="INTERVAL" year?="YEAR" | day?="DAY" ("(" precision=INT ")")? "TO" "MONTH" | "SECOND" ("(" secondsPrecision=INT
 * 	")")?;
 *
 **/

// name="INTERVAL" year?="YEAR" | day?="DAY" ("(" precision=INT ")")? "TO" "MONTH" | "SECOND" ("(" secondsPrecision=INT
// ")")?
protected class SqlInterval_Alternatives extends AlternativesToken {

	public SqlInterval_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlInterval_Group_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new SqlInterval_Group_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlIntervalRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name="INTERVAL" year?="YEAR"
protected class SqlInterval_Group_0 extends GroupToken {
	
	public SqlInterval_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_YearAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name="INTERVAL"
protected class SqlInterval_NameAssignment_0_0 extends AssignmentToken  {
	
	public SqlInterval_NameAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getNameAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlIntervalAccess().getNameINTERVALKeyword_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlIntervalAccess().getNameINTERVALKeyword_0_0_0();
			return obj;
		}
		return null;
	}

}

// year?="YEAR"
protected class SqlInterval_YearAssignment_0_1 extends AssignmentToken  {
	
	public SqlInterval_YearAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getYearAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_NameAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("year",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("year");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlIntervalAccess().getYearYEARKeyword_0_1_0();
			return obj;
		}
		return null;
	}

}


// day?="DAY" ("(" precision=INT ")")? "TO" "MONTH"
protected class SqlInterval_Group_1 extends GroupToken {
	
	public SqlInterval_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_MONTHKeyword_1_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// day?="DAY"
protected class SqlInterval_DayAssignment_1_0 extends AssignmentToken  {
	
	public SqlInterval_DayAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getDayAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("day",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("day");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlIntervalAccess().getDayDAYKeyword_1_0_0();
			return obj;
		}
		return null;
	}

}

// ("(" precision=INT ")")?
protected class SqlInterval_Group_1_1 extends GroupToken {
	
	public SqlInterval_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_RightParenthesisKeyword_1_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class SqlInterval_LeftParenthesisKeyword_1_1_0 extends KeywordToken  {
	
	public SqlInterval_LeftParenthesisKeyword_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getLeftParenthesisKeyword_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_DayAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// precision=INT
protected class SqlInterval_PrecisionAssignment_1_1_1 extends AssignmentToken  {
	
	public SqlInterval_PrecisionAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getPrecisionAssignment_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_LeftParenthesisKeyword_1_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("precision",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("precision");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlIntervalAccess().getPrecisionINTTerminalRuleCall_1_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlIntervalAccess().getPrecisionINTTerminalRuleCall_1_1_1_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class SqlInterval_RightParenthesisKeyword_1_1_2 extends KeywordToken  {
	
	public SqlInterval_RightParenthesisKeyword_1_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getRightParenthesisKeyword_1_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_PrecisionAssignment_1_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// "TO"
protected class SqlInterval_TOKeyword_1_2 extends KeywordToken  {
	
	public SqlInterval_TOKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getTOKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlInterval_DayAssignment_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "MONTH"
protected class SqlInterval_MONTHKeyword_1_3 extends KeywordToken  {
	
	public SqlInterval_MONTHKeyword_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getMONTHKeyword_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_TOKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// "SECOND" ("(" secondsPrecision=INT ")")?
protected class SqlInterval_Group_2 extends GroupToken {
	
	public SqlInterval_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_Group_2_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SqlInterval_SECONDKeyword_2_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "SECOND"
protected class SqlInterval_SECONDKeyword_2_0 extends KeywordToken  {
	
	public SqlInterval_SECONDKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getSECONDKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// ("(" secondsPrecision=INT ")")?
protected class SqlInterval_Group_2_1 extends GroupToken {
	
	public SqlInterval_Group_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getGroup_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_RightParenthesisKeyword_2_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class SqlInterval_LeftParenthesisKeyword_2_1_0 extends KeywordToken  {
	
	public SqlInterval_LeftParenthesisKeyword_2_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getLeftParenthesisKeyword_2_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_SECONDKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// secondsPrecision=INT
protected class SqlInterval_SecondsPrecisionAssignment_2_1_1 extends AssignmentToken  {
	
	public SqlInterval_SecondsPrecisionAssignment_2_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getSecondsPrecisionAssignment_2_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_LeftParenthesisKeyword_2_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("secondsPrecision",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("secondsPrecision");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSqlIntervalAccess().getSecondsPrecisionINTTerminalRuleCall_2_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSqlIntervalAccess().getSecondsPrecisionINTTerminalRuleCall_2_1_1_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class SqlInterval_RightParenthesisKeyword_2_1_2 extends KeywordToken  {
	
	public SqlInterval_RightParenthesisKeyword_2_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSqlIntervalAccess().getRightParenthesisKeyword_2_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SqlInterval_SecondsPrecisionAssignment_2_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}




/************ end Rule SqlInterval ****************/


/************ begin Rule LargeObjectType ****************
 *
 * LargeObjectType:
 * 	name=("BLOB" | "CLOB" | "NCLOB" | "BFILE" | "VARBINARY" | "LONGVARBINARY" | "BINARY") ("(" size=INT ")")?;
 *
 **/

// name=("BLOB" | "CLOB" | "NCLOB" | "BFILE" | "VARBINARY" | "LONGVARBINARY" | "BINARY") ("(" size=INT ")")?
protected class LargeObjectType_Group extends GroupToken {
	
	public LargeObjectType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getLargeObjectTypeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LargeObjectType_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new LargeObjectType_NameAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getLargeObjectTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=("BLOB" | "CLOB" | "NCLOB" | "BFILE" | "VARBINARY" | "LONGVARBINARY" | "BINARY")
protected class LargeObjectType_NameAssignment_0 extends AssignmentToken  {
	
	public LargeObjectType_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLargeObjectTypeAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getNameBLOBKeyword_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLargeObjectTypeAccess().getNameBLOBKeyword_0_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getNameCLOBKeyword_0_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLargeObjectTypeAccess().getNameCLOBKeyword_0_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getNameNCLOBKeyword_0_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLargeObjectTypeAccess().getNameNCLOBKeyword_0_0_2();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getNameBFILEKeyword_0_0_3(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLargeObjectTypeAccess().getNameBFILEKeyword_0_0_3();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getNameVARBINARYKeyword_0_0_4(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLargeObjectTypeAccess().getNameVARBINARYKeyword_0_0_4();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getNameLONGVARBINARYKeyword_0_0_5(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLargeObjectTypeAccess().getNameLONGVARBINARYKeyword_0_0_5();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getNameBINARYKeyword_0_0_6(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getLargeObjectTypeAccess().getNameBINARYKeyword_0_0_6();
			return obj;
		}
		return null;
	}

}

// ("(" size=INT ")")?
protected class LargeObjectType_Group_1 extends GroupToken {
	
	public LargeObjectType_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getLargeObjectTypeAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LargeObjectType_RightParenthesisKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class LargeObjectType_LeftParenthesisKeyword_1_0 extends KeywordToken  {
	
	public LargeObjectType_LeftParenthesisKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getLargeObjectTypeAccess().getLeftParenthesisKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LargeObjectType_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// size=INT
protected class LargeObjectType_SizeAssignment_1_1 extends AssignmentToken  {
	
	public LargeObjectType_SizeAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getLargeObjectTypeAccess().getSizeAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LargeObjectType_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("size",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("size");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getLargeObjectTypeAccess().getSizeINTTerminalRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getLargeObjectTypeAccess().getSizeINTTerminalRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class LargeObjectType_RightParenthesisKeyword_1_2 extends KeywordToken  {
	
	public LargeObjectType_RightParenthesisKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getLargeObjectTypeAccess().getRightParenthesisKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new LargeObjectType_SizeAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule LargeObjectType ****************/


/************ begin Rule RowIdType ****************
 *
 * RowIdType:
 * 	name=("ROWID" | "UROWID") ("(" size=INT ")")?;
 *
 **/

// name=("ROWID" | "UROWID") ("(" size=INT ")")?
protected class RowIdType_Group extends GroupToken {
	
	public RowIdType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRowIdTypeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RowIdType_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new RowIdType_NameAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getRowIdTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=("ROWID" | "UROWID")
protected class RowIdType_NameAssignment_0 extends AssignmentToken  {
	
	public RowIdType_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRowIdTypeAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRowIdTypeAccess().getNameROWIDKeyword_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRowIdTypeAccess().getNameROWIDKeyword_0_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getRowIdTypeAccess().getNameUROWIDKeyword_0_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getRowIdTypeAccess().getNameUROWIDKeyword_0_0_1();
			return obj;
		}
		return null;
	}

}

// ("(" size=INT ")")?
protected class RowIdType_Group_1 extends GroupToken {
	
	public RowIdType_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getRowIdTypeAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RowIdType_RightParenthesisKeyword_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class RowIdType_LeftParenthesisKeyword_1_0 extends KeywordToken  {
	
	public RowIdType_LeftParenthesisKeyword_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRowIdTypeAccess().getLeftParenthesisKeyword_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RowIdType_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// size=INT
protected class RowIdType_SizeAssignment_1_1 extends AssignmentToken  {
	
	public RowIdType_SizeAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getRowIdTypeAccess().getSizeAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RowIdType_LeftParenthesisKeyword_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("size",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("size");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getRowIdTypeAccess().getSizeINTTerminalRuleCall_1_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getRowIdTypeAccess().getSizeINTTerminalRuleCall_1_1_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class RowIdType_RightParenthesisKeyword_1_2 extends KeywordToken  {
	
	public RowIdType_RightParenthesisKeyword_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getRowIdTypeAccess().getRightParenthesisKeyword_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new RowIdType_SizeAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule RowIdType ****************/


/************ begin Rule SqlBoolean ****************
 *
 * SqlBoolean:
 * 	name=("BIT" | "BOOLEAN");
 *
 **/

// name=("BIT" | "BOOLEAN")
protected class SqlBoolean_NameAssignment extends AssignmentToken  {
	
	public SqlBoolean_NameAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSqlBooleanAccess().getNameAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSqlBooleanRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlBooleanAccess().getNameBITKeyword_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlBooleanAccess().getNameBITKeyword_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getSqlBooleanAccess().getNameBOOLEANKeyword_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getSqlBooleanAccess().getNameBOOLEANKeyword_0_1();
			return obj;
		}
		return null;
	}

}

/************ end Rule SqlBoolean ****************/


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy