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

History | View | Annotate | Download (29.2 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
                DataManager dataManager = DALLocator.getDataManager();
545

    
546
                dataManager.getStoresRepository().remove("test");
547
                dataManager.getStoresRepository().remove("countries");
548

    
549
                
550
                Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
551

    
552
                FeatureStore sourceStore = TestUtils.openSourceStore1();
553

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

    
586
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testSubselect"), sql);
587
        }
588

    
589
    public void testSubselect2() throws Exception {
590
        try {
591
        JDBCHelper helper = TestUtils.createJDBCHelper();
592
        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
593
        OperationsFactory operations = helper.getOperations();
594
        DataManager dataManager = DALLocator.getDataManager();
595

    
596
        Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
597

    
598
        FeatureStore sourceStore = TestUtils.openSourceStore1();
599
        dataManager.getStoresRepository().add(sourceStore.getName(), sourceStore);
600

    
601
        FeatureStore countriesStore = TestUtils.openCountriesStore();
602
        dataManager.getStoresRepository().add(countriesStore.getName(), countriesStore);
603

    
604
        TableReference table = operations.createTableReference(
605
                "dbtest",
606
                sqlbuilder.default_schema(),
607
                "test",
608
                null
609
        );
610
        /*
611
            FIXME: No esta claro que este test sea correcto.
612
        
613
            En la subselect 'SELECT "Long" FROM countries...'
614
            El campo "Long" no es de la tabla "countries" si no de la tabla "test";
615
            pero como no se le indica la tabla pone la de la subselect, aunque si 
616
            no es ambigua la referencia a la columna y es de la tabla "test"
617
            seria correcto "test"."Long" y no "countries"."Long".
618
        */
619
        StringBuilder filter = new StringBuilder();
620
        filter.append("EXISTS(");
621
        filter.append(" SELECT \"Long\" FROM countries");
622
//        filter.append(" SELECT \"CONTINENT\" FROM countries");
623
//        filter.append(" SELECT \"Long\", \"CONTINENT\" FROM countries");
624
        filter.append("   WHERE ");
625
        filter.append("     test.STRING = countries.CONTINENT AND ");
626
        filter.append("     countries.LASTCENSUS < 0 ");
627
        filter.append("   LIMIT 1, ");
628
        filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
629
        filter.append(")");
630
        FeatureType featureType = sourceStore.getDefaultFeatureType();
631
        FeatureQuery query = sourceStore.createFeatureQuery();
632
        query.addFilter(filter.toString());
633
        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
634
                table,
635
                null,
636
                null,
637
                query,
638
                featureType,
639
                featureType,
640
                0,
641
                0,
642
                0
643
        );
644
        String sql = resultSetForSetProvider.getSQL();
645
        utils().output_results("testSubselect2", sql, expectedSQLs.get("testSubselect2"));
646

    
647
        assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testSubselect2"), sql);
648
        } catch (Exception ex) {
649
            LOGGER.warn("", ex);
650
            throw ex;
651
        }
652
    }
653

    
654
        public void testGroupAndSubselect() throws Exception {
655
                JDBCHelper helper = TestUtils.createJDBCHelper();
656
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
657
                OperationsFactory operations = helper.getOperations();
658

    
659
                Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
660

    
661
                FeatureStore sourceStore = TestUtils.openSourceStore1();
662

    
663
                TableReference table = operations.createTableReference(
664
                        "dbtest",
665
                        sqlbuilder.default_schema(),
666
                        "test",
667
                        null
668
                );
669
                StringBuilder filter = new StringBuilder();
670
                filter.append("EXISTS(");
671
                filter.append(" SELECT \"ISO_A2\" FROM countries");
672
                filter.append("   WHERE ");
673
                filter.append("     test.STRING = countries.CONTINENT AND ");
674
                filter.append("     countries.LASTCENSUS < 0 ");
675
                filter.append("   LIMIT 1, ");
676
                filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
677
                filter.append(")");
678
                FeatureType featureType = sourceStore.getDefaultFeatureType();
679
                FeatureQuery query = sourceStore.createFeatureQuery();
680
                query.getGroupByColumns().add("Long");
681
                query.getAggregateFunctions().put("ID", "MIN");
682
                query.getAggregateFunctions().put("Byte", "MAX");
683
                query.getAggregateFunctions().put("Double", "SUM");
684
                query.addFilter(filter.toString());
685
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
686
                        table,
687
                        null,
688
                        null,
689
                        query,
690
                        featureType,
691
                        featureType,
692
                        0,
693
                        0,
694
                        0
695
                );
696
                String sql = resultSetForSetProvider.getSQL();
697
                utils().output_results("testGroupAndSubselect", sql, expectedSQLs.get("testGroupAndSubselect"));
698

    
699
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testGroupAndSubselect"), sql);
700
        }
701

    
702
        public void testConstantColumnPrimaryKey() throws Exception {
703
                JDBCHelper helper = TestUtils.createJDBCHelper();
704
                JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
705
                OperationsFactory operations = helper.getOperations();
706

    
707
                Expecteds expectedSQLs = utils().getExpecteds("resultSetForSetProvider.sql");
708

    
709
                FeatureStore sourceStore = TestUtils.openSourceStore1();
710

    
711
                TableReference table = operations.createTableReference(
712
                        "dbtest",
713
                        sqlbuilder.default_schema(),
714
                        "test",
715
                        null
716
                );
717
//    meterle como constantCOlumn ID
718

    
719
                FeatureType featureType = sourceStore.getDefaultFeatureType();
720
                FeatureQuery query = sourceStore.createFeatureQuery();
721

    
722
                query.setConstantsAttributeNames(new String[]{"ID"});
723

    
724
                ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
725
                        table,
726
                        null,
727
                        null,
728
                        query,
729
                        featureType,
730
                        featureType,
731
                        0,
732
                        0,
733
                        0
734
                );
735
                String sql = resultSetForSetProvider.getSQL();
736
                utils().output_results("testConstantColumnPrimaryKey", sql, expectedSQLs.get("testConstantColumnPrimaryKey"));
737
                utils().runSQLToCheckSyntax("testConstantColumnPrimaryKey", sourceStore, table.getTable(), sql);
738
                assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get("testConstantColumnPrimaryKey"), sql);
739
        }
740

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