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

History | View | Annotate | Download (25.8 KB)

1
package org.gvsig.fmap.dal.store.jdbc2;
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.expressionevaluator.GeometryExpressionBuilder;
8
import org.gvsig.fmap.crs.CRSFactory;
9
import org.gvsig.fmap.dal.DALLocator;
10
import org.gvsig.fmap.dal.DataManager;
11
import org.gvsig.fmap.dal.SQLBuilder;
12
import org.gvsig.fmap.dal.SQLBuilder.Privilege;
13
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
14
import org.gvsig.fmap.dal.feature.EditableFeatureType;
15
import org.gvsig.fmap.dal.feature.EditableForeingKey;
16
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
18
import org.gvsig.fmap.geom.DataTypes;
19
import org.gvsig.fmap.geom.Geometry;
20
import org.gvsig.fmap.geom.GeometryLocator;
21
import org.gvsig.fmap.geom.GeometryManager;
22
import org.gvsig.fmap.geom.primitive.Polygon;
23
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
24

    
25
public class SQLBuilderTest extends TestCase {
26
    
27
    public SQLBuilderTest(String testName) {
28
        super(testName);
29
    }
30

    
31
    @Override
32
    protected void setUp() throws Exception {
33
        super.setUp();
34
        new DefaultLibrariesInitializer().fullInitialize();
35
    }
36

    
37
    @Override
38
    protected void tearDown() throws Exception {
39
        super.tearDown();
40
    }
41

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

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

    
108
        System.out.println("# Test:: testCount");
109
        System.out.println("# SQL:: " + sqlbuilder.toString());
110
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
111
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
112

    
113
        //# Test:: testCount
114
        //# SQL:: SELECT COUNT(*) FROM "master"."dbo"."test1" WHERE pp = 200
115
        //# Variables:: []
116
        //# Parametros:: []
117

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

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

    
174
        
175
        // CREATE TABLE "master"."dbo"."test1" ("name" VARCHAR(45) DEFAULT NULL NULL, "id" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, "geom" TEXT DEFAULT NULL NULL )
176
        System.out.println("# Test:: testCreateTable");
177
        System.out.println("# SQL:: " + sqlbuilder.toString());
178
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
179
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
180
        assertEquals(
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
                sqlbuilder.toString()
183
        );
184
        assertEquals(
185
                "[]",
186
                ArrayUtils.toString(sqlbuilder.variables_names())
187
        );
188
        assertEquals(
189
                "[]",
190
                ArrayUtils.toString(sqlbuilder.parameters_names())
191
        );
192
    }
193

    
194
    public void testDropTable() throws Exception {
195
        SQLBuilder sqlbuilder = createSQLBuilder();
196
        ExpressionBuilder expbuilder = sqlbuilder.expression();
197
        
198
        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
199

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

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

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

    
261
        sqlbuilder.select().column().all();
262
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
263
        sqlbuilder.select().limit(1);
264

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

    
293
        sqlbuilder.delete().table().database("master").schema("dbo").name("test1");
294
        sqlbuilder.delete().where().and(
295
            expbuilder.eq( 
296
                expbuilder.column("id1"),
297
                expbuilder.parameter("id1").as_variable()
298
            )
299
        );
300
        sqlbuilder.delete().where().and(
301
            expbuilder.eq( 
302
                expbuilder.column("id2"),
303
                expbuilder.parameter("id2").as_variable()
304
            )
305
        );
306

    
307
//        # Test:: testPerformDeletes
308
//        # SQL:: DELETE FROM "master"."dbo"."test1" WHERE (( ("id1") = (?) ) AND ( ("id2") = (?) ))
309
//        # Variables:: [id1, id2]
310
//        # Parametros:: ["id1", "id2"]
311

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

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

    
333
        SQLBuilder sqlbuilder = createSQLBuilder();
334
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
335

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

    
359
    public void testPerformInserts2() throws Exception {
360
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
361

    
362
        SQLBuilder sqlbuilder = createSQLBuilder();
363
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
364

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

    
388
    public void testPerformUpdates1() throws Exception {
389
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
390

    
391
        SQLBuilder sqlbuilder = createSQLBuilder();
392
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
393

    
394
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
395
        sqlbuilder.update().where().and(
396
            expbuilder.eq(
397
                expbuilder.column("id"), 
398
                expbuilder.parameter("id").as_variable()
399
            )
400
        );
401
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
402
        sqlbuilder.update().column().name("geom").with_value(
403
                expbuilder.parameter("geom").as_variable().srs(proj) 
404
        );
405

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

    
424
    public void testPerformUpdates2() throws Exception {
425
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
426

    
427
        SQLBuilder sqlbuilder = createSQLBuilder();
428
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
429

    
430
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
431
        sqlbuilder.update().where().and(
432
            expbuilder.eq(
433
                expbuilder.column("id"), 
434
                expbuilder.parameter("id").as_variable()
435
            )
436
        );
437
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
438
        sqlbuilder.update().column().name("geom").with_value(
439
                expbuilder.parameter("geom").as_variable()
440
                        .srs(expbuilder.parameter().value(proj)) 
441
        );
442

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

    
461
    public void testGrant1() throws Exception {
462

    
463
        SQLBuilder sqlbuilder = createSQLBuilder();
464
        ExpressionBuilder expbuilder = sqlbuilder.expression();
465

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

    
489
    public void testGrant2() throws Exception {
490

    
491
        SQLBuilder sqlbuilder = createSQLBuilder();
492
        ExpressionBuilder expbuilder = sqlbuilder.expression();
493

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

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

    
571
        String[] attrNames = helper.replaceForeingValueFunction(sqlbuilder, ft);
572
        
573
        System.out.println("# SQL2:: " + sqlbuilder.toString());
574
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
575
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
576
        System.out.println("# attrNames:: " + ArrayUtils.toString(attrNames));
577

    
578
        //# Test:: testForeingValue
579
        //# SQL1:: SELECT "ID", "NAME", "DESCRIPTION", "TYPE" FROM "dbo"."test1" WHERE (( (FOREING_VALUE('TYPE.DESCRIPTION')) LIKE ('A%') ) AND ( (FOREING_VALUE('PHONE_TYPE.DESCRIPTION')) = ('mobile') ))
580
        //# 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') ))
581
        //# Variables:: [DESCRIPTION, DESCRIPTION, DESCRIPTION, ID, NAME, TYPE]
582
        //# Parametros:: []
583
        //# attrNames:: [TYPE.DESCRIPTION, PHONE_TYPE.DESCRIPTION]
584

    
585
        assertEquals(
586
                "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
                sqlbuilder.toString()
588
        );
589
        assertEquals(
590
                "[DESCRIPTION, DESCRIPTION, DESCRIPTION, ID, NAME, TYPE]",
591
                ArrayUtils.toString(sqlbuilder.variables_names())
592
        );
593
        assertEquals(
594
                "[]",
595
                ArrayUtils.toString(sqlbuilder.parameters_names())
596
        );
597
        assertEquals(
598
                "{TYPE.DESCRIPTION,PHONE_TYPE.DESCRIPTION}",
599
                ArrayUtils.toString(attrNames)
600
        );
601
    }
602
    
603

    
604
}