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