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.h2 / src / test / java / org / gvsig / fmap / dal / store / h2 / H2SpatialSQLBuilderTest.java @ 44198

History | View | Annotate | Download (20.9 KB)

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

    
3
import junit.framework.TestCase;
4
import org.apache.commons.lang3.ArrayUtils;
5
import org.cresques.cts.IProjection;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.fmap.crs.CRSFactory;
8
import org.gvsig.fmap.dal.SQLBuilder;
9
import org.gvsig.fmap.dal.SQLBuilder.Privilege;
10
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
11
import org.gvsig.fmap.geom.DataTypes;
12
import org.gvsig.fmap.geom.Geometry;
13
import org.gvsig.fmap.geom.GeometryLocator;
14
import org.gvsig.fmap.geom.GeometryManager;
15
import org.gvsig.fmap.geom.primitive.Polygon;
16
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
17

    
18
public class H2SpatialSQLBuilderTest extends TestCase {
19
    
20
    public H2SpatialSQLBuilderTest(String testName) {
21
        super(testName);
22
    }
23

    
24
    @Override
25
    protected void setUp() throws Exception {
26
        super.setUp();
27
        new DefaultLibrariesInitializer().fullInitialize();
28
    }
29

    
30
    @Override
31
    protected void tearDown() throws Exception {
32
        super.tearDown();
33
    }
34

    
35
    private SQLBuilder createSQLBuilder() {
36
        return new H2SpatialSQLBuilder(new H2SpatialHelper(null));
37
    }
38
    
39
 
40
    public void testCalulateEnvelope() throws Exception {
41
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
42
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
43
        
44
        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
45
        limit.addVertex(0, 0);
46
        limit.addVertex(0, 100);
47
        limit.addVertex(100, 100);
48
        limit.addVertex(100, 0);
49
        limit.addVertex(0, 0);
50
        
51
        SQLBuilder sqlbuilder = createSQLBuilder();
52
        ExpressionBuilder expbuilder = sqlbuilder.expression();
53
        
54
        sqlbuilder.select().column().value(
55
            expbuilder.as_geometry(
56
              expbuilder.ST_ExtentAggregate(
57
                expbuilder.column("the_geom")
58
              )
59
            )
60
        ).as("envelope");
61
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
62
        sqlbuilder.select().where().set(
63
            expbuilder.ST_Intersects(
64
                expbuilder.ST_Envelope(
65
                    expbuilder.column("the_geom")
66
                ),
67
                expbuilder.geometry(limit, proj)
68
            )
69
        );
70
        sqlbuilder.select().where().and(
71
                expbuilder.custom("x = 27")
72
        );
73
        
74
        System.out.println("# Test:: testCalulateEnvelope");
75
        System.out.println("# SQL:: " + sqlbuilder.toString());
76
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
77
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
78
        assertEquals(
79
                "SELECT ST_AsBinary(ST_ExtentAggregate(\"the_geom\")) AS \"envelope\" FROM \"test1\" WHERE ( ((ST_Envelope(\"the_geom\")) && (ST_GeomFromWKB((DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000','hex')), (4326)))) AND ST_Intersects((ST_Envelope(\"the_geom\")),(ST_GeomFromWKB((DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000','hex')), (4326))) )) AND x = 27",
80
                sqlbuilder.toString()
81
        );
82
        assertEquals(
83
                "[the_geom]",
84
                ArrayUtils.toString(sqlbuilder.variables_names())
85
        );
86
        assertEquals(
87
                "[]",
88
                ArrayUtils.toString(sqlbuilder.parameters_names())
89
        );
90
    }
91

    
92
    public void testCount() throws Exception {
93
        SQLBuilder sqlbuilder = createSQLBuilder();
94
        ExpressionBuilder expbuilder = sqlbuilder.expression();
95
        
96
        sqlbuilder.select().column().value(sqlbuilder.count().all());
97
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
98
        sqlbuilder.select().from().subquery(null);
99
        sqlbuilder.select().where().set( expbuilder.custom("pp = 200"));
100

    
101
        System.out.println("# Test:: testCount");
102
        System.out.println("# SQL:: " + sqlbuilder.toString());
103
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
104
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
105

    
106
        //# Test:: testCount
107
        //# SQL:: SELECT COUNT(*) FROM "test1" WHERE pp = 200
108
        //# Variables:: []
109
        //# Parametros:: []
110

    
111
        assertEquals(
112
                "SELECT COUNT(*) FROM \"test1\" WHERE pp = 200",
113
                sqlbuilder.toString()
114
        );
115
        assertEquals(
116
                "[]",
117
                ArrayUtils.toString(sqlbuilder.variables_names())
118
        );
119
        assertEquals(
120
                "[]",
121
                ArrayUtils.toString(sqlbuilder.parameters_names())
122
        );
123
    }
124
    
125
    public void testCreateTable() throws Exception {
126
        SQLBuilder sqlbuilder = createSQLBuilder();
127
        ExpressionBuilder expbuilder = sqlbuilder.expression();
128

    
129
        sqlbuilder.create_table().table().database("master").schema("dbo").name("test1");
130
        sqlbuilder.create_table().add_column(
131
                "name",
132
                DataTypes.STRING,
133
                45,
134
                0,
135
                false,
136
                false,
137
                true,
138
                false,
139
                null
140
        );
141
        sqlbuilder.create_table().add_column(
142
                "id",
143
                DataTypes.INT,
144
                0,
145
                0,
146
                true,
147
                false,
148
                false,
149
                true,
150
                0
151
        );
152
        sqlbuilder.create_table().add_column(
153
                "geom",
154
                DataTypes.GEOMETRY,
155
                0,
156
                0,
157
                false,
158
                false,
159
                true,
160
                false,
161
                null
162
        );
163

    
164
        
165
        // CREATE TABLE "test1" ("name" VARCHAR(45) DEFAULT NULL, "id" INTEGER PRIMARY KEY AUTO_INCREMENT DEFAULT '0' NOT NULL, "geom" GEOMETRY ); ALTER TABLE "test1" ADD CONSTRAINT IF NOT EXISTS "constraint_test1_geom_dim" CHECK ST_CoordDim("geom") = 2
166
        System.out.println("# Test:: testCreateTable");
167
        System.out.println("# SQL:: " + sqlbuilder.toString());
168
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
169
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
170
        assertEquals(
171
                "CREATE TABLE \"test1\" (\"name\" VARCHAR(45) DEFAULT NULL, \"id\" INTEGER PRIMARY KEY AUTO_INCREMENT DEFAULT '0' NOT NULL, \"geom\" GEOMETRY ); ALTER TABLE \"test1\" ADD CONSTRAINT IF NOT EXISTS \"constraint_test1_geom_dim\" CHECK ST_CoordDim(\"geom\") = 2",
172
                sqlbuilder.toString()
173
        );
174
        assertEquals(
175
                "[]",
176
                ArrayUtils.toString(sqlbuilder.variables_names())
177
        );
178
        assertEquals(
179
                "[]",
180
                ArrayUtils.toString(sqlbuilder.parameters_names())
181
        );
182
    }
183

    
184
    public void testDropTable() throws Exception {
185
        SQLBuilder sqlbuilder = createSQLBuilder();
186
        ExpressionBuilder expbuilder = sqlbuilder.expression();
187
        
188
        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
189

    
190
        // DROP TABLE "test1"
191
        
192
        System.out.println("# Test:: testDropTable");
193
        System.out.println("# SQL:: " + sqlbuilder.toString());
194
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
195
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
196
        assertEquals(
197
                "DROP TABLE \"test1\"",
198
                sqlbuilder.toString()
199
        );
200
        assertEquals(
201
                "[]",
202
                ArrayUtils.toString(sqlbuilder.variables_names())
203
        );
204
        assertEquals(
205
                "[]",
206
                ArrayUtils.toString(sqlbuilder.parameters_names())
207
        );
208
    }
209
    
210
    public void testFetchFeatureProviderByReference() throws Exception {
211
        SQLBuilder sqlbuilder = new SQLBuilderBase();
212
        ExpressionBuilder expbuilder = sqlbuilder.expression();
213
        
214
        String value = "yoyo";
215
        sqlbuilder.select().column().name("name");
216
        sqlbuilder.select().column().name("id");
217
        sqlbuilder.select().column().name("geom").as_geometry();
218
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
219
        sqlbuilder.select().where().set(
220
            expbuilder.eq(
221
                expbuilder.column("name"),
222
                expbuilder.parameter(value).as_constant()
223
            )
224
        );
225
        sqlbuilder.select().limit(1);
226

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

    
229
        System.out.println("# Test:: testFetchFeatureProviderByReference");
230
        System.out.println("# SQL:: " + sqlbuilder.toString());
231
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
232
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
233
        assertEquals(
234
                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
235
                sqlbuilder.toString()
236
        );
237
        assertEquals(
238
                "[geom, id, name]",
239
                ArrayUtils.toString(sqlbuilder.variables_names())
240
        );
241
        assertEquals(
242
                "['yoyo']",
243
                ArrayUtils.toString(sqlbuilder.parameters_names())
244
        );
245
    }
246
    
247
    public void testFetchFeatureType() throws Exception {
248
        SQLBuilder sqlbuilder = createSQLBuilder();
249
        ExpressionBuilder expbuilder = sqlbuilder.expression();
250

    
251
        sqlbuilder.select().column().all();
252
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
253
        sqlbuilder.select().limit(1);
254

    
255
        System.out.println("# Test:: testFetchFeatureType");
256
        System.out.println("# SQL:: " + sqlbuilder.toString());
257
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
258
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
259
        
260
        //# Test:: testFetchFeatureType
261
        //# SQL:: SELECT * FROM "test1" LIMIT 1
262
        //# Variables:: []
263
        //# Parametros:: []        
264
        
265
        assertEquals(
266
                "SELECT * FROM \"test1\" LIMIT 1",
267
                sqlbuilder.toString()
268
        );
269
        assertEquals(
270
                "[]",
271
                ArrayUtils.toString(sqlbuilder.variables_names())
272
        );
273
        assertEquals(
274
                "[]",
275
                ArrayUtils.toString(sqlbuilder.parameters_names())
276
        );
277
    }
278
        
279
    public void testPerformDeletes() throws Exception {
280
        SQLBuilder sqlbuilder = createSQLBuilder();
281
        ExpressionBuilder expbuilder = sqlbuilder.expression();
282

    
283
        sqlbuilder.delete().table().database("master").schema("dbo").name("test1");
284
        sqlbuilder.delete().where().and(
285
            expbuilder.eq( 
286
                expbuilder.column("id1"),
287
                expbuilder.parameter("id1").as_variable()
288
            )
289
        );
290
        sqlbuilder.delete().where().and(
291
            expbuilder.eq( 
292
                expbuilder.column("id2"),
293
                expbuilder.parameter("id2").as_variable()
294
            )
295
        );
296

    
297
        // DELETE FROM "test1" WHERE ( ("id1") = (?) ) AND ( ("id2") = (?) )
298

    
299
        System.out.println("# Test:: testPerformDeletes");
300
        System.out.println("# SQL:: " + sqlbuilder.toString());
301
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
302
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
303
        assertEquals(
304
                "DELETE FROM \"test1\" WHERE ( (\"id1\") = (?) ) AND ( (\"id2\") = (?) )",
305
                sqlbuilder.toString()
306
        );
307
        assertEquals(
308
                "[id1, id2]",
309
                ArrayUtils.toString(sqlbuilder.variables_names())
310
        );
311
        assertEquals(
312
                "[\"id1\", \"id2\"]",
313
                ArrayUtils.toString(sqlbuilder.parameters_names())
314
        );
315
    }
316

    
317
    public void testPerformInserts1() throws Exception {
318
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
319

    
320
        SQLBuilder sqlbuilder = createSQLBuilder();
321
        ExpressionBuilder expbuilder = sqlbuilder.expression();
322

    
323
        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
324
        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
325
        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
326
        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_geometry_variable().srs(proj));
327
        
328
        System.out.println("# Test:: testPerformInserts1");
329
        System.out.println("# SQL:: " + sqlbuilder.toString());
330
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
331
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
332
        assertEquals(
333
                "INSERT INTO \"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
334
                sqlbuilder.toString()
335
        );
336
        assertEquals(
337
                "[geom, id, name]",
338
                ArrayUtils.toString(sqlbuilder.variables_names())
339
        );
340
        assertEquals(
341
                "[\"id\", \"name\", \"geom\"]",
342
                ArrayUtils.toString(sqlbuilder.parameters_names())
343
        );
344
    }
345

    
346
    public void testPerformInserts2() throws Exception {
347
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
348

    
349
        SQLBuilder sqlbuilder = createSQLBuilder();
350
        ExpressionBuilder expbuilder = sqlbuilder.expression();
351

    
352
        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
353
        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
354
        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
355
        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_geometry_variable().srs(proj));
356
        
357
        System.out.println("# Test:: testPerformInserts2");
358
        System.out.println("# SQL:: " + sqlbuilder.toString());
359
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
360
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
361
        assertEquals(
362
                "INSERT INTO \"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
363
                sqlbuilder.toString()
364
        );
365
        assertEquals(
366
                "[geom, id, name]",
367
                ArrayUtils.toString(sqlbuilder.variables_names())
368
        );
369
        assertEquals(
370
                "[\"id\", \"name\", \"geom\"]",
371
                ArrayUtils.toString(sqlbuilder.parameters_names())
372
        );
373
    }
374

    
375
    public void testPerformUpdates1() throws Exception {
376
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
377

    
378
        SQLBuilder sqlbuilder = createSQLBuilder();
379
        ExpressionBuilder expbuilder = sqlbuilder.expression();
380

    
381
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
382
        sqlbuilder.update().where().and(
383
            expbuilder.eq(
384
                expbuilder.column("id"), 
385
                expbuilder.parameter("id").as_variable()
386
            )
387
        );
388
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
389
        sqlbuilder.update().column().name("geom").with_value(
390
                expbuilder.parameter("geom").as_geometry_variable().srs(proj) 
391
        );
392

    
393
        System.out.println("# Test:: testPerformUpdates");
394
        System.out.println("# SQL:: " + sqlbuilder.toString());
395
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
396
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
397
        assertEquals(
398
                "UPDATE \"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (4326)) WHERE ( (\"id\") = (?) )",
399
                sqlbuilder.toString()
400
        );
401
        assertEquals(
402
                "[geom, id, name]",
403
                ArrayUtils.toString(sqlbuilder.variables_names())
404
        );
405
        assertEquals(
406
                "[\"name\", \"geom\", \"id\"]",
407
                ArrayUtils.toString(sqlbuilder.parameters_names())
408
        );
409
    }
410

    
411
    public void testPerformUpdates2() throws Exception {
412
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
413

    
414
        SQLBuilder sqlbuilder = createSQLBuilder();
415
        ExpressionBuilder expbuilder = sqlbuilder.expression();
416

    
417
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
418
        sqlbuilder.update().where().and(
419
            expbuilder.eq(
420
                expbuilder.column("id"), 
421
                expbuilder.parameter("id").as_variable()
422
            )
423
        );
424
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
425
        sqlbuilder.update().column().name("geom").with_value(
426
                expbuilder.parameter("geom").as_geometry_variable()
427
                        .srs(expbuilder.parameter().value(proj)) 
428
        );
429

    
430
        System.out.println("# Test:: testPerformUpdates");
431
        System.out.println("# SQL:: " + sqlbuilder.toString());
432
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
433
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
434
        assertEquals(
435
                "UPDATE \"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (?)) WHERE ( (\"id\") = (?) )",
436
                sqlbuilder.toString()
437
        );
438
        assertEquals(
439
                "[geom, id, name]",
440
                ArrayUtils.toString(sqlbuilder.variables_names())
441
        );
442
        assertEquals(
443
                "[\"name\", \"geom\", 4326, \"id\"]",
444
                ArrayUtils.toString(sqlbuilder.parameters_names())
445
        );
446
    }
447

    
448
    public void testGrant1() throws Exception {
449

    
450
        SQLBuilder sqlbuilder = createSQLBuilder();
451
        ExpressionBuilder expbuilder = sqlbuilder.expression();
452

    
453
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
454
        sqlbuilder.grant().role("prueba").select().insert().update();
455
        sqlbuilder.grant().role("gis").all();
456
                
457
        
458
        System.out.println("# Test:: testGrant1");
459
        System.out.println("# SQL:: " + sqlbuilder.toString());
460
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
461
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
462
        assertEquals(
463
                "",
464
                sqlbuilder.toString()
465
        );
466
        assertEquals(
467
                "[]",
468
                ArrayUtils.toString(sqlbuilder.variables_names())
469
        );
470
        assertEquals(
471
                "[]",
472
                ArrayUtils.toString(sqlbuilder.parameters_names())
473
        );
474
    }
475

    
476
    public void testGrant2() throws Exception {
477

    
478
        SQLBuilder sqlbuilder = new SQLBuilderBase();
479
        ExpressionBuilder expbuilder = sqlbuilder.expression();
480

    
481
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
482
        sqlbuilder.grant().role("prueba").privilege(Privilege.SELECT)
483
                .privilege(Privilege.INSERT)
484
                .privilege(Privilege.UPDATE);
485
        sqlbuilder.grant().role("gis").privilege(Privilege.ALL);
486
                
487
        
488
        System.out.println("# Test:: testGrant2");
489
        System.out.println("# SQL:: " + sqlbuilder.toString());
490
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
491
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
492
        assertEquals(
493
                "",
494
                sqlbuilder.toString()
495
        );
496
        assertEquals(
497
                "[]",
498
                ArrayUtils.toString(sqlbuilder.variables_names())
499
        );
500
        assertEquals(
501
                "[]",
502
                ArrayUtils.toString(sqlbuilder.parameters_names())
503
        );
504
    }
505

    
506

    
507
}