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
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