Revision 45712 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/operations/ResultSetForSetProviderOperation.java
ResultSetForSetProviderOperation.java | ||
---|---|---|
25 | 25 |
|
26 | 26 |
import java.sql.Connection; |
27 | 27 |
import java.util.ArrayList; |
28 |
import java.util.HashMap; |
|
28 | 29 |
import java.util.List; |
29 | 30 |
import java.util.Map; |
31 |
import java.util.function.Predicate; |
|
30 | 32 |
import org.apache.commons.lang3.ArrayUtils; |
31 | 33 |
import org.apache.commons.lang3.StringUtils; |
32 | 34 |
import org.gvsig.expressionevaluator.Code; |
... | ... | |
114 | 116 |
ExpressionBuilder expbuilder = sqlbuilder.expression(); |
115 | 117 |
SelectBuilder select = sqlbuilder.select(); |
116 | 118 |
|
119 |
Map<String, EditableFeatureAttributeDescriptor> allExtraColumns = new HashMap<>(); |
|
120 |
for (EditableFeatureAttributeDescriptor column : this.setType.getExtraColumns().getColumns()) { |
|
121 |
allExtraColumns.put(column.getName(), column); |
|
122 |
} |
|
123 |
for (EditableFeatureAttributeDescriptor column : this.query.getExtraColumn().getColumns()) { |
|
124 |
allExtraColumns.put(column.getName(), column); |
|
125 |
} |
|
126 |
|
|
117 | 127 |
List<String> primaryKeys = new ArrayList<>(); |
118 | 128 |
for (FeatureAttributeDescriptor attr : storeType.getPrimaryKey()) { |
119 | 129 |
primaryKeys.add(attr.getName()); |
... | ... | |
167 | 177 |
|
168 | 178 |
if (query != null && query.hasGroupByColumns()) { |
169 | 179 |
for (Map.Entry<String, String> entry : query.getAggregateFunctions().entrySet()) { |
170 |
EditableFeatureAttributeDescriptor attr = query.getExtraColumn().get(entry.getKey());
|
|
180 |
EditableFeatureAttributeDescriptor attr = allExtraColumns.get(entry.getKey());
|
|
171 | 181 |
if (attr != null) { |
172 | 182 |
Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression(); |
173 | 183 |
ExpressionBuilder.Function aggregateExp = expbuilder.function(entry.getValue(), exp.getCode().toValue()); |
... | ... | |
180 | 190 |
} |
181 | 191 |
} |
182 | 192 |
for (String attrName : query.getGroupByColumns()) { |
183 |
if (this.setType.getExtraColumns().get(attrName) != null) {
|
|
184 |
EditableFeatureAttributeDescriptor attr = this.setType.getExtraColumns().get(attrName);
|
|
193 |
if (allExtraColumns.get(attrName) != null) { //from setType and query
|
|
194 |
EditableFeatureAttributeDescriptor attr = allExtraColumns.get(attrName);
|
|
185 | 195 |
select.group_by(expbuilder.column(attrName)); |
186 | 196 |
Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression(); |
187 | 197 |
if (!select.has_column(attrName)) { |
... | ... | |
190 | 200 |
if (!extraColumnNames.contains(attr.getName())) { |
191 | 201 |
extraColumnNames.add(attrName); |
192 | 202 |
} |
203 |
} else if (setType.get(attrName) != null && setType.getAttributeDescriptor(attrName).isComputed()) { |
|
204 |
FeatureAttributeDescriptor attr = setType.getAttributeDescriptor(attrName); |
|
205 |
select.group_by(expbuilder.column(attrName)); |
|
206 |
Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression(); |
|
207 |
if (!select.has_column(attrName)) { |
|
208 |
select.column().value(exp.getCode().toValue()).as(attrName); |
|
209 |
} |
|
210 |
if (!extraColumnNames.contains(attr.getName())) { |
|
211 |
extraColumnNames.add(attrName); |
|
212 |
} |
|
193 | 213 |
} else if (setType.get(attrName) == null) { |
194 | 214 |
try { |
195 | 215 |
Code code = ExpressionUtils.compile(attrName); |
... | ... | |
231 | 251 |
FeatureQueryOrder order = query == null ? null : query.getOrder(); |
232 | 252 |
if (order != null) { |
233 | 253 |
for (FeatureQueryOrderMember member : order.members()) { |
254 |
String attrName = member.getAttributeName(); |
|
234 | 255 |
if (member.hasEvaluator()) { |
235 | 256 |
String sqlorder = member.getEvaluator().getSQL(); |
236 | 257 |
select.order_by() |
237 | 258 |
.value(expbuilder.toValue(sqlorder)) |
238 | 259 |
.ascending(member.getAscending()); |
239 | 260 |
} else { |
240 |
if (query.getExtraColumn().get(member.getAttributeName()) != null) { |
|
241 |
Expression exp = ((FeatureAttributeEmulatorExpression) query.getExtraColumn().get(member.getAttributeName()).getFeatureAttributeEmulator()).getExpression(); |
|
242 |
select.column().value(exp.getCode().toValue()).as(member.getAttributeName()); |
|
261 |
if (allExtraColumns.get(attrName) != null) { |
|
262 |
Expression exp = ((FeatureAttributeEmulatorExpression) allExtraColumns.get(attrName).getFeatureAttributeEmulator()).getExpression(); |
|
263 |
if (!select.has_column(attrName)) { |
|
264 |
select.column().value(exp.getCode().toValue()).as(attrName); |
|
265 |
} |
|
266 |
if (!extraColumnNames.contains(attrName)) { |
|
267 |
extraColumnNames.add(attrName); |
|
268 |
} |
|
269 |
} else if (setType.get(attrName) != null && setType.getAttributeDescriptor(attrName).isComputed()) { |
|
270 |
Expression exp = ((FeatureAttributeEmulatorExpression) setType.getAttributeDescriptor(attrName).getFeatureAttributeEmulator()).getExpression(); |
|
271 |
if (!select.has_column(attrName)) { |
|
272 |
select.column().value(exp.getCode().toValue()).as(attrName); |
|
273 |
} |
|
274 |
if (!extraColumnNames.contains(attrName)) { |
|
275 |
extraColumnNames.add(attrName); |
|
276 |
} |
|
243 | 277 |
} |
244 | 278 |
select.order_by() |
245 | 279 |
.column(member.getAttributeName()) |
Also available in: Unified diff