svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / test / java / org / gvsig / expressionevaluator / TestExpressionBuilder.java @ 46517
History | View | Annotate | Download (4.41 KB)
1 |
package org.gvsig.expressionevaluator; |
---|---|
2 |
|
3 |
import junit.framework.TestCase; |
4 |
import org.gvsig.expressionevaluator.impl.expressionbuilder.formatters.DALFormatter; |
5 |
import org.gvsig.fmap.dal.DALLocator; |
6 |
import org.gvsig.fmap.dal.DataManager; |
7 |
import org.gvsig.fmap.dal.SQLBuilder; |
8 |
import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder; |
9 |
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase; |
10 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
11 |
|
12 |
/**
|
13 |
*
|
14 |
* @author jjdelcerro
|
15 |
*/
|
16 |
public class TestExpressionBuilder extends TestCase { |
17 |
|
18 |
public TestExpressionBuilder(String testName) { |
19 |
super(testName);
|
20 |
} |
21 |
|
22 |
@Override
|
23 |
protected void setUp() throws Exception { |
24 |
super.setUp();
|
25 |
new DefaultLibrariesInitializer().fullInitialize();
|
26 |
} |
27 |
|
28 |
@Override
|
29 |
protected void tearDown() throws Exception { |
30 |
super.tearDown();
|
31 |
} |
32 |
|
33 |
// TODO add test methods here. The name must begin with 'test'. For example:
|
34 |
// public void testHello() {}
|
35 |
|
36 |
protected LexicalAnalyzer createLexicalAnalyzer() {
|
37 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
38 |
LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
39 |
return lexer;
|
40 |
} |
41 |
|
42 |
protected org.gvsig.expressionevaluator.Compiler createCompiler() {
|
43 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
44 |
Compiler compiler = manager.createCompiler();
|
45 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
46 |
return compiler;
|
47 |
} |
48 |
|
49 |
protected SymbolTable createSymbolTable() {
|
50 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
51 |
MutableSymbolTable symbolTable = manager.createSymbolTable(); |
52 |
return symbolTable;
|
53 |
} |
54 |
|
55 |
protected Interpreter createInterpreter(SymbolTable symbolTable) {
|
56 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
57 |
Interpreter interpreter = manager.createInterpreter(); |
58 |
interpreter.setSymbolTable(symbolTable); |
59 |
return interpreter;
|
60 |
} |
61 |
|
62 |
private void link(Code code) { |
63 |
code.link(createSymbolTable()); |
64 |
} |
65 |
|
66 |
public void testUseCase1() { |
67 |
DataManager dataManager = DALLocator.getDataManager(); |
68 |
DALExpressionBuilder builder1 = dataManager.createDALExpressionBuilder(); |
69 |
SQLBuilderBase builder = new SQLBuilderBase();
|
70 |
|
71 |
SQLBuilder.SelectBuilder select = builder.select(); |
72 |
select.column().name("LID_ACCIDENTE");
|
73 |
select.from().table().name("ARENA2_VEHICULOS");
|
74 |
select.where().value( |
75 |
builder.expression().and( |
76 |
builder.expression().eq( |
77 |
builder.expression().getattr("ARENA2_VEHICULOS","ID_ACCIDENTE"), |
78 |
builder.expression().getattr("ARENA2_ACCIDENTES","LID_ACCIDENTE") |
79 |
), |
80 |
builder.expression().eq( |
81 |
builder.expression().column("MODELO"),
|
82 |
builder.expression().constant("307")
|
83 |
) |
84 |
) |
85 |
); |
86 |
select.limit(1);
|
87 |
|
88 |
|
89 |
|
90 |
ExpressionBuilder.Value exists = builder1.exists(select, "EXISTS123");
|
91 |
|
92 |
String filter = exists.toString(new DALFormatter()); |
93 |
|
94 |
assertEquals("EXISTS(SELECT \"LID_ACCIDENTE\" FROM \"ARENA2_VEHICULOS\" WHERE (( (\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\") = (\"ARENA2_ACCIDENTES\".\"LID_ACCIDENTE\") ) AND ( (\"MODELO\") = ('307') )) LIMIT 1, 'EXISTS123')", filter);
|
95 |
|
96 |
// Comprobamos que con el formatter por defecto obtenemos lo mismo.
|
97 |
assertEquals(filter, exists.toString()); |
98 |
|
99 |
Compiler compiler = createCompiler();
|
100 |
|
101 |
Code code = compiler.compileExpression(filter); |
102 |
link(code); |
103 |
assertEquals("EXISTS(SELECT(TUPLE(\"LID_ACCIDENTE\"), \"ARENA2_VEHICULOS\", ((\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\" = \"ARENA2_ACCIDENTES\".\"LID_ACCIDENTE\") AND (\"MODELO\" = '307')), TUPLE(), TUPLE(), 1), 'EXISTS123')", code.toString());
|
104 |
} |
105 |
|
106 |
public void testForeintValue1() { |
107 |
DataManager dataManager = DALLocator.getDataManager(); |
108 |
DALExpressionBuilder builder = dataManager.createDALExpressionBuilder(); |
109 |
|
110 |
ExpressionBuilder.Function value = builder.foreing_value("SENTIDO", "DESCRIPCION"); |
111 |
String s = value.toString(new DALFormatter()); |
112 |
assertEquals("FOREING_VALUE('SENTIDO.DESCRIPCION')", s);
|
113 |
|
114 |
} |
115 |
} |