mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
add mapping support
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user