Revision 46505 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFunction.java
SelectFunction.java | ||
---|---|---|
39 | 39 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
40 | 40 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator; |
41 | 41 |
import org.gvsig.expressionevaluator.Code.Callable; |
42 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
43 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
|
44 |
import org.gvsig.fmap.dal.SQLBuilder; |
|
42 | 45 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQueryOrder; |
43 | 46 |
|
44 | 47 |
/** |
... | ... | |
159 | 162 |
return caller; // Don't optimize SELECT |
160 | 163 |
} |
161 | 164 |
|
165 |
@Override |
|
166 |
public ExpressionBuilder.Value toValue(ExpressionBuilder builder, Codes args) { |
|
167 |
try { |
|
168 |
SQLBuilder sqlBuilder = (SQLBuilder) builder.getProperty("SQLBUILDER"); |
|
169 |
if(sqlBuilder == null){ |
|
170 |
return super.toValue(builder, args); |
|
171 |
} |
|
172 |
SQLBuilder.SelectBuilder select = sqlBuilder.createSelectBuilder(); |
|
173 |
|
|
174 |
String storeName = this.getTableName(args, TABLE); |
|
175 |
Callable columns = getTupleOrNull(args, COLUMNS); |
|
176 |
Code where = this.getWhereCode(args, WHERE); |
|
177 |
Callable order = getTupleOrNull(args, ORDER); |
|
178 |
Callable order_mode = getTupleOrNull(args, ORDER_MODE); |
|
179 |
Code limit = args.get(LIMIT); |
|
180 |
|
|
181 |
if (storeName != null) { |
|
182 |
select.from().table().name(storeName); |
|
183 |
} |
|
184 |
|
|
185 |
if (columns != null) { |
|
186 |
for (Code column : columns.parameters()) { |
|
187 |
if (column instanceof Code.Identifier) { |
|
188 |
select.column().name( |
|
189 |
select.from().table(), |
|
190 |
((Code.Identifier) column).name() |
|
191 |
); |
|
192 |
} |
|
193 |
} |
|
194 |
} |
|
195 |
|
|
196 |
if (where != null) { |
|
197 |
select.where().value(where.toValue(builder)); |
|
198 |
} |
|
199 |
|
|
200 |
if (limit != null) { |
|
201 |
select.limit(((Number) ((Code.Constant) limit).value()).longValue()); |
|
202 |
} |
|
203 |
|
|
204 |
if (order != null || order_mode != null) { |
|
205 |
for (int n = 0; n < order.parameters().size(); n++) { |
|
206 |
Code member = order.parameters().get(n); |
|
207 |
Code.Constant mode = (Code.Constant) order_mode.parameters().get(n); |
|
208 |
select.order_by().value(member.toValue(builder)).ascending((boolean) mode.value()); |
|
209 |
} |
|
210 |
} |
|
211 |
return select; |
|
212 |
} catch (Exception ex) { |
|
213 |
return super.toValue(builder, args); |
|
214 |
} |
|
215 |
} |
|
216 |
|
|
217 |
|
|
218 |
|
|
162 | 219 |
} |
Also available in: Unified diff