use of com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Option in project druid by alibaba.
the class MySqlExprParser method parseForeignKey.
public MysqlForeignKey parseForeignKey() {
accept(Token.FOREIGN);
accept(Token.KEY);
MysqlForeignKey fk = new MysqlForeignKey();
if (lexer.token() != Token.LPAREN) {
SQLName indexName = name();
fk.setIndexName(indexName);
}
accept(Token.LPAREN);
this.names(fk.getReferencingColumns());
accept(Token.RPAREN);
accept(Token.REFERENCES);
fk.setReferencedTableName(this.name());
accept(Token.LPAREN);
this.names(fk.getReferencedColumns());
accept(Token.RPAREN);
if (identifierEquals("MATCH")) {
if (identifierEquals("FULL")) {
fk.setReferenceMatch(Match.FULL);
} else if (identifierEquals("PARTIAL")) {
fk.setReferenceMatch(Match.PARTIAL);
} else if (identifierEquals("SIMPLE")) {
fk.setReferenceMatch(Match.SIMPLE);
}
}
while (lexer.token() == Token.ON) {
lexer.nextToken();
if (lexer.token() == Token.DELETE) {
lexer.nextToken();
Option option = parseReferenceOption();
fk.setOnDelete(option);
} else if (lexer.token() == Token.UPDATE) {
lexer.nextToken();
Option option = parseReferenceOption();
fk.setOnUpdate(option);
} else {
throw new ParserException("syntax error, expect DELETE or UPDATE, actual " + lexer.token() + " " + lexer.stringVal());
}
}
return fk;
}
use of com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Option in project druid by alibaba.
the class MySqlExprParser method parseReferenceOption.
protected Option parseReferenceOption() {
Option option;
if (lexer.token() == Token.RESTRICT || identifierEquals("RESTRICT")) {
option = Option.RESTRICT;
lexer.nextToken();
} else if (identifierEquals("CASCADE")) {
option = Option.CASCADE;
lexer.nextToken();
} else if (lexer.token() == Token.SET) {
lexer.nextToken();
accept(Token.NULL);
option = Option.SET_NULL;
} else if (identifierEquals("ON")) {
lexer.nextToken();
if (identifierEquals("ACTION")) {
option = Option.NO_ACTION;
lexer.nextToken();
} else {
throw new ParserException("syntax error, expect ACTION, actual " + lexer.token() + " " + lexer.stringVal());
}
} else {
throw new ParserException("syntax error, expect ACTION, actual " + lexer.token() + " " + lexer.stringVal());
}
return option;
}
Aggregations