Revision 44644 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestOptimizer.java
TestOptimizer.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expresionevaluator.impl; |
2 | 2 |
|
3 |
import static junit.framework.Assert.assertEquals; |
|
4 | 3 |
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer; |
5 |
import org.gvsig.expressionevaluator.impl.DefaultCompiler; |
|
6 | 4 |
import junit.framework.TestCase; |
7 |
import org.cresques.cts.IProjection; |
|
8 | 5 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
9 | 6 |
import org.gvsig.expressionevaluator.Compiler; |
10 | 7 |
import org.gvsig.expressionevaluator.Code; |
11 | 8 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
9 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
|
12 | 10 |
import org.gvsig.expressionevaluator.Interpreter; |
13 | 11 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
14 | 12 |
import org.gvsig.expressionevaluator.Optimizer; |
15 | 13 |
import org.gvsig.expressionevaluator.SymbolTable; |
16 |
import org.gvsig.expressionevaluator.impl.DefaultExpressionBuilder; |
|
17 |
import org.gvsig.expressionevaluator.impl.DefaultInterpreter; |
|
18 |
import org.gvsig.expressionevaluator.impl.DefaultOptimizer; |
|
19 |
import org.gvsig.expressionevaluator.impl.DefaultSymbolTable; |
|
20 |
import org.gvsig.fmap.crs.CRSFactory; |
|
21 |
import org.gvsig.fmap.geom.Geometry; |
|
22 |
import org.gvsig.fmap.geom.GeometryLocator; |
|
23 |
import org.gvsig.fmap.geom.GeometryManager; |
|
24 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
|
25 |
import org.gvsig.fmap.geom.primitive.Point; |
|
26 |
import org.gvsig.fmap.geom.primitive.Polygon; |
|
27 | 14 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
28 | 15 |
|
29 | 16 |
public class TestOptimizer extends TestCase { |
... | ... | |
51 | 38 |
} |
52 | 39 |
|
53 | 40 |
protected Compiler createCompiler() { |
54 |
Compiler compiler = new DefaultCompiler();
|
|
41 |
Compiler compiler = ExpressionUtils.createCompiler();
|
|
55 | 42 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
56 | 43 |
return compiler; |
57 | 44 |
} |
58 | 45 |
|
59 | 46 |
protected Interpreter createInterpreter(SymbolTable symbolTable) { |
60 |
Interpreter interpreter = new DefaultInterpreter();
|
|
47 |
Interpreter interpreter = ExpressionUtils.createInterpreter();
|
|
61 | 48 |
interpreter.setSymbolTable(symbolTable); |
62 | 49 |
return interpreter; |
63 | 50 |
} |
64 | 51 |
|
65 | 52 |
protected Optimizer createOptimizer(SymbolTable symbolTable) { |
66 |
Optimizer optimizer = new DefaultOptimizer(symbolTable); |
|
53 |
Optimizer optimizer = ExpressionUtils.createOptimizer(); |
|
54 |
optimizer.setSymbolTable(symbolTable); |
|
67 | 55 |
return optimizer; |
68 | 56 |
} |
69 | 57 |
|
70 | 58 |
protected MutableSymbolTable createSymbolTable() { |
71 |
DefaultSymbolTable symbolTable = new DefaultSymbolTable();
|
|
59 |
MutableSymbolTable symbolTable = ExpressionUtils.createSymbolTable();
|
|
72 | 60 |
symbolTable.setVar("precio", 200); |
73 | 61 |
symbolTable.setVar("1990", 0.168873933773767); |
74 | 62 |
return symbolTable; |
75 | 63 |
} |
76 | 64 |
|
77 | 65 |
private String createExpr1() { |
78 |
ExpressionBuilder builder = new DefaultExpressionBuilder();
|
|
66 |
ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
|
|
79 | 67 |
|
80 | 68 |
ExpressionBuilder.Value expr1 = builder.gt( |
81 | 69 |
builder.column("campo1"), |
... | ... | |
89 | 77 |
return expr1.toString(); |
90 | 78 |
} |
91 | 79 |
|
92 |
private Polygon createPolygon() throws CreateGeometryException { |
|
93 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
94 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
95 | 80 |
|
96 |
Polygon polygon = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D); |
|
97 |
polygon.addVertex(0, 0); |
|
98 |
polygon.addVertex(0, 100); |
|
99 |
polygon.addVertex(100, 100); |
|
100 |
polygon.addVertex(100, 0); |
|
101 |
polygon.addVertex(0, 0); |
|
102 |
|
|
103 |
polygon.setProjection(proj); |
|
104 |
return polygon; |
|
105 |
} |
|
106 |
|
|
107 |
private Geometry createPoint(double x, double y) throws CreateGeometryException { |
|
108 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
109 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
110 |
Point point = geometryManager.createPoint(x, y, Geometry.SUBTYPES.GEOM2D); |
|
111 |
point.setProjection(proj); |
|
112 |
return point; |
|
113 |
} |
|
114 |
|
|
115 | 81 |
public void testIdentifier1() { |
116 | 82 |
String source = "precio"; |
117 | 83 |
|
... | ... | |
449 | 415 |
assertEquals("'hola'->length()", code2.toString()); |
450 | 416 |
} |
451 | 417 |
|
452 |
public void testSpatialExpression1() throws Exception { |
|
453 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
454 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
|
455 |
builder.geometry_support_type(ExpressionBuilder.GeometrySupportType.WKB); |
|
456 |
|
|
457 |
String source = builder.and( |
|
458 |
builder.custom(this.createExpr1()), |
|
459 |
builder.ST_Intersects( |
|
460 |
builder.geometry(createPolygon()), |
|
461 |
builder.column("GEOMETRY") |
|
462 |
) |
|
463 |
).toString(); |
|
464 |
|
|
465 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
466 |
symbolTable.setVar("campo1", 11); |
|
467 |
symbolTable.setVar("GEOMETRY", createPoint(50, 50)); |
|
468 |
|
|
469 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
470 |
Compiler compiler = createCompiler(); |
|
471 |
Code code = compiler.compileExpression(source); |
|
472 |
System.out.println(code.toString()); |
|
473 |
assertEquals( |
|
474 |
"((\"campo1\" > 10) AND ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))", |
|
475 |
code.toString() |
|
476 |
); |
|
477 |
|
|
478 |
// long t1 = System.currentTimeMillis(); |
|
479 |
// for (int i = 0; i < 1000; i++) { |
|
480 |
// interpreter.run(code); |
|
481 |
// } |
|
482 |
// System.out.println("Sin optimizar: " + (System.currentTimeMillis() - t1)); |
|
483 |
|
|
484 |
// t1 = System.currentTimeMillis(); |
|
485 |
Optimizer optimizer = createOptimizer(symbolTable); |
|
486 |
Code code2 = optimizer.optimize(code); |
|
487 |
// System.out.println("Tiempo de optimizacion: " + (System.currentTimeMillis() - t1)); |
|
488 |
System.out.println(code2.toString()); |
|
489 |
assertEquals( |
|
490 |
"((\"campo1\" > 10) AND ST_Intersects('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))'::geometry, \"GEOMETRY\"))", |
|
491 |
code2.toString() |
|
492 |
); |
|
493 |
|
|
494 |
// t1 = System.currentTimeMillis(); |
|
495 |
// for (int i = 0; i < 1000; i++) { |
|
496 |
// interpreter.run(code2); |
|
497 |
// } |
|
498 |
// System.out.println("Optimizado: " + (System.currentTimeMillis() - t1)); |
|
499 |
|
|
500 |
} |
|
501 |
|
|
502 | 418 |
} |
Also available in: Unified diff