Revision 22

View differences:

branches/org.gvsig.mssqlserver-1.0.1-SP/org.gvsig.mssqlserver.provider/src/test/java/org/gvsig/fmap/dal/store/jdbc2/ExpressionBuilderTest.java
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(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(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
}
branches/org.gvsig.mssqlserver-1.0.1-SP/org.gvsig.mssqlserver.provider/src/test/java/org/gvsig/fmap/dal/store/jdbc2/SQLBuilderTest.java
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.Constant;
10
import org.gvsig.fmap.dal.ExpressionBuilder.Parameter;
11
import org.gvsig.fmap.dal.ExpressionBuilder.Variable;
12
import org.gvsig.fmap.dal.SQLBuilder;
13
import org.gvsig.fmap.dal.SQLBuilder.Privilege;
14
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
15
import org.gvsig.fmap.geom.DataTypes;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryLocator;
18
import org.gvsig.fmap.geom.GeometryManager;
19
import org.gvsig.fmap.geom.primitive.Polygon;
20
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
21

  
22
public class SQLBuilderTest 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
 
63
    public void testCalulateEnvelope() throws Exception {
64
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
65
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
66
        
67
        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
68
        limit.addVertex(0, 0);
69
        limit.addVertex(0, 100);
70
        limit.addVertex(100, 100);
71
        limit.addVertex(100, 0);
72
        limit.addVertex(0, 0);
73
        
74
        SQLBuilder builder = new SQLBuilderBase();
75
        
76
        builder.select().column().value(
77
            builder.getAsGeometry(
78
              builder.ST_ExtentAggregate(
79
                builder.column("the_geom")
80
              )
81
            )
82
        ).as("envelope");
83
        builder.select().from().table().database("master").schema("dbo").name("test1");
84
        builder.select().where().set(
85
            builder.ST_Intersects(
86
                builder.ST_Envelope(
87
                    builder.column("the_geom")
88
                ),
89
                builder.geometry(limit, proj)
90
            )
91
        );
92
        builder.select().where().and(
93
                builder.custom("x = 27")
94
        );
95
        
96
        // SELECT ST_AsBinary(ST_Extent("the_geom")) AS "envelope" FROM "master"."dbo"."test1" WHERE ST_Intersects((ST_Envelope("the_geom")), (ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', (4326)))) AND x = 27
97
        
98
        System.out.println("# Test:: testCalulateEnvelope");
99
        System.out.println("# SQL:: " + builder.toString());
100
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
101
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
102
        assertEquals(
103
                "SELECT ST_AsBinary(ST_Extent(\"the_geom\")) AS \"envelope\" FROM \"master\".\"dbo\".\"test1\" WHERE ST_Intersects((ST_Envelope(\"the_geom\")), (ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', (4326)))) AND x = 27",
104
                builder.toString()
105
        );
106
        assertEquals(
107
                "[the_geom]",
108
                ArrayUtils.toString(getVariableNames(builder))
109
        );
110
        assertEquals(
111
                "[]",
112
                ArrayUtils.toString(getParameterNames(builder))
113
        );
114
    }
115

  
116
    public void testCount() throws Exception {
117
        SQLBuilder builder = new SQLBuilderBase();
118
        
119
        builder.select().column().value(builder.count().all());
120
        builder.select().from().table().database("master").schema("dbo").name("test1");
121
        builder.select().from().subquery(null);
122
        builder.select().where().set( builder.custom("pp = 200"));
123

  
124
        System.out.println("# Test:: testCount");
125
        System.out.println("# SQL:: " + builder.toString());
126
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
127
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
128

  
129
        //# Test:: testCount
130
        //# SQL:: SELECT COUNT(*) FROM "master"."dbo"."test1" WHERE pp = 200
131
        //# Variables:: []
132
        //# Parametros:: []
133

  
134
        assertEquals(
135
                "SELECT COUNT(*) FROM \"master\".\"dbo\".\"test1\" WHERE pp = 200",
136
                builder.toString()
137
        );
138
        assertEquals(
139
                "[]",
140
                ArrayUtils.toString(getVariableNames(builder))
141
        );
142
        assertEquals(
143
                "[]",
144
                ArrayUtils.toString(getParameterNames(builder))
145
        );
146
    }
147
    
148
    public void testCreateTable() throws Exception {
149
        SQLBuilder builder = new SQLBuilderBase();
150

  
151
        builder.create_table().table().database("master").schema("dbo").name("test1");
152
        builder.create_table().add_column(
153
                "name",
154
                DataTypes.STRING,
155
                45,
156
                0,
157
                false,
158
                true,
159
                false,
160
                null
161
        );
162
        builder.create_table().add_column(
163
                "id",
164
                DataTypes.INT,
165
                0,
166
                0,
167
                true,
168
                false,
169
                true,
170
                0
171
        );
172
        builder.create_table().add_column(
173
                "geom",
174
                DataTypes.GEOMETRY,
175
                0,
176
                0,
177
                false,
178
                true,
179
                false,
180
                null
181
        );
182

  
183
        
184
        // CREATE TABLE "master"."dbo"."test1" ("name" VARCHAR(45) DEFAULT NULL NULL, "id" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, "geom" TEXT DEFAULT NULL NULL )
185
        System.out.println("# Test:: testCreateTable");
186
        System.out.println("# SQL:: " + builder.toString());
187
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
188
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
189
        assertEquals(
190
                "CREATE TABLE \"master\".\"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL NULL, \"id\" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, \"geom\" TEXT DEFAULT NULL NULL )",
191
                builder.toString()
192
        );
193
        assertEquals(
194
                "[]",
195
                ArrayUtils.toString(getVariableNames(builder))
196
        );
197
        assertEquals(
198
                "[]",
199
                ArrayUtils.toString(getParameterNames(builder))
200
        );
201
    }
202

  
203
    public void testDropTable() throws Exception {
204
        SQLBuilder builder = new SQLBuilderBase();
205
        
206
        builder.drop_table().table().database("master").schema("dbo").name("test1");
207

  
208
        // DROP TABLE "master"."dbo"."test1"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'
209
        
210
        System.out.println("# Test:: testDropTable");
211
        System.out.println("# SQL:: " + builder.toString());
212
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
213
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
214
        assertEquals(
215
                "DROP TABLE \"master\".\"dbo\".\"test1\"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'",
216
                builder.toString()
217
        );
218
        assertEquals(
219
                "[]",
220
                ArrayUtils.toString(getVariableNames(builder))
221
        );
222
        assertEquals(
223
                "[]",
224
                ArrayUtils.toString(getParameterNames(builder))
225
        );
226
    }
227
    
228
    public void testFetchFeatureProviderByReference() throws Exception {
229
        SQLBuilder builder = new SQLBuilderBase();
230
        
231
        String value = "yoyo";
232
        builder.select().column().name("name");
233
        builder.select().column().name("id");
234
        builder.select().column().name("geom").as_geometry();
235
        builder.select().from().table().database("master").schema("dbo").name("test1");
236
        builder.select().where().set(
237
            builder.eq(
238
                builder.column("name"),
239
                builder.parameter(value).as_constant()
240
            )
241
        );
242
        builder.select().limit(1);
243

  
244
        // SELECT "name", "id", ST_AsBinary("geom") FROM "master"."dbo"."test1" WHERE ( ("name") = (?) ) LIMIT 1
245

  
246
        System.out.println("# Test:: testFetchFeatureProviderByReference");
247
        System.out.println("# SQL:: " + builder.toString());
248
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
249
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
250
        assertEquals(
251
                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
252
                builder.toString()
253
        );
254
        assertEquals(
255
                "[geom, id, name]",
256
                ArrayUtils.toString(getVariableNames(builder))
257
        );
258
        assertEquals(
259
                "['yoyo']",
260
                ArrayUtils.toString(getParameterNames(builder))
261
        );
262
    }
263
    
264
    public void testFetchFeatureType() throws Exception {
265
        SQLBuilder builder = new SQLBuilderBase();
266

  
267
        builder.select().column().all();
268
        builder.select().from().table().database("master").schema("dbo").name("test1");
269
        builder.select().limit(1);
270

  
271
        System.out.println("# Test:: testFetchFeatureType");
272
        System.out.println("# SQL:: " + builder.toString());
273
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
274
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
275
        
276
        //# Test:: testFetchFeatureType
277
        //# SQL:: SELECT * FROM [master].[dbo].[test1] LIMMIT 1
278
        //# Variables:: []
279
        //# Parametros:: []        
280
        
281
        assertEquals(
282
                "SELECT * FROM \"master\".\"dbo\".\"test1\" LIMIT 1",
283
                builder.toString()
284
        );
285
        assertEquals(
286
                "[]",
287
                ArrayUtils.toString(getVariableNames(builder))
288
        );
289
        assertEquals(
290
                "[]",
291
                ArrayUtils.toString(getParameterNames(builder))
292
        );
293
    }
294
        
295
    public void testPerformDeletes() throws Exception {
296
        SQLBuilder builder = new SQLBuilderBase();
297

  
298
        builder.delete().table().database("master").schema("dbo").name("test1");
299
        builder.delete().where().and(
300
            builder.eq( 
301
                builder.column("id1"),
302
                builder.parameter("id1").as_variable()
303
            )
304
        );
305
        builder.delete().where().and(
306
            builder.eq( 
307
                builder.column("id2"),
308
                builder.parameter("id2").as_variable()
309
            )
310
        );
311

  
312
        // DELETE FROM "master"."dbo"."test1" WHERE ( ("id1") = (?) ) AND ( ("id2") = (?) )
313

  
314
        System.out.println("# Test:: testPerformDeletes");
315
        System.out.println("# SQL:: " + builder.toString());
316
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
317
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
318
        assertEquals(
319
                "DELETE FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"id1\") = (?) ) AND ( (\"id2\") = (?) )",
320
                builder.toString()
321
        );
322
        assertEquals(
323
                "[id1, id2]",
324
                ArrayUtils.toString(getVariableNames(builder))
325
        );
326
        assertEquals(
327
                "[\"id1\", \"id2\"]",
328
                ArrayUtils.toString(getParameterNames(builder))
329
        );
330
    }
331

  
332
    public void testPerformInserts1() throws Exception {
333
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
334

  
335
        SQLBuilder builder = new SQLBuilderBase();
336

  
337
        builder.insert().table().database("master").schema("dbo").name("test1");
338
        builder.insert().column().name("id").with_value(builder.parameter("id"));
339
        builder.insert().column().name("name").with_value(builder.parameter("name"));
340
        builder.insert().column().name("geom").with_value(builder.parameter("geom").as_geometry().srs(proj));
341
        
342
        // INSERT INTO "master"."dbo"."test1" ( "id", "name", "geom" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )
343
        
344
        System.out.println("# Test:: testPerformInserts1");
345
        System.out.println("# SQL:: " + builder.toString());
346
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
347
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
348
        assertEquals(
349
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )",
350
                builder.toString()
351
        );
352
        assertEquals(
353
                "[geom, id, name]",
354
                ArrayUtils.toString(getVariableNames(builder))
355
        );
356
        assertEquals(
357
                "[\"id\", \"name\", \"geom\"]",
358
                ArrayUtils.toString(getParameterNames(builder))
359
        );
360
    }
361

  
362
    public void testPerformInserts2() throws Exception {
363
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
364

  
365
        SQLBuilder builder = new SQLBuilderBase();
366

  
367
        builder.insert().table().database("master").schema("dbo").name("test1");
368
        builder.insert().column().name("id").with_value(builder.parameter("id"));
369
        builder.insert().column().name("name").with_value(builder.parameter("name"));
370
        builder.insert().column().name("geom").with_value(builder.parameter("geom").as_geometry().srs(builder.parameter(proj)));
371
        
372
        // INSERT INTO "master"."dbo"."test1" ( "id", "name", "geom" ) VALUES ( ?, ?, ST_GeomFromText(?, (?)) )
373
        
374
        System.out.println("# Test:: testPerformInserts2");
375
        System.out.println("# SQL:: " + builder.toString());
376
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
377
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
378
        assertEquals(
379
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (?)) )",
380
                builder.toString()
381
        );
382
        assertEquals(
383
                "[geom, id, name]",
384
                ArrayUtils.toString(getVariableNames(builder))
385
        );
386
        assertEquals(
387
                "[\"id\", \"name\", \"geom\", 4326]",
388
                ArrayUtils.toString(getParameterNames(builder))
389
        );
390
    }
391

  
392
    public void testPerformUpdates() throws Exception {
393
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
394

  
395
        SQLBuilder builder = new SQLBuilderBase();
396

  
397
        builder.update().table().database("master").schema("dbo").name("test1");
398
        builder.update().where().and(
399
            builder.eq(
400
                builder.column("id"), 
401
                builder.parameter("id").as_variable()
402
            )
403
        );
404
        builder.update().column().name("name").with_value(builder.parameter("name"));
405
        builder.update().column().name("geom").with_value(
406
                builder.parameter("geom").as_geometry().srs( builder.parameter(proj)) 
407
        );
408

  
409
        // UPDATE "master"."dbo"."test1" SET "name" = ?, "geom" = ST_GeomFromText(?, (?)) WHERE ( ("id") = (?) )
410

  
411
        System.out.println("# Test:: testPerformUpdates");
412
        System.out.println("# SQL:: " + builder.toString());
413
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
414
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
415
        assertEquals(
416
                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromText(?, (?)) WHERE ( (\"id\") = (?) )",
417
                builder.toString()
418
        );
419
        assertEquals(
420
                "[geom, id, name]",
421
                ArrayUtils.toString(getVariableNames(builder))
422
        );
423
        assertEquals(
424
                "[\"name\", \"geom\", 4326, \"id\"]",
425
                ArrayUtils.toString(getParameterNames(builder))
426
        );
427
    }
428

  
429
    public void testGrant1() throws Exception {
430

  
431
        SQLBuilder builder = new SQLBuilderBase();
432

  
433
        builder.grant().table().database("master").schema("dbo").name("test1");
434
        builder.grant().role("prueba").select().insert().update();
435
        builder.grant().role("gis").all();
436
                
437
        
438
        System.out.println("# Test:: testGrant1");
439
        System.out.println("# SQL:: " + builder.toString());
440
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
441
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
442
        assertEquals(
443
                "",
444
                builder.toString()
445
        );
446
        assertEquals(
447
                "[]",
448
                ArrayUtils.toString(getVariableNames(builder))
449
        );
450
        assertEquals(
451
                "[]",
452
                ArrayUtils.toString(getParameterNames(builder))
453
        );
454
    }
455

  
456
    public void testGrant2() throws Exception {
457

  
458
        SQLBuilder builder = new SQLBuilderBase();
459

  
460
        builder.grant().table().database("master").schema("dbo").name("test1");
461
        builder.grant().role("prueba").privilege(Privilege.SELECT)
462
                .privilege(Privilege.INSERT)
463
                .privilege(Privilege.UPDATE);
464
        builder.grant().role("gis").privilege(Privilege.ALL);
465
                
466
        
467
        System.out.println("# Test:: testGrant2");
468
        System.out.println("# SQL:: " + builder.toString());
469
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
470
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
471
        assertEquals(
472
                "",
473
                builder.toString()
474
        );
475
        assertEquals(
476
                "[]",
477
                ArrayUtils.toString(getVariableNames(builder))
478
        );
479
        assertEquals(
480
                "[]",
481
                ArrayUtils.toString(getParameterNames(builder))
482
        );
483
    }
484

  
485

  
486
}
branches/org.gvsig.mssqlserver-1.0.1-SP/org.gvsig.mssqlserver.provider/src/test/java/org/gvsig/mssqlserver/dal/MSSQLServerSQLBuilderTest.java
1
package org.gvsig.mssqlserver.dal;
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.DALLocator;
9
import org.gvsig.fmap.dal.ExpressionBuilder;
10
import org.gvsig.fmap.dal.ExpressionBuilder.Parameter;
11
import org.gvsig.fmap.dal.ExpressionBuilder.Variable;
12
import org.gvsig.fmap.dal.SQLBuilder;
13
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
14
import org.gvsig.fmap.dal.store.db.DBHelper;
15
import org.gvsig.fmap.geom.DataTypes;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryLocator;
18
import org.gvsig.fmap.geom.GeometryManager;
19
import org.gvsig.fmap.geom.primitive.Polygon;
20
import static org.gvsig.mssqlserver.dal.MSSQLServerLibrary.NAME;
21
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
22

  
23
public class MSSQLServerSQLBuilderTest extends AbstractLibraryAutoInitTestCase {
24

  
25
    private MSSQLServerSQLHelper helper;
26
    
27
    @Override
28
    protected void doSetUp() throws Exception {
29
        DataManagerProviderServices dataman = 
30
                (DataManagerProviderServices) DALLocator.getDataManager();
31

  
32
        DBHelper.registerParametersDefinition(
33
                NAME + "StoreParameters",
34
                MSSQLServerStoreParameters.class,
35
                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
36
        );
37
        
38
        MSSQLServerStoreParameters params = new MSSQLServerStoreParameters();
39
        params.setHost("127.0.0.1");
40
        params.setDynValue("InstanceName", "SQLEXPRESS");
41
        params.setDBName("master");
42
        params.setSchema("dbo");
43
        params.setTable("test1");
44
        params.setPort(1433);
45
        params.setUser("sa");
46
        params.setPassword("123");
47
        helper = new MSSQLServerSQLHelper(params);
48
    }
49
    
50
    List<String> getVariableNames(ExpressionBuilder builder) {
51
        List<String> vars = new ArrayList<>();
52
        for (Variable var : builder.getVariables()) {
53
            vars.add(var.getName());
54
        }
55
        return vars;
56
    }
57
    
58
    List<String> getParameterNames(ExpressionBuilder builder) {
59
        List<String> params = new ArrayList<>();
60
        for (Parameter param : builder.getParameters()) {
61
            String s;
62
            switch(param.getType()) {
63
                case Constant:
64
                    Object value = param.getValue();
65
                    if( value==null ) {
66
                        s = "null";
67
                    } else if( value instanceof String ) {
68
                        s = "'" + (String)value + "'";
69
                    } else {
70
                        s = value.toString();
71
                    }    
72
                    break;
73
                case Geometry:
74
                case Variable:
75
                default:
76
                    s = "\"" + param.getName() + "\"";
77
            }
78
            params.add(s);
79
        }
80
        return params;
81
    }
82
    
83
    public SQLBuilder createSQLBuilder() {
84
        return new MSSQLServerSQLBuilder(helper);
85
    }
86
 
87
    public void testCalulateEnvelope() throws Exception {
88
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
89
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
90
        
91
        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
92
        limit.addVertex(0, 0);
93
        limit.addVertex(0, 100);
94
        limit.addVertex(100, 100);
95
        limit.addVertex(100, 0);
96
        limit.addVertex(0, 0);
97
        
98
        SQLBuilder builder = createSQLBuilder();
99
        
100
        builder.select().column().value(
101
            builder.getAsGeometry(
102
              builder.ST_ExtentAggregate(
103
                builder.column("the_geom")
104
              )
105
            )
106
        ).as("envelope");
107
        builder.select().from().table().database("master").schema("dbo").name("test1");
108
        builder.select().where().set(
109
            builder.ST_Intersects(
110
                builder.ST_Envelope(
111
                    builder.column("the_geom")
112
                ),
113
                builder.geometry(limit, proj)
114
            )
115
        );
116
        builder.select().where().and(
117
                builder.custom("x = 27").add( builder.variable("x") )
118
        );
119
        
120
        System.out.println("# Test:: testCalulateEnvelope");
121
        System.out.println("# SQL:: " + builder.toString());
122
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
123
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
124
    
125
        //# Test:: testCalulateEnvelope
126
        //# SQL:: SELECT (geometry::EnvelopeAggregate([the_geom])).STAsBinary() AS [envelope] FROM [master].[dbo].[test1] WHERE (([the_geom]).STEnvelope()).STIntersects(geometry::STGeomFromWKB(0x000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000, 4326)) AND x = 27
127
        //# Variables:: [the_geom, x]
128
        //# Parametros:: []    
129
        assertEquals(
130
                "SELECT (geometry::EnvelopeAggregate([the_geom])).STAsBinary() AS [envelope] FROM [master].[dbo].[test1] WHERE (([the_geom]).STEnvelope()).STIntersects(geometry::STGeomFromWKB(0x000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000, 4326)) AND x = 27",
131
                builder.toString()
132
        );
133
        assertEquals(
134
                "[the_geom, x]",
135
                ArrayUtils.toString(getVariableNames(builder))
136
        );
137
        assertEquals(
138
                "[]",
139
                ArrayUtils.toString(getParameterNames(builder))
140
        );
141
    }
142

  
143
    public void testCount() throws Exception {
144
        SQLBuilder builder = createSQLBuilder();
145
        
146
        builder.select().column().value(builder.count().all());
147
        builder.select().from().table().database("master").schema("dbo").name("test1");
148
        builder.select().from().subquery(null);
149
        builder.select().where().set( builder.custom("pp = 200").add(builder.variable("pp")));
150

  
151
        System.out.println("# Test:: testCount");
152
        System.out.println("# SQL:: " + builder.toString());
153
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
154
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
155

  
156
        //# Test:: testCount
157
        //# SQL:: SELECT COUNT(*) FROM [master].[dbo].[test1] WHERE pp = 200
158
        //# Variables:: []
159
        //# Parametros:: []
160
    
161
        assertEquals(
162
                "SELECT COUNT(*) FROM [master].[dbo].[test1] WHERE pp = 200",
163
                builder.toString()
164
        );
165
        assertEquals(
166
                "[pp]",
167
                ArrayUtils.toString(getVariableNames(builder))
168
        );
169
        assertEquals(
170
                "[]",
171
                ArrayUtils.toString(getParameterNames(builder))
172
        );
173
    }
174
    
175
    public void testUpdateStatistics() throws Exception {
176
        SQLBuilder builder = createSQLBuilder();
177
        
178
        builder.update_table_statistics().table().database("master").schema("dbo").name("test1");
179

  
180
        System.out.println("# Test:: testUpdateStatistics");
181
        System.out.println("# SQL:: " + builder.toString());
182
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
183
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
184

  
185
        //# Test:: testUpdateStatistics
186
        //# SQL:: UPDATE STATISTICS [master].[dbo].[test1]
187
        //# Variables:: []
188
        //# Parametros:: []
189
    
190
        assertEquals(
191
                "UPDATE STATISTICS [master].[dbo].[test1]",
192
                builder.toString()
193
        );
194
        assertEquals(
195
                "[]",
196
                ArrayUtils.toString(getVariableNames(builder))
197
        );
198
        assertEquals(
199
                "[]",
200
                ArrayUtils.toString(getParameterNames(builder))
201
        );
202
    }
203
    
204
    public void testCreateTable() throws Exception {
205
        SQLBuilder builder = createSQLBuilder();
206

  
207
        builder.create_table().table().database("master").schema("dbo").name("test1");
208
        builder.create_table().add_column(
209
                "name",
210
                DataTypes.STRING,
211
                45,
212
                0,
213
                false,
214
                true,
215
                false,
216
                null
217
        );
218
        builder.create_table().add_column(
219
                "id",
220
                DataTypes.INT,
221
                0,
222
                0,
223
                true,
224
                false,
225
                true,
226
                0
227
        );
228
        builder.create_table().add_column(
229
                "geom",
230
                DataTypes.GEOMETRY,
231
                0,
232
                0,
233
                false,
234
                true,
235
                false,
236
                null
237
        );
238

  
239
        System.out.println("# Test:: testCreateTable");
240
        System.out.println("# SQL:: " + builder.toString());
241
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
242
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
243

  
244
        //# Test:: testCreateTable
245
        //# SQL:: CREATE TABLE [master].[dbo].[test1] ([name] VARCHAR(45) DEFAULT NULL NULL, [id] INT IDENTITY(1,1) DEFAULT '0' NOT NULL PRIMARY KEY, [geom] GEOMETRY DEFAULT NULL NULL )
246
        //# Variables:: []
247
        //# Parametros:: []
248

  
249
        assertEquals(
250
                "CREATE TABLE [master].[dbo].[test1] ([name] VARCHAR(45) DEFAULT NULL NULL, [id] INT IDENTITY(1,1) DEFAULT '0' NOT NULL PRIMARY KEY, [geom] GEOMETRY DEFAULT NULL NULL )",
251
                builder.toString()
252
        );
253
        assertEquals(
254
                "[]",
255
                ArrayUtils.toString(getVariableNames(builder))
256
        );
257
        assertEquals(
258
                "[]",
259
                ArrayUtils.toString(getParameterNames(builder))
260
        );
261
    }
262

  
263
    public void testDropTable() throws Exception {
264
        SQLBuilder builder = createSQLBuilder();
265
        
266
        builder.drop_table().table().database("master").schema("dbo").name("test1");
267

  
268
        System.out.println("# Test:: testDropTable");
269
        System.out.println("# SQL:: " + builder.toString());
270
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
271
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
272

  
273
        //# Test:: testDropTable
274
        //# SQL:: DROP TABLE [master].[dbo].[test1]
275
        //# Variables:: []
276
        //# Parametros:: []
277
        
278
        assertEquals(
279
                "DROP TABLE [master].[dbo].[test1]",
280
                builder.toString()
281
        );
282
        assertEquals(
283
                "[]",
284
                ArrayUtils.toString(getVariableNames(builder))
285
        );
286
        assertEquals(
287
                "[]",
288
                ArrayUtils.toString(getParameterNames(builder))
289
        );
290
    }
291
    
292
    public void testFetchFeatureProviderByReference() throws Exception {
293
        SQLBuilder builder = createSQLBuilder();
294
        
295
        String value = "yoyo";
296
        builder.select().column().name("name");
297
        builder.select().column().name("id");
298
        builder.select().column().name("geom").as_geometry();
299
        builder.select().from().table().database("master").schema("dbo").name("test1");
300
        builder.select().where().set(
301
            builder.eq(
302
                builder.column("name"),
303
                builder.parameter(value).as_constant()
304
            )
305
        );
306
        builder.select().limit(1);
307

  
308
        System.out.println("# Test:: testFetchFeatureProviderByReference");
309
        System.out.println("# SQL:: " + builder.toString());
310
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
311
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
312

  
313
        //# Test:: testFetchFeatureProviderByReference
314
        //# SQL:: SELECT TOP 1 [name], [id], ([geom]).STAsBinary() FROM [master].[dbo].[test1] WHERE ( ([name]) = (?) )
315
        //# Variables:: [geom, id, name]
316
        //# Parametros:: ['yoyo']
317

  
318
        assertEquals(
319
                "SELECT TOP 1 [name], [id], ([geom]).STAsBinary() FROM [master].[dbo].[test1] WHERE ( ([name]) = (?) )",
320
                builder.toString()
321
        );
322
        assertEquals(
323
                "[geom, id, name]",
324
                ArrayUtils.toString(getVariableNames(builder))
325
        );
326
        assertEquals(
327
                "['yoyo']",
328
                ArrayUtils.toString(getParameterNames(builder))
329
        );
330
    }
331
    
332
    public void testIsNull() throws Exception {
333
        SQLBuilder builder = createSQLBuilder();
334
        
335
        builder.select().column().name("name");
336
        builder.select().column().name("id");
337
        builder.select().column().name("geom").as_geometry();
338
        builder.select().from().table().database("master").schema("dbo").name("test1");
339
        builder.select().where().set(
340
            builder.and(
341
                builder.isNull(
342
                    builder.column("name")
343
                ),
344
                builder.notIsNull(
345
                        builder.column("id")
346
                )
347
            )
348
        );
349
        builder.select().limit(2);
350

  
351
        System.out.println("# Test:: testIsNull");
352
        System.out.println("# SQL:: " + builder.toString());
353
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
354
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
355

  
356
        //# Test:: testIsNull
357
        //# SQL:: SELECT TOP 2 [name], [id], ([geom]).STAsBinary() FROM [master].[dbo].[test1] WHERE ( ([name]) IS NULL ) AND ( ([id]) NOT IS NULL )
358
        //# Variables:: [geom, id, name]
359
        //# Parametros:: []
360

  
361
        assertEquals(
362
                "SELECT TOP 2 [name], [id], ([geom]).STAsBinary() FROM [master].[dbo].[test1] WHERE ( ([name]) IS NULL ) AND ( ([id]) NOT IS NULL )",
363
                builder.toString()
364
        );
365
        assertEquals(
366
                "[geom, id, name]",
367
                ArrayUtils.toString(getVariableNames(builder))
368
        );
369
        assertEquals(
370
                "[]",
371
                ArrayUtils.toString(getParameterNames(builder))
372
        );
373
    }
374
    
375
    public void testFetchFeatureType() throws Exception {
376
        SQLBuilder builder = createSQLBuilder();
377

  
378
        builder.select().column().all();
379
        builder.select().from().table().database("master").schema("dbo").name("test1");
380
        builder.select().limit(1);
381

  
382
        System.out.println("# Test:: testFetchFeatureType");
383
        System.out.println("# SQL:: " + builder.toString());
384
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
385
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
386

  
387
        //# Test:: testFetchFeatureType
388
        //# SQL:: SELECT TOP 1 * FROM [master].[dbo].[test1]
389
        //# Variables:: []
390
        //# Parametros:: []
391
    
392
        assertEquals(
393
                "SELECT TOP 1 * FROM [master].[dbo].[test1]",
394
                builder.toString()
395
        );
396
        assertEquals(
397
                "[]",
398
                ArrayUtils.toString(getVariableNames(builder))
399
        );
400
        assertEquals(
401
                "[]",
402
                ArrayUtils.toString(getParameterNames(builder))
403
        );
404
    }
405
        
406
    public void testPerformDeletes() throws Exception {
407
        SQLBuilder builder = createSQLBuilder();
408

  
409
        builder.delete().table().database("master").schema("dbo").name("test1");
410
        builder.delete().where().and(
411
            builder.eq( 
412
                builder.column("id1"),
413
                builder.parameter("id1").as_variable()
414
            )
415
        );
416
        builder.delete().where().and(
417
            builder.eq( 
418
                builder.column("id2"),
419
                builder.parameter("id2").as_variable()
420
            )
421
        );
422

  
423
        System.out.println("# Test:: testPerformDeletes");
424
        System.out.println("# SQL:: " + builder.toString());
425
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
426
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
427

  
428
        //# Test:: testPerformDeletes
429
        //# SQL:: DELETE FROM [master].[dbo].[test1] WHERE ( ([id1]) = (?) ) AND ( ([id2]) = (?) )
430
        //# Variables:: [id1, id2]
431
        //# Parametros:: ["id1", "id2"]
432

  
433
        assertEquals(
434
                "DELETE FROM [master].[dbo].[test1] WHERE ( ([id1]) = (?) ) AND ( ([id2]) = (?) )",
435
                builder.toString()
436
        );
437
        assertEquals(
438
                "[id1, id2]",
439
                ArrayUtils.toString(getVariableNames(builder))
440
        );
441
        assertEquals(
442
                "[\"id1\", \"id2\"]",
443
                ArrayUtils.toString(getParameterNames(builder))
444
        );
445
    }
446

  
447
    public void testPerformInserts1() throws Exception {
448
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
449

  
450
        SQLBuilder builder = createSQLBuilder();
451

  
452
        builder.insert().table().database("master").schema("dbo").name("test1");
453
        builder.insert().column().name("id").with_value(builder.parameter("id"));
454
        builder.insert().column().name("name").with_value(builder.parameter("name"));
455
        builder.insert().column().name("geom").with_value(builder.parameter("geom").as_geometry().srs(proj));
456
        
457
        System.out.println("# Test:: testPerformInserts1");
458
        System.out.println("# SQL:: " + builder.toString());
459
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
460
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
461

  
462
        //# Test:: testPerformInserts1
463
        //# SQL:: INSERT INTO [master].[dbo].[test1] ( [id], [name], [geom] ) VALUES ( ?, ?, geometry::STGeomFromWKB(?, 4326) )
464
        //# Variables:: [geom, id, name]
465
        //# Parametros:: ["id", "name", "geom"]
466
        
467
        assertEquals(
468
                "INSERT INTO [master].[dbo].[test1] ( [id], [name], [geom] ) VALUES ( ?, ?, geometry::STGeomFromWKB(?, 4326) )",
469
                builder.toString()
470
        );
471
        assertEquals(
472
                "[geom, id, name]",
473
                ArrayUtils.toString(getVariableNames(builder))
474
        );
475
        assertEquals(
476
                "[\"id\", \"name\", \"geom\"]",
477
                ArrayUtils.toString(getParameterNames(builder))
478
        );
479
    }
480

  
481
    public void testPerformInserts2() throws Exception {
482
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
483

  
484
        SQLBuilder builder = createSQLBuilder();
485

  
486
        builder.insert().table().database("master").schema("dbo").name("test1");
487
        builder.insert().column().name("id").with_value(builder.parameter("id"));
488
        builder.insert().column().name("name").with_value(builder.parameter("name"));
489
        builder.insert().column().name("geom").with_value(builder.parameter("geom").as_geometry().srs(builder.parameter(proj)));
490
        
491
        System.out.println("# Test:: testPerformInserts2");
492
        System.out.println("# SQL:: " + builder.toString());
493
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
494
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
495
    
496
        //# Test:: testPerformInserts2
497
        //# SQL:: INSERT INTO [master].[dbo].[test1] ( [id], [name], [geom] ) VALUES ( ?, ?, geometry::STGeomFromWKB(?, ?) )
498
        //# Variables:: [geom, id, name]
499
        //# Parametros:: ["id", "name", "geom", 4326]
500

  
501
        assertEquals(
502
                "INSERT INTO [master].[dbo].[test1] ( [id], [name], [geom] ) VALUES ( ?, ?, geometry::STGeomFromWKB(?, ?) )",
503
                builder.toString()
504
        );
505
        assertEquals(
506
                "[geom, id, name]",
507
                ArrayUtils.toString(getVariableNames(builder))
508
        );
509
        assertEquals(
510
                "[\"id\", \"name\", \"geom\", 4326]",
511
                ArrayUtils.toString(getParameterNames(builder))
512
        );
513
    }
514

  
515
    public void testPerformUpdates() throws Exception {
516
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
517

  
518
        SQLBuilder builder = createSQLBuilder();
519

  
520
        builder.update().table().database("master").schema("dbo").name("test1");
521
        builder.update().where().and(
522
            builder.eq(
523
                builder.column("id"), 
524
                builder.parameter("id").as_variable()
525
            )
526
        );
527
        builder.update().column().name("name").with_value(builder.parameter("name"));
528
        builder.update().column().name("geom").with_value(
529
                builder.parameter("geom").as_geometry().srs( builder.parameter(proj)) 
530
        );
531

  
532
        System.out.println("# Test:: testPerformUpdates");
533
        System.out.println("# SQL:: " + builder.toString());
534
        System.out.println("# Variables:: " + ArrayUtils.toString(getVariableNames(builder)));
535
        System.out.println("# Parametros:: " + ArrayUtils.toString(getParameterNames(builder)));
536

  
537
        //# Test:: testPerformUpdates
538
        //# SQL:: UPDATE [master].[dbo].[test1] SET [name] = ?, [geom] = geometry::STGeomFromWKB(?, ?) WHERE ( ([id]) = (?) )
539
        //# Variables:: [geom, id, name]
540
        //# Parametros:: ["name", "geom", 4326, "id"]
541

  
542
        assertEquals(
543
                "UPDATE [master].[dbo].[test1] SET [name] = ?, [geom] = geometry::STGeomFromWKB(?, ?) WHERE ( ([id]) = (?) )",
544
                builder.toString()
545
        );
546
        assertEquals(
547
                "[geom, id, name]",
548
                ArrayUtils.toString(getVariableNames(builder))
549
        );
550
        assertEquals(
551
                "[\"name\", \"geom\", 4326, \"id\"]",
552
                ArrayUtils.toString(getParameterNames(builder))
553
        );
554
    }
555

  
556
}
branches/org.gvsig.mssqlserver-1.0.1-SP/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/MSSQLServerExplorerFactory.java
1

  
2
package org.gvsig.mssqlserver.dal;
3

  
4
import org.gvsig.fmap.dal.DataServerExplorer;
5
import org.gvsig.fmap.dal.DataServerExplorerParameters;
6
import org.gvsig.fmap.dal.exception.InitializeException;
7
import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
8
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
9
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
10
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
11
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
12
import org.gvsig.fmap.dal.store.jdbc2.impl.JDBCServerExplorerFactory;
13

  
14

  
15
public class MSSQLServerExplorerFactory extends JDBCServerExplorerFactory {
16

  
17
    private static final String NAME = MSSQLServerLibrary.NAME;
18
    
19
    public MSSQLServerExplorerFactory() {
20
        super(
21
                NAME,
22
                "Microsoft SQL Server"
23
        );
24
    }
25

  
26
    @Override
27
    public JDBCServerExplorer create(
28
            DataServerExplorerParameters parameters, 
29
            DataServerExplorerProviderServices providerServices
30
        ) throws InitializeException {
31
        JDBCHelper helper = new MSSQLServerSQLHelper((JDBCConnectionParameters) parameters);
32
        JDBCServerExplorer server = helper.createServerExplorer(
33
                (JDBCServerExplorerParameters) parameters, 
34
                providerServices
35
        );
36
        return server;
37
    }
38
        
39

  
40
    @Override
41
    public JDBCServerExplorerParameters createParameters() {
42
        JDBCServerExplorerParameters params = new MSSQLServerExplorerParameters();
43
        return params;    
44
    }
45
    
46
}
branches/org.gvsig.mssqlserver-1.0.1-SP/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/MSSQLServerNewStoreParameters.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.mssqlserver.dal;
23

  
24
import org.apache.commons.lang3.StringUtils;
25
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
26

  
27
public class MSSQLServerNewStoreParameters extends JDBCNewStoreParameters {
28

  
29
    public MSSQLServerNewStoreParameters() {
30
        super(
31
            MSSQLServerLibrary.NAME + "NewStoreParameters", 
32
            MSSQLServerLibrary.NAME
33
        );
34
    }
35

  
36
    @Override
37
    public String getUrl() {
38
        String url = super.getUrl();
39
        if( StringUtils.isEmpty(url) ) {
40
            url = MSSQLServerSQLHelper.getConnectionURL(this);
41
            this.setUrl(url);
42
        }
43
        return url;
44
    }
45
}
branches/org.gvsig.mssqlserver-1.0.1-SP/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/operations/MSSQLServerCanModifyTableOperation.java
1
package org.gvsig.mssqlserver.dal.operations;
2

  
3
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.*;
4
import java.sql.Connection;
5
import java.sql.ResultSet;
6
import java.sql.SQLException;
7
import java.sql.Statement;
8
import org.gvsig.fmap.dal.exception.DataException;
9
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
10
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
11
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
12

  
13
public class MSSQLServerCanModifyTableOperation extends CanModifyTableOperation {
14

  
15
    public MSSQLServerCanModifyTableOperation(
16
            JDBCHelper helper
17
        ) {
18
        this(helper, null, null, null);
19
    }
20

  
21
    public MSSQLServerCanModifyTableOperation(
22
            JDBCHelper helper,
23
            String dbName,
24
            String schemaName,
25
            String tableName
26
        ) {
27
        super(helper,dbName,schemaName,tableName);
28
    }
29

  
30
    @Override
31
    public boolean canModifyTable(Connection conn,
32
            String dbName,
33
            String schemaName,
34
            String tableName
35
        ) throws DataException {
36

  
37
        String sql = "SELECT count(*) " + 
38
                     "FROM fn_my_permissions('master.dbo.provincias_andalucia', 'OBJECT') " +
39
                     "WHERE permission_name in ('UPDATE', 'INSERT', 'DELETE') AND subentity_name = ''";
40
        Statement st = null;
41
        ResultSet rs = null;
42
        try {
43
            st = conn.createStatement();
44
            rs = JDBCUtils.executeQuery(st, sql);
45
            if (!rs.next()) {
46
                return false;
47
            }
48
            return rs.getInt(1)==3;
49

  
50
        } catch (SQLException ex) {
51
            throw new JDBCSQLException(ex);
52
        } finally {
53
            JDBCUtils.closeQuietly(st);
54
            JDBCUtils.closeQuietly(rs);
55
        }
56

  
57
    }
58

  
59
}
branches/org.gvsig.mssqlserver-1.0.1-SP/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/operations/MSSQLServerFetchFeatureTypeOperation.java
1

  
2
package org.gvsig.mssqlserver.dal.operations;
3

  
4
import java.sql.Connection;
5
import java.sql.ResultSetMetaData;
6
import java.util.List;
7
import org.cresques.cts.IProjection;
8
import org.gvsig.fmap.dal.exception.DataException;
9
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
10
import org.gvsig.fmap.dal.feature.EditableFeatureType;
11
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
12
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
13
import org.gvsig.fmap.geom.Geometry;
14
import org.gvsig.fmap.geom.GeometryLocator;
15
import org.gvsig.fmap.geom.type.GeometryType;
16
import org.gvsig.mssqlserver.dal.MSSQLServerSQLHelper;
17

  
18

  
19
public class MSSQLServerFetchFeatureTypeOperation extends FetchFeatureTypeOperation {
20
    
21
    public MSSQLServerFetchFeatureTypeOperation(
22
            JDBCHelper helper
23
        ) {
24
        super(helper);
25
    }
26
    
27
    public MSSQLServerFetchFeatureTypeOperation(
28
            JDBCHelper helper,
29
            EditableFeatureType featureType,
30
            String dbname,
31
            String schema,
32
            String table,
33
            List<String> primaryKeys,
34
            String defaultGeometryColumn,
35
            IProjection crs
36
        ) {
37
        super(helper, featureType, dbname, schema, table, primaryKeys, defaultGeometryColumn, crs);
38
    }            
39

  
40
    @Override
41
    public void fetch(EditableFeatureType featureType, Connection conn, String dbname, String schema, String table, List<String> pks, String defaultGeometryColumn, IProjection crs) throws DataException {
42
        super.fetch(featureType, conn, dbname, schema, table, pks, defaultGeometryColumn, crs);
43
        ((MSSQLServerSQLHelper)this.helper).setLastUsedFeatureType(featureType);
44
    }
45
    
46
    @Override
47
    protected void fetchGeometryType(
48
            EditableFeatureAttributeDescriptor attr,
49
            ResultSetMetaData rsMetadata,
50
            int colIndex
51
        ) {
52
        try {
53
            GeometryType geomType = GeometryLocator.getGeometryManager().getGeometryType(
54
                    Geometry.TYPES.GEOMETRY,
55
                    Geometry.SUBTYPES.GEOM2D
56
            );
57
            attr.setGeometryType(geomType);
58

  
59
            String typeName = rsMetadata.getColumnTypeName(colIndex);
60
            attr.setAdditionalInfo("SQLServer_type_name",typeName);
61
        } catch (Exception ex) {
62
            logger.warn("Can't get default geometry type.",ex);
63
        }
64
    }
65
}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff