Revision 44785

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/test/resources/org/gvsig/fmap/dal/store/h2/resultSetForSetProvider.sql
36 36
    WHERE (("TEST"."STRING" = "countries"."CONTINENT") AND 
37 37
      ("countries"."LASTCENSUS" < 0)) LIMIT 1)),TRUE,FALSE);
38 38

  
39
-- Group and Subselect
40
SELECT 
41
    MIN("ID") AS "ID", MAX("Byte") AS "Byte", NULL AS "Bool1", "Long", 
42
    NULL AS "Timestamp", NULL AS "Date", NULL AS "Time", NULL AS "Bool2", 
43
    NULL AS "String", NULL AS "Bool3", SUM("Double") AS "Double", 
44
    NULL AS "Bool4", NULL AS "Float", NULL AS "Bool5", NULL AS "Decimal", 
45
    NULL AS "Geometry" 
46
  FROM "PUBLIC"."test" 
47
  WHERE NVL2(COALESCE((
48
    SELECT "ISO_A2" 
49
    FROM "countries" 
50
    WHERE (("TEST"."STRING" = "countries"."CONTINENT") AND 
51
      ("countries"."LASTCENSUS" < 0)) LIMIT 1)),TRUE,FALSE) 
52
  GROUP BY "Long";
53

  
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/test/java/org/gvsig/fmap/dal/store/h2/operations/sql/TestResultSetForSetProvider.java
150 150
    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(2), sql);
151 151
  }
152 152

  
153
  public void testGroupAndSubselect() throws Exception {
154
    JDBCHelper helper = TestUtils.getJDBCHelper();
155
    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
156
    OperationsFactory operations = helper.getOperations();
157

  
158
    List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
159
    
160
    FeatureStore sourceStore = TestUtils.openSourceStore1();
161

  
162
    TableReference table = operations.createTableReference(
163
            "dbtest", 
164
            sqlbuilder.default_schema(), 
165
            "test", 
166
            null
167
    );
168
    StringBuilder filter = new StringBuilder();
169
    filter.append("EXISTS(");
170
    filter.append(" SELECT \"ISO_A2\" FROM countries");
171
    filter.append("   WHERE ");
172
    filter.append("     TEST.STRING = countries.CONTINENT AND ");
173
    filter.append("     countries.LASTCENSUS < 0 ");
174
    filter.append("   LIMIT 1;, ");
175
    filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
176
    filter.append(")");
177
    FeatureType featureType = sourceStore.getDefaultFeatureType();
178
    FeatureQuery query = sourceStore.createFeatureQuery();
179
    query.getGroupByColumns().add("Long");
180
    query.getAggregateFunctions().put("ID", "MIN");
181
    query.getAggregateFunctions().put("Byte", "MAX");
182
    query.getAggregateFunctions().put("Double", "SUM");
183
    query.addFilter(filter.toString());
184
    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
185
            table,
186
            null,
187
            null,
188
            query,
189
            featureType,
190
            featureType,
191
            0,
192
            0, 
193
            0
194
    );
195
    String sql = resultSetForSetProvider.getSQL();
196
    System.out.println("###### SQL:"+sql);
197
    System.out.println("###### EXP:"+expectedSQLs.get(3));
198
    
199
    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(3), sql);
200
  }
201

  
202

  
203

  
153 204
  // TODO: a?adir un test con where, group y order.
154 205
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/JDBCHelperBase.java
589 589
    
590 590
    final SQLBuilder.SelectBuilder select = sqlbuilder.select();
591 591
    final ExpressionBuilder where = select.where();
592
    if (where == null || where.isEmpty()) {
592
    if (where == null || where.isEmpty() || select.has_group_by() ) {
593 593
      return;
594 594
    }
595 595
    final List<ExpressionBuilder.Value[]> value_replacements = new ArrayList<>();

Also available in: Unified diff