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

History | View | Annotate | Download (25.7 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
                false,
143
                false,
144
                true,
145
                false,
146
                null
147
        );
148
        sqlbuilder.create_table().add_column(
149
                "id",
150
                DataTypes.INT,
151
                0,
152
                0,
153
                true,
154
                false,
155
                false,
156
                true,
157
                0
158
        );
159
        sqlbuilder.create_table().add_column(
160
                "geom",
161
                DataTypes.GEOMETRY,
162
                0,
163
                0,
164
                false,
165
                false,
166
                true,
167
                false,
168
                null
169
        );
170

    
171
        
172
        // CREATE TABLE "master"."dbo"."test1" ("name" VARCHAR(45) DEFAULT NULL NULL, "id" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, "geom" TEXT DEFAULT NULL NULL )
173
        System.out.println("# Test:: testCreateTable");
174
        System.out.println("# SQL:: " + sqlbuilder.toString());
175
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
176
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
177
        assertEquals(
178
                "CREATE TABLE \"master\".\"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL NULL, \"id\" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, \"geom\" TEXT DEFAULT NULL NULL )",
179
                sqlbuilder.toString()
180
        );
181
        assertEquals(
182
                "[]",
183
                ArrayUtils.toString(sqlbuilder.variables_names())
184
        );
185
        assertEquals(
186
                "[]",
187
                ArrayUtils.toString(sqlbuilder.parameters_names())
188
        );
189
    }
190

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

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

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

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

    
258
        sqlbuilder.select().column().all();
259
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
260
        sqlbuilder.select().limit(1);
261

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

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

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

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

    
327
    public void testPerformInserts1() throws Exception {
328
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
329

    
330
        SQLBuilder sqlbuilder = createSQLBuilder();
331
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
332

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

    
356
    public void testPerformInserts2() throws Exception {
357
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
358

    
359
        SQLBuilder sqlbuilder = createSQLBuilder();
360
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
361

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

    
385
    public void testPerformUpdates1() throws Exception {
386
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
387

    
388
        SQLBuilder sqlbuilder = createSQLBuilder();
389
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
390

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

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

    
421
    public void testPerformUpdates2() throws Exception {
422
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
423

    
424
        SQLBuilder sqlbuilder = createSQLBuilder();
425
        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
426

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

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

    
458
    public void testGrant1() throws Exception {
459

    
460
        SQLBuilder sqlbuilder = createSQLBuilder();
461
        ExpressionBuilder expbuilder = sqlbuilder.expression();
462

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

    
486
    public void testGrant2() throws Exception {
487

    
488
        SQLBuilder sqlbuilder = createSQLBuilder();
489
        ExpressionBuilder expbuilder = sqlbuilder.expression();
490

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

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

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

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

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

    
601
}