improved sql parser for postgresql

This commit is contained in:
wenshao
2014-11-17 11:09:26 +08:00
parent 39bb9e2d7f
commit 06df60f95a
51 changed files with 902 additions and 199 deletions
@@ -39,6 +39,7 @@ import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr;
import com.alibaba.druid.sql.ast.expr.SQLAllExpr;
import com.alibaba.druid.sql.ast.expr.SQLAnyExpr;
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
@@ -80,6 +81,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
@@ -1391,6 +1393,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLAlterTableDropColumnItem x) {
print("DROP COLUMN ");
this.printAndAccept(x.getColumns(), ", ");
if (x.isCascade()) {
print(" CASCADE");
}
return false;
}
@@ -1576,6 +1582,21 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLAlterTableAlterColumn x) {
print("ALTER COLUMN ");
x.getColumn().accept(this);
if (x.isSetNotNull()) { // postgresql
print(" SET NOT NULL");
}
if (x.isDropNotNull()) { // postgresql
print(" DROP NOT NULL");
}
if (x.getSetDefault() != null) { // postgresql
print(" SET DEFAULT ");
x.getSetDefault().accept(this);
}
if (x.isDropDefault()) { // postgresql
print(" DROP DEFAULT");
}
return false;
}
@@ -1746,9 +1767,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
print(" REFERENCES ");
x.getReferencedTableName().accept(this);
print(" (");
printAndAccept(x.getReferencedColumns(), ", ");
print(")");
if (x.getReferencedColumns().size() > 0) {
print(" (");
printAndAccept(x.getReferencedColumns(), ", ");
print(")");
}
return false;
}
@@ -2073,4 +2096,20 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
return false;
}
@Override
public boolean visit(SQLBinaryExpr x) {
print("b'");
print(x.getValue());
print('\'');
return false;
}
@Override
public boolean visit(SQLAlterTableRename x) {
print("RENAME TO ");
x.getTo().accept(this);
return false;
}
}
@@ -25,6 +25,7 @@ import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr;
import com.alibaba.druid.sql.ast.expr.SQLAllExpr;
import com.alibaba.druid.sql.ast.expr.SQLAnyExpr;
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
@@ -64,6 +65,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
@@ -555,4 +557,12 @@ public interface SQLASTVisitor {
boolean visit(SQLRevokeStatement x);
void endVisit(SQLBinaryExpr x);
boolean visit(SQLBinaryExpr x);
void endVisit(SQLAlterTableRename x);
boolean visit(SQLAlterTableRename x);
}
@@ -26,6 +26,7 @@ import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr;
import com.alibaba.druid.sql.ast.expr.SQLAllExpr;
import com.alibaba.druid.sql.ast.expr.SQLAnyExpr;
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
@@ -65,6 +66,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
@@ -1086,4 +1088,24 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor {
return true;
}
@Override
public void endVisit(SQLBinaryExpr x) {
}
@Override
public boolean visit(SQLBinaryExpr x) {
return true;
}
@Override
public void endVisit(SQLAlterTableRename x) {
}
@Override
public boolean visit(SQLAlterTableRename x) {
return true;
}
}
@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.druid.sql.ast.expr.SQLBinaryExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
@@ -151,4 +152,8 @@ public class SQLEvalVisitorImpl extends SQLASTVisitorAdapter implements SQLEvalV
return false;
}
@Override
public boolean visit(SQLBinaryExpr x) {
return SQLEvalVisitorUtils.visit(this, x);
}
}
@@ -19,6 +19,7 @@ import com.alibaba.druid.DruidRuntimeException;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.expr.SQLBinaryExpr;
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
@@ -39,7 +40,6 @@ import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.db2.visitor.DB2EvalVisitor;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBinaryExpr;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlEvalVisitorImpl;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleEvalVisitor;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGEvalVisitor;
@@ -582,7 +582,7 @@ public class SQLEvalVisitorUtils {
return true;
}
public static boolean visit(SQLEvalVisitor visitor, MySqlBinaryExpr x) {
public static boolean visit(SQLEvalVisitor visitor, SQLBinaryExpr x) {
String text = x.getValue();
long[] words = new long[text.length() / 64 + 1];
@@ -45,6 +45,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropForeignKey;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLCallStatement;
import com.alibaba.druid.sql.ast.statement.SQLCheck;
@@ -1269,7 +1270,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
@Override
public boolean visit(SQLForeignKeyImpl x) {
for (SQLName column : x.getReferencedColumns()) {
for (SQLName column : x.getReferencingColumns()) {
column.accept(this);
}
@@ -1350,4 +1351,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
public boolean visit(SQLDropProcedureStatement x) {
return false;
}
@Override
public boolean visit(SQLAlterTableRename x) {
return false;
}
}