Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.sqlite / org.gvsig.sqlite.provider / src / test / java / org / gvsig / sqlite / dal / operations / usecases / arena2 / TestSelectWithLocalVariables.java @ 47539

History | View | Annotate | Download (4.62 KB)

1
package org.gvsig.sqlite.dal.operations.usecases.arena2;
2

    
3
import junit.framework.TestCase;
4
import org.gvsig.expressionevaluator.Code;
5
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
6
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
7
import org.gvsig.expressionevaluator.Interpreter;
8
import org.gvsig.expressionevaluator.LexicalAnalyzer;
9
import org.gvsig.expressionevaluator.MutableSymbolTable;
10
import org.gvsig.expressionevaluator.SymbolTable;
11
import org.gvsig.fmap.dal.DALLocator;
12
import org.gvsig.fmap.dal.DataManager;
13
import org.gvsig.fmap.dal.feature.FeatureStore;
14
import org.gvsig.fmap.dal.store.jdbc2.AbstractTestUtils;
15
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
16
import org.gvsig.sqlite.dal.TestUtilsSQLite;
17
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
18
import org.slf4j.Logger;
19
import org.slf4j.LoggerFactory;
20

    
21
@SuppressWarnings("UseSpecificCatch")
22
public class TestSelectWithLocalVariables extends TestCase {
23

    
24
    private static final Logger LOGGER = LoggerFactory.getLogger(TestSelectWithLocalVariables.class);
25

    
26
    public TestSelectWithLocalVariables(String testName) {
27
        super(testName);
28
    }
29

    
30
    @Override
31
    protected void setUp() throws Exception {
32
        super.setUp();
33
        new DefaultLibrariesInitializer().fullInitialize();
34
    }
35

    
36
    @Override
37
    protected void tearDown() throws Exception {
38
        super.tearDown();
39
    }
40

    
41
    protected AbstractTestUtils utils;
42

    
43
    public AbstractTestUtils utils() {
44
        if (this.utils == null) {
45
            this.utils = this.createUtils();
46
        }
47
        return this.utils;
48
    }
49

    
50
    protected AbstractTestUtils createUtils() {
51
        return new TestUtilsSQLite();
52
    }
53
    
54
    protected LexicalAnalyzer createLexicalAnalyzer() {
55
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
56
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
57
        return lexer;
58
    }
59

    
60
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
61
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
62
        org.gvsig.expressionevaluator.Compiler compiler = manager.createCompiler();
63
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
64
        return compiler;
65
    }
66

    
67
    protected SymbolTable createSymbolTable() {
68
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
69
        MutableSymbolTable symbolTable = manager.createSymbolTable();
70
        symbolTable.setVar("precio", 200);
71
        symbolTable.setVar("1990", 0.168873933773767);
72
        return symbolTable;
73
    }
74

    
75
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
76
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
77
        Interpreter interpreter = manager.createInterpreter();
78
        interpreter.setSymbolTable(symbolTable);
79
        return interpreter;
80
    }
81
    
82
    private void link(Code code) {
83
      code.link(createSymbolTable());
84
    }
85

    
86
    public void testSelectWithLocalVariables() throws Exception {
87
        try {
88
            FeatureStore sourceStore = utils().openCountriesStore();
89
            
90
            JDBCServerExplorer explorer = utils().openServerExplorer("testCountXXXXX");
91

    
92
            utils().info_jdbc(explorer);
93
            utils().drop_tables(explorer, sourceStore.getName());
94

    
95
            utils().create_table_from(explorer, sourceStore.getName(), sourceStore);
96
            utils().insert_into_from(explorer, sourceStore.getName(), sourceStore, FeatureStore.MODE_APPEND);
97
            
98
            DataManager dataManager = DALLocator.getDataManager();
99
            dataManager.getStoresRepository().add(sourceStore.getName(), explorer.get(sourceStore.getName()));
100
            
101
            StringBuilder source = new StringBuilder();
102
            source.append("BEGIN ");
103
            source.append("CREATE PROCEDURE fn1() AS");
104
            source.append("  BEGIN ");
105
            source.append("    X := 10; ");
106
            source.append("    SELECT * INTO ROW FROM countries ORDER BY (AREA + X) LIMIT 1;"); 
107
            source.append("  END; ");
108
            source.append("fn1();");
109
            source.append("END ");
110

    
111
            MutableSymbolTable symbolTable = (MutableSymbolTable) createSymbolTable();
112
            org.gvsig.expressionevaluator.Compiler compiler = createCompiler();
113
            Interpreter interpreter = createInterpreter(symbolTable);
114

    
115
            Code code = compiler.compileExpression(source.toString());
116
            link(code);            
117
            Object v = interpreter.run(code);
118
            
119

    
120
        } catch (Throwable th) {
121
            LOGGER.warn("", th);
122
            throw th;
123
        }
124
    }
125
}