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

View differences:

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