Search in sources :

Example 1 with Option

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;
}
Also used : MysqlForeignKey(com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey) ParserException(com.alibaba.druid.sql.parser.ParserException) SQLName(com.alibaba.druid.sql.ast.SQLName) Option(com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Option)

Example 2 with Option

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;
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) Option(com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Option)

Aggregations

Option (com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Option)2 ParserException (com.alibaba.druid.sql.parser.ParserException)2 SQLName (com.alibaba.druid.sql.ast.SQLName)1 MysqlForeignKey (com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey)1