Revision 46993

View differences:

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/SelectCountFunction.java
113 113
                set = featureStore.getFeatureSet();
114 114
            } else {
115 115
                FeatureQuery query = featureStore.createFeatureQuery();
116
                Code where2 = removeOuterTablesReferences(interpreter, where);
116
                Code where2 = removeOuterTablesReferences(interpreter, where, featureStore.getDefaultFeatureTypeQuietly());
117 117
                ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where2.toString());
118 118
                filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
119 119
                query.addFilter(filter);
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/AbstractSelectFunction.java
26 26
import static org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable.SYMBOL_CURRENT_TABLE;
27 27
import org.gvsig.fmap.dal.expressionevaluator.TableAttributeHandler;
28 28
import org.gvsig.fmap.dal.feature.FeatureStore;
29
import org.gvsig.fmap.dal.feature.FeatureType;
29 30

  
30 31
/**
31 32
 *
......
83 84
        return caller;
84 85
    }
85 86

  
86
    protected Code removeOuterTablesReferences(Interpreter interpreter, Code where) {
87
    protected Code removeOuterTablesReferences(Interpreter interpreter, Code where, FeatureType currentType) {
87 88
        try {
88 89
            SymbolTable symbolTable = interpreter.getSymbolTable();
89 90
            TableAttributeHandler table = (TableAttributeHandler) symbolTable.value(SYMBOL_CURRENT_TABLE);
......
135 136
                switch (code.code()) {
136 137
                    case Code.IDENTIFIER:
137 138
                        Code.Identifier id = (Code.Identifier) code;
138
                        if (symbolTable.exists(id.name())) {
139
                        if (currentType.getAttributeDescriptor(id.name()) == null && symbolTable.exists(id.name())) {
139 140
                            Object value = symbolTable.value(id.name());
140 141
                            replaces.add(
141 142
                                    new ImmutablePair<>(
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
29 29
import org.gvsig.expressionevaluator.Code;
30 30
import org.gvsig.expressionevaluator.Code.Callable;
31 31
import org.gvsig.expressionevaluator.Codes;
32
import org.gvsig.expressionevaluator.Expression;
32 33
import org.gvsig.expressionevaluator.ExpressionBuilder;
33 34
import org.gvsig.expressionevaluator.ExpressionEvaluator;
34 35
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
36
import org.gvsig.expressionevaluator.ExpressionUtils;
35 37
import org.gvsig.expressionevaluator.Interpreter;
36 38
import org.gvsig.expressionevaluator.MutableSymbolTable;
37 39
import org.gvsig.expressionevaluator.Optimizer;
......
127 129
        FeatureQueryOrder queryOrder = null;
128 130
        if (order != null || order_mode != null) {
129 131
            for (int n = 0; n < order.parameters().size(); n++) {
130
                String member = (String) interpreter.run(order.parameters().get(n));
131
                Boolean mode = (Boolean) interpreter.run(order_mode.parameters().get(n));
132 132
                if (queryOrder == null) {
133 133
                    queryOrder = new DefaultFeatureQueryOrder();
134 134
                }
135
                queryOrder.add(member, mode);
135
                Boolean mode = (Boolean) ((Code.Constant)order_mode.parameters().get(n)).value();
136
                Code memberCode = order.parameters().get(n);
137
                if(memberCode.code() == Code.IDENTIFIER) {
138
                    queryOrder.add(((Code.Identifier)memberCode).name(), mode);
139
                } else {
140
                    Expression exp = ExpressionUtils.createExpression(memberCode.toString());
141
                    queryOrder.add(exp, mode);
142
                }
136 143
            }
137 144
        }
138 145
        String intovar = null;
......
148 155
            List<Feature> features;
149 156
            FeatureQuery query = featureStore.createFeatureQuery();
150 157
            if (where != null) {
151
                Code where2 = removeOuterTablesReferences(interpreter, where);
158
                Code where2 = removeOuterTablesReferences(interpreter, where, featureStore.getDefaultFeatureTypeQuietly());
152 159
                ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where2.toString());
153 160
                filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
154 161
                query.addFilter(filter);
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/SelectAggregateFunction.java
120 120
            }
121 121
            FeatureQuery query = featureStore.createFeatureQuery();
122 122
            if (where != null) {
123
                Code where2 = removeOuterTablesReferences(interpreter, where);
123
                Code where2 = removeOuterTablesReferences(interpreter, where, featureStore.getDefaultFeatureTypeQuietly());
124 124
                ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where2.toString());
125 125
                filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
126 126
                query.addFilter(filter);

Also available in: Unified diff