Revision 44785
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