improved postgresql parser. for issue #2129

This commit is contained in:
wenshao
2017-11-25 21:21:02 +08:00
parent 128ddafacf
commit b90e175aa3
7 changed files with 60 additions and 7 deletions
@@ -17,6 +17,7 @@ package com.alibaba.druid.sql.parser;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.*;
import com.alibaba.druid.util.FnvHash;
@@ -130,7 +131,7 @@ public class SQLCreateTableParser extends SQLDDLParser {
accept(Token.RPAREN);
if (lexer.identifierEquals("INHERITS")) {
if (lexer.identifierEquals(FnvHash.Constants.INHERITS)) {
lexer.nextToken();
accept(Token.LPAREN);
SQLName inherits = this.exprParser.name();
@@ -145,6 +146,29 @@ public class SQLCreateTableParser extends SQLDDLParser {
createTable.setSelect(select);
}
if (lexer.token == Token.WITH && JdbcConstants.POSTGRESQL.equals(dbType)) {
lexer.nextToken();
accept(Token.LPAREN);
for (;;) {
String name = lexer.stringVal();
lexer.nextToken();
accept(Token.EQ);
SQLExpr value = this.exprParser.expr();
value.setParent(createTable);
createTable.getTableOptions().put(name, value);
if (lexer.token == Token.COMMA) {
lexer.nextToken();
continue;
}
break;
}
accept(Token.RPAREN);
}
return createTable;
}