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

History | View | Annotate | Download (28.3 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.DALLocator;
7
import org.gvsig.fmap.dal.DataManager;
8
import org.gvsig.fmap.dal.DataTypes;
9
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
10
import org.gvsig.fmap.dal.feature.EditableFeatureType;
11
import org.gvsig.fmap.dal.feature.FeatureQuery;
12
import org.gvsig.fmap.dal.feature.FeatureStore;
13
import org.gvsig.fmap.dal.feature.FeatureType;
14
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
15
import org.gvsig.fmap.dal.store.h2.TestUtils;
16
import org.gvsig.fmap.dal.store.h2.TestUtilsH2Spatial;
17
import org.gvsig.fmap.dal.store.jdbc2.AbstractTestUtils;
18
import org.gvsig.fmap.dal.store.jdbc2.AbstractTestUtils.Expecteds;
19
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
20
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
21
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
22
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
23
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
24
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
25
import org.slf4j.Logger;
26
import org.slf4j.LoggerFactory;
27

    
28
@SuppressWarnings({"UseSpecificCatch", "CallToPrintStackTrace"})
29
public class TestResultSetForSetProvider extends TestCase {
30

    
31
        private static final Logger LOGGER = LoggerFactory.getLogger(TestResultSetForSetProvider.class);
32

    
33
        public TestResultSetForSetProvider(String testName) {
34
                super(testName);
35
        }
36

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

    
43
        @Override
44
        protected void tearDown() throws Exception {
45
                super.tearDown();
46
        }
47
        
48
        protected AbstractTestUtils utils;
49
    
50
        public AbstractTestUtils utils() {
51
            if (this.utils == null) {
52
                this.utils = this.createUtils();
53
            }
54
            return this.utils;
55
        }
56

    
57
        protected AbstractTestUtils createUtils() {
58
            return new TestUtilsH2Spatial();
59
        }
60

    
61
        public void testSimple() throws Exception {
62
                JDBCHelper helper = TestUtils.createJDBCHelper();
63
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
64
                OperationsFactory operations = helper.getOperations();
65

    
66
                Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
67

    
68
                FeatureStore sourceStore = TestUtils.openSourceStore1();
69

    
70
                TableReference table = operations.createTableReference(
71
                        "dbtest",
72
                        sqlbuilder.default_schema(),
73
                        "test",
74
                        null
75
                );
76
                FeatureType featureType = sourceStore.getDefaultFeatureType();
77
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
78
                        table,
79
                        null,
80
                        null,
81
                        null,
82
                        featureType,
83
                        featureType,
84
                        0,
85
                        0,
86
                        0
87
                );
88
                String sql = resultSetForSetProvider.getSQL();
89
                utils().output_results("testSimple",sql,expectedSQLs.get("testSimple"));
90
                utils().runSQLToCheckSyntax("testSimple", sourceStore, table.getTable(), sql);
91
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testSimple"), sql);
92
        }
93

    
94
        public void testComputedAttribute() throws Exception {
95
                try {
96
                        JDBCHelper helper = TestUtils.createJDBCHelper();
97
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
98
                        OperationsFactory operations = helper.getOperations();
99

    
100
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
101

    
102
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
103

    
104
                        TableReference table = operations.createTableReference(
105
                                "dbtest",
106
                                sqlbuilder.default_schema(),
107
                                "test",
108
                                null
109
                        );
110
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
111
                        EditableFeatureType eFeatureType = featureType.getEditable();
112
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
113

    
114
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
115
                                table,
116
                                null,
117
                                null,
118
                                null,
119
                                eFeatureType,
120
                                eFeatureType,
121
                                0,
122
                                0,
123
                                0
124
                        );
125
                        String sql = resultSetForSetProvider.getSQL();
126
                        utils().output_results("testComputedAttribute",sql,expectedSQLs.get("testComputedAttribute"));
127
                        utils().runSQLToCheckSyntax("testComputedAttribute", sourceStore, table.getTable(), sql);
128
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testComputedAttribute"), sql);
129
                } catch (Exception ex) {
130
                        ex.printStackTrace();
131
                        throw ex;
132
                }
133
        }
134

    
135
        public void testComputedAttribute2() throws Exception {
136
                try {
137
                        JDBCHelper helper = TestUtils.createJDBCHelper();
138
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
139
                        OperationsFactory operations = helper.getOperations();
140

    
141
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
142

    
143
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
144

    
145
                        TableReference table = operations.createTableReference(
146
                                "dbtest",
147
                                sqlbuilder.default_schema(),
148
                                "test",
149
                                null
150
                        );
151
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
152
                        EditableFeatureType eFeatureType = featureType.getEditable();
153
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
154
                        eFeatureType.add("Compu2", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
155

    
156
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
157
                                table,
158
                                null,
159
                                null,
160
                                null,
161
                                eFeatureType,
162
                                eFeatureType,
163
                                0,
164
                                0,
165
                                0
166
                        );
167
                        String sql = resultSetForSetProvider.getSQL();
168
                        utils().output_results("testComputedAttribute2", sql, expectedSQLs.get("testComputedAttribute2"));
169
                        utils().runSQLToCheckSyntax("testComputedAttribute2", sourceStore, table.getTable(), sql);
170
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testComputedAttribute2"), sql);
171
                } catch (Exception ex) {
172
                        ex.printStackTrace();
173
                        throw ex;
174
                }
175
        }
176

    
177
        public void testComputedExtraColumn() throws Exception {
178
                try {
179
                        JDBCHelper helper = TestUtils.createJDBCHelper();
180
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
181
                        OperationsFactory operations = helper.getOperations();
182

    
183
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
184

    
185
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
186

    
187
                        TableReference table = operations.createTableReference(
188
                                "dbtest",
189
                                sqlbuilder.default_schema(),
190
                                "test",
191
                                null
192
                        );
193
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
194
                        EditableFeatureType eFeatureType = featureType.getEditable();
195
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
196

    
197
                        FeatureQuery query = sourceStore.createFeatureQuery();
198
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
199
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
200

    
201
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
202
                                table,
203
                                null,
204
                                null,
205
                                query,
206
                                eFeatureType,
207
                                eFeatureType,
208
                                0,
209
                                0,
210
                                0
211
                        );
212
                        String sql = resultSetForSetProvider.getSQL();
213
                        utils().output_results("testComputedExtraColumn", sql, expectedSQLs.get("testComputedExtraColumn"));
214
                        utils().runSQLToCheckSyntax("testComputedExtraColumn", sourceStore, table.getTable(), sql);
215
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testComputedExtraColumn"), sql);
216
                } catch (Exception ex) {
217
                        ex.printStackTrace();
218
                        throw ex;
219
                }
220
        }
221

    
222
        public void testComputedExtraColumn2() throws Exception {
223
                try {
224
                        JDBCHelper helper = TestUtils.createJDBCHelper();
225
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
226
                        OperationsFactory operations = helper.getOperations();
227

    
228
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
229

    
230
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
231

    
232
                        TableReference table = operations.createTableReference(
233
                                "dbtest",
234
                                sqlbuilder.default_schema(),
235
                                "test",
236
                                null
237
                        );
238
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
239
                        EditableFeatureType eFeatureType = featureType.getEditable();
240

    
241
                        FeatureQuery query = sourceStore.createFeatureQuery();
242
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
243
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
244
                        EditableFeatureAttributeDescriptor extraColumn2 = query.getExtraColumn().add("Extra2", DataTypes.INTEGER);
245
                        extraColumn2.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Extra1")));
246

    
247
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
248
                                table,
249
                                null,
250
                                null,
251
                                query,
252
                                eFeatureType,
253
                                eFeatureType,
254
                                0,
255
                                0,
256
                                0
257
                        );
258
                        String sql = resultSetForSetProvider.getSQL();
259
                        utils().output_results("testComputedExtraColumn2", sql, expectedSQLs.get("testComputedExtraColumn2"));
260
                        utils().runSQLToCheckSyntax("testComputedExtraColumn2", sourceStore, table.getTable(), sql);
261
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testComputedExtraColumn2"), sql);
262
                } catch (Exception ex) {
263
                        ex.printStackTrace();
264
                        throw ex;
265
                }
266
        }
267

    
268
        public void testComputedExtraColumnWithWhere() throws Exception {
269
                try {
270
                        JDBCHelper helper = TestUtils.createJDBCHelper();
271
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
272
                        OperationsFactory operations = helper.getOperations();
273

    
274
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
275

    
276
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
277

    
278
                        TableReference table = operations.createTableReference(
279
                                "dbtest",
280
                                sqlbuilder.default_schema(),
281
                                "test",
282
                                null
283
                        );
284

    
285
                        StringBuilder filter = new StringBuilder();
286
                        filter.append("Extra1 > 10");
287

    
288
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
289

    
290
                        EditableFeatureType eFeatureType = featureType.getEditable();
291
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
292

    
293
                        FeatureQuery query = sourceStore.createFeatureQuery();
294
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
295
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
296
                        query.addFilter(filter.toString());
297
                        query.getOrder().add("Extra1");
298

    
299
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
300
                                table,
301
                                null,
302
                                null,
303
                                query,
304
                                eFeatureType,
305
                                eFeatureType,
306
                                0,
307
                                0,
308
                                0
309
                        );
310
                        String sql = resultSetForSetProvider.getSQL();
311
                        utils().output_results("testComputedExtraColumnWithWhere", sql, expectedSQLs.get("testComputedExtraColumnWithWhere"));
312
                        utils().runSQLToCheckSyntax("testComputedExtraColumnWithWhere", sourceStore, table.getTable(), sql);
313
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testComputedExtraColumnWithWhere"), sql);
314
                } catch (Exception ex) {
315
                        ex.printStackTrace();
316
                        throw ex;
317
                }
318
        }
319

    
320
        public void testSimpleGroup() throws Exception {
321
                try {
322
                        JDBCHelper helper = TestUtils.createJDBCHelper();
323
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
324
                        OperationsFactory operations = helper.getOperations();
325

    
326
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
327

    
328
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
329

    
330
                        TableReference table = operations.createTableReference(
331
                                "dbtest",
332
                                sqlbuilder.default_schema(),
333
                                "test",
334
                                null
335
                        );
336
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
337
                        FeatureQuery query = sourceStore.createFeatureQuery();
338
                        query.getGroupByColumns().add("Long");
339
                        query.getAggregateFunctions().put("ID", "MIN");
340
                        query.getAggregateFunctions().put("Byte", "MAX");
341
                        query.getAggregateFunctions().put("Double", "SUM");
342
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
343
                                table,
344
                                null,
345
                                null,
346
                                query,
347
                                featureType,
348
                                featureType,
349
                                0,
350
                                0,
351
                                0
352
                        );
353
                        String sql = resultSetForSetProvider.getSQL();
354
                        utils().output_results("testSimpleGroup", sql, expectedSQLs.get("testSimpleGroup"));
355
                        utils().runSQLToCheckSyntax("testSimpleGroup", sourceStore, table.getTable(), sql);
356
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testSimpleGroup"), sql);
357
                } catch (Throwable th) {
358
                    LOGGER.warn("",th);
359
                        throw th;
360
                }
361
        }
362

    
363
        public void testSimpleAggregateAndOrder() throws Exception {
364
                try {
365
                        JDBCHelper helper = TestUtils.createJDBCHelper();
366
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
367
                        OperationsFactory operations = helper.getOperations();
368

    
369
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
370

    
371
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
372

    
373
                        TableReference table = operations.createTableReference(
374
                                "dbtest",
375
                                sqlbuilder.default_schema(),
376
                                "test",
377
                                null
378
                        );
379
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
380
                        FeatureQuery query = sourceStore.createFeatureQuery();
381
                        
382
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
383
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(featureType, ExpressionUtils.createExpression("Long+10")));
384
                        EditableFeatureAttributeDescriptor extraColumn2 = query.getExtraColumn().add("Extra2", DataTypes.INTEGER);
385
                        extraColumn2.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(featureType, ExpressionUtils.createExpression("20+Byte")));
386

    
387
                        query.getAggregateFunctions().put("ID", "MIN");
388
                        query.getAggregateFunctions().put("Byte", "MAX");
389
                        query.getAggregateFunctions().put("Double", "SUM");
390
                        query.getAggregateFunctions().put("Extra1", "SUM");
391
                        query.getOrder().add("ID");
392
//                        query.getOrder().add("Long");
393
                        query.getOrder().add("Extra1");
394
                        
395
                        // !OJO! No podemos ordenar por Extra2, da el error:
396
                        //   Column """Byte""" must be in the GROUP BY list
397
                        // query.getOrder().add("Extra2");
398
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
399
                                table,
400
                                null,
401
                                null,
402
                                query,
403
                                featureType,
404
                                featureType,
405
                                0,
406
                                0,
407
                                0
408
                        );
409
                        String sql = resultSetForSetProvider.getSQL();
410
                        utils().output_results("testSimpleAggregateAndOrder", sql, expectedSQLs.get("testSimpleAggregateAndOrder"));
411
                        utils().runSQLToCheckSyntax("testSimpleAggregateAndOrder", sourceStore, table.getTable(), sql);
412
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testSimpleAggregateAndOrder"), sql);
413
                } catch (Throwable th) {
414
                    LOGGER.warn("",th);
415
                        throw th;
416
                }
417
        }
418

    
419
        public void testGroupByComputed() throws Exception {
420
                try {
421
                        JDBCHelper helper = TestUtils.createJDBCHelper();
422
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
423
                        OperationsFactory operations = helper.getOperations();
424

    
425
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
426

    
427
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
428

    
429
                        TableReference table = operations.createTableReference(
430
                                "dbtest",
431
                                sqlbuilder.default_schema(),
432
                                "test",
433
                                null
434
                        );
435
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
436
                        FeatureQuery query = sourceStore.createFeatureQuery();
437
                        EditableFeatureType eFeatureType = featureType.getEditable();
438
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
439
                        eFeatureType.add("Compu2", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+300")));
440
                        eFeatureType.add("Compu3", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("1")));
441
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
442
                        EditableFeatureAttributeDescriptor extraColumn2 = query.getExtraColumn().add("Extra2", DataTypes.INTEGER);
443
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
444
                        extraColumn2.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("20+Byte+Compu1")));
445
                        query.getGroupByColumns().add("Long");
446
                        query.getGroupByColumns().add("Extra1");
447
                        query.getGroupByColumns().add("Compu1");
448
                        query.getAggregateFunctions().put("ID", "MIN");
449
                        query.getAggregateFunctions().put("Byte", "MAX");
450
                        query.getAggregateFunctions().put("Double", "SUM");
451
                        query.getAggregateFunctions().put("Extra2", "SUM");
452
                        query.getAggregateFunctions().put("Compu2", "SUM");
453
                        query.getAggregateFunctions().put("Compu3", "SUM");
454
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
455
                                table,
456
                                null,
457
                                null,
458
                                query,
459
                                eFeatureType,
460
                                eFeatureType,
461
                                0,
462
                                0,
463
                                0
464
                        );
465
                        String sql = resultSetForSetProvider.getSQL();
466
                        utils().output_results("testGroupByComputed", sql, expectedSQLs.get("testGroupByComputed"));
467
                        utils().runSQLToCheckSyntax("testGroupByComputed", sourceStore, table.getTable(), sql);
468
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testGroupByComputed"), sql);
469
                } catch (Throwable th) {
470
                    LOGGER.warn("", th);
471
                        throw th;
472
                }
473
        }
474

    
475
        public void testGroupByAndOrderByComputed() throws Exception {
476
                try {
477
                        JDBCHelper helper = TestUtils.createJDBCHelper();
478
                        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
479
                        OperationsFactory operations = helper.getOperations();
480

    
481
                        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
482

    
483
                        FeatureStore sourceStore = TestUtils.openSourceStore1();
484

    
485
                        TableReference table = operations.createTableReference(
486
                                "dbtest",
487
                                sqlbuilder.default_schema(),
488
                                "test",
489
                                null
490
                        );
491
                        FeatureType featureType = sourceStore.getDefaultFeatureType();
492
                        FeatureQuery query = sourceStore.createFeatureQuery();
493
                        EditableFeatureType eFeatureType = featureType.getEditable();
494
                        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
495
                        eFeatureType.add("Compu2", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+300")));
496
                        eFeatureType.add("Compu3", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("1")));
497
                        
498
                        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
499
                        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
500
                        
501
                        EditableFeatureAttributeDescriptor extraColumn2 = query.getExtraColumn().add("Extra2", DataTypes.INTEGER);
502
                        extraColumn2.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("20+Byte+Compu1")));
503
                        
504
                        EditableFeatureAttributeDescriptor extraColumn3 = query.getExtraColumn().add("Extra3", DataTypes.INTEGER);
505
                        extraColumn3.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+33")));
506
                        
507
                        query.getGroupByColumns().add("Long");
508
                        query.getGroupByColumns().add("Extra1");
509
                        query.getGroupByColumns().add("Compu1");
510
                        query.getAggregateFunctions().put("ID", "MIN");
511
                        query.getAggregateFunctions().put("Byte", "MAX");
512
                        query.getAggregateFunctions().put("Double", "SUM");
513
                        query.getAggregateFunctions().put("Extra2", "SUM");
514
                        query.getAggregateFunctions().put("Compu2", "SUM");
515
                        query.getAggregateFunctions().put("Compu3", "SUM");
516
                        query.getOrder().add("Extra1");
517
                        query.getOrder().add("Extra2");
518
//                        query.getOrder().add("Extra3");
519
                        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
520
                                table,
521
                                null,
522
                                null,
523
                                query,
524
                                eFeatureType,
525
                                eFeatureType,
526
                                0,
527
                                0,
528
                                0
529
                        );
530
                        String sql = resultSetForSetProvider.getSQL();
531
                        utils().output_results("testGroupByAndOrderByComputed", sql, expectedSQLs.get("testGroupByAndOrderByComputed"));
532
                        utils().runSQLToCheckSyntax("testGroupByAndOrderByComputed", sourceStore, table.getTable(), sql);
533
                        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testGroupByAndOrderByComputed"), sql);
534
                } catch (Throwable th) {
535
                    LOGGER.warn("", th);
536
                        throw th;
537
                }
538
        }
539

    
540
        public void testSubselect() throws Exception {
541
                JDBCHelper helper = TestUtils.createJDBCHelper();
542
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
543
                OperationsFactory operations = helper.getOperations();
544

    
545
                Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
546

    
547
                FeatureStore sourceStore = TestUtils.openSourceStore1();
548

    
549
                TableReference table = operations.createTableReference(
550
                        "dbtest",
551
                        sqlbuilder.default_schema(),
552
                        "test",
553
                        null
554
                );
555
                StringBuilder filter = new StringBuilder();
556
                filter.append("EXISTS(");
557
                filter.append(" SELECT \"ISO_A2\" FROM countries");
558
                filter.append("   WHERE ");
559
                filter.append("     TEST.STRING = countries.CONTINENT AND ");
560
                filter.append("     countries.LASTCENSUS < 0 ");
561
                filter.append("   LIMIT 1;, ");
562
                filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
563
                filter.append(")");
564
                FeatureType featureType = sourceStore.getDefaultFeatureType();
565
                FeatureQuery query = sourceStore.createFeatureQuery();
566
                query.addFilter(filter.toString());
567
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
568
                        table,
569
                        null,
570
                        null,
571
                        query,
572
                        featureType,
573
                        featureType,
574
                        0,
575
                        0,
576
                        0
577
                );
578
                String sql = resultSetForSetProvider.getSQL();
579
                utils().output_results("testSubselect", sql, expectedSQLs.get("testSubselect"));
580

    
581
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testSubselect"), sql);
582
        }
583

    
584
    public void testSubselect2() throws Exception {
585
        JDBCHelper helper = TestUtils.createJDBCHelper();
586
        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
587
        OperationsFactory operations = helper.getOperations();
588
        DataManager dataManager = DALLocator.getDataManager();
589

    
590
        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
591

    
592
        FeatureStore sourceStore = TestUtils.openSourceStore1();
593
        dataManager.getStoresRepository().add(sourceStore.getName(), sourceStore);
594

    
595
        FeatureStore countriesStore = TestUtils.openCountriesStore();
596
        dataManager.getStoresRepository().add(countriesStore.getName(), countriesStore);
597

    
598
        TableReference table = operations.createTableReference(
599
                "dbtest",
600
                sqlbuilder.default_schema(),
601
                "test",
602
                null
603
        );
604
        StringBuilder filter = new StringBuilder();
605
        filter.append("EXISTS(");
606
        filter.append(" SELECT \"Long\" FROM countries");
607
        filter.append("   WHERE ");
608
        filter.append("     TEST.STRING = countries.CONTINENT AND ");
609
        filter.append("     countries.LASTCENSUS < 0 ");
610
        filter.append("   LIMIT 1;, ");
611
        filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
612
        filter.append(")");
613
        FeatureType featureType = sourceStore.getDefaultFeatureType();
614
        FeatureQuery query = sourceStore.createFeatureQuery();
615
        query.addFilter(filter.toString());
616
        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
617
                table,
618
                null,
619
                null,
620
                query,
621
                featureType,
622
                featureType,
623
                0,
624
                0,
625
                0
626
        );
627
        String sql = resultSetForSetProvider.getSQL();
628
        utils().output_results("testSubselect2", sql, expectedSQLs.get("testSubselect2"));
629

    
630
        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testSubselect2"), sql);
631
    }
632

    
633
        public void testGroupAndSubselect() throws Exception {
634
                JDBCHelper helper = TestUtils.createJDBCHelper();
635
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
636
                OperationsFactory operations = helper.getOperations();
637

    
638
                Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
639

    
640
                FeatureStore sourceStore = TestUtils.openSourceStore1();
641

    
642
                TableReference table = operations.createTableReference(
643
                        "dbtest",
644
                        sqlbuilder.default_schema(),
645
                        "test",
646
                        null
647
                );
648
                StringBuilder filter = new StringBuilder();
649
                filter.append("EXISTS(");
650
                filter.append(" SELECT \"ISO_A2\" FROM countries");
651
                filter.append("   WHERE ");
652
                filter.append("     TEST.STRING = countries.CONTINENT AND ");
653
                filter.append("     countries.LASTCENSUS < 0 ");
654
                filter.append("   LIMIT 1;, ");
655
                filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
656
                filter.append(")");
657
                FeatureType featureType = sourceStore.getDefaultFeatureType();
658
                FeatureQuery query = sourceStore.createFeatureQuery();
659
                query.getGroupByColumns().add("Long");
660
                query.getAggregateFunctions().put("ID", "MIN");
661
                query.getAggregateFunctions().put("Byte", "MAX");
662
                query.getAggregateFunctions().put("Double", "SUM");
663
                query.addFilter(filter.toString());
664
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
665
                        table,
666
                        null,
667
                        null,
668
                        query,
669
                        featureType,
670
                        featureType,
671
                        0,
672
                        0,
673
                        0
674
                );
675
                String sql = resultSetForSetProvider.getSQL();
676
                utils().output_results("testGroupAndSubselect", sql, expectedSQLs.get("testGroupAndSubselect"));
677

    
678
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testGroupAndSubselect"), sql);
679
        }
680

    
681
        public void testConstantColumnPrimaryKey() throws Exception {
682
                JDBCHelper helper = TestUtils.createJDBCHelper();
683
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
684
                OperationsFactory operations = helper.getOperations();
685

    
686
                Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
687

    
688
                FeatureStore sourceStore = TestUtils.openSourceStore1();
689

    
690
                TableReference table = operations.createTableReference(
691
                        "dbtest",
692
                        sqlbuilder.default_schema(),
693
                        "test",
694
                        null
695
                );
696
//    meterle como constantCOlumn ID
697

    
698
                FeatureType featureType = sourceStore.getDefaultFeatureType();
699
                FeatureQuery query = sourceStore.createFeatureQuery();
700

    
701
                query.setConstantsAttributeNames(new String[]{"ID"});
702

    
703
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
704
                        table,
705
                        null,
706
                        null,
707
                        query,
708
                        featureType,
709
                        featureType,
710
                        0,
711
                        0,
712
                        0
713
                );
714
                String sql = resultSetForSetProvider.getSQL();
715
                utils().output_results("testConstantColumnPrimaryKey", sql, expectedSQLs.get("testConstantColumnPrimaryKey"));
716
                utils().runSQLToCheckSyntax("testConstantColumnPrimaryKey", sourceStore, table.getTable(), sql);
717
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testConstantColumnPrimaryKey"), sql);
718
        }
719

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