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

View differences:

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