Revision 44769 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/grammars/DataAccessGrammarFactory.java

View differences:

DataAccessGrammarFactory.java
24 24
package org.gvsig.expressionevaluator.impl.grammars;
25 25

  
26 26
import java.util.UUID;
27
import org.apache.commons.lang3.StringUtils;
28 27
import org.gvsig.expressionevaluator.Code;
29 28
import org.gvsig.expressionevaluator.CodeBuilder;
30 29
import org.gvsig.expressionevaluator.Codes;
31 30
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
32 31
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
33
import org.gvsig.expressionevaluator.ExpressionSyntaxException;
34 32
import org.gvsig.expressionevaluator.Grammar;
35 33
import org.gvsig.expressionevaluator.Statement;
36 34
import org.gvsig.expressionevaluator.Statement.ArgsBuilder;
......
97 95
    @Override
98 96
    public Codes build(StatementContext context) {
99 97
      context.trace(this.toString() + ".build");
98
      int n;
99
      BaseCodes argsX;
100
      
100 101
      CodeBuilder codeBuilder = context.getCodeBuilder();
101 102
      BaseCodes args = (BaseCodes) codeBuilder.args();
102 103

  
103 104
      Code columns = context.getCode("COLUMNS");
104
      Code table = context.getCode("TABLE");
105
      Code where = context.getCode("WHERE");
106
//      Code order = context.getCode("ORDER");
107
//      Code order_mode = context.getCode("ORDER_MODE");
108
      Code limit = context.getCode("LIMIT");
109

  
110
      if (columns == null) {
111
        throw new ExpressionSyntaxException();
112
      }
113
      Callable tuple = codeBuilder.tuple();
114
      args.add(tuple);
115
      String s = (String) ((Code.Constant) columns).value();
116
      if (!StringUtils.equalsIgnoreCase(s, "*")) {
117
        ((BaseCodes) (tuple.parameters())).add(codeBuilder.constant(1));
118
      }
105
      args.add(columns);
119 106
      
107
      Code table = context.getCode("TABLE");
120 108
      args.add(codeBuilder.identifier((String) ((Code.Constant) table).value()));
121 109

  
110
      Code where = context.getCode("WHERE");
122 111
      if (where == null) {
123 112
        args.add(codeBuilder.constant(null));
124 113
      } else {
125 114
        args.add(where);
126 115
      }
127 116

  
128
      int n = 1;
129
      BaseCodes argsX = (BaseCodes) codeBuilder.args();
117
      n = 1;
118
      argsX = (BaseCodes) codeBuilder.args();
130 119
      while (true) {
131 120
        String argNameX = "ORDER" + String.valueOf(n);
132 121
        Code code = context.getCode(argNameX);
......
151 140
      }
152 141
      args.add(codeBuilder.tuple(argsX));
153 142

  
143
      Code limit = context.getCode("LIMIT");
154 144
      if (limit == null) {
155 145
        args.add(codeBuilder.constant(null));
156 146
      } else {
......
201 191
  public Grammar create(Object... parameters) {
202 192
    ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
203 193
    if (this.grammar == null) {
194
      CodeBuilder codeBuilder = manager.createCodeBuilder();
204 195
      Grammar theGrammar = manager.createGrammar(this.getName());
196
      
205 197
      Statement stmt;
206

  
198
      
207 199
      theGrammar.addReservedWord("EXISTS");
208 200
      theGrammar.addReservedWord("SELECT");
209 201
      theGrammar.addReservedWord("FROM");
......
237 229

  
238 230
      stmt = theGrammar.createStatement("SELECT");
239 231
      stmt.addRule(stmt.require_any_token("SELECT"));
240
      stmt.addRule(stmt.switch_token()
241
              .addCase("*", stmt.set_expression("COLUMNS", "*"))
242
              .addCase("1", stmt.set_expression("COLUMNS", "1"))
243
              .addDefault(stmt.fail())
232
      stmt.addRule(stmt.optional_any_token("*")
233
              .addRuleOnTrue(stmt.set_expression("COLUMNS", codeBuilder.tuple()))
234
              .addRuleOnFalse(stmt.require_identifiers(",").capture_as("COLUMNS"))
244 235
      );
245 236
      stmt.addRule(stmt.require_any_token("FROM"));
246 237
      stmt.addRule(stmt.require_identifier().capture_as("TABLE"));

Also available in: Unified diff