Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.geometry / org.gvsig.expressionevaluator.geometry.lib / org.gvsig.expressionevaluator.geometry.lib.impl / src / test / java / org / gvsig / expresionevaluator / impl / TestOptimizer.java @ 44644

History | View | Annotate | Download (6.33 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer;
4
import junit.framework.TestCase;
5
import org.cresques.cts.IProjection;
6
import org.gvsig.expressionevaluator.LexicalAnalyzer;
7
import org.gvsig.expressionevaluator.Compiler;
8
import org.gvsig.expressionevaluator.Code;
9
import org.gvsig.expressionevaluator.ExpressionBuilder;
10
import org.gvsig.expressionevaluator.ExpressionUtils;
11
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
12
import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
13
import org.gvsig.expressionevaluator.GeometryExpressionUtils;
14
import org.gvsig.expressionevaluator.Interpreter;
15
import org.gvsig.expressionevaluator.MutableSymbolTable;
16
import org.gvsig.expressionevaluator.Optimizer;
17
import org.gvsig.expressionevaluator.SymbolTable;
18
import org.gvsig.expressionevaluator.impl.DefaultInterpreter;
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
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
28

    
29
public class TestOptimizer extends TestCase {
30

    
31
    public TestOptimizer(String testName) {
32
        super(testName);
33
    }
34

    
35
    @Override
36
    protected void setUp() throws Exception {
37
        super.setUp();
38
        new DefaultLibrariesInitializer().fullInitialize();
39
    }
40

    
41
    @Override
42
    protected void tearDown() throws Exception {
43
        super.tearDown();
44
    }
45

    
46
    // TODO add test methods here. The name must begin with 'test'. For example:
47
    // public void testHello() {}
48
    protected LexicalAnalyzer createLexicalAnalyzer() {
49
        SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
50
        return lexer;
51
    }
52

    
53
    protected Compiler createCompiler() {
54
        Compiler compiler = ExpressionUtils.createCompiler();
55
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
56
        return compiler;
57
    }
58

    
59
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
60
        Interpreter interpreter = new DefaultInterpreter();
61
        interpreter.setSymbolTable(symbolTable);
62
        return interpreter;
63
    }
64

    
65
    protected Optimizer createOptimizer(SymbolTable symbolTable) {
66
        Optimizer optimizer = ExpressionUtils.createOptimizer();
67
        optimizer.setSymbolTable(symbolTable);
68
        return optimizer;
69
    }
70

    
71
    protected MutableSymbolTable createSymbolTable() {
72
        DefaultSymbolTable symbolTable = new DefaultSymbolTable();
73
        symbolTable.setVar("precio", 200);
74
        symbolTable.setVar("1990", 0.168873933773767);
75
        return symbolTable;
76
    }
77

    
78
    private String createExpr1() {
79
        GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
80

    
81
        ExpressionBuilder.Value expr1 = builder.gt(
82
                builder.column("campo1"),
83
                builder.constant(10)
84
        );
85
        System.out.println(expr1.toString());
86
        assertEquals(
87
                "( (\"campo1\") > (10) )",
88
                expr1.toString()
89
        );
90
        return expr1.toString();
91
    }
92

    
93
    private Polygon createPolygon() throws CreateGeometryException {
94
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
95
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
96

    
97
        Polygon polygon = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
98
        polygon.addVertex(0, 0);
99
        polygon.addVertex(0, 100);
100
        polygon.addVertex(100, 100);
101
        polygon.addVertex(100, 0);
102
        polygon.addVertex(0, 0);
103

    
104
        polygon.setProjection(proj);
105
        return polygon;
106
    }
107

    
108
    private Geometry createPoint(double x, double y) throws CreateGeometryException {
109
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
110
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
111
        Point point = geometryManager.createPoint(x, y, Geometry.SUBTYPES.GEOM2D);
112
        point.setProjection(proj);
113
        return point;
114
    }
115

    
116
    public void testSpatialExpression1() throws Exception {
117
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
118
        GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
119
        builder.geometry_support_type(GeometrySupportType.WKB);
120

    
121
        String source = builder.and(
122
                builder.custom(this.createExpr1()),
123
                builder.ST_Intersects(
124
                        builder.geometry(createPolygon()),
125
                        builder.column("GEOMETRY")
126
                )
127
        ).toString();
128

    
129
        MutableSymbolTable symbolTable = createSymbolTable();
130
        symbolTable.setVar("campo1", 11);
131
        symbolTable.setVar("GEOMETRY", createPoint(50, 50));
132

    
133
        Interpreter interpreter = createInterpreter(symbolTable);
134
        Compiler compiler = createCompiler();
135
        Code code = compiler.compileExpression(source);
136
        System.out.println(code.toString());
137
        assertEquals(
138
                "((\"campo1\" > 10) AND ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
139
                code.toString()
140
        );
141

    
142
//        long t1 = System.currentTimeMillis();
143
//        for (int i = 0; i < 1000; i++) {
144
//            interpreter.run(code);
145
//        }
146
//        System.out.println("Sin optimizar: " + (System.currentTimeMillis() - t1));
147

    
148
//        t1 = System.currentTimeMillis();
149
        Optimizer optimizer = createOptimizer(symbolTable);
150
        Code code2 = optimizer.optimize(code);
151
//        System.out.println("Tiempo de optimizacion: " + (System.currentTimeMillis() - t1));
152
        System.out.println(code2.toString());
153
        assertEquals(
154
                "((\"campo1\" > 10) AND ST_Intersects('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))'::geometry, \"GEOMETRY\"))",
155
                code2.toString()
156
        );
157

    
158
//        t1 = System.currentTimeMillis();
159
//        for (int i = 0; i < 1000; i++) {
160
//            interpreter.run(code2);
161
//        }
162
//        System.out.println("Optimizado: " + (System.currentTimeMillis() - t1));
163

    
164
    }
165

    
166
}