mysql parser refactor.

This commit is contained in:
wenshao
2017-08-29 14:33:44 +08:00
parent 833a9b5a65
commit 4a4fffbbb2
197 changed files with 3040 additions and 1037 deletions
@@ -27,8 +27,6 @@ import com.alibaba.druid.util.JdbcConstants;
public class PGDeleteStatement extends SQLDeleteStatement implements PGSQLStatement {
private SQLWithSubqueryClause with;
private List<SQLName> using = new ArrayList<SQLName>(2);
private boolean returning;
private String alias;
@@ -52,23 +50,7 @@ public class PGDeleteStatement extends SQLDeleteStatement implements PGSQLStatem
this.alias = alias;
}
public List<SQLName> getUsing() {
return using;
}
public void setUsing(List<SQLName> using) {
this.using = using;
}
public SQLWithSubqueryClause getWith() {
return with;
}
public void setWith(SQLWithSubqueryClause with) {
this.with = with;
}
protected void accept0(SQLASTVisitor visitor) {
accept0((PGASTVisitor) visitor);
@@ -90,14 +72,6 @@ public class PGDeleteStatement extends SQLDeleteStatement implements PGSQLStatem
PGDeleteStatement x = new PGDeleteStatement();
cloneTo(x);
if (with != null) {
x.setWith(with.clone());
}
for (SQLName item : using) {
SQLName item2 = item.clone();
item2.setParent(x);
x.using.add(item2);
}
x.returning = returning;
x.alias = alias;
@@ -23,19 +23,21 @@ import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
import com.alibaba.druid.sql.ast.statement.SQLWithSubqueryClause;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
import com.alibaba.druid.util.JdbcConstants;
public class PGInsertStatement extends SQLInsertStatement implements PGSQLStatement {
private SQLWithSubqueryClause with;
private List<ValuesClause> valuesList = new ArrayList<ValuesClause>();
private SQLExpr returning;
private boolean defaultValues = false;
public PGInsertStatement() {
dbType = JdbcConstants.POSTGRESQL;
}
public void cloneTo(PGInsertStatement x) {
super.cloneTo(x);
if (with != null) {
x.setWith(with.clone());
}
for (ValuesClause v : valuesList) {
ValuesClause v2 = v.clone();
v2.setParent(x);
@@ -55,13 +57,6 @@ public class PGInsertStatement extends SQLInsertStatement implements PGSQLStatem
this.returning = returning;
}
public SQLWithSubqueryClause getWith() {
return with;
}
public void setWith(SQLWithSubqueryClause with) {
this.with = with;
}
public ValuesClause getValues() {
if (valuesList.size() == 0) {
@@ -185,15 +185,9 @@ public class PGSQLStatementParser extends SQLStatementParser {
if (lexer.token() == Token.USING) {
lexer.nextToken();
for (;;) {
SQLName name = this.exprParser.name();
deleteStatement.getUsing().add(name);
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
continue;
}
break;
}
SQLTableSource tableSource = createSQLSelectParser().parseTableSource();
deleteStatement.setUsing(tableSource);
}
if (lexer.token() == (Token.WHERE)) {
@@ -246,10 +246,11 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
print0(x.getAlias());
}
if (x.getUsing().size() > 0) {
SQLTableSource using = x.getUsing();
if (using != null) {
println();
print0(ucase ? "USING " : "using ");
printAndAccept(x.getUsing(), ", ");
using.accept(this);
}
if (x.getWhere() != null) {
@@ -21,6 +21,7 @@ import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.ast.statement.SQLTableSource;
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGBoxExpr;
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr;
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr;
@@ -41,6 +42,7 @@ import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.stat.TableStat.Mode;
import com.alibaba.druid.util.JdbcConstants;
import com.alibaba.druid.util.JdbcUtils;
import com.alibaba.druid.util.PGUtils;
public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisitor {
public PGSchemaStatVisitor() {
@@ -90,7 +92,8 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
@Override
public boolean visit(PGDeleteStatement x) {
if (repository != null) {
if (repository != null
&& x.getParent() == null) {
repository.resolve(x);
}
@@ -100,16 +103,9 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
setAliasMap();
for (SQLName name : x.getUsing()) {
String ident = name.toString();
TableStat stat = getTableStat(ident);
stat.incrementSelectCount();
Map<String, String> aliasMap = getAliasMap();
if (aliasMap != null) {
aliasMap.put(ident, ident);
}
SQLTableSource using = x.getUsing();
if (using != null) {
using.accept(this);
}
x.putAttribute("_original_use_mode", getMode());
@@ -133,6 +129,11 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
@Override
public boolean visit(PGInsertStatement x) {
if (repository != null
&& x.getParent() == null) {
repository.resolve(x);
}
setAliasMap();
if (x.getWith() != null) {
@@ -144,8 +145,9 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
String originalTable = getCurrentTable();
if (x.getTableName() instanceof SQLName) {
String ident = ((SQLName) x.getTableName()).toString();
SQLName tableName = x.getTableName();
{
String ident = tableName.toString();
setCurrentTable(ident);
x.putAttribute("_old_local_", originalTable);
@@ -182,8 +184,17 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
}
public boolean isPseudoColumn(long hash) {
return PGUtils.isPseudoColumn(hash);
}
@Override
public boolean visit(PGUpdateStatement x) {
if (repository != null
&& x.getParent() == null) {
repository.resolve(x);
}
Map<String, String> oldAliasMap = getAliasMap();
setAliasMap();