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

View differences:

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