From a7fd9ec1d6f136e8dbba1524063b05d052b93bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Wed, 9 May 2012 14:23:52 +0800 Subject: [PATCH] enhance mapping --- .../alibaba/druid/mapping/MappingEngine.java | 24 ++++++++++++++----- .../spi/MSSQLServerMappingProvider.java | 12 +++++++--- .../druid/mapping/spi/MappingProvider.java | 3 +++ .../mapping/spi/MySqlMappingProvider.java | 7 ++++++ .../mapping/spi/OracleMappingProvider.java | 7 ++++++ 5 files changed, 44 insertions(+), 9 deletions(-) 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(); + } }