Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.h2spatial / org.gvsig.h2spatial.h2gis132 / org.gvsig.h2spatial.h2gis132.provider / src / test / java / org / gvsig / fmap / dal / store / h2 / operations / sql / TestResultSetForSetProvider.java @ 46104

History | View | Annotate | Download (18.1 KB)

1
package org.gvsig.fmap.dal.store.h2.operations.sql;
2

    
3
import java.util.List;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.ExpressionUtils;
6
import org.gvsig.fmap.dal.DataTypes;
7
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
8
import org.gvsig.fmap.dal.feature.EditableFeatureType;
9
import org.gvsig.fmap.dal.feature.FeatureQuery;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
13
import org.gvsig.fmap.dal.store.h2.TestUtils;
14
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
16
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
18
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
19
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
20
import org.slf4j.Logger;
21
import org.slf4j.LoggerFactory;
22

    
23
@SuppressWarnings("UseSpecificCatch")
24
public class TestResultSetForSetProvider extends TestCase {
25

    
26
        private static final Logger LOGGER = LoggerFactory.getLogger(TestResultSetForSetProvider.class);
27

    
28
        public TestResultSetForSetProvider(String testName) {
29
                super(testName);
30
        }
31

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

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

    
43
        public void testSimple() throws Exception {
44
                JDBCHelper helper = TestUtils.createJDBCHelper();
45
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
46
                OperationsFactory operations = helper.getOperations();
47

    
48
                List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
49

    
50
                FeatureStore sourceStore = TestUtils.openSourceStore1();
51

    
52
                TableReference table = operations.createTableReference(
53
                        "dbtest",
54
                        sqlbuilder.default_schema(),
55
                        "test",
56
                        null
57
                );
58
                FeatureType featureType = sourceStore.getDefaultFeatureType();
59
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
60
                        table,
61
                        null,
62
                        null,
63
                        null,
64
                        featureType,
65
                        featureType,
66
                        0,
67
                        0,
68
                        0
69
                );
70
                String sql = resultSetForSetProvider.getSQL();
71
                System.out.println("###### SQL:" + sql);
72
                System.out.println("###### EXP:" + expectedSQLs.get(0));
73
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(0), sql);
74
        }
75

    
76
        public void testComputedAttribute() throws Exception {
77
                try {
78
                        JDBCHelper helper = TestUtils.createJDBCHelper();
79
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
80
                        OperationsFactory operations = helper.getOperations();
81

    
82
                        List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
83

    
84
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
85

    
86
                        TableReference table = operations.createTableReference(
87
                                "dbtest",
88
                                sqlbuilder.default_schema(),
89
                                "test",
90
                                null
91
                        );
92
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
93
                        EditableFeatureType eFeatureType = featureType.getEditable();
94
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
95

    
96
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
97
                                table,
98
                                null,
99
                                null,
100
                                null,
101
                                eFeatureType,
102
                                eFeatureType,
103
                                0,
104
                                0,
105
                                0
106
                        );
107
                        String sql = resultSetForSetProvider.getSQL();
108
                        System.out.println("###### SQL:" + sql);
109
                        System.out.println("###### EXP:" + expectedSQLs.get(5));
110
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(5), sql);
111
                } catch (Exception ex) {
112
                        ex.printStackTrace();
113
                        throw ex;
114
                }
115
        }
116

    
117
        public void testComputedAttribute2() throws Exception {
118
                try {
119
                        JDBCHelper helper = TestUtils.createJDBCHelper();
120
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
121
                        OperationsFactory operations = helper.getOperations();
122

    
123
                        List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
124

    
125
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
126

    
127
                        TableReference table = operations.createTableReference(
128
                                "dbtest",
129
                                sqlbuilder.default_schema(),
130
                                "test",
131
                                null
132
                        );
133
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
134
                        EditableFeatureType eFeatureType = featureType.getEditable();
135
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
136
                        eFeatureType.add("Compu2", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
137

    
138
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
139
                                table,
140
                                null,
141
                                null,
142
                                null,
143
                                eFeatureType,
144
                                eFeatureType,
145
                                0,
146
                                0,
147
                                0
148
                        );
149
                        String sql = resultSetForSetProvider.getSQL();
150
                        System.out.println("###### SQL:" + sql);
151
                        System.out.println("###### EXP:" + expectedSQLs.get(6));
152
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(6), sql);
153
                } catch (Exception ex) {
154
                        ex.printStackTrace();
155
                        throw ex;
156
                }
157
        }
158

    
159
        public void testComputedExtraColumn() throws Exception {
160
                try {
161
                        JDBCHelper helper = TestUtils.createJDBCHelper();
162
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
163
                        OperationsFactory operations = helper.getOperations();
164

    
165
                        List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
166

    
167
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
168

    
169
                        TableReference table = operations.createTableReference(
170
                                "dbtest",
171
                                sqlbuilder.default_schema(),
172
                                "test",
173
                                null
174
                        );
175
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
176
                        EditableFeatureType eFeatureType = featureType.getEditable();
177
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
178

    
179
                        FeatureQuery query = sourceStore.createFeatureQuery();
180
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
181
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
182

    
183
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
184
                                table,
185
                                null,
186
                                null,
187
                                query,
188
                                eFeatureType,
189
                                eFeatureType,
190
                                0,
191
                                0,
192
                                0
193
                        );
194
                        String sql = resultSetForSetProvider.getSQL();
195
                        System.out.println("###### SQL:" + sql);
196
                        System.out.println("###### EXP:" + expectedSQLs.get(7));
197
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(7), sql);
198
                } catch (Exception ex) {
199
                        ex.printStackTrace();
200
                        throw ex;
201
                }
202
        }
203

    
204
        public void testComputedExtraColumn2() throws Exception {
205
                try {
206
                        JDBCHelper helper = TestUtils.createJDBCHelper();
207
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
208
                        OperationsFactory operations = helper.getOperations();
209

    
210
                        List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
211

    
212
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
213

    
214
                        TableReference table = operations.createTableReference(
215
                                "dbtest",
216
                                sqlbuilder.default_schema(),
217
                                "test",
218
                                null
219
                        );
220
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
221
                        EditableFeatureType eFeatureType = featureType.getEditable();
222

    
223
                        FeatureQuery query = sourceStore.createFeatureQuery();
224
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
225
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
226
                        EditableFeatureAttributeDescriptor extraColumn2 = query.getExtraColumn().add("Extra2", DataTypes.INTEGER);
227
                        extraColumn2.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Extra1")));
228

    
229
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
230
                                table,
231
                                null,
232
                                null,
233
                                query,
234
                                eFeatureType,
235
                                eFeatureType,
236
                                0,
237
                                0,
238
                                0
239
                        );
240
                        String sql = resultSetForSetProvider.getSQL();
241
                        System.out.println("###### SQL:" + sql);
242
                        System.out.println("###### EXP:" + expectedSQLs.get(8));
243
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(8), sql);
244
                } catch (Exception ex) {
245
                        ex.printStackTrace();
246
                        throw ex;
247
                }
248
        }
249

    
250
        public void testComputedExtraColumnWithWhere() throws Exception {
251
                try {
252
                        JDBCHelper helper = TestUtils.createJDBCHelper();
253
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
254
                        OperationsFactory operations = helper.getOperations();
255

    
256
                        List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
257

    
258
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
259

    
260
                        TableReference table = operations.createTableReference(
261
                                "dbtest",
262
                                sqlbuilder.default_schema(),
263
                                "test",
264
                                null
265
                        );
266

    
267
                        StringBuilder filter = new StringBuilder();
268
                        filter.append("Extra1 > 10");
269

    
270
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
271

    
272
                        EditableFeatureType eFeatureType = featureType.getEditable();
273
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
274

    
275
                        FeatureQuery query = sourceStore.createFeatureQuery();
276
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
277
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
278
                        query.addFilter(filter.toString());
279
                        query.getOrder().add("Extra1");
280

    
281
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
282
                                table,
283
                                null,
284
                                null,
285
                                query,
286
                                eFeatureType,
287
                                eFeatureType,
288
                                0,
289
                                0,
290
                                0
291
                        );
292
                        String sql = resultSetForSetProvider.getSQL();
293
                        System.out.println("###### SQL:" + sql);
294
                        System.out.println("###### EXP:" + expectedSQLs.get(9));
295
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(9), sql);
296
                } catch (Exception ex) {
297
                        ex.printStackTrace();
298
                        throw ex;
299
                }
300
        }
301

    
302
        public void testSimpleGroup() throws Exception {
303
                try {
304
                        JDBCHelper helper = TestUtils.createJDBCHelper();
305
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
306
                        OperationsFactory operations = helper.getOperations();
307

    
308
                        List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
309

    
310
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
311

    
312
                        TableReference table = operations.createTableReference(
313
                                "dbtest",
314
                                sqlbuilder.default_schema(),
315
                                "test",
316
                                null
317
                        );
318
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
319
                        FeatureQuery query = sourceStore.createFeatureQuery();
320
                        query.getGroupByColumns().add("Long");
321
                        query.getAggregateFunctions().put("ID", "MIN");
322
                        query.getAggregateFunctions().put("Byte", "MAX");
323
                        query.getAggregateFunctions().put("Double", "SUM");
324
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
325
                                table,
326
                                null,
327
                                null,
328
                                query,
329
                                featureType,
330
                                featureType,
331
                                0,
332
                                0,
333
                                0
334
                        );
335
                        String sql = resultSetForSetProvider.getSQL();
336
                        System.out.println("###### SQL:" + sql);
337
                        System.out.println("###### EXP:" + expectedSQLs.get(1));
338

    
339
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(1), sql);
340
                } catch (Throwable th) {
341
                        throw th;
342
                }
343
        }
344

    
345
        public void testGroupByComputed() throws Exception {
346
                try {
347
                        JDBCHelper helper = TestUtils.createJDBCHelper();
348
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
349
                        OperationsFactory operations = helper.getOperations();
350

    
351
                        List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
352

    
353
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
354

    
355
                        TableReference table = operations.createTableReference(
356
                                "dbtest",
357
                                sqlbuilder.default_schema(),
358
                                "test",
359
                                null
360
                        );
361
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
362
                        FeatureQuery query = sourceStore.createFeatureQuery();
363
                        EditableFeatureType eFeatureType = featureType.getEditable();
364
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
365
                        eFeatureType.add("Compu2", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+300")));
366
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
367
                        EditableFeatureAttributeDescriptor extraColumn2 = query.getExtraColumn().add("Extra2", DataTypes.INTEGER);
368
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
369
                        extraColumn2.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("20+Byte+Compu1")));
370
                        query.getGroupByColumns().add("Long");
371
                        query.getGroupByColumns().add("Extra1");
372
                        query.getGroupByColumns().add("Compu1");
373
                        query.getAggregateFunctions().put("ID", "MIN");
374
                        query.getAggregateFunctions().put("Byte", "MAX");
375
                        query.getAggregateFunctions().put("Double", "SUM");
376
                        query.getAggregateFunctions().put("Extra2", "SUM");
377
                        query.getAggregateFunctions().put("Compu2", "SUM");
378
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
379
                                table,
380
                                null,
381
                                null,
382
                                query,
383
                                eFeatureType,
384
                                eFeatureType,
385
                                0,
386
                                0,
387
                                0
388
                        );
389
                        String sql = resultSetForSetProvider.getSQL();
390
                        System.out.println("###### SQL:" + sql);
391
                        System.out.println("###### EXP:" + expectedSQLs.get(10));
392

    
393
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(10), sql);
394
                } catch (Throwable th) {
395
                        throw th;
396
                }
397
        }
398

    
399
        public void testSubselect() throws Exception {
400
                JDBCHelper helper = TestUtils.createJDBCHelper();
401
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
402
                OperationsFactory operations = helper.getOperations();
403

    
404
                List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
405

    
406
                FeatureStore sourceStore = TestUtils.openSourceStore1();
407

    
408
                TableReference table = operations.createTableReference(
409
                        "dbtest",
410
                        sqlbuilder.default_schema(),
411
                        "test",
412
                        null
413
                );
414
                StringBuilder filter = new StringBuilder();
415
                filter.append("EXISTS(");
416
                filter.append(" SELECT \"ISO_A2\" FROM countries");
417
                filter.append("   WHERE ");
418
                filter.append("     TEST.STRING = countries.CONTINENT AND ");
419
                filter.append("     countries.LASTCENSUS < 0 ");
420
                filter.append("   LIMIT 1;, ");
421
                filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
422
                filter.append(")");
423
                FeatureType featureType = sourceStore.getDefaultFeatureType();
424
                FeatureQuery query = sourceStore.createFeatureQuery();
425
                query.addFilter(filter.toString());
426
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
427
                        table,
428
                        null,
429
                        null,
430
                        query,
431
                        featureType,
432
                        featureType,
433
                        0,
434
                        0,
435
                        0
436
                );
437
                String sql = resultSetForSetProvider.getSQL();
438
                System.out.println("###### SQL:" + sql);
439
                System.out.println("###### EXP:" + expectedSQLs.get(2));
440

    
441
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(2), sql);
442
        }
443

    
444
        public void testGroupAndSubselect() throws Exception {
445
                JDBCHelper helper = TestUtils.createJDBCHelper();
446
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
447
                OperationsFactory operations = helper.getOperations();
448

    
449
                List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
450

    
451
                FeatureStore sourceStore = TestUtils.openSourceStore1();
452

    
453
                TableReference table = operations.createTableReference(
454
                        "dbtest",
455
                        sqlbuilder.default_schema(),
456
                        "test",
457
                        null
458
                );
459
                StringBuilder filter = new StringBuilder();
460
                filter.append("EXISTS(");
461
                filter.append(" SELECT \"ISO_A2\" FROM countries");
462
                filter.append("   WHERE ");
463
                filter.append("     TEST.STRING = countries.CONTINENT AND ");
464
                filter.append("     countries.LASTCENSUS < 0 ");
465
                filter.append("   LIMIT 1;, ");
466
                filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
467
                filter.append(")");
468
                FeatureType featureType = sourceStore.getDefaultFeatureType();
469
                FeatureQuery query = sourceStore.createFeatureQuery();
470
                query.getGroupByColumns().add("Long");
471
                query.getAggregateFunctions().put("ID", "MIN");
472
                query.getAggregateFunctions().put("Byte", "MAX");
473
                query.getAggregateFunctions().put("Double", "SUM");
474
                query.addFilter(filter.toString());
475
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
476
                        table,
477
                        null,
478
                        null,
479
                        query,
480
                        featureType,
481
                        featureType,
482
                        0,
483
                        0,
484
                        0
485
                );
486
                String sql = resultSetForSetProvider.getSQL();
487
                System.out.println("###### SQL:" + sql);
488
                System.out.println("###### EXP:" + expectedSQLs.get(3));
489

    
490
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(3), sql);
491
        }
492

    
493
        public void testConstantColumnPrimaryKey() throws Exception {
494
                JDBCHelper helper = TestUtils.createJDBCHelper();
495
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
496
                OperationsFactory operations = helper.getOperations();
497

    
498
                List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
499

    
500
                FeatureStore sourceStore = TestUtils.openSourceStore1();
501

    
502
                TableReference table = operations.createTableReference(
503
                        "dbtest",
504
                        sqlbuilder.default_schema(),
505
                        "test",
506
                        null
507
                );
508
//    meterle como constantCOlumn ID
509

    
510
                FeatureType featureType = sourceStore.getDefaultFeatureType();
511
                FeatureQuery query = sourceStore.createFeatureQuery();
512

    
513
                query.setConstantsAttributeNames(new String[]{"ID"});
514

    
515
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
516
                        table,
517
                        null,
518
                        null,
519
                        query,
520
                        featureType,
521
                        featureType,
522
                        0,
523
                        0,
524
                        0
525
                );
526
                String sql = resultSetForSetProvider.getSQL();
527
                System.out.println("###### SQL:" + sql);
528
                System.out.println("###### EXP:" + expectedSQLs.get(4));
529

    
530
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(4), sql);
531
        }
532

    
533
        // TODO: a?adir un test con where, group y order.
534
}