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 @ 44748

History | View | Annotate | Download (26 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.collections.CollectionUtils;
7
import org.apache.commons.collections.ListUtils;
8
import org.apache.commons.lang3.ArrayUtils;
9
import org.apache.commons.lang3.StringUtils;
10
import org.cresques.cts.IProjection;
11
import org.gvsig.expressionevaluator.ExpressionBuilder;
12
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
13
import org.gvsig.fmap.crs.CRSFactory;
14
import org.gvsig.fmap.dal.DALLocator;
15
import org.gvsig.fmap.dal.DataManager;
16
import org.gvsig.fmap.dal.SQLBuilder;
17
import org.gvsig.fmap.dal.SQLBuilder.Privilege;
18
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
19
import org.gvsig.fmap.dal.feature.EditableFeatureType;
20
import org.gvsig.fmap.dal.feature.EditableForeingKey;
21
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
22
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
23
import org.gvsig.fmap.geom.DataTypes;
24
import org.gvsig.fmap.geom.Geometry;
25
import org.gvsig.fmap.geom.GeometryLocator;
26
import org.gvsig.fmap.geom.GeometryManager;
27
import org.gvsig.fmap.geom.primitive.Polygon;
28
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
29

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
466
    public void testGrant1() throws Exception {
467

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

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

    
494
    public void testGrant2() throws Exception {
495

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

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

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

    
576
        List<String> attrNames = new ArrayList<>();
577
        helper.processSpecialFunctions(sqlbuilder, ft, attrNames);
578
        
579
        System.out.println("# SQL2:: " + sqlbuilder.toString());
580
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
581
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
582
        System.out.println("# attrNames:: " + StringUtils.join(attrNames,","));
583

    
584
        //# Test:: testForeingValue
585
        //# SQL1:: SELECT "ID", "NAME", "DESCRIPTION", "TYPE" FROM "dbo"."test1" WHERE (( (FOREING_VALUE('TYPE.DESCRIPTION')) LIKE ('A%') ) AND ( (FOREING_VALUE('PHONE_TYPE.DESCRIPTION')) = ('mobile') ))
586
        //# 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') ))
587
        //# Variables:: [DESCRIPTION, DESCRIPTION, DESCRIPTION, ID, NAME, TYPE]
588
        //# Parametros:: []
589
        //# attrNames:: [TYPE.DESCRIPTION, PHONE_TYPE.DESCRIPTION]
590

    
591
        assertEquals(
592
                "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') ))",
593
                sqlbuilder.toString()
594
        );
595
        assertEquals(
596
                "[DESCRIPTION, DESCRIPTION, DESCRIPTION, ID, NAME, TYPE]",
597
                ArrayUtils.toString(sqlbuilder.variables_names())
598
        );
599
        assertEquals(
600
                "[]",
601
                ArrayUtils.toString(sqlbuilder.parameters_names())
602
        );
603
        assertEquals(
604
                "TYPE.DESCRIPTION,PHONE_TYPE.DESCRIPTION",
605
                StringUtils.join(attrNames,",")
606
        );
607
    }
608
    
609

    
610
}