diff --git a/src/main/java/com/alibaba/druid/mapping/MappingEngine.java b/src/main/java/com/alibaba/druid/mapping/MappingEngine.java index 78f89d11bc..6a0d1463f1 100644 --- a/src/main/java/com/alibaba/druid/mapping/MappingEngine.java +++ b/src/main/java/com/alibaba/druid/mapping/MappingEngine.java @@ -119,11 +119,15 @@ public class MappingEngine { public SQLDeleteStatement explainToDeleteSQLObject(String sql) { return provider.explainToDeleteSQLObject(this, sql); } - + public String explainToDeleteSQL(String sql) { + return explainToDeleteSQL(sql, new MappingContext()); + } + + public String explainToDeleteSQL(String sql, MappingContext context) { SQLDeleteStatement stmt = explainToDeleteSQLObject(sql); - MappingVisitor visitor = this.createMappingVisitor(Collections.emptyList()); + MappingVisitor visitor = this.createMappingVisitor(context); stmt.accept(visitor); visitor.afterResolve(); afterResole(visitor); @@ -142,11 +146,15 @@ public class MappingEngine { public SQLUpdateStatement explainToUpdateSQLObject(String sql) { return provider.explainToUpdateSQLObject(this, sql); } - + public String explainToUpdateSQL(String sql) { + return explainToUpdateSQL(sql, new MappingContext()); + } + + public String explainToUpdateSQL(String sql, MappingContext context) { SQLUpdateStatement stmt = explainToUpdateSQLObject(sql); - MappingVisitor visitor = this.createMappingVisitor(Collections.emptyList()); + MappingVisitor visitor = this.createMappingVisitor(context); stmt.accept(visitor); visitor.afterResolve(); afterResole(visitor); @@ -157,11 +165,15 @@ public class MappingEngine { public SQLInsertStatement explainToInsertSQLObject(String sql) { return provider.explainToInsertSQLObject(this, sql); } - + public String explainToInsertSQL(String sql) { + return explainToInsertSQL(sql, new MappingContext()); + } + + public String explainToInsertSQL(String sql, MappingContext context) { SQLInsertStatement stmt = explainToInsertSQLObject(sql); - MappingVisitor visitor = this.createMappingVisitor(Collections.emptyList()); + MappingVisitor visitor = this.createMappingVisitor(context); stmt.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 25c197cc60..310cf3c9c7 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java @@ -4,13 +4,13 @@ import java.util.List; import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; +import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; -import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; import com.alibaba.druid.sql.dialect.sqlserver.ast.Top; import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerSelectParser; @@ -70,7 +70,7 @@ public class MSSQLServerMappingProvider implements MappingProvider { } public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql) { - PGSQLStatementParser parser = new PGSQLStatementParser(sql); + SQLServerStatementParser parser = new SQLServerStatementParser(sql); SQLUpdateStatement stmt = parser.parseUpdateStatement(); MappingVisitorUtils.setDataSource(engine, stmt); @@ -79,7 +79,7 @@ public class MSSQLServerMappingProvider implements MappingProvider { } public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql) { - PGSQLStatementParser parser = new PGSQLStatementParser(sql); + SQLServerStatementParser parser = new SQLServerStatementParser(sql); SQLInsertStatement stmt = (SQLInsertStatement) parser.parseInsert(); MappingVisitorUtils.setDataSource(engine, stmt); @@ -91,4 +91,10 @@ public class MSSQLServerMappingProvider implements MappingProvider { public ExportParameterVisitor createExportParameterVisitor(List parameters) { return new MSSQLServerExportParameterVisitor(parameters); } + + @Override + public List explain(MappingEngine engine, String sql) { + SQLServerStatementParser parser = new SQLServerStatementParser(sql); + return parser.parseStatementList(); + } } 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 d0c864aca4..8885133739 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java @@ -4,6 +4,7 @@ import java.util.List; import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; +import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; @@ -20,6 +21,8 @@ public interface MappingProvider { ExportParameterVisitor createExportParameterVisitor(List parameters); SQLASTOutputVisitor createOutputVisitor(MappingEngine engine, Appendable out); + + List explain(MappingEngine engine, String sql); SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql); 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 cd0a02201e..2ecbf6c5c0 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java @@ -4,6 +4,7 @@ import java.util.List; import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; +import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; @@ -90,4 +91,10 @@ public class MySqlMappingProvider implements MappingProvider { public ExportParameterVisitor createExportParameterVisitor(List parameters) { return new MySqlExportParameterVisitor(parameters); } + + @Override + public List explain(MappingEngine engine, String sql) { + MySqlStatementParser parser = new MySqlStatementParser(sql); + return parser.parseStatementList(); + } } 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 6ce116f22b..2b0bd85f21 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java @@ -4,6 +4,7 @@ import java.util.List; import com.alibaba.druid.mapping.MappingContext; import com.alibaba.druid.mapping.MappingEngine; +import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; @@ -70,4 +71,10 @@ public class OracleMappingProvider implements MappingProvider { public ExportParameterVisitor createExportParameterVisitor(List parameters) { return new OracleExportParameterVisitor(parameters); } + + @Override + public List explain(MappingEngine engine, String sql) { + OracleStatementParser parser = new OracleStatementParser(sql); + return parser.parseStatementList(); + } }