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

History | View | Annotate | Download (29.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.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 \"Long\", \"CONTINENT\" FROM countries");
623
        filter.append("   WHERE ");
624
        filter.append("     test.STRING = countries.CONTINENT AND ");
625
        filter.append("     countries.LASTCENSUS < 0 ");
626
        filter.append("   LIMIT 1, ");
627
        filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
628
        filter.append(")");
629
        FeatureType featureType = sourceStore.getDefaultFeatureType();
630
        FeatureQuery query = sourceStore.createFeatureQuery();
631
        query.addFilter(filter.toString());
632
        ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
633
                table,
634
                null,
635
                null,
636
                query,
637
                featureType,
638
                featureType,
639
                0,
640
                0,
641
                0
642
        );
643
        String sql = resultSetForSetProvider.getSQL();
644
        utils().output_results("testSubselect2", sql, expectedSQLs.get("testSubselect2"));
645

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

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

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

    
660
                FeatureStore sourceStore = TestUtils.openSourceStore1();
661

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

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

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

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

    
708
                FeatureStore sourceStore = TestUtils.openSourceStore1();
709

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

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

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

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

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