mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser.
This commit is contained in:
@@ -22,12 +22,13 @@ import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.SQLName;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLPrimaryKeyImpl;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLTableConstraint;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLTableElement;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl;
|
||||
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
|
||||
public class OraclePrimaryKey extends SQLPrimaryKeyImpl implements OracleConstraint, SQLPrimaryKey, SQLTableElement {
|
||||
public class OraclePrimaryKey extends SQLPrimaryKeyImpl implements OracleConstraint, SQLPrimaryKey, SQLTableElement, SQLTableConstraint {
|
||||
|
||||
private OracleUsingIndexClause using;
|
||||
private SQLName exceptionsInto;
|
||||
|
||||
@@ -1026,6 +1026,31 @@ public class OracleExprParser extends SQLExprParser {
|
||||
OracleUsingIndexClause using = parseUsingIndex();
|
||||
primaryKey.setUsing(using);
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
if (lexer.token() == Token.ENABLE) {
|
||||
lexer.nextToken();
|
||||
primaryKey.setEnable(Boolean.TRUE);
|
||||
} else if (lexer.token() == Token.DISABLE) {
|
||||
lexer.nextToken();
|
||||
primaryKey.setEnable(Boolean.FALSE);
|
||||
} else if (identifierEquals("VALIDATE")) {
|
||||
lexer.nextToken();
|
||||
primaryKey.setValidate(Boolean.TRUE);
|
||||
} else if (identifierEquals("NOVALIDATE")) {
|
||||
lexer.nextToken();
|
||||
primaryKey.setValidate(Boolean.FALSE);
|
||||
} else if (identifierEquals("RELY")) {
|
||||
lexer.nextToken();
|
||||
primaryKey.setRely(Boolean.TRUE);
|
||||
} else if (identifierEquals("NORELY")) {
|
||||
lexer.nextToken();
|
||||
primaryKey.setRely(Boolean.FALSE);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return primaryKey;
|
||||
}
|
||||
|
||||
@@ -1088,25 +1113,29 @@ public class OracleExprParser extends SQLExprParser {
|
||||
|
||||
public SQLColumnDefinition parseColumnRest(SQLColumnDefinition column) {
|
||||
column = super.parseColumnRest(column);
|
||||
|
||||
if (lexer.token() == Token.ENABLE) {
|
||||
lexer.nextToken();
|
||||
column.setEnable(Boolean.TRUE);
|
||||
} else if (lexer.token() == Token.ENABLE) {
|
||||
lexer.nextToken();
|
||||
column.setEnable(true);
|
||||
} else if (identifierEquals("VALIDATE")) {
|
||||
lexer.nextToken();
|
||||
column.setValidate(Boolean.TRUE);
|
||||
} else if (identifierEquals("NOVALIDATE")) {
|
||||
lexer.nextToken();
|
||||
column.setValidate(Boolean.FALSE);
|
||||
} else if (identifierEquals("RELY")) {
|
||||
lexer.nextToken();
|
||||
column.setRely(Boolean.TRUE);
|
||||
} else if (identifierEquals("NORELY")) {
|
||||
lexer.nextToken();
|
||||
column.setRely(Boolean.FALSE);
|
||||
|
||||
for (;;) {
|
||||
if (lexer.token() == Token.ENABLE) {
|
||||
lexer.nextToken();
|
||||
column.setEnable(Boolean.TRUE);
|
||||
} else if (lexer.token() == Token.DISABLE) {
|
||||
lexer.nextToken();
|
||||
column.setEnable(Boolean.FALSE);
|
||||
} else if (identifierEquals("VALIDATE")) {
|
||||
lexer.nextToken();
|
||||
column.setValidate(Boolean.TRUE);
|
||||
} else if (identifierEquals("NOVALIDATE")) {
|
||||
lexer.nextToken();
|
||||
column.setValidate(Boolean.FALSE);
|
||||
} else if (identifierEquals("RELY")) {
|
||||
lexer.nextToken();
|
||||
column.setRely(Boolean.TRUE);
|
||||
} else if (identifierEquals("NORELY")) {
|
||||
lexer.nextToken();
|
||||
column.setRely(Boolean.FALSE);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return column;
|
||||
|
||||
+21
-3
@@ -236,7 +236,8 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
query.accept(this);
|
||||
|
||||
if (x.getRestriction() != null) {
|
||||
print(' ');
|
||||
println();
|
||||
print("WITH ");
|
||||
x.getRestriction().accept(this);
|
||||
}
|
||||
|
||||
@@ -2006,8 +2007,24 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
printAndAccept(x.getColumns(), ", ");
|
||||
print(')');
|
||||
|
||||
Boolean rely = x.getRely();
|
||||
if (rely != null) {
|
||||
if (rely.booleanValue()) {
|
||||
print0(ucase ? " RELY" : " rely");
|
||||
}
|
||||
}
|
||||
|
||||
printConstraintState(x);
|
||||
|
||||
Boolean validate = x.getValidate();
|
||||
if (validate != null) {
|
||||
if (validate.booleanValue()) {
|
||||
print0(ucase ? " VALIDATE" : " validate");
|
||||
} else {
|
||||
print0(ucase ? " NOVALIDATE" : " novalidate");
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2024,8 +2041,9 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
x.getExceptionsInto().accept(this);
|
||||
}
|
||||
|
||||
if (x.getEnable() != null) {
|
||||
if (x.getEnable().booleanValue()) {
|
||||
Boolean enable = x.getEnable();
|
||||
if (enable != null) {
|
||||
if (enable.booleanValue()) {
|
||||
print0(ucase ? " ENABLE" : " enable");
|
||||
} else {
|
||||
print0(ucase ? " DIABLE" : " diable");
|
||||
|
||||
Reference in New Issue
Block a user