diff --git a/src/main/java/com/alibaba/druid/mapping/MappingContext.java b/src/main/java/com/alibaba/druid/mapping/MappingContext.java new file mode 100644 index 0000000000..d183193425 --- /dev/null +++ b/src/main/java/com/alibaba/druid/mapping/MappingContext.java @@ -0,0 +1,36 @@ +package com.alibaba.druid.mapping; + +import java.util.ArrayList; +import java.util.List; + +public class MappingContext { + + private List parameters; + + private boolean generateAlias = false; + + public MappingContext(){ + this(new ArrayList()); + } + + public MappingContext(List parameters){ + this.parameters = parameters; + } + + public List getParameters() { + return parameters; + } + + public void setParameters(List parameters) { + this.parameters = parameters; + } + + public boolean isGenerateAlias() { + return generateAlias; + } + + public void setGenerateAlias(boolean generateAlias) { + this.generateAlias = generateAlias; + } + +} diff --git a/src/main/java/com/alibaba/druid/mapping/MappingEngine.java b/src/main/java/com/alibaba/druid/mapping/MappingEngine.java index 01225e168e..39f3aa3628 100644 --- a/src/main/java/com/alibaba/druid/mapping/MappingEngine.java +++ b/src/main/java/com/alibaba/druid/mapping/MappingEngine.java @@ -78,7 +78,11 @@ public class MappingEngine { } public MappingVisitor createMappingVisitor(List parameters) { - return provider.createMappingVisitor(this, parameters); + return createMappingVisitor(new MappingContext(parameters)); + } + + public MappingVisitor createMappingVisitor(MappingContext context) { + return provider.createMappingVisitor(this, context); } public SQLASTOutputVisitor createOutputVisitor(Appendable out) { @@ -94,9 +98,12 @@ public class MappingEngine { } public String explainToSelectSQL(String sql, List parameters) { + return explainToSelectSQL(sql, new MappingContext(parameters)); + } + public String explainToSelectSQL(String sql, MappingContext context) { SQLSelectQueryBlock query = explainToSelectSQLObject(sql); - MappingVisitor visitor = this.createMappingVisitor(parameters); + MappingVisitor visitor = this.createMappingVisitor(context); query.accept(visitor); visitor.afterResolve(); afterResole(visitor); diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java index d761f64826..25c197cc60 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java @@ -2,6 +2,7 @@ package com.alibaba.druid.mapping.spi; import java.util.List; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; @@ -27,8 +28,8 @@ public class MSSQLServerMappingProvider implements MappingProvider { } @Override - public MappingVisitor createMappingVisitor(MappingEngine engine, List parameters) { - return new MSSQLServerMappingVisitor(engine, parameters); + public MappingVisitor createMappingVisitor(MappingEngine engine, MappingContext context) { + return new MSSQLServerMappingVisitor(engine, context); } @Override diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingVisitor.java b/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingVisitor.java index 9b9d7a75d3..70c30fe771 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingVisitor.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingVisitor.java @@ -1,12 +1,12 @@ package com.alibaba.druid.mapping.spi; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.alibaba.druid.mapping.Entity; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.mapping.Property; import com.alibaba.druid.sql.ast.SQLExpr; @@ -28,18 +28,18 @@ public class MSSQLServerMappingVisitor extends SQLServerASTVisitorAdapter implem private final MappingEngine engine; private final Map tableSources = new LinkedHashMap(); - private final List parameters; + private final MappingContext context; private final List propertyValues = new ArrayList(); private int variantIndex = 0; private final List unresolveList = new ArrayList(); public MSSQLServerMappingVisitor(MappingEngine engine){ - this(engine, Collections.emptyList()); + this(engine, new MappingContext()); } - public MSSQLServerMappingVisitor(MappingEngine engine, List parameters){ + public MSSQLServerMappingVisitor(MappingEngine engine, MappingContext context){ this.engine = engine; - this.parameters = parameters; + this.context = context; } public MappingEngine getEngine() { @@ -47,7 +47,11 @@ public class MSSQLServerMappingVisitor extends SQLServerASTVisitorAdapter implem } public List getParameters() { - return parameters; + return context.getParameters(); + } + + public MappingContext getContext() { + return context; } public List getPropertyValues() { @@ -64,12 +68,12 @@ public class MSSQLServerMappingVisitor extends SQLServerASTVisitorAdapter implem @Override public String resolveTableName(Entity entity) { - return engine.resolveTableName(entity, parameters); + return engine.resolveTableName(entity, context.getParameters()); } @Override public String resovleColumnName(Entity entity, Property property) { - return engine.resovleColumnName(entity, property, parameters); + return engine.resovleColumnName(entity, property, context.getParameters()); } @Override @@ -115,7 +119,7 @@ public class MSSQLServerMappingVisitor extends SQLServerASTVisitorAdapter implem public boolean visit(SQLVariantRefExpr x) { return MappingVisitorUtils.visit(this, x); } - + @Override public boolean visit(SQLSubqueryTableSource x) { return MappingVisitorUtils.visit(this, x); diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java index bfec39d0cd..d0c864aca4 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java @@ -2,6 +2,7 @@ package com.alibaba.druid.mapping.spi; import java.util.List; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; @@ -14,7 +15,7 @@ public interface MappingProvider { MappingVisitor createMappingVisitor(MappingEngine engine); - MappingVisitor createMappingVisitor(MappingEngine engine, List parameters); + MappingVisitor createMappingVisitor(MappingEngine engine, MappingContext context); ExportParameterVisitor createExportParameterVisitor(List parameters); diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitor.java b/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitor.java index b5764e398f..d567385238 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitor.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitor.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import com.alibaba.druid.mapping.Entity; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.mapping.Property; import com.alibaba.druid.sql.ast.SQLExpr; @@ -14,6 +15,8 @@ public interface MappingVisitor extends SQLASTVisitor { MappingEngine getEngine(); List getParameters(); + + MappingContext getContext(); Entity getFirstEntity(); diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitorUtils.java b/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitorUtils.java index 8f9794387c..6c6f4b9e69 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MappingVisitorUtils.java @@ -93,7 +93,7 @@ public class MappingVisitorUtils { if (x.getParent() instanceof SQLSelectItem) { SQLSelectItem selectItem = (SQLSelectItem) x.getParent(); - if (selectItem.getAlias() == null) { + if (visitor.getContext().isGenerateAlias() && selectItem.getAlias() == null) { selectItem.setAlias('"' + property.getName() + '"'); } } @@ -129,9 +129,9 @@ public class MappingVisitorUtils { x.putAttribute("mapping.property", property); x.putAttribute("mapping.entity", propertyEntity); - if (x.getParent() instanceof SQLSelectItem) { + if (visitor.getContext().isGenerateAlias() && x.getParent() instanceof SQLSelectItem) { SQLSelectItem selectItem = (SQLSelectItem) x.getParent(); - if (selectItem.getAlias() == null) { + if (visitor.getContext().isGenerateAlias() && selectItem.getAlias() == null) { selectItem.setAlias('"' + property.getName() + '"'); } } diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java index 79a744fe14..cd0a02201e 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java @@ -2,6 +2,7 @@ package com.alibaba.druid.mapping.spi; import java.util.List; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; @@ -26,8 +27,8 @@ public class MySqlMappingProvider implements MappingProvider { } @Override - public MappingVisitor createMappingVisitor(MappingEngine engine, List parameters) { - return new MySqlMappingVisitor(engine, parameters); + public MappingVisitor createMappingVisitor(MappingEngine engine, MappingContext context) { + return new MySqlMappingVisitor(engine, context); } @Override diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingVisitor.java b/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingVisitor.java index 4227b978ef..ef7faa07c3 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingVisitor.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingVisitor.java @@ -1,12 +1,12 @@ package com.alibaba.druid.mapping.spi; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.alibaba.druid.mapping.Entity; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.mapping.Property; import com.alibaba.druid.sql.ast.SQLExpr; @@ -28,18 +28,18 @@ public class MySqlMappingVisitor extends MySqlASTVisitorAdapter implements Mappi private final MappingEngine engine; private final Map tableSources = new LinkedHashMap(); - private final List parameters; + private final MappingContext context; private final List propertyValues = new ArrayList(); private int variantIndex = 0; private final List unresolveList = new ArrayList(); public MySqlMappingVisitor(MappingEngine engine){ - this(engine, Collections.emptyList()); + this(engine, new MappingContext()); } - public MySqlMappingVisitor(MappingEngine engine, List parameters){ + public MySqlMappingVisitor(MappingEngine engine, MappingContext context){ this.engine = engine; - this.parameters = parameters; + this.context = context; } public MappingEngine getEngine() { @@ -47,7 +47,11 @@ public class MySqlMappingVisitor extends MySqlASTVisitorAdapter implements Mappi } public List getParameters() { - return parameters; + return context.getParameters(); + } + + public MappingContext getContext() { + return context; } public List getPropertyValues() { @@ -64,12 +68,12 @@ public class MySqlMappingVisitor extends MySqlASTVisitorAdapter implements Mappi @Override public String resolveTableName(Entity entity) { - return engine.resolveTableName(entity, parameters); + return engine.resolveTableName(entity, context.getParameters()); } @Override public String resovleColumnName(Entity entity, Property property) { - return engine.resovleColumnName(entity, property, parameters); + return engine.resovleColumnName(entity, property, context.getParameters()); } public Entity getFirstEntity() { @@ -109,7 +113,7 @@ public class MySqlMappingVisitor extends MySqlASTVisitorAdapter implements Mappi public boolean visit(SQLBinaryOpExpr x) { return MappingVisitorUtils.visit(this, x); } - + @Override public boolean visit(SQLVariantRefExpr x) { return MappingVisitorUtils.visit(this, x); @@ -129,16 +133,16 @@ public class MySqlMappingVisitor extends MySqlASTVisitorAdapter implements Mappi public boolean visit(SQLExprTableSource x) { return MappingVisitorUtils.visit(this, x); } - + @Override public int getAndIncrementVariantIndex() { return variantIndex++; } - + public int getVariantIndex() { return variantIndex; } - + public List getUnresolveList() { return unresolveList; } diff --git a/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java index afb0859165..6ce116f22b 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java @@ -2,6 +2,7 @@ package com.alibaba.druid.mapping.spi; import java.util.List; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; @@ -23,8 +24,8 @@ public class OracleMappingProvider implements MappingProvider { } @Override - public MappingVisitor createMappingVisitor(MappingEngine engine, List parameters) { - return new OracleMappingVisitor(engine, parameters); + public MappingVisitor createMappingVisitor(MappingEngine engine, MappingContext context) { + return new OracleMappingVisitor(engine, context); } @Override diff --git a/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingVisitor.java b/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingVisitor.java index 37b97bcfd6..a12c0da24c 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingVisitor.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingVisitor.java @@ -1,12 +1,12 @@ package com.alibaba.druid.mapping.spi; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.alibaba.druid.mapping.Entity; +import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; import com.alibaba.druid.mapping.Property; import com.alibaba.druid.sql.ast.SQLExpr; @@ -30,18 +30,18 @@ public class OracleMappingVisitor extends OracleASTVisitorAdapter implements Map private final MappingEngine engine; private final Map tableSources = new LinkedHashMap(); - private final List parameters; + private final MappingContext context; private final List propertyValues = new ArrayList(); private int variantIndex = 0; private final List unresolveList = new ArrayList(); public OracleMappingVisitor(MappingEngine engine){ - this(engine, Collections.emptyList()); + this(engine, new MappingContext()); } - public OracleMappingVisitor(MappingEngine engine, List parameters){ + public OracleMappingVisitor(MappingEngine engine, MappingContext context){ this.engine = engine; - this.parameters = parameters; + this.context = context; } public MappingEngine getEngine() { @@ -49,7 +49,11 @@ public class OracleMappingVisitor extends OracleASTVisitorAdapter implements Map } public List getParameters() { - return parameters; + return context.getParameters(); + } + + public MappingContext getContext() { + return context; } public List getPropertyValues() { @@ -66,12 +70,12 @@ public class OracleMappingVisitor extends OracleASTVisitorAdapter implements Map @Override public String resolveTableName(Entity entity) { - return engine.resolveTableName(entity, parameters); + return engine.resolveTableName(entity, context.getParameters()); } @Override public String resovleColumnName(Entity entity, Property property) { - return engine.resovleColumnName(entity, property, parameters); + return engine.resovleColumnName(entity, property, context.getParameters()); } public Entity getFirstEntity() { diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java index 57754885c2..64ed278f70 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java @@ -29,8 +29,6 @@ import java.util.Map; import com.alibaba.druid.filter.FilterChain; import com.alibaba.druid.filter.FilterChainImpl; import com.alibaba.druid.stat.JdbcSqlStat; -import com.alibaba.druid.stat.JdbcStatContext; -import com.alibaba.druid.stat.JdbcStatManager; /** * @author wenshao diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index 48d98e9420..acb3909377 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -28,7 +28,6 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; -import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAnalyticWindowing.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAnalyticWindowing.java index 852a93b62e..1fb292fc06 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAnalyticWindowing.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAnalyticWindowing.java @@ -17,7 +17,6 @@ package com.alibaba.druid.sql.dialect.postgresql.ast; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLObjectImpl; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGExpr; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGAnalytic.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGAnalytic.java index 2e6dc18168..41649f0954 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGAnalytic.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGAnalytic.java @@ -20,7 +20,6 @@ import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLObjectImpl; -import com.alibaba.druid.sql.dialect.postgresql.ast.PGAnalyticWindowing; import com.alibaba.druid.sql.dialect.postgresql.ast.PGOrderBy; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java index 945a2393c0..0e7f8017e6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java @@ -1,9 +1,6 @@ package com.alibaba.druid.sql.dialect.postgresql.parser; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; -import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAnalyticWindowing; import com.alibaba.druid.sql.dialect.postgresql.ast.PGAggregateExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.PGOrderBy; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGAnalytic;