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 / TestGrammarCompiler.java @ 44769

History | View | Annotate | Download (13.7 KB)

1 44738 jjdelcerro
package org.gvsig.expressionevaluator;
2 44139 jjdelcerro
3
import junit.framework.TestCase;
4 44769 jjdelcerro
import org.gvsig.expressionevaluator.impl.expressionbuilder.formatters.DALFormatter;
5 44139 jjdelcerro
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
6
7
/**
8
 *
9
 * @author jjdelcerro
10
 */
11
public class TestGrammarCompiler extends TestCase {
12
13
    public TestGrammarCompiler(String testName) {
14
        super(testName);
15
    }
16
17
    @Override
18
    protected void setUp() throws Exception {
19
        super.setUp();
20
        new DefaultLibrariesInitializer().fullInitialize();
21
    }
22
23
    @Override
24
    protected void tearDown() throws Exception {
25
        super.tearDown();
26
    }
27
28
    // TODO add test methods here. The name must begin with 'test'. For example:
29
    // public void testHello() {}
30
31
    protected LexicalAnalyzer createLexicalAnalyzer() {
32
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
33
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
34
        return lexer;
35
    }
36
37
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
38
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
39
        Compiler compiler = manager.createCompiler();
40
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
41
        return compiler;
42
    }
43
44
    protected SymbolTable createSymbolTable() {
45
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
46
        MutableSymbolTable symbolTable = manager.createSymbolTable();
47
        symbolTable.setVar("precio", 200);
48
        symbolTable.setVar("1990", 0.168873933773767);
49
        return symbolTable;
50
    }
51
52
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
53
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
54
        Interpreter interpreter = manager.createInterpreter();
55
        interpreter.setSymbolTable(symbolTable);
56
        return interpreter;
57
    }
58 44738 jjdelcerro
59
    private void link(Code code) {
60
      code.link(createSymbolTable());
61 44139 jjdelcerro
    }
62
63 44738 jjdelcerro
    public void testSelect() {
64
        StringBuilder source = new StringBuilder();
65
        source.append("SELECT * FROM countries;");
66 44139 jjdelcerro
67
        Compiler compiler = createCompiler();
68
69 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
70
        link(code);
71 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL)", code.toString());
72 44139 jjdelcerro
    }
73
74 44750 jjdelcerro
    public void testSelect1() {
75
        StringBuilder source = new StringBuilder();
76
        source.append("SELECT * FROM countries");
77
78
        Compiler compiler = createCompiler();
79
80
        Code code = compiler.compileExpression(source.toString());
81
        link(code);
82 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL)", code.toString());
83 44750 jjdelcerro
    }
84
85 44738 jjdelcerro
    public void testSelect2() {
86
        StringBuilder source = new StringBuilder();
87
        source.append("BEGIN ");
88
        source.append("  SET X = 0; ");
89 44750 jjdelcerro
        source.append("  FOR row in (SELECT * FROM countries;) "); // Con ;
90 44738 jjdelcerro
        source.append("    BEGIN ");
91
        source.append("      IF row.LASTCENSUS > 0 THEN ");
92
        source.append("        SET X = X + row.LASTCENSUS ");
93
        source.append("      END IF ");
94
        source.append("    END FOR ");
95
        source.append("END");
96 44384 jjdelcerro
97
        Compiler compiler = createCompiler();
98
99 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
100
        link(code);
101 44769 jjdelcerro
        assertEquals("BLOCK(LET('X', 0), FOREACH('row', SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL), IFF((\"row\".\"LASTCENSUS\" > 0), LET('X', (\"X\" + \"row\".\"LASTCENSUS\")))))", code.toString());
102 44384 jjdelcerro
    }
103
104 44750 jjdelcerro
    public void testSelect3() {
105
        StringBuilder source = new StringBuilder();
106
        source.append("BEGIN ");
107
        source.append("  SET X = 0; ");
108
        source.append("  FOR row in (SELECT * FROM countries) "); // Sin ;
109
        source.append("    BEGIN ");
110
        source.append("      IF row.LASTCENSUS > 0 THEN ");
111
        source.append("        SET X = X + row.LASTCENSUS ");
112
        source.append("      END IF ");
113
        source.append("    END FOR ");
114
        source.append("END");
115
116
        Compiler compiler = createCompiler();
117
118
        Code code = compiler.compileExpression(source.toString());
119
        link(code);
120 44769 jjdelcerro
        assertEquals("BLOCK(LET('X', 0), FOREACH('row', SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL), IFF((\"row\".\"LASTCENSUS\" > 0), LET('X', (\"X\" + \"row\".\"LASTCENSUS\")))))", code.toString());
121 44750 jjdelcerro
    }
122
123 44738 jjdelcerro
    public void testSelectWhere() {
124
        StringBuilder source = new StringBuilder();
125
        source.append("SELECT * FROM countries  ");
126
        source.append("  WHERE LASTCENSUS > 0;  ");
127 44139 jjdelcerro
128
        Compiler compiler = createCompiler();
129
130 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
131
        link(code);
132 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", (\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL)", code.toString());
133 44139 jjdelcerro
    }
134
135 44738 jjdelcerro
    public void testSelectCountWhere() {
136
        StringBuilder source = new StringBuilder();
137
        source.append("SELECT COUNT(*) FROM countries  ");
138
        source.append("  WHERE LASTCENSUS > 0 ; ");
139 44384 jjdelcerro
140
        Compiler compiler = createCompiler();
141
142 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
143
        link(code);
144 44750 jjdelcerro
        assertEquals("SELECT_COUNT(\"countries\", (\"LASTCENSUS\" > 0))", code.toString());
145 44384 jjdelcerro
    }
146
147 44738 jjdelcerro
    public void testSelectWhere2() {
148
        StringBuilder source = new StringBuilder();
149
        source.append("SELECT * FROM countries  ");
150
        source.append("  WHERE countries.LASTCENSUS > 0 ; ");
151 44139 jjdelcerro
152
        Compiler compiler = createCompiler();
153
154 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
155
        link(code);
156 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL)", code.toString());
157 44139 jjdelcerro
    }
158
159 44738 jjdelcerro
    public void testSelectOrder() {
160
        StringBuilder source = new StringBuilder();
161
        source.append("SELECT * FROM countries  ");
162
        source.append("  ORDER BY CONTINENT ASC, LASTCENSUS DESC; ");
163 44139 jjdelcerro
164
        Compiler compiler = createCompiler();
165
166 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
167
        link(code);
168 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", NULL, TUPLE(\"CONTINENT\", \"LASTCENSUS\"), TUPLE(TRUE, FALSE), NULL)", code.toString());
169 44139 jjdelcerro
    }
170
171 44738 jjdelcerro
    public void testSelectWhereOrder() {
172
        StringBuilder source = new StringBuilder();
173
        source.append("SELECT * FROM countries  ");
174
        source.append("  WHERE LASTCENSUS > 0  ");
175
        source.append("  ORDER BY ID ; ");
176 44139 jjdelcerro
177
        Compiler compiler = createCompiler();
178
179 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
180
        link(code);
181 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", (\"LASTCENSUS\" > 0), TUPLE(\"ID\"), TUPLE(TRUE), NULL)", code.toString());
182 44139 jjdelcerro
    }
183
184 44738 jjdelcerro
    public void testSelectWhereOrderLimit() {
185
        StringBuilder source = new StringBuilder();
186
        source.append("SELECT * FROM countries  ");
187
        source.append("  WHERE LASTCENSUS > 0  ");
188
        source.append("  ORDER BY LASTCENSUS DESC");
189
        source.append("  LIMIT 3 ;");
190 44139 jjdelcerro
191
        Compiler compiler = createCompiler();
192
193 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
194
        link(code);
195 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", (\"LASTCENSUS\" > 0), TUPLE(\"LASTCENSUS\"), TUPLE(FALSE), 3)", code.toString());
196 44139 jjdelcerro
    }
197
198 44738 jjdelcerro
    public void testSelectLimit() {
199
        StringBuilder source = new StringBuilder();
200
        source.append("SELECT * FROM countries  ");
201
        source.append("  LIMIT 3; ");
202 44139 jjdelcerro
203
        Compiler compiler = createCompiler();
204
205 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
206
        link(code);
207 44769 jjdelcerro
        assertEquals("SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), 3)", code.toString());
208 44139 jjdelcerro
    }
209
210 44738 jjdelcerro
    public void testExists() {
211
        StringBuilder source = new StringBuilder();
212
        source.append("EXISTS(NULL)");
213 44139 jjdelcerro
214
        Compiler compiler = createCompiler();
215
216 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
217
        link(code);
218
        String id = "????????????????????????????????";
219
        String s = code.toString();
220
        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
221 44748 jjdelcerro
        assertEquals("EXISTS(NULL, 'EXISTS????????????????????????????????')", s);
222 44139 jjdelcerro
    }
223
224 44738 jjdelcerro
    public void testExistsSelect1() {
225
        StringBuilder source = new StringBuilder();
226
        source.append("EXISTS(");
227 44769 jjdelcerro
        source.append(" SELECT \"ISO_A2\" FROM countries");
228 44738 jjdelcerro
        source.append("   WHERE countries.LASTCENSUS > 0 ; ");
229
        source.append(")");
230 44139 jjdelcerro
231
        Compiler compiler = createCompiler();
232
233 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
234
        link(code);
235
        String id = "????????????????????????????????";
236
        String s = code.toString();
237
        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
238 44769 jjdelcerro
        assertEquals("EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL), 'EXISTS????????????????????????????????')", s);
239 44139 jjdelcerro
    }
240
241 44750 jjdelcerro
    public void testExistsSelect2() {
242
        StringBuilder source = new StringBuilder();
243
        source.append("EXISTS(");
244 44769 jjdelcerro
        source.append(" SELECT \"ISO_A2\" FROM countries");
245 44750 jjdelcerro
        source.append("   WHERE countries.LASTCENSUS > 0 ");
246
        source.append(")");
247
248
        Compiler compiler = createCompiler();
249
250
        Code code = compiler.compileExpression(source.toString());
251
        link(code);
252
        String id = "????????????????????????????????";
253
        String s = code.toString();
254
        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
255 44769 jjdelcerro
        assertEquals("EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL), 'EXISTS????????????????????????????????')", s);
256 44750 jjdelcerro
    }
257
258 44738 jjdelcerro
    public void testExistsSelectLimit1() {
259
        StringBuilder source = new StringBuilder();
260
        source.append("EXISTS(");
261 44769 jjdelcerro
        source.append(" SELECT \"ISO_A2\" FROM countries  ");
262 44738 jjdelcerro
        source.append("   WHERE countries.LASTCENSUS > 0  ");
263
        source.append("   LIMIT 1; ");
264
        source.append(")");
265 44139 jjdelcerro
266
        Compiler compiler = createCompiler();
267
268 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
269
        link(code);
270
        String id = "????????????????????????????????";
271
        String s = code.toString();
272
        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
273 44769 jjdelcerro
        assertEquals("EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), 1), 'EXISTS????????????????????????????????')", s);
274 44139 jjdelcerro
    }
275
276 44738 jjdelcerro
    public void testExistsSelectLimit2() {
277
        // Sobre la tabla de continentes, para obtener la lista de continentes
278
        // que tienen paises sin censo.
279
        // Filtramos continentes por un campo del pais.
280
        StringBuilder source = new StringBuilder();
281
        source.append("EXISTS(");
282 44769 jjdelcerro
        source.append(" SELECT \"ISO_A2\" FROM countries");
283 44738 jjdelcerro
        source.append("   WHERE ");
284
        source.append("     continents.NAME = countries.CONTINENT AND ");
285
        source.append("     countries.LASTCENSUS < 0 ");
286
        source.append("   LIMIT 1; ");
287
        source.append(")");
288 44139 jjdelcerro
289
        Compiler compiler = createCompiler();
290
291 44738 jjdelcerro
        Code code = compiler.compileExpression(source.toString());
292
        link(code);
293
        String id = "????????????????????????????????";
294
        String s = code.toString();
295
        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
296 44769 jjdelcerro
        assertEquals("EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", ((\"continents\".\"NAME\" = \"countries\".\"CONTINENT\") AND (\"countries\".\"LASTCENSUS\" < 0)), TUPLE(), TUPLE(), 1), 'EXISTS????????????????????????????????')", s);
297 44139 jjdelcerro
    }
298
299 44748 jjdelcerro
    public void testExistsSelectLimit3() {
300
        // Sobre la tabla de continentes, para obtener la lista de continentes
301
        // que tienen paises sin censo.
302
        // Filtramos continentes por un campo del pais.
303
        StringBuilder source = new StringBuilder();
304
        source.append("EXISTS(");
305 44769 jjdelcerro
        source.append(" SELECT \"ISO_A2\" FROM countries");
306 44748 jjdelcerro
        source.append("   WHERE ");
307
        source.append("     continents.NAME = countries.CONTINENT AND ");
308
        source.append("     countries.LASTCENSUS < 0 ");
309 44750 jjdelcerro
        source.append("   LIMIT 1 ");
310 44748 jjdelcerro
        source.append(" ,");
311
        source.append(" 'patata'");
312
        source.append(")");
313
314
        Compiler compiler = createCompiler();
315
316
        Code code = compiler.compileExpression(source.toString());
317
        link(code);
318 44769 jjdelcerro
        assertEquals("EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", ((\"continents\".\"NAME\" = \"countries\".\"CONTINENT\") AND (\"countries\".\"LASTCENSUS\" < 0)), TUPLE(), TUPLE(), 1), 'patata')", code.toString());
319 44748 jjdelcerro
    }
320
321
    public void testExistsSelectLimit4() {
322
        StringBuilder source = new StringBuilder();
323
        source.append("EXISTS(");
324
        source.append(" SELECT(");
325 44769 jjdelcerro
        source.append("   TUPLE(\"ISO_A2\"), ");
326 44750 jjdelcerro
        source.append("   countries, ");
327
        source.append("   (countries.LASTCENSUS > 0), ");
328
        source.append("   TUPLE(), ");
329
        source.append("   TUPLE(), ");
330
        source.append("   1 ");
331 44748 jjdelcerro
        source.append("  ) ");
332
        source.append(" , ");
333
        source.append(" 'EXISTS1234567890ABCDEFGHHIJKLMNOPQRSTU' ");
334
        source.append(") ");
335
336
        Compiler compiler = createCompiler();
337
338
        Code code = compiler.compileExpression(source.toString());
339
        link(code);
340
        String id = "????????????????????????????????";
341
        String s = code.toString();
342
        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
343 44769 jjdelcerro
        assertEquals("EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), 1), 'EXISTS????????????????????????????????')", s);
344 44748 jjdelcerro
    }
345
346 44139 jjdelcerro
}