Statistics
| Revision:

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
}