Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / test / java / org / gvsig / fmap / dal / store / SQLBuilderTest.java @ 44644

History | View | Annotate | Download (19.3 KB)

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

    
3
import org.apache.commons.lang3.ArrayUtils;
4
import org.cresques.cts.IProjection;
5
import org.gvsig.expressionevaluator.ExpressionBuilder;
6
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
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.junit.AbstractLibraryAutoInitTestCase;
17

    
18
public class SQLBuilderTest extends AbstractLibraryAutoInitTestCase {
19
    
20
    @Override
21
    protected void doSetUp() throws Exception {
22

    
23
    }
24
        
25
    private SQLBuilder createSQLBuilder() {
26
        return new SQLBuilderBase();
27
    }
28
    
29
    public void testCalulateEnvelope() throws Exception {
30
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
31
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
32
        
33
        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
34
        limit.addVertex(0, 0);
35
        limit.addVertex(0, 100);
36
        limit.addVertex(100, 100);
37
        limit.addVertex(100, 0);
38
        limit.addVertex(0, 0);
39
        
40
        SQLBuilder sqlbuilder = createSQLBuilder();
41
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
42
        
43
        sqlbuilder.select().column().value(
44
            expbuilder.as_geometry(
45
              expbuilder.ST_ExtentAggregate(
46
                expbuilder.column("the_geom")
47
              )
48
            )
49
        ).as("envelope");
50
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
51
        sqlbuilder.select().where().set(
52
            expbuilder.ST_Intersects(
53
                expbuilder.ST_Envelope(
54
                    expbuilder.column("the_geom")
55
                ),
56
                expbuilder.geometry(limit, proj)
57
            )
58
        );
59
        sqlbuilder.select().where().and(
60
                expbuilder.custom("x = 27")
61
        );
62
        
63
        // 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
64
        
65
        System.out.println("# Test:: testCalulateEnvelope");
66
        System.out.println("# SQL:: " + sqlbuilder.toString());
67
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
68
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
69
        assertEquals(
70
                "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",
71
                sqlbuilder.toString()
72
        );
73
        assertEquals(
74
                "[the_geom]",
75
                ArrayUtils.toString(expbuilder.variables_names())
76
        );
77
        assertEquals(
78
                "[]",
79
                ArrayUtils.toString(expbuilder.parameters_names())
80
        );
81
    }
82

    
83
    public void testCount() throws Exception {
84
        SQLBuilder sqlbuilder = createSQLBuilder();
85
        ExpressionBuilder expbuilder = sqlbuilder.expression();
86
        
87
        sqlbuilder.select().column().value(sqlbuilder.count().all());
88
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
89
        sqlbuilder.select().from().subquery(null);
90
        sqlbuilder.select().where().set( expbuilder.custom("pp = 200"));
91

    
92
        System.out.println("# Test:: testCount");
93
        System.out.println("# SQL:: " + sqlbuilder.toString());
94
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
95
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
96

    
97
        //# Test:: testCount
98
        //# SQL:: SELECT COUNT(*) FROM "master"."dbo"."test1" WHERE pp = 200
99
        //# Variables:: []
100
        //# Parametros:: []
101

    
102
        assertEquals(
103
                "SELECT COUNT(*) FROM \"master\".\"dbo\".\"test1\" WHERE pp = 200",
104
                sqlbuilder.toString()
105
        );
106
        assertEquals(
107
                "[]",
108
                ArrayUtils.toString(expbuilder.variables_names())
109
        );
110
        assertEquals(
111
                "[]",
112
                ArrayUtils.toString(expbuilder.parameters_names())
113
        );
114
    }
115
    
116
    public void testCreateTable() throws Exception {
117
        SQLBuilder sqlbuilder = createSQLBuilder();
118
        ExpressionBuilder expbuilder = sqlbuilder.expression();
119

    
120
        sqlbuilder.create_table().table().database("master").schema("dbo").name("test1");
121
        sqlbuilder.create_table().add_column(
122
                "name",
123
                DataTypes.STRING,
124
                45,
125
                0,
126
                false,
127
                false,
128
                true,
129
                false,
130
                null
131
        );
132
        sqlbuilder.create_table().add_column(
133
                "id",
134
                DataTypes.INT,
135
                0,
136
                0,
137
                true,
138
                false,
139
                false,
140
                true,
141
                0
142
        );
143
        sqlbuilder.create_table().add_column(
144
                "geom",
145
                DataTypes.GEOMETRY,
146
                0,
147
                0,
148
                false,
149
                false,
150
                true,
151
                false,
152
                null
153
        );
154

    
155
        
156
        // CREATE TABLE "master"."dbo"."test1" ("name" VARCHAR(45) DEFAULT NULL NULL, "id" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, "geom" TEXT DEFAULT NULL NULL )
157
        System.out.println("# Test:: testCreateTable");
158
        System.out.println("# SQL:: " + sqlbuilder.toString());
159
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
160
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
161
        assertEquals(
162
                "CREATE TABLE \"master\".\"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL NULL, \"id\" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, \"geom\" TEXT DEFAULT NULL NULL )",
163
                sqlbuilder.toString()
164
        );
165
        assertEquals(
166
                "[]",
167
                ArrayUtils.toString(expbuilder.variables_names())
168
        );
169
        assertEquals(
170
                "[]",
171
                ArrayUtils.toString(expbuilder.parameters_names())
172
        );
173
    }
174

    
175
    public void testDropTable() throws Exception {
176
        SQLBuilder sqlbuilder = createSQLBuilder();
177
        ExpressionBuilder expbuilder = sqlbuilder.expression();
178
        
179
        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
180

    
181
        // DROP TABLE "master"."dbo"."test1"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'
182
        
183
        System.out.println("# Test:: testDropTable");
184
        System.out.println("# SQL:: " + sqlbuilder.toString());
185
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
186
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
187
        assertEquals(
188
                "DROP TABLE \"master\".\"dbo\".\"test1\"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'",
189
                sqlbuilder.toString()
190
        );
191
        assertEquals(
192
                "[]",
193
                ArrayUtils.toString(expbuilder.variables_names())
194
        );
195
        assertEquals(
196
                "[]",
197
                ArrayUtils.toString(expbuilder.parameters_names())
198
        );
199
    }
200
    
201
    public void testFetchFeatureProviderByReference() throws Exception {
202
        SQLBuilder sqlbuilder = createSQLBuilder();
203
        ExpressionBuilder expbuilder = sqlbuilder.expression();
204
        
205
        String value = "yoyo";
206
        sqlbuilder.select().column().name("name");
207
        sqlbuilder.select().column().name("id");
208
        sqlbuilder.select().column().name("geom").as_geometry();
209
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
210
        sqlbuilder.select().where().set(
211
            expbuilder.eq(
212
                expbuilder.column("name"),
213
                expbuilder.parameter(value).as_constant()
214
            )
215
        );
216
        sqlbuilder.select().limit(1);
217

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

    
220
        System.out.println("# Test:: testFetchFeatureProviderByReference");
221
        System.out.println("# SQL:: " + sqlbuilder.toString());
222
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
223
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
224
        assertEquals(
225
                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
226
                sqlbuilder.toString()
227
        );
228
        assertEquals(
229
                "[geom, id, name]",
230
                ArrayUtils.toString(expbuilder.variables_names())
231
        );
232
        assertEquals(
233
                "['yoyo']",
234
                ArrayUtils.toString(expbuilder.parameters_names())
235
        );
236
    }
237
    
238
    public void testFetchFeatureType() throws Exception {
239
        SQLBuilder sqlbuilder = createSQLBuilder();
240
        ExpressionBuilder expbuilder = sqlbuilder.expression();
241

    
242
        sqlbuilder.select().column().all();
243
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
244
        sqlbuilder.select().limit(1);
245

    
246
        System.out.println("# Test:: testFetchFeatureType");
247
        System.out.println("# SQL:: " + sqlbuilder.toString());
248
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
249
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
250
        
251
        //# Test:: testFetchFeatureType
252
        //# SQL:: SELECT * FROM [master].[dbo].[test1] LIMMIT 1
253
        //# Variables:: []
254
        //# Parametros:: []        
255
        
256
        assertEquals(
257
                "SELECT * FROM \"master\".\"dbo\".\"test1\" LIMIT 1",
258
                sqlbuilder.toString()
259
        );
260
        assertEquals(
261
                "[]",
262
                ArrayUtils.toString(expbuilder.variables_names())
263
        );
264
        assertEquals(
265
                "[]",
266
                ArrayUtils.toString(expbuilder.parameters_names())
267
        );
268
    }
269
        
270
    public void testPerformDeletes() throws Exception {
271
        SQLBuilder sqlbuilder = createSQLBuilder();
272
        ExpressionBuilder expbuilder = sqlbuilder.expression();
273

    
274
        sqlbuilder.delete().table().database("master").schema("dbo").name("test1");
275
        sqlbuilder.delete().where().and(
276
            expbuilder.eq( 
277
                expbuilder.column("id1"),
278
                expbuilder.parameter("id1").as_variable()
279
            )
280
        );
281
        sqlbuilder.delete().where().and(
282
            expbuilder.eq( 
283
                expbuilder.column("id2"),
284
                expbuilder.parameter("id2").as_variable()
285
            )
286
        );
287

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

    
290
        System.out.println("# Test:: testPerformDeletes");
291
        System.out.println("# SQL:: " + sqlbuilder.toString());
292
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
293
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
294
        assertEquals(
295
                "DELETE FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"id1\") = (?) ) AND ( (\"id2\") = (?) )",
296
                sqlbuilder.toString()
297
        );
298
        assertEquals(
299
                "[id1, id2]",
300
                ArrayUtils.toString(expbuilder.variables_names())
301
        );
302
        assertEquals(
303
                "[\"id1\", \"id2\"]",
304
                ArrayUtils.toString(expbuilder.parameters_names())
305
        );
306
    }
307

    
308
    public void testPerformInserts1() throws Exception {
309
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
310

    
311
        SQLBuilder sqlbuilder = createSQLBuilder();
312
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
313

    
314
        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
315
        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
316
        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
317
        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_variable().srs(proj));
318
        
319
        // INSERT INTO "master"."dbo"."test1" ( "id", "name", "geom" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )
320
        
321
        System.out.println("# Test:: testPerformInserts1");
322
        System.out.println("# SQL:: " + sqlbuilder.toString());
323
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
324
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
325
        assertEquals(
326
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )",
327
                sqlbuilder.toString()
328
        );
329
        assertEquals(
330
                "[geom, id, name]",
331
                ArrayUtils.toString(expbuilder.variables_names())
332
        );
333
        assertEquals(
334
                "[\"id\", \"name\", \"geom\"]",
335
                ArrayUtils.toString(expbuilder.parameters_names())
336
        );
337
    }
338

    
339
    public void testPerformInserts2() throws Exception {
340
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
341

    
342
        SQLBuilder sqlbuilder = createSQLBuilder();
343
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
344

    
345
        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
346
        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
347
        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
348
        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_variable().srs(expbuilder.parameter().value(proj)));
349
        
350
        System.out.println("# Test:: testPerformInserts2");
351
        System.out.println("# SQL:: " + sqlbuilder.toString());
352
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
353
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
354
        assertEquals(
355
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (?)) )",
356
                sqlbuilder.toString()
357
        );
358
        assertEquals(
359
                "[geom, id, name]",
360
                ArrayUtils.toString(expbuilder.variables_names())
361
        );
362
        assertEquals(
363
                "[\"id\", \"name\", \"geom\", 4326]",
364
                ArrayUtils.toString(expbuilder.parameters_names())
365
        );
366
    }
367

    
368
    public void testPerformUpdates() throws Exception {
369
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
370

    
371
        SQLBuilder sqlbuilder = createSQLBuilder();
372
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
373

    
374
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
375
        sqlbuilder.update().where().and(
376
            expbuilder.eq(
377
                expbuilder.column("id"), 
378
                expbuilder.parameter("id").as_variable()
379
            )
380
        );
381
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
382
        sqlbuilder.update().column().name("geom").with_value(
383
                expbuilder.parameter("geom").as_variable()
384
                        .srs(expbuilder.parameter().value(proj)) 
385
        );
386

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

    
389
        System.out.println("# Test:: testPerformUpdates");
390
        System.out.println("# SQL:: " + sqlbuilder.toString());
391
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
392
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
393
        assertEquals(
394
                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromText(?, (?)) WHERE ( (\"id\") = (?) )",
395
                sqlbuilder.toString()
396
        );
397
        assertEquals(
398
                "[geom, id, name]",
399
                ArrayUtils.toString(expbuilder.variables_names())
400
        );
401
        assertEquals(
402
                "[\"name\", \"geom\", 4326, \"id\"]",
403
                ArrayUtils.toString(expbuilder.parameters_names())
404
        );
405
    }
406

    
407
    public void testGrant1() throws Exception {
408

    
409
        SQLBuilder sqlbuilder = createSQLBuilder();
410
        ExpressionBuilder expbuilder = sqlbuilder.expression();
411

    
412
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
413
        sqlbuilder.grant().role("prueba").select().insert().update();
414
        sqlbuilder.grant().role("gis").all();
415
                
416
        
417
        System.out.println("# Test:: testGrant1");
418
        System.out.println("# SQL:: " + sqlbuilder.toString());
419
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
420
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
421
        assertEquals(
422
                "",
423
                sqlbuilder.toString()
424
        );
425
        assertEquals(
426
                "[]",
427
                ArrayUtils.toString(expbuilder.variables_names())
428
        );
429
        assertEquals(
430
                "[]",
431
                ArrayUtils.toString(expbuilder.parameters_names())
432
        );
433
    }
434

    
435
    public void testGrant2() throws Exception {
436

    
437
        SQLBuilder sqlbuilder = createSQLBuilder();
438
        ExpressionBuilder expbuilder = sqlbuilder.expression();
439

    
440
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
441
        sqlbuilder.grant().role("prueba").privilege(Privilege.SELECT)
442
                .privilege(Privilege.INSERT)
443
                .privilege(Privilege.UPDATE);
444
        sqlbuilder.grant().role("gis").privilege(Privilege.ALL);
445
                
446
        
447
        System.out.println("# Test:: testGrant2");
448
        System.out.println("# SQL:: " + sqlbuilder.toString());
449
        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
450
        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
451
        assertEquals(
452
                "",
453
                sqlbuilder.toString()
454
        );
455
        assertEquals(
456
                "[]",
457
                ArrayUtils.toString(expbuilder.variables_names())
458
        );
459
        assertEquals(
460
                "[]",
461
                ArrayUtils.toString(expbuilder.parameters_names())
462
        );
463
    }
464

    
465

    
466
}