Statistics
| Revision:

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

History | View | Annotate | Download (27.4 KB)

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

    
3
import java.util.ArrayList;
4
import java.util.List;
5
import junit.framework.TestCase;
6
import org.apache.commons.lang3.ArrayUtils;
7
import org.apache.commons.lang3.StringUtils;
8
import org.cresques.cts.IProjection;
9
import org.gvsig.expressionevaluator.ExpressionBuilder;
10
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
11
import org.gvsig.fmap.crs.CRSFactory;
12
import org.gvsig.fmap.dal.DALLocator;
13
import org.gvsig.fmap.dal.DataManager;
14
import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREIGN_VALUE;
15
import org.gvsig.fmap.dal.SQLBuilder;
16
import org.gvsig.fmap.dal.SQLBuilder.Privilege;
17
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
18
import org.gvsig.fmap.dal.feature.EditableFeatureType;
19
import org.gvsig.fmap.dal.feature.EditableForeingKey;
20
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
21
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
22
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParametersBase;
23
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
24
import org.gvsig.fmap.geom.DataTypes;
25
import org.gvsig.fmap.geom.Geometry;
26
import org.gvsig.fmap.geom.GeometryLocator;
27
import org.gvsig.fmap.geom.GeometryManager;
28
import org.gvsig.fmap.geom.primitive.Polygon;
29
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
30

    
31
public class SQLBuilderTest extends TestCase {
32
    
33
    public SQLBuilderTest(String testName) {
34
        super(testName);
35
    }
36

    
37
    @Override
38
    protected void setUp() throws Exception {
39
        super.setUp();
40
        new DefaultLibrariesInitializer().fullInitialize();
41
    }
42

    
43
    @Override
44
    protected void tearDown() throws Exception {
45
        super.tearDown();
46
    }
47

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

    
105
    public void testCount() throws Exception {
106
        SQLBuilder sqlbuilder = createSQLBuilder();
107
        ExpressionBuilder expbuilder = sqlbuilder.expression();
108
        
109
        sqlbuilder.select().column().value(sqlbuilder.count().all());
110
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
111
        sqlbuilder.select().from().subquery(null);
112
        sqlbuilder.select().where().set( expbuilder.custom("pp = 200"));
113

    
114
        System.out.println("# Test:: testCount");
115
        System.out.println("# SQL:: " + sqlbuilder.toString());
116
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
117
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
118

    
119
        //# Test:: testCount
120
        //# SQL:: SELECT COUNT(*) FROM "master"."dbo"."test1" WHERE pp = 200
121
        //# Variables:: []
122
        //# Parametros:: []
123

    
124
        assertEquals(
125
                "SELECT COUNT(*) FROM \"master\".\"dbo\".\"test1\" WHERE pp = 200",
126
                sqlbuilder.toString()
127
        );
128
        assertEquals(
129
                "[]",
130
                ArrayUtils.toString(sqlbuilder.variables_names())
131
        );
132
        assertEquals(
133
                "[]",
134
                ArrayUtils.toString(sqlbuilder.parameters_names())
135
        );
136
    }
137
    
138
    public void testCreateTable() throws Exception {
139
        SQLBuilder sqlbuilder = createSQLBuilder();
140
        ExpressionBuilder expbuilder = sqlbuilder.expression();
141

    
142
        sqlbuilder.create_table().table().database("master").schema("dbo").name("test1");
143
        sqlbuilder.create_table().add_column(
144
                "name",
145
                DataTypes.STRING,
146
                45,
147
                0,
148
                0,
149
                false,
150
                false,
151
                true,
152
                false,
153
                null
154
        );
155
        sqlbuilder.create_table().add_column(
156
                "id",
157
                DataTypes.INT,
158
                0,
159
                0,
160
                0,
161
                true,
162
                false,
163
                false,
164
                true,
165
                0
166
        );
167
        sqlbuilder.create_table().add_column(
168
                "geom",
169
                DataTypes.GEOMETRY,
170
                0,
171
                0,
172
                0,
173
                false,
174
                false,
175
                true,
176
                false,
177
                null
178
        );
179

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

    
200
    public void testDropTable() throws Exception {
201
        SQLBuilder sqlbuilder = createSQLBuilder();
202
        ExpressionBuilder expbuilder = sqlbuilder.expression();
203
        
204
        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
205

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

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

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

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

    
271
        System.out.println("# Test:: testFetchFeatureType");
272
        System.out.println("# SQL:: " + sqlbuilder.toString());
273
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
274
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
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
                sqlbuilder.toString()
284
        );
285
        assertEquals(
286
                "[]",
287
                ArrayUtils.toString(sqlbuilder.variables_names())
288
        );
289
        assertEquals(
290
                "[]",
291
                ArrayUtils.toString(sqlbuilder.parameters_names())
292
        );
293
    }
294
        
295
    public void testPerformDeletes() throws Exception {
296
        SQLBuilder sqlbuilder = createSQLBuilder();
297
        ExpressionBuilder expbuilder = sqlbuilder.expression();
298

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

    
313
//        # Test:: testPerformDeletes
314
//        # SQL:: DELETE FROM "master"."dbo"."test1" WHERE (( ("id1") = (?) ) AND ( ("id2") = (?) ))
315
//        # Variables:: [id1, id2]
316
//        # Parametros:: ["id1", "id2"]
317

    
318
        System.out.println("# Test:: testPerformDeletes");
319
        System.out.println("# SQL:: " + sqlbuilder.toString());
320
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
321
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
322
        assertEquals(
323
                "DELETE FROM \"master\".\"dbo\".\"test1\" WHERE (( (\"id1\") = (?) ) AND ( (\"id2\") = (?) ))",
324
                sqlbuilder.toString()
325
        );
326
        assertEquals(
327
                "[id1, id2]",
328
                ArrayUtils.toString(sqlbuilder.variables_names())
329
        );
330
        assertEquals(
331
                "[\"id1\", \"id2\"]",
332
                ArrayUtils.toString(sqlbuilder.parameters_names())
333
        );
334
    }
335

    
336
    public void testPerformInserts1() throws Exception {
337
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
338

    
339
        SQLBuilder sqlbuilder = createSQLBuilder();
340
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
341

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

    
365
    public void testPerformInserts2() throws Exception {
366
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
367

    
368
        SQLBuilder sqlbuilder = createSQLBuilder();
369
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
370

    
371
        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
372
        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
373
        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
374
        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_variable().srs(proj));
375
        
376
        System.out.println("# Test:: testPerformInserts2");
377
        System.out.println("# SQL:: " + sqlbuilder.toString());
378
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
379
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
380
        assertEquals(
381
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
382
                sqlbuilder.toString()
383
        );
384
        assertEquals(
385
                "[geom, id, name]",
386
                ArrayUtils.toString(sqlbuilder.variables_names())
387
        );
388
        assertEquals(
389
                "[\"id\", \"name\", \"geom\"]",
390
                ArrayUtils.toString(sqlbuilder.parameters_names())
391
        );
392
    }
393

    
394
    public void testPerformUpdates1() throws Exception {
395
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
396

    
397
        SQLBuilder sqlbuilder = createSQLBuilder();
398
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
399

    
400
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
401
        sqlbuilder.update().where().and(
402
            expbuilder.eq(
403
                expbuilder.column("id"), 
404
                expbuilder.parameter("id").as_variable()
405
            )
406
        );
407
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
408
        sqlbuilder.update().column().name("geom").with_value(
409
                expbuilder.parameter("geom").as_variable().srs(proj) 
410
        );
411

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

    
430
    public void testPerformUpdates2() throws Exception {
431
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
432

    
433
        SQLBuilder sqlbuilder = createSQLBuilder();
434
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
435

    
436
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
437
        sqlbuilder.update().where().and(
438
            expbuilder.eq(
439
                expbuilder.column("id"), 
440
                expbuilder.parameter("id").as_variable()
441
            )
442
        );
443
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
444
        sqlbuilder.update().column().name("geom").with_value(
445
                expbuilder.parameter("geom").as_variable()
446
                        .srs(expbuilder.parameter().value(proj)) 
447
        );
448

    
449
        System.out.println("# Test:: testPerformUpdates");
450
        System.out.println("# SQL:: " + sqlbuilder.toString());
451
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
452
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
453
        assertEquals(
454
                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (?)) WHERE ( (\"id\") = (?) )",
455
                sqlbuilder.toString()
456
        );
457
        assertEquals(
458
                "[geom, id, name]",
459
                ArrayUtils.toString(sqlbuilder.variables_names())
460
        );
461
        assertEquals(
462
                "[\"name\", \"geom\", 4326, \"id\"]",
463
                ArrayUtils.toString(sqlbuilder.parameters_names())
464
        );
465
    }
466

    
467
    public void testGrant1() throws Exception {
468

    
469
        SQLBuilder sqlbuilder = createSQLBuilder();
470
        ExpressionBuilder expbuilder = sqlbuilder.expression();
471

    
472
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
473
        sqlbuilder.grant().role("prueba").select().insert().update();
474
        sqlbuilder.grant().role("gis").all();
475
                
476
        
477
        System.out.println("# Test:: testGrant1");
478
        System.out.println("# SQL:: " + sqlbuilder.toString());
479
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
480
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
481
        assertEquals(
482
                "",
483
                sqlbuilder.toString()
484
        );
485
        assertEquals(
486
                "[]",
487
                ArrayUtils.toString(sqlbuilder.variables_names())
488
        );
489
        assertEquals(
490
                "[]",
491
                ArrayUtils.toString(sqlbuilder.parameters_names())
492
        );
493
    }
494

    
495
    public void testGrant2() throws Exception {
496

    
497
        SQLBuilder sqlbuilder = createSQLBuilder();
498
        ExpressionBuilder expbuilder = sqlbuilder.expression();
499

    
500
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
501
        sqlbuilder.grant().role("prueba").privilege(Privilege.SELECT)
502
                .privilege(Privilege.INSERT)
503
                .privilege(Privilege.UPDATE);
504
        sqlbuilder.grant().role("gis").privilege(Privilege.ALL);
505
                
506
        
507
        System.out.println("# Test:: testGrant2");
508
        System.out.println("# SQL:: " + sqlbuilder.toString());
509
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
510
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
511
        assertEquals(
512
                "",
513
                sqlbuilder.toString()
514
        );
515
        assertEquals(
516
                "[]",
517
                ArrayUtils.toString(sqlbuilder.variables_names())
518
        );
519
        assertEquals(
520
                "[]",
521
                ArrayUtils.toString(sqlbuilder.parameters_names())
522
        );
523
    }
524

    
525
    public void testForeingValue() throws Exception {
526
        DataManager dataManager = DALLocator.getDataManager();
527
        JDBCHelper helper = createJDBCHelper();
528
        
529
        SQLBuilder sqlbuilder = createSQLBuilder();
530
        ExpressionBuilder expbuilder = sqlbuilder.expression();
531
        
532
        EditableFeatureAttributeDescriptor attr;
533
        EditableForeingKey foreingKey;
534
        EditableFeatureType ft = dataManager.createFeatureType();
535
        ft.add("ID", DataTypes.INT);
536
        ft.add("NAME", DataTypes.STRING, 80);
537
        attr = ft.add("TYPE", DataTypes.INT);
538
        foreingKey = attr.getForeingKey();
539
        foreingKey.setForeingKey(true);
540
        foreingKey.setClosedList(true);
541
        foreingKey.setCodeName("ID");
542
        foreingKey.setTableName("TYPES");
543
        attr = ft.add("PHONE_TYPE", DataTypes.INT);
544
        foreingKey = attr.getForeingKey();
545
        foreingKey.setForeingKey(true);
546
        foreingKey.setClosedList(true);
547
        foreingKey.setCodeName("ID");
548
        foreingKey.setTableName("PHONE_TYPES");
549
        
550
        sqlbuilder.select().from().table().schema("dbo").name("test1");
551
        
552
        sqlbuilder.select().column().name("ID");
553
        sqlbuilder.select().column().name("NAME");
554
//        sqlbuilder.select().column().name("DESCRIPTION");
555
        sqlbuilder.select().column().value(
556
                expbuilder.function(
557
                        FUNCTION_FOREIGN_VALUE,
558
                        expbuilder.constant("TYPE.DESCRIPTION")
559
                )
560
        );
561
        sqlbuilder.select().column().name("TYPE");
562
        sqlbuilder.select().column().name("TYPE").as("TYPE1");
563
        sqlbuilder.select().where().set( 
564
            expbuilder.and(
565
                expbuilder.like(
566
                    expbuilder.function(
567
                        FUNCTION_FOREIGN_VALUE,
568
                        expbuilder.constant("TYPE.DESCRIPTION")
569
                    ),
570
                    expbuilder.constant("A%")
571
                ),
572
                expbuilder.eq(
573
                    expbuilder.function(
574
                        FUNCTION_FOREIGN_VALUE,
575
                        expbuilder.constant("PHONE_TYPE.DESCRIPTION")
576
                    ),
577
                    expbuilder.constant("mobile")
578
                )
579
            )
580
        );
581
        sqlbuilder.select().order_by().column("TYPE");
582
        System.out.println("# Test:: testForeingValue");
583
        System.out.println("# SQL1:: " + sqlbuilder.toString());        
584

    
585
        List<String> attrNames = new ArrayList<>();
586
        helper.processSpecialFunctions(sqlbuilder, ft, attrNames, null);
587
        
588
        System.out.println("# SQL2:: " + sqlbuilder.toString());
589
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
590
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
591
        System.out.println("# attrNames:: " + StringUtils.join(attrNames,","));
592

    
593
        //# Test:: testForeingValue
594
        //# SQL1:: SELECT "ID", "NAME", "DESCRIPTION", "TYPE" FROM "dbo"."test1" WHERE (( (FOREING_VALUE('TYPE.DESCRIPTION')) LIKE ('A%') ) AND ( (FOREING_VALUE('PHONE_TYPE.DESCRIPTION')) = ('mobile') ))
595
        //# SQL2:: SELECT "ID", "NAME", "dbo"."test1"."DESCRIPTION", "dbo"."test1"."TYPE", "dbo"."TYPES"."DESCRIPTION", "dbo"."PHONE_TYPES"."DESCRIPTION" FROM "dbo"."test1" LEFT JOIN "dbo"."TYPES" ON ( ("dbo"."test1"."TYPE") = ("dbo"."TYPES"."ID") ) LEFT JOIN "dbo"."PHONE_TYPES" ON ( ("dbo"."test1"."PHONE_TYPE") = ("dbo"."PHONE_TYPES"."ID") ) WHERE (( ("dbo"."TYPES"."DESCRIPTION") LIKE ('A%') ) AND ( ("dbo"."PHONE_TYPES"."DESCRIPTION") = ('mobile') ))
596
        //# Variables:: [DESCRIPTION, DESCRIPTION, DESCRIPTION, ID, NAME, TYPE]
597
        //# Parametros:: []
598
        //# attrNames:: [TYPE.DESCRIPTION, PHONE_TYPE.DESCRIPTION]
599

    
600
        assertEquals(
601
//                "SELECT \"dbo\".\"test1\".\"ID\", \"dbo\".\"test1\".\"NAME\", \"dbo\".\"TYPES\".\"DESCRIPTION\", \"dbo\".\"test1\".\"TYPE\", \"dbo\".\"test1\".\"TYPE\" AS \"TYPE1\" FROM \"dbo\".\"test1\" LEFT JOIN \"dbo\".\"TYPES\" ON ( (\"dbo\".\"test1\".\"TYPE\") = (\"dbo\".\"TYPES\".\"ID\") ) LEFT JOIN \"dbo\".\"PHONE_TYPES\" ON ( (\"dbo\".\"test1\".\"PHONE_TYPE\") = (\"dbo\".\"PHONE_TYPES\".\"ID\") ) WHERE (( (\"dbo\".\"TYPES\".\"DESCRIPTION\") LIKE ('A%') ) AND ( (\"dbo\".\"PHONE_TYPES\".\"DESCRIPTION\") = ('mobile') )) ORDER BY \"TYPE\" ASC NULLS LAST",
602
                "SELECT \"dbo\".\"test1\".\"ID\", \"dbo\".\"test1\".\"NAME\", \"dbo\".\"TYPES\".\"DESCRIPTION\", \"dbo\".\"test1\".\"TYPE\", \"dbo\".\"test1\".\"TYPE\" AS \"TYPE1\", \"dbo\".\"TYPES\".\"DESCRIPTION\", \"dbo\".\"PHONE_TYPES\".\"DESCRIPTION\" FROM \"dbo\".\"test1\" LEFT JOIN \"dbo\".\"TYPES\" ON ( (\"dbo\".\"test1\".\"TYPE\") = (\"dbo\".\"TYPES\".\"ID\") ) LEFT JOIN \"dbo\".\"PHONE_TYPES\" ON ( (\"dbo\".\"test1\".\"PHONE_TYPE\") = (\"dbo\".\"PHONE_TYPES\".\"ID\") ) WHERE (( (\"dbo\".\"TYPES\".\"DESCRIPTION\") LIKE ('A%') ) AND ( (\"dbo\".\"PHONE_TYPES\".\"DESCRIPTION\") = ('mobile') )) ORDER BY \"TYPE\" ASC NULLS LAST",
603
                sqlbuilder.toString()
604
        );
605
        assertEquals(
606
                "[DESCRIPTION, DESCRIPTION, ID, ID, ID, NAME, PHONE_TYPE, TYPE]",
607
                ArrayUtils.toString(sqlbuilder.variables_names())
608
        );
609
        assertEquals(
610
                "[]",
611
                ArrayUtils.toString(sqlbuilder.parameters_names())
612
        );
613
        assertEquals(
614
                "TYPE.DESCRIPTION,PHONE_TYPE.DESCRIPTION",
615
                StringUtils.join(attrNames,",")
616
        );
617
    }
618
    
619
    private JDBCHelper createJDBCHelper(){
620
        
621
        JDBCStoreParameters params = new JDBCStoreParametersBase();
622
        JDBCHelperBase helper = new JDBCHelperBase(params);
623
        return helper;
624
        
625
    }
626

    
627
}