Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.db / org.gvsig.fmap.dal.db.jdbc / src / test / java / org / gvsig / fmap / dal / store / jdbc2 / ExpressionBuilderTest.java @ 43114

History | View | Annotate | Download (7.45 KB)

1
package org.gvsig.fmap.dal.store.jdbc2;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.apache.commons.lang3.ArrayUtils;
6
import org.cresques.cts.IProjection;
7
import org.gvsig.fmap.crs.CRSFactory;
8
import org.gvsig.fmap.dal.ExpressionBuilder;
9
import org.gvsig.fmap.dal.ExpressionBuilder.Config;
10
import org.gvsig.fmap.dal.ExpressionBuilder.GeometrySupportType;
11
import org.gvsig.fmap.dal.ExpressionBuilder.Parameter;
12
import static org.gvsig.fmap.dal.ExpressionBuilder.ParameterType.Constant;
13
import org.gvsig.fmap.dal.ExpressionBuilder.Variable;
14
import org.gvsig.fmap.dal.feature.spi.ExpressionBuilderBase;
15
import org.gvsig.fmap.geom.Geometry;
16
import org.gvsig.fmap.geom.GeometryLocator;
17
import org.gvsig.fmap.geom.GeometryManager;
18
import org.gvsig.fmap.geom.exception.CreateGeometryException;
19
import org.gvsig.fmap.geom.primitive.Point;
20
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
21

    
22
public class ExpressionBuilderTest extends AbstractLibraryAutoInitTestCase {
23
    
24
    @Override
25
    protected void doSetUp() throws Exception {
26

    
27
    }
28
    
29
    List<String> getVariableNames(ExpressionBuilder builder) {
30
        List<String> vars = new ArrayList<>();
31
        for (Variable var : builder.getVariables()) {
32
            vars.add(var.getName());
33
        }
34
        return vars;
35
    }
36
    
37
    List<String> getParameterNames(ExpressionBuilder builder) {
38
        List<String> params = new ArrayList<>();
39
        for (Parameter param : builder.getParameters()) {
40
            String s;
41
            switch(param.getType()) {
42
                case Constant:
43
                    Object value = param.getValue();
44
                    if( value==null ) {
45
                        s = "null";
46
                    } else if( value instanceof String ) {
47
                        s = "'" + (String)value + "'";
48
                    } else {
49
                        s = value.toString();
50
                    }    
51
                    break;
52
                case Geometry:
53
                case Variable:
54
                default:
55
                    s = "\"" + param.getName() + "\"";
56
            }
57
            params.add(s);
58
        }
59
        return params;
60
    }
61
    
62
    public void test2() {
63
        ExpressionBuilder builder = new ExpressionBuilderBase();
64
        
65
        builder.and(
66
          builder.eq(
67
            builder.lcase(builder.variable("colum_name_c")),
68
            builder.parameter("colum_name_p")
69
          )
70
        );
71
        builder.and(
72
            builder.group(
73
                builder.or(
74
                    builder.like(
75
                        builder.lcase( builder.variable("uno")),
76
                        builder.constant("%10")
77
                    ),
78
                    builder.lt(
79
                        builder.variable("dos"),
80
                        builder.constant(-3.5)
81
                    )
82
                )
83
            )
84
        );
85
        builder.and(
86
                builder.ST_Intersects(
87
                    builder.variable("geom1"), 
88
                    builder.ST_Envelope(
89
                        builder.ST_GeomFromWKB(
90
                                builder.parameter("geom2"), 
91
                                builder.parameter().value(4326).as_constant()
92
                        )
93
                    )
94
                )
95
        );
96
        builder.and(
97
            builder.gt(
98
                builder.variable("tres"),
99
                builder.constant(123456789)
100
            )
101
        );
102
        assertEquals(
103
                "( (LCASE(\"colum_name_c\")) = (?) ) AND ( ( (LCASE(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) ) AND ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?))))) AND ( (\"tres\") > (123456789) )",
104
                builder.toString()
105
        );
106
        assertEquals(
107
                "[colum_name_c, dos, geom1, tres, uno]",
108
                ArrayUtils.toString(getVariableNames(builder))
109
        );
110
        assertEquals(
111
                "[\"colum_name_p\", \"geom2\", 4326]",
112
                ArrayUtils.toString(getParameterNames(builder))
113
        );
114
    }
115
    
116
    public void test3() throws CreateGeometryException {
117
        ExpressionBuilder builder = new ExpressionBuilderBase();
118
                
119
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
120
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
121
        
122
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
123
        builder.set(        
124
            builder.ST_Intersects(
125
              builder.geometry(point,proj),
126
              builder.variable("the_geom")
127
            )
128
        );
129
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKT);
130
        System.out.println(builder.toString());
131
        assertEquals(
132
                "ST_Intersects((ST_GeomFromText('POINT (10 20)', (4326))), (\"the_geom\"))",
133
                builder.toString()
134
        );
135
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKB);
136
        System.out.println(builder.toString());
137
        assertEquals(
138
                "ST_Intersects((ST_GeomFromWKB((0x000000000140240000000000004034000000000000), (4326))), (\"the_geom\"))",
139
                builder.toString()
140
        );
141
        assertEquals(
142
                "[the_geom]",
143
                ArrayUtils.toString(getVariableNames(builder))
144
        );
145
        assertEquals(
146
                "[]",
147
                ArrayUtils.toString(getParameterNames(builder))
148
        );
149
    }
150
    
151
    public void test4() throws CreateGeometryException {
152
        ExpressionBuilder builder = new ExpressionBuilderBase();
153
                
154
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
155
        
156
        builder.and(
157
                builder.ST_Intersects(
158
                    builder.variable("geom1"), 
159
                    builder.ST_Envelope(
160
                        builder.ST_GeomFromWKB(
161
                                builder.parameter("geom2"), 
162
                                builder.parameter().value(proj).as_constant()
163
                        )
164
                    )
165
                )
166
        );
167
        
168
        System.out.println(builder.toString());
169
        assertEquals(
170
                "ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?)))))",
171
                builder.toString()
172
        );
173
        assertEquals(
174
                "[geom1]",
175
                ArrayUtils.toString(getVariableNames(builder))
176
        );
177
        assertEquals(
178
                "[\"geom2\", 4326]",
179
                ArrayUtils.toString(getParameterNames(builder))
180
        );
181
    }
182
        
183
    public void test5() throws CreateGeometryException {
184
        ExpressionBuilder builder = new ExpressionBuilderBase();
185
                
186
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
187
        
188
        builder.and(
189
                builder.eq(
190
                        builder.ST_SRID( builder.variable("geom") ),
191
                        builder.srs(proj)
192
                )
193
        );
194
        
195
        System.out.println(builder.toString());
196
        assertEquals(
197
                "( (ST_SRID(\"geom\")) = (4326) )",
198
                builder.toString()
199
        );
200
        assertEquals(
201
                "[geom]",
202
                ArrayUtils.toString(getVariableNames(builder))
203
        );
204
        assertEquals(
205
                "[]",
206
                ArrayUtils.toString(getParameterNames(builder))
207
        );
208
    }
209
}