add mapping support

This commit is contained in:
温少
2012-03-14 00:04:56 +08:00
2 changed files with 36 additions and 9 deletions
@@ -1,7 +1,10 @@
package com.alibaba.druid.mapping;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import com.alibaba.druid.mapping.spi.ExportParameterVisitor;
import com.alibaba.druid.mapping.spi.MappingProvider;
import com.alibaba.druid.mapping.spi.MappingVisitor;
import com.alibaba.druid.mapping.spi.MySqlMappingProvider;
@@ -26,6 +29,10 @@ public class MappingEngine {
this.provider = provider;
}
public MappingProvider getMappingProvider() {
return provider;
}
public Integer getMaxLimit() {
return maxLimit;
}
@@ -93,16 +100,27 @@ public class MappingEngine {
return toSQL(query);
}
public SQLInsertStatement explainToInsertSQLObject(String sql) {
return provider.explainToInsertSQLObject(this, sql);
}
public String explainToInsertSQL(String sql) {
SQLInsertStatement query = explainToInsertSQLObject(sql);
query.accept(this.createMappingVisitor());
return toSQL(query);
}
public List<Object> exportParameters(SQLObject sqlObject) {
List<Object> parameters = new ArrayList<Object>();
exportParameters(sqlObject, parameters);
return parameters;
}
public void exportParameters(SQLObject sqlObject, List<Object> parameters) {
ExportParameterVisitor exporter = this.provider.createExportParameterVisitor(parameters);
sqlObject.accept(exporter);
}
}
@@ -26,21 +26,30 @@ public class MappingVisitorTest extends TestCase {
public void test_0() throws Exception {
Assert.assertEquals("SELECT serviceTag AS \"编号\", ip AS \"IP地址\"\nFROM device", engine.explainToSelectSQL("select *"));
Assert.assertEquals("SELECT serviceTag AS \"编号\", ip AS \"IP地址\"\nFROM device",
engine.explainToSelectSQL("select *"));
Assert.assertEquals("SELECT serviceTag AS \"编号\", ip AS \"IP地址\"\nFROM device\nWHERE ip = '127.0.0.1'",
engine.explainToSelectSQL("select 编号, IP地址 WHERE IP地址 = '127.0.0.1'"));
}
public void test_1() throws Exception {
engine.setMaxLimit(10);
Assert.assertEquals("SELECT serviceTag AS \"编号\", ip AS \"IP地址\"\nFROM device\nLIMIT 10", engine.explainToSelectSQL("select *"));
Assert.assertEquals("SELECT serviceTag AS \"编号\", ip AS \"IP地址\"\nFROM device\nLIMIT 10",
engine.explainToSelectSQL("select *"));
Assert.assertEquals("SELECT serviceTag AS \"编号\", ip AS \"IP地址\"\nFROM device\nWHERE ip = '127.0.0.1'\nLIMIT 10",
engine.explainToSelectSQL("select 编号, IP地址 WHERE IP地址 = '127.0.0.1'"));
Assert.assertEquals("SELECT serviceTag AS \"编号\", ip AS \"IP地址\"\nFROM device\nWHERE ip = '127.0.0.1'\nLIMIT 3",
engine.explainToSelectSQL("select 编号, IP地址 WHERE IP地址 = '127.0.0.1' limit 3"));
Assert.assertEquals(0, engine.exportParameters(engine.explainToSelectSQLObject("select 1")).size());
Assert.assertEquals(0,
engine.exportParameters(engine.explainToSelectSQLObject("select 编号, IP地址 where 1 = 0")).size());
Assert.assertEquals(1,
engine.exportParameters(engine.explainToSelectSQLObject("select 编号, IP地址 where 1 = 0 and IP地址 = '127.0.0.1'")).size());
Assert.assertEquals("127.0.0.1",
engine.exportParameters(engine.explainToSelectSQLObject("select 编号, IP地址 where 1 = 0 and IP地址 = '127.0.0.1'")).get(0));
engine.setMaxLimit(null);
}