mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
mysql parser refactor.
This commit is contained in:
-26
@@ -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;
|
||||
|
||||
|
||||
+6
-11
@@ -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) {
|
||||
|
||||
+3
-9
@@ -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) {
|
||||
|
||||
+24
-13
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user