Revision 46050 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 | ||
---|---|---|
52 | 52 |
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase; |
53 | 53 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE; |
54 | 54 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_JDBCHELPER; |
55 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_QUERY; |
|
55 | 56 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_SYMBOLTABLE; |
56 | 57 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE; |
57 | 58 |
import org.gvsig.fmap.geom.DataTypes; |
58 | 59 |
import org.gvsig.tools.dynobject.DynField; |
59 | 60 |
import org.gvsig.tools.evaluator.Evaluator; |
61 |
import org.gvsig.tools.util.ContainerUtils; |
|
60 | 62 |
|
61 | 63 |
public class ResultSetForSetProviderOperation extends AbstractConnectionOperation { |
62 | 64 |
|
... | ... | |
117 | 119 |
List<FeatureAttributeDescriptor> columns, |
118 | 120 |
List<String> extraColumnNames |
119 | 121 |
) { |
120 |
double tolerance = -1; //query.getScale(); |
|
122 |
double tolerance = -1; //query.getScale();
|
|
121 | 123 |
ExpressionBuilder expbuilder = sqlbuilder.expression(); |
122 | 124 |
SelectBuilder select = sqlbuilder.select(); |
123 | 125 |
|
... | ... | |
141 | 143 |
if (query != null && query.hasConstantsAttributeNames()) { |
142 | 144 |
constantsAttributeNames = query.getConstantsAttributeNames(); |
143 | 145 |
} |
146 |
ArrayList<ExpressionBuilder.Value> valuesToRemoveFeatureType = new ArrayList<>(); |
|
144 | 147 |
for (FeatureAttributeDescriptor attr : setType) { |
145 | 148 |
if (attr.isComputed()) { |
146 |
// if(StringUtils.isNotBlank(System.getenv("ENABLE_COMPUTED_SQL_ATTR"))) { |
|
149 |
// if(StringUtils.isNotBlank(System.getenv("ENABLE_COMPUTED_SQL_ATTR"))) {
|
|
147 | 150 |
if (attr.getRelationType() == DynField.RELATION_TYPE_NONE) { |
148 | 151 |
FeatureAttributeEmulator attrEmulator = attr.getFeatureAttributeEmulator(); |
149 | 152 |
if (attrEmulator instanceof FeatureAttributeEmulatorExpression) { |
150 | 153 |
FeatureAttributeEmulatorExpression x = (FeatureAttributeEmulatorExpression) attrEmulator; |
151 | 154 |
Expression exp = x.getExpression(); |
152 |
if (exp != null && !exp.isEmpty() && this.helper.supportExpression(setType, exp.getPhrase())) { |
|
153 |
Code code = exp.getCode(); |
|
154 |
select.column() |
|
155 |
.value(code.toValue(expbuilder)) |
|
156 |
.as(attr.getName()); |
|
157 |
if (!extraColumnNames.contains(attr.getName())) { |
|
158 |
extraColumnNames.add(attr.getName()); |
|
155 |
|
|
156 |
if (query != null && query.hasGroupByColumns()) { |
|
157 |
String aggregate = query.getAggregate(this.table.getTable(), attr.getName()); |
|
158 |
if (this.query.isAGroupByColumn(attr.getName())) { |
|
159 |
if (!select.has_column(attr.getName())) { |
|
160 |
select.column().value(exp.getCode().toValue()).as(attr.getName()); |
|
161 |
} |
|
162 |
if (extraColumnNames != null && !extraColumnNames.contains(attr.getName())) { |
|
163 |
extraColumnNames.add(attr.getName()); |
|
164 |
} |
|
165 |
} else if (aggregate == null) { |
|
166 |
select.column().value(expbuilder.constant(null)).as(attr.getName()); |
|
167 |
} else { |
|
168 |
String fn = this.query.getAggregateFunctions().get(attr.getName()); |
|
169 |
ExpressionBuilder.Function aggregateExp = expbuilder.function(fn, exp.getCode().toValue()); |
|
170 |
if (!select.has_column(attr.getName())) { |
|
171 |
select.column().value(aggregateExp).as(attr.getName()); |
|
172 |
} |
|
173 |
if (extraColumnNames != null && !extraColumnNames.contains(attr.getName())) { |
|
174 |
extraColumnNames.add(attr.getName()); |
|
175 |
} |
|
159 | 176 |
} |
177 |
} else { |
|
178 |
if (exp != null && !exp.isEmpty() && this.helper.supportExpression(setType, exp.getPhrase())) { |
|
179 |
Code code = exp.getCode(); |
|
180 |
select.column() |
|
181 |
.value(code.toValue(expbuilder)) |
|
182 |
.as(attr.getName()); |
|
183 |
if (extraColumnNames != null && !extraColumnNames.contains(attr.getName())) { |
|
184 |
extraColumnNames.add(attr.getName()); |
|
185 |
} |
|
186 |
} |
|
187 |
|
|
160 | 188 |
} |
161 | 189 |
} |
162 | 190 |
} |
... | ... | |
209 | 237 |
if (!select.has_column(attr.getName())) { |
210 | 238 |
select.column().value(aggregateExp).as(attr.getName()); |
211 | 239 |
} |
212 |
if (!extraColumnNames.contains(attr.getName())) { |
|
240 |
if (extraColumnNames!=null && !extraColumnNames.contains(attr.getName())) {
|
|
213 | 241 |
extraColumnNames.add(attr.getName()); |
214 | 242 |
} |
215 | 243 |
} |
... | ... | |
217 | 245 |
for (String attrName : query.getGroupByColumns()) { |
218 | 246 |
if (allExtraColumns.get(attrName) != null) { //from setType and query |
219 | 247 |
EditableFeatureAttributeDescriptor attr = allExtraColumns.get(attrName); |
220 |
select.group_by(expbuilder.column(attrName)); |
|
248 |
ExpressionBuilder.Variable col = expbuilder.column(attrName); |
|
249 |
select.group_by(col); |
|
250 |
// En el groupBy no queremos que se sustituya el nombre del campo calculado |
|
251 |
// por su expresion. Se encarga el formater y lo evitamos quitandole el ftype |
|
252 |
// al value. |
|
253 |
valuesToRemoveFeatureType.add(col); |
|
221 | 254 |
Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression(); |
222 | 255 |
if (!select.has_column(attrName)) { |
223 | 256 |
select.column().value(exp.getCode().toValue()).as(attrName); |
224 | 257 |
} |
225 |
if (!extraColumnNames.contains(attr.getName())) { |
|
258 |
if (extraColumnNames!=null && !extraColumnNames.contains(attr.getName())) {
|
|
226 | 259 |
extraColumnNames.add(attrName); |
227 | 260 |
} |
228 | 261 |
} else if (setType.get(attrName) != null && setType.getAttributeDescriptor(attrName).isComputed()) { |
229 | 262 |
FeatureAttributeDescriptor attr = setType.getAttributeDescriptor(attrName); |
230 |
select.group_by(expbuilder.column(attrName)); |
|
263 |
ExpressionBuilder.Variable col = expbuilder.column(attrName); |
|
264 |
select.group_by(col); |
|
265 |
valuesToRemoveFeatureType.add(col); |
|
231 | 266 |
Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression(); |
232 | 267 |
if (!select.has_column(attrName)) { |
233 | 268 |
select.column().value(exp.getCode().toValue()).as(attrName); |
234 | 269 |
} |
235 |
if (!extraColumnNames.contains(attr.getName())) { |
|
270 |
if (extraColumnNames!=null && !extraColumnNames.contains(attr.getName())) {
|
|
236 | 271 |
extraColumnNames.add(attrName); |
237 | 272 |
} |
238 | 273 |
} else if (setType.get(attrName) == null) { |
... | ... | |
268 | 303 |
select.column() |
269 | 304 |
.value(code.toValue(expbuilder)) |
270 | 305 |
.as(attr.getName()); |
271 |
if (!extraColumnNames.contains(attr.getName())) { |
|
306 |
if (extraColumnNames!=null && !extraColumnNames.contains(attr.getName())) {
|
|
272 | 307 |
extraColumnNames.add(attr.getName()); |
273 | 308 |
} |
274 | 309 |
} |
... | ... | |
312 | 347 |
if (!select.has_column(attrName)) { |
313 | 348 |
select.column().value(exp.getCode().toValue()).as(attrName); |
314 | 349 |
} |
315 |
if (!extraColumnNames.contains(attrName)) { |
|
350 |
if (extraColumnNames!=null && !extraColumnNames.contains(attrName)) {
|
|
316 | 351 |
extraColumnNames.add(attrName); |
317 | 352 |
} |
318 | 353 |
} else if (setType.get(attrName) != null && setType.getAttributeDescriptor(attrName).isComputed()) { |
... | ... | |
320 | 355 |
if (!select.has_column(attrName)) { |
321 | 356 |
select.column().value(exp.getCode().toValue()).as(attrName); |
322 | 357 |
} |
323 |
if (!extraColumnNames.contains(attrName)) { |
|
358 |
if (extraColumnNames!=null && !extraColumnNames.contains(attrName)) {
|
|
324 | 359 |
extraColumnNames.add(attrName); |
325 | 360 |
} |
326 | 361 |
} |
... | ... | |
386 | 421 |
PROP_FEATURE_TYPE, this.storeType, |
387 | 422 |
PROP_TABLE, table, |
388 | 423 |
PROP_SYMBOLTABLE, this.query==null? null:this.query.getSymbolTable(), |
389 |
PROP_JDBCHELPER, this.helper |
|
424 |
PROP_JDBCHELPER, this.helper, |
|
425 |
PROP_QUERY, this.query |
|
390 | 426 |
); |
427 |
for (ExpressionBuilder.Value value : valuesToRemoveFeatureType) { |
|
428 |
value.setProperty(PROP_FEATURE_TYPE, null); |
|
429 |
} |
|
391 | 430 |
this.helper.processSpecialFunctions(sqlbuilder, storeType, extraColumnNames); |
392 | 431 |
String sql = sqlbuilder.toString(); |
393 | 432 |
return sql; |
Also available in: Unified diff