Revision 44748
trunk/org.gvsig.desktop/pom.xml | ||
---|---|---|
2566 | 2566 |
|
2567 | 2567 |
<jython.artifactId>jython-standalone</jython.artifactId> |
2568 | 2568 |
<!-- External project versions --> |
2569 |
<gvsig.tools.version>3.0.219</gvsig.tools.version>
|
|
2570 |
<gvsig.proj.version>1.0.7</gvsig.proj.version>
|
|
2571 |
<gvsig.projection.api.version>2.0.29</gvsig.projection.api.version>
|
|
2569 |
<gvsig.tools.version>3.0.221</gvsig.tools.version>
|
|
2570 |
<gvsig.proj.version>1.0.8</gvsig.proj.version>
|
|
2571 |
<gvsig.projection.api.version>2.0.30</gvsig.projection.api.version>
|
|
2572 | 2572 |
|
2573 | 2573 |
</properties> |
2574 | 2574 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.geometry/org.gvsig.expressionevaluator.geometry.lib/org.gvsig.expressionevaluator.geometry.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestExpressionBuilderFormatter.java | ||
---|---|---|
6 | 6 |
import junit.framework.TestCase; |
7 | 7 |
import org.apache.commons.lang3.ArrayUtils; |
8 | 8 |
import org.apache.commons.lang3.StringUtils; |
9 |
import org.apache.commons.lang3.tuple.Pair; |
|
9 | 10 |
import org.cresques.cts.IProjection; |
10 | 11 |
import org.gvsig.expressionevaluator.Formatter; |
11 | 12 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
... | ... | |
97 | 98 |
|
98 | 99 |
@Override |
99 | 100 |
public String format(Value function) { |
100 |
List<Value> parameters = ((Function)function).parameters();
|
|
101 |
String p1 = parameters.get(0).toString(formatter()); |
|
102 |
String p2 = parameters.get(1).toString(formatter()); |
|
101 |
List<Pair<String,Value>> parameters = ((Function)function).parameters();
|
|
102 |
String p1 = parameters.get(0).getValue().toString(formatter());
|
|
103 |
String p2 = parameters.get(1).getValue().toString(formatter());
|
|
103 | 104 |
String r = MessageFormat.format( |
104 | 105 |
"( (({0}) && ({1})) AND ST_Intersects(({0}),({1}) ))", |
105 | 106 |
p1, |
... | ... | |
121 | 122 |
|
122 | 123 |
@Override |
123 | 124 |
public String format(Value function) { |
124 |
List<Value> parameters = ((Function)function).parameters();
|
|
125 |
String p1 = parameters.get(0).toString(formatter()); |
|
126 |
String p2 = parameters.get(1).toString(formatter()); |
|
125 |
List<Pair<String,Value>> parameters = ((Function)function).parameters();
|
|
126 |
String p1 = parameters.get(0).getValue().toString(formatter());
|
|
127 |
String p2 = parameters.get(1).getValue().toString(formatter());
|
|
127 | 128 |
String r = MessageFormat.format( |
128 | 129 |
"GeomFromWKB({0}, {1})", |
129 | 130 |
p1, |
... | ... | |
145 | 146 |
|
146 | 147 |
@Override |
147 | 148 |
public String format(Value function) { |
148 |
List<Value> parameters = ((Function)function).parameters();
|
|
149 |
String p1 = parameters.get(0).toString(formatter()); |
|
150 |
String p2 = parameters.get(1).toString(formatter()); |
|
151 |
String p3 = parameters.get(2).toString(formatter()); |
|
149 |
List<Pair<String,Value>> parameters = ((Function)function).parameters();
|
|
150 |
String p1 = parameters.get(0).getValue().toString(formatter());
|
|
151 |
String p2 = parameters.get(1).getValue().toString(formatter());
|
|
152 |
String p3 = parameters.get(2).getValue().toString(formatter());
|
|
152 | 153 |
String r = MessageFormat.format( |
153 | 154 |
"NVL2({0}, {1}, {2})", |
154 | 155 |
p1, |
... | ... | |
171 | 172 |
|
172 | 173 |
@Override |
173 | 174 |
public String format(Value function) { |
174 |
List<Value> parameters = ((Function)function).parameters();
|
|
175 |
String p1 = parameters.get(0).toString(formatter()); |
|
175 |
List<Pair<String,Value>> parameters = ((Function)function).parameters();
|
|
176 |
String p1 = parameters.get(0).getValue().toString(formatter());
|
|
176 | 177 |
String r = MessageFormat.format( |
177 | 178 |
"AsWKB(({0}))", |
178 | 179 |
p1 |
... | ... | |
193 | 194 |
|
194 | 195 |
@Override |
195 | 196 |
public String format(Value function) { |
196 |
List<Value> parameters = ((Function)function).parameters();
|
|
197 |
String p1 = parameters.get(0).toString(MyFormatter.this);
|
|
197 |
List<Pair<String,Value>> parameters = ((Function)function).parameters();
|
|
198 |
String p1 = parameters.get(0).getValue().toString(formatter());
|
|
198 | 199 |
String r = MessageFormat.format( |
199 | 200 |
"( ({0}) IS NOT NULL )", |
200 | 201 |
p1 |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/programming/GetattrFunction.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import java.lang.reflect.Field; |
4 | 4 |
import org.apache.commons.lang3.Range; |
5 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_GETATTR; |
|
5 | 6 |
import org.gvsig.expressionevaluator.Function; |
6 | 7 |
import org.gvsig.expressionevaluator.Interpreter; |
7 | 8 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
... | ... | |
9 | 10 |
|
10 | 11 |
public class GetattrFunction extends AbstractFunction { |
11 | 12 |
|
12 |
public static final String NAME = "GETATTR"; |
|
13 |
|
|
14 | 13 |
public GetattrFunction() { |
15 |
super(Function.GROUP_PROGRAMMING, NAME, Range.is(2));
|
|
14 |
super(Function.GROUP_PROGRAMMING, FUNCTION_GETATTR, Range.is(2));
|
|
16 | 15 |
} |
17 | 16 |
|
18 | 17 |
@Override |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpressionBuilder.java | ||
---|---|---|
8 | 8 |
import java.util.Objects; |
9 | 9 |
import java.util.Set; |
10 | 10 |
import org.apache.commons.lang3.StringUtils; |
11 |
import org.apache.commons.lang3.tuple.ImmutablePair; |
|
12 |
import org.apache.commons.lang3.tuple.Pair; |
|
11 | 13 |
import org.gvsig.expressionevaluator.Code; |
12 | 14 |
import org.gvsig.expressionevaluator.Expression; |
13 | 15 |
|
... | ... | |
379 | 381 |
|
380 | 382 |
protected String name; |
381 | 383 |
protected String format; |
382 |
protected List<Value> parameters;
|
|
384 |
protected List<Pair<String,Value>> parameters;
|
|
383 | 385 |
|
384 | 386 |
public FunctionBase(String name, String format) { |
385 | 387 |
this.name = name; |
... | ... | |
389 | 391 |
public FunctionBase(String name) { |
390 | 392 |
this(name,null); |
391 | 393 |
} |
392 |
|
|
394 |
|
|
393 | 395 |
@Override |
394 |
public List<Value> parameters() { |
|
396 |
public Value getParameter(String name) { |
|
397 |
for (Pair<String, Value> parameter : parameters) { |
|
398 |
if( parameter!=null && StringUtils.equalsIgnoreCase(name, parameter.getKey()) ) { |
|
399 |
return parameter.getValue(); |
|
400 |
} |
|
401 |
} |
|
402 |
return null; |
|
403 |
} |
|
404 |
|
|
405 |
@Override |
|
406 |
public boolean containsParameter(String name, int index) { |
|
407 |
String argNameX = name + String.valueOf(index).trim(); |
|
408 |
for (Pair<String, Value> arg : this.parameters) { |
|
409 |
if( StringUtils.equalsIgnoreCase(arg.getKey(), argNameX) ) { |
|
410 |
return true; |
|
411 |
} |
|
412 |
} |
|
413 |
return false; |
|
414 |
} |
|
415 |
|
|
416 |
@Override |
|
417 |
public Value getParameter(String name, int index) { |
|
418 |
String argNameX = name + String.valueOf(index).trim(); |
|
419 |
for (Pair<String, Value> arg : this.parameters) { |
|
420 |
if( StringUtils.equalsIgnoreCase(arg.getKey(), argNameX) ) { |
|
421 |
return arg.getValue(); |
|
422 |
} |
|
423 |
} |
|
424 |
return null; |
|
425 |
} |
|
426 |
|
|
427 |
@Override |
|
428 |
public List<Pair<String,Value>> parameters() { |
|
395 | 429 |
if (this.parameters == null) { |
396 | 430 |
this.parameters = new ArrayList<>(); |
397 | 431 |
} |
... | ... | |
400 | 434 |
|
401 | 435 |
@Override |
402 | 436 |
public Function parameter(Value parameter) { |
403 |
this.parameters().add(parameter);
|
|
437 |
this.parameters().add(new ImmutablePair<>(null,parameter));
|
|
404 | 438 |
return this; |
405 | 439 |
} |
406 | 440 |
|
407 | 441 |
@Override |
442 |
public Function parameter(String name, Value parameter) { |
|
443 |
this.parameters().add(new ImmutablePair<>(name,parameter)); |
|
444 |
return this; |
|
445 |
} |
|
446 |
|
|
447 |
@Override |
|
408 | 448 |
public String name() { |
409 | 449 |
return this.name; |
410 | 450 |
} |
... | ... | |
413 | 453 |
public void accept(Visitor visitor, VisitorFilter filter) { |
414 | 454 |
super.accept(visitor, filter); |
415 | 455 |
if( this.parameters!=null ) { |
416 |
for (Value value : this.parameters) {
|
|
417 |
if( value!=null ) {
|
|
418 |
value.accept(visitor, filter);
|
|
456 |
for (Pair<String,Value> argument : this.parameters) {
|
|
457 |
if( argument!=null ) {
|
|
458 |
argument.getValue().accept(visitor, filter);
|
|
419 | 459 |
} |
420 | 460 |
} |
421 | 461 |
} |
... | ... | |
424 | 464 |
@Override |
425 | 465 |
public void replace(Value target, Value replacement) { |
426 | 466 |
for (int i = 0; i < parameters.size(); i++) { |
427 |
Value value = parameters.get(i);
|
|
428 |
if( value == target ) {
|
|
429 |
parameters.set(i, replacement);
|
|
467 |
Pair<String, Value> argument = parameters.get(i);
|
|
468 |
if( argument.getValue() == target ) {
|
|
469 |
parameters.set(i, new ImmutablePair<>(argument.getKey(),replacement));
|
|
430 | 470 |
} else { |
431 |
value.replace(target, replacement);
|
|
471 |
argument.getValue().replace(target, replacement);
|
|
432 | 472 |
} |
433 | 473 |
} |
434 | 474 |
} |
... | ... | |
449 | 489 |
builder.append("("); |
450 | 490 |
if (this.parameters != null && !this.parameters.isEmpty()) { |
451 | 491 |
boolean first = true; |
452 |
for (Value value : this.parameters) {
|
|
492 |
for (Pair<String,Value> argument : this.parameters) {
|
|
453 | 493 |
if( first ) { |
454 | 494 |
first=false; |
455 |
builder.append(value.toString(formatter)); |
|
495 |
if( argument.getKey()!=null ) { |
|
496 |
builder.append(argument.getKey()); |
|
497 |
builder.append(":"); |
|
498 |
} |
|
499 |
builder.append(argument.getValue().toString(formatter)); |
|
456 | 500 |
} else { |
457 | 501 |
builder.append(", "); |
458 |
builder.append(value.toString(formatter)); |
|
502 |
if( argument.getKey()!=null ) { |
|
503 |
builder.append(argument.getKey()); |
|
504 |
builder.append(":"); |
|
505 |
} |
|
506 |
builder.append(argument.getValue().toString(formatter)); |
|
459 | 507 |
} |
460 | 508 |
} |
461 | 509 |
} |
... | ... | |
464 | 512 |
} |
465 | 513 |
if (this.parameters != null && !this.parameters.isEmpty()) { |
466 | 514 |
List<String> values = new ArrayList<>(); |
467 |
for (Value value : this.parameters) {
|
|
468 |
values.add(value.toString(formatter));
|
|
515 |
for (Pair<String,Value> argument : this.parameters) {
|
|
516 |
values.add(argument.getValue().toString(formatter));
|
|
469 | 517 |
} |
470 | 518 |
return MessageFormat.format(format, values.toArray()); |
471 | 519 |
} else { |
... | ... | |
515 | 563 |
builder.append("("); |
516 | 564 |
if (this.parameters != null && !this.parameters.isEmpty()) { |
517 | 565 |
boolean first = true; |
518 |
for (Value value : this.parameters) {
|
|
566 |
for (Pair<String,Value> argument : this.parameters) {
|
|
519 | 567 |
if( first ) { |
520 | 568 |
first=false; |
521 |
builder.append(value.toString(formatter));
|
|
569 |
builder.append(argument.getValue().toString(formatter));
|
|
522 | 570 |
} else { |
523 | 571 |
builder.append(", "); |
524 |
builder.append(value.toString(formatter));
|
|
572 |
builder.append(argument.getValue().toString(formatter));
|
|
525 | 573 |
} |
526 | 574 |
} |
527 | 575 |
} |
... | ... | |
818 | 866 |
@Override |
819 | 867 |
public List<Variable> variables() { |
820 | 868 |
final Set<Variable> vars = new HashSet<>(); |
821 |
this.accept(new Visitor() { |
|
822 |
@Override |
|
823 |
public void visit(Visitable value) { |
|
824 |
if( !vars.contains((Variable)value) ) { |
|
825 |
vars.add((Variable)value); |
|
826 |
} |
|
827 |
} |
|
869 |
this.accept((Visitable value1) -> { |
|
870 |
if (!vars.contains((Variable) value1)) { |
|
871 |
vars.add((Variable) value1); |
|
872 |
} |
|
828 | 873 |
}, new ClassVisitorFilter(Variable.class)); |
829 | 874 |
List<Variable> lvars = new ArrayList<>(vars); |
830 | 875 |
Collections.sort(lvars); |
... | ... | |
834 | 879 |
@Override |
835 | 880 |
public List<Parameter> parameters() { |
836 | 881 |
final List<Parameter> params = new ArrayList<>(); |
837 |
this.accept(new Visitor() { |
|
838 |
@Override |
|
839 |
public void visit(Visitable value) { |
|
840 |
params.add((Parameter) value); |
|
841 |
} |
|
882 |
this.accept((Visitable value1) -> { |
|
883 |
params.add((Parameter) value1); |
|
842 | 884 |
}, new ClassVisitorFilter(Parameter.class)); |
843 | 885 |
return params; |
844 | 886 |
} |
... | ... | |
1323 | 1365 |
public String repr(Object value) { |
1324 | 1366 |
return this.manager.getReprMethod(value).repr(value); |
1325 | 1367 |
} |
1326 |
|
|
1368 |
|
|
1369 |
@Override |
|
1370 |
public Function getattr(Value object, String attrname) { |
|
1371 |
Function fn = function(FUNCTION_GETATTR); |
|
1372 |
fn.parameter(null, object); |
|
1373 |
fn.parameter(null, constant(attrname)); |
|
1374 |
return fn; |
|
1375 |
} |
|
1376 |
|
|
1327 | 1377 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultCodeBuilder.java | ||
---|---|---|
49 | 49 |
import org.gvsig.expressionevaluator.Function; |
50 | 50 |
import org.gvsig.expressionevaluator.Interpreter; |
51 | 51 |
import org.gvsig.expressionevaluator.SymbolTable; |
52 |
import org.gvsig.expressionevaluator.impl.function.programming.GetattrFunction; |
|
53 | 52 |
import org.gvsig.expressionevaluator.impl.function.programming.GetitemFunction; |
54 | 53 |
import org.gvsig.tools.dynobject.DynObject; |
55 | 54 |
import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException; |
... | ... | |
272 | 271 |
return this.codes.size(); |
273 | 272 |
} |
274 | 273 |
|
275 |
public void add(String name, Code arg) { |
|
276 |
this.codes.add(new ImmutablePair<>(name, arg)); |
|
274 |
public void add(String name, Code parameter) { |
|
275 |
if( !StringUtils.isBlank(name) ) { |
|
276 |
for (int i = 0; i < codes.size(); i++) { |
|
277 |
Pair<String, Code> arg = codes.get(i); |
|
278 |
if( StringUtils.equalsIgnoreCase(name, arg.getKey()) ) { |
|
279 |
codes.set(i, new ImmutablePair<>(name, parameter)); |
|
280 |
return; |
|
281 |
} |
|
282 |
} |
|
283 |
} |
|
284 |
this.codes.add(new ImmutablePair<>(name, parameter)); |
|
277 | 285 |
} |
278 | 286 |
|
279 | 287 |
public void add(Code arg) { |
... | ... | |
285 | 293 |
} |
286 | 294 |
|
287 | 295 |
@Override |
296 |
public boolean contains(String name) { |
|
297 |
for (Pair<String, Code> arg : this.codes) { |
|
298 |
if( StringUtils.equalsIgnoreCase(arg.getKey(), name) ) { |
|
299 |
return true; |
|
300 |
} |
|
301 |
} |
|
302 |
return false; |
|
303 |
} |
|
304 |
|
|
305 |
@Override |
|
288 | 306 |
public boolean contains(String name, int index) { |
289 | 307 |
String argNameX = name + String.valueOf(index).trim(); |
290 | 308 |
for (Pair<String, Code> arg : this.codes) { |
... | ... | |
327 | 345 |
return null; |
328 | 346 |
} |
329 | 347 |
|
348 |
@Override |
|
330 | 349 |
public String getName(int n) { |
331 | 350 |
return this.codes.get(n).getKey(); |
332 | 351 |
} |
... | ... | |
548 | 567 |
break; |
549 | 568 |
case FUNCTION: |
550 | 569 |
default: |
551 |
if( StringUtils.equalsIgnoreCase(this.name(),GetattrFunction.NAME) ) {
|
|
570 |
if( StringUtils.equalsIgnoreCase(this.name(),ExpressionBuilder.FUNCTION_GETATTR) ) {
|
|
552 | 571 |
Code arg0 = this.parameters().get(0); |
553 | 572 |
Code arg1 = this.parameters().get(1); |
554 | 573 |
if( arg0 instanceof Code.Identifier && arg1 instanceof Code.Constant ) { |
... | ... | |
845 | 864 |
BaseCodes args = args(); |
846 | 865 |
args.add(obj); |
847 | 866 |
args.add(constant(attrname)); |
848 |
return function(GetattrFunction.NAME, args);
|
|
867 |
return function(ExpressionBuilder.FUNCTION_GETATTR, args);
|
|
849 | 868 |
} |
850 | 869 |
|
851 | 870 |
@Override |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionBuilder.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import java.util.List; |
4 | 4 |
import java.util.Map; |
5 |
import org.apache.commons.lang3.tuple.Pair; |
|
5 | 6 |
import org.gvsig.tools.util.PropertiesSupport; |
6 | 7 |
import org.gvsig.tools.util.PropertiesSupportHelper; |
7 | 8 |
|
... | ... | |
102 | 103 |
public static final String FUNCTION_LIST = "LIST"; |
103 | 104 |
public static final String FUNCTION_TUPLE = "TUPLE"; |
104 | 105 |
|
106 |
public static final String FUNCTION_GETATTR = "GETATTR"; |
|
107 |
|
|
105 | 108 |
public static final int PARAMETER_TYPE_CONSTANT = 0; |
106 | 109 |
public static final int PARAMETER_TYPE_VARIABLE = 1; |
107 | 110 |
|
... | ... | |
154 | 157 |
|
155 | 158 |
public interface Function extends Value { |
156 | 159 |
public String name(); |
157 |
public List<Value> parameters();
|
|
160 |
public List<Pair<String,Value>> parameters();
|
|
158 | 161 |
public Function parameter(Value parameter); |
162 |
public Function parameter(String name, Value parameter); |
|
163 |
public Value getParameter(String name); |
|
164 |
public Value getParameter(String name, int index); |
|
165 |
public boolean containsParameter(String name, int index); |
|
159 | 166 |
} |
160 | 167 |
|
161 | 168 |
public interface Method extends Value { |
162 | 169 |
public String name(); |
163 | 170 |
public Value instance(); |
164 |
public List<Value> parameters();
|
|
171 |
public List<Pair<String,Value>> parameters();
|
|
165 | 172 |
public Function parameter(Value parameter); |
173 |
public Function parameter(String name, Value parameter); |
|
166 | 174 |
} |
167 | 175 |
|
168 | 176 |
public interface BinaryOperator extends Value { |
... | ... | |
462 | 470 |
|
463 | 471 |
public Function tuple(Constant... values); |
464 | 472 |
|
473 |
public Function getattr(Value object, String attrname); |
|
474 |
|
|
465 | 475 |
public boolean isEmpty(); |
466 | 476 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/Codes.java | ||
---|---|---|
14 | 14 |
|
15 | 15 |
public boolean useArgNames(boolean useNames); |
16 | 16 |
|
17 |
public boolean contains(String name); |
|
18 |
|
|
17 | 19 |
public boolean contains(String name, int index); |
18 | 20 |
|
19 | 21 |
public String getName(int index); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/expressionevaluator/TestGrammarCompiler.java | ||
---|---|---|
187 | 187 |
String id = "????????????????????????????????"; |
188 | 188 |
String s = code.toString(); |
189 | 189 |
s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2); |
190 |
assertEquals("EXISTS(NULL, '????????????????????????????????')", s); |
|
190 |
assertEquals("EXISTS(NULL, 'EXISTS????????????????????????????????')", s);
|
|
191 | 191 |
} |
192 | 192 |
|
193 | 193 |
public void testExistsSelect1() { |
... | ... | |
204 | 204 |
String id = "????????????????????????????????"; |
205 | 205 |
String s = code.toString(); |
206 | 206 |
s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2); |
207 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:(\"countries\".\"LASTCENSUS\" > 0)), '????????????????????????????????')", s); |
|
207 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:(\"countries\".\"LASTCENSUS\" > 0)), 'EXISTS????????????????????????????????')", s);
|
|
208 | 208 |
} |
209 | 209 |
|
210 | 210 |
public void testExistsSelectLimit1() { |
... | ... | |
222 | 222 |
String id = "????????????????????????????????"; |
223 | 223 |
String s = code.toString(); |
224 | 224 |
s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2); |
225 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:(\"countries\".\"LASTCENSUS\" > 0), LIMIT:1), '????????????????????????????????')", s); |
|
225 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:(\"countries\".\"LASTCENSUS\" > 0), LIMIT:1), 'EXISTS????????????????????????????????')", s);
|
|
226 | 226 |
} |
227 | 227 |
|
228 | 228 |
public void testExistsSelectLimit2() { |
... | ... | |
245 | 245 |
String id = "????????????????????????????????"; |
246 | 246 |
String s = code.toString(); |
247 | 247 |
s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2); |
248 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:((\"continents\".\"NAME\" = \"countries\".\"CONTINENT\") AND (\"countries\".\"LASTCENSUS\" < 0)), LIMIT:1), '????????????????????????????????')", s); |
|
248 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:((\"continents\".\"NAME\" = \"countries\".\"CONTINENT\") AND (\"countries\".\"LASTCENSUS\" < 0)), LIMIT:1), 'EXISTS????????????????????????????????')", s);
|
|
249 | 249 |
} |
250 | 250 |
|
251 |
public void testExistsSelectLimit3() { |
|
252 |
// Sobre la tabla de continentes, para obtener la lista de continentes |
|
253 |
// que tienen paises sin censo. |
|
254 |
// Filtramos continentes por un campo del pais. |
|
255 |
StringBuilder source = new StringBuilder(); |
|
256 |
source.append("EXISTS("); |
|
257 |
source.append(" SELECT 1 FROM countries"); |
|
258 |
source.append(" WHERE "); |
|
259 |
source.append(" continents.NAME = countries.CONTINENT AND "); |
|
260 |
source.append(" countries.LASTCENSUS < 0 "); |
|
261 |
source.append(" LIMIT 1; "); |
|
262 |
source.append(" ,"); |
|
263 |
source.append(" 'patata'"); |
|
264 |
source.append(")"); |
|
265 |
|
|
266 |
Compiler compiler = createCompiler(); |
|
267 |
|
|
268 |
Code code = compiler.compileExpression(source.toString()); |
|
269 |
link(code); |
|
270 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:((\"continents\".\"NAME\" = \"countries\".\"CONTINENT\") AND (\"countries\".\"LASTCENSUS\" < 0)), LIMIT:1), 'patata')", code.toString()); |
|
271 |
} |
|
272 |
|
|
273 |
public void testExistsSelectLimit4() { |
|
274 |
StringBuilder source = new StringBuilder(); |
|
275 |
source.append("EXISTS("); |
|
276 |
source.append(" SELECT("); |
|
277 |
source.append(" TABLE:'countries', "); |
|
278 |
source.append(" WHERE:(countries.LASTCENSUS > 0), "); |
|
279 |
source.append(" LIMIT:1 "); |
|
280 |
source.append(" ) "); |
|
281 |
source.append(" , "); |
|
282 |
source.append(" 'EXISTS1234567890ABCDEFGHHIJKLMNOPQRSTU' "); |
|
283 |
source.append(") "); |
|
284 |
|
|
285 |
Compiler compiler = createCompiler(); |
|
286 |
|
|
287 |
Code code = compiler.compileExpression(source.toString()); |
|
288 |
link(code); |
|
289 |
String id = "????????????????????????????????"; |
|
290 |
String s = code.toString(); |
|
291 |
s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2); |
|
292 |
assertEquals("EXISTS(SELECT(TABLE:'countries', WHERE:(\"countries\".\"LASTCENSUS\" > 0), LIMIT:1), 'EXISTS????????????????????????????????')", s); |
|
293 |
} |
|
294 |
|
|
251 | 295 |
} |
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/symboltable/FeatureSymbolTableImpl.java | ||
---|---|---|
34 | 34 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
35 | 35 |
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable; |
36 | 36 |
import org.gvsig.fmap.dal.DataManager; |
37 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW; |
|
37 | 38 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable; |
38 | 39 |
import org.gvsig.fmap.dal.feature.Feature; |
39 | 40 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
... | ... | |
61 | 62 |
super(DataManager.DAL_SYMBOL_TABLE_FEATURE); |
62 | 63 |
this.current_row = new AbstractFunction( |
63 | 64 |
DALFunctions.GROUP_DATA_ACCESS, |
64 |
DALFunctions.FUNCTION_CURRENT_ROW,
|
|
65 |
FUNCTION_CURRENT_ROW, |
|
65 | 66 |
Range.is(0), |
66 | 67 |
"Return the current row when used in a table filter.\n" |
67 | 68 |
+ "Return null if used outer a table filter.", |
68 |
DALFunctions.FUNCTION_CURRENT_ROW + "()",
|
|
69 |
FUNCTION_CURRENT_ROW + "()", |
|
69 | 70 |
null, |
70 | 71 |
"Feature" |
71 | 72 |
) { |
... | ... | |
103 | 104 |
|
104 | 105 |
@Override |
105 | 106 |
public Function function(String name) { |
106 |
if (StringUtils.equalsIgnoreCase(name, DALFunctions.FUNCTION_CURRENT_ROW)) {
|
|
107 |
if (StringUtils.equalsIgnoreCase(name, FUNCTION_CURRENT_ROW)) { |
|
107 | 108 |
return this.current_row; |
108 | 109 |
} |
109 | 110 |
return super.function(name); |
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/ForeingValueFunction.java | ||
---|---|---|
27 | 27 |
import java.util.List; |
28 | 28 |
import org.apache.commons.lang3.Range; |
29 | 29 |
import org.apache.commons.lang3.StringUtils; |
30 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
31 | 30 |
import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
32 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
|
33 | 31 |
import org.gvsig.expressionevaluator.Interpreter; |
34 | 32 |
import org.gvsig.expressionevaluator.impl.DALFunctions; |
35 | 33 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
36 | 34 |
import org.gvsig.fmap.dal.DataManager; |
35 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW; |
|
36 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE; |
|
37 | 37 |
import org.gvsig.fmap.dal.feature.Feature; |
38 | 38 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
39 | 39 |
import org.gvsig.fmap.dal.feature.ForeingKey; |
40 | 40 |
import org.gvsig.tools.util.UnmodifiableBasicList; |
41 | 41 |
import org.gvsig.tools.util.UnmodifiableBasicListAdapter; |
42 |
import org.gvsig.tools.util.UnmodifiableBasicListArrayAdapter; |
|
42 | 43 |
|
43 | 44 |
public class ForeingValueFunction extends AbstractFunction { |
44 | 45 |
|
45 | 46 |
public ForeingValueFunction() { |
46 | 47 |
super( |
47 | 48 |
DALFunctions.GROUP_DATA_ACCESS, |
48 |
DALFunctions.FUNCTION_FOREING_VALUE,
|
|
49 |
FUNCTION_FOREING_VALUE, |
|
49 | 50 |
Range.is(1), |
50 | 51 |
"Return the value of a field throw a relation from other tables.", |
51 | 52 |
"FOREING VALUE FROM {{field1_name.field2_name}}", |
... | ... | |
58 | 59 |
|
59 | 60 |
private Feature current_row(Interpreter interpreter) { |
60 | 61 |
try { |
61 |
Feature f = (Feature) interpreter.call(DALFunctions.FUNCTION_CURRENT_ROW);
|
|
62 |
Feature f = (Feature) interpreter.call(FUNCTION_CURRENT_ROW); |
|
62 | 63 |
return f; |
63 | 64 |
} catch (Exception ex) { |
64 | 65 |
return null; |
... | ... | |
67 | 68 |
|
68 | 69 |
@Override |
69 | 70 |
public Object call(Interpreter interpreter, Object[] args) throws Exception { |
70 |
ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder(); |
|
71 | 71 |
UnmodifiableBasicList<String> fieldNames; |
72 | 72 |
Object fields_o = getObject(args, 0); |
73 |
if (fields_o instanceof List) { |
|
73 |
if (fields_o instanceof String[]) { |
|
74 |
fieldNames = new UnmodifiableBasicListArrayAdapter<>((String[]) fields_o); |
|
75 |
} else if (fields_o instanceof List) { |
|
74 | 76 |
fieldNames = new UnmodifiableBasicListAdapter<>((List<String>) fields_o); |
75 | 77 |
} else if (fields_o instanceof String) { |
76 | 78 |
fieldNames = new UnmodifiableBasicListAdapter<>(Arrays.asList(((String) fields_o).split("[.]"))); |
... | ... | |
110 | 112 |
} |
111 | 113 |
} |
112 | 114 |
|
115 |
|
|
116 |
|
|
113 | 117 |
} |
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 | ||
---|---|---|
32 | 32 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
33 | 33 |
import org.gvsig.fmap.dal.DALLocator; |
34 | 34 |
import org.gvsig.fmap.dal.DataManager; |
35 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
|
36 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT; |
|
35 | 37 |
import org.gvsig.fmap.dal.DataStore; |
36 | 38 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
37 | 39 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
... | ... | |
47 | 49 |
|
48 | 50 |
public SelectCountFunction() { |
49 | 51 |
super(DALFunctions.GROUP_DATA_ACCESS, |
50 |
DALFunctions.FUNCTION_SELECT_COUNT,
|
|
52 |
FUNCTION_SELECT_COUNT, |
|
51 | 53 |
Range.between(1,2), |
52 | 54 |
"Returns the number of features of the table by applying the filter indicated.\n" + |
53 | 55 |
"The syntax is:\n\n"+ |
... | ... | |
60 | 62 |
"filter - boolean expression with the filter to apply", |
61 | 63 |
}, |
62 | 64 |
"Long", |
63 |
true
|
|
65 |
false
|
|
64 | 66 |
); |
65 | 67 |
} |
66 | 68 |
|
... | ... | |
100 | 102 |
try { |
101 | 103 |
DataStore store = this.getStore(storeName); |
102 | 104 |
if (store == null ) { |
103 |
throw new ExpressionRuntimeException("Cant locate the store '" + storeName + "' in function '" + DALFunctions.FUNCTION_SELECT + "'.");
|
|
105 |
throw new ExpressionRuntimeException("Cant locate the store '" + storeName + "' in function '" + FUNCTION_SELECT_COUNT + "'.");
|
|
104 | 106 |
} |
105 | 107 |
if (!(store instanceof FeatureStore)) { |
106 |
throw new ExpressionRuntimeException("The store'" + storeName + "' is not valid for function '" + DALFunctions.FUNCTION_SELECT + "', a FeatureStore is required.");
|
|
108 |
throw new ExpressionRuntimeException("The store'" + storeName + "' is not valid for function '" + FUNCTION_SELECT_COUNT + "', a FeatureStore is required.");
|
|
107 | 109 |
} |
108 | 110 |
featureStore = (FeatureStore) store; |
109 | 111 |
if (where == null ) { |
... | ... | |
118 | 120 |
} catch (ExpressionRuntimeException ex) { |
119 | 121 |
throw ex; |
120 | 122 |
} catch (Exception ex) { |
121 |
throw new ExpressionRuntimeException("Problems calling '" + DALFunctions.FUNCTION_SELECT + "' function", ex);
|
|
123 |
throw new ExpressionRuntimeException("Problems calling '" + FUNCTION_SELECT_COUNT + "' function", ex);
|
|
122 | 124 |
} finally { |
123 | 125 |
DisposeUtils.disposeQuietly(set); |
124 | 126 |
DisposeUtils.disposeQuietly(featureStore); |
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/CurrentRowFunction.java | ||
---|---|---|
27 | 27 |
import org.gvsig.expressionevaluator.Interpreter; |
28 | 28 |
import org.gvsig.expressionevaluator.impl.DALFunctions; |
29 | 29 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
30 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW; |
|
30 | 31 |
|
31 | 32 |
/** |
32 | 33 |
* |
... | ... | |
37 | 38 |
public CurrentRowFunction() { |
38 | 39 |
super( |
39 | 40 |
DALFunctions.GROUP_DATA_ACCESS, |
40 |
DALFunctions.FUNCTION_CURRENT_ROW,
|
|
41 |
FUNCTION_CURRENT_ROW, |
|
41 | 42 |
Range.is(0), |
42 | 43 |
"Return the current row when used in a table filter.\n" |
43 | 44 |
+ "Return null if used outer a table filter.", |
44 |
DALFunctions.FUNCTION_CURRENT_ROW + "()",
|
|
45 |
FUNCTION_CURRENT_ROW + "()", |
|
45 | 46 |
null, |
46 |
"Feature" |
|
47 |
"Feature", |
|
48 |
false |
|
47 | 49 |
); |
48 | 50 |
} |
49 | 51 |
|
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/CurrentStoreFunction.java | ||
---|---|---|
27 | 27 |
import org.gvsig.expressionevaluator.Interpreter; |
28 | 28 |
import org.gvsig.expressionevaluator.impl.DALFunctions; |
29 | 29 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
30 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW; |
|
31 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_STORE; |
|
30 | 32 |
import org.gvsig.fmap.dal.feature.Feature; |
31 | 33 |
|
32 | 34 |
/** |
... | ... | |
38 | 40 |
public CurrentStoreFunction() { |
39 | 41 |
super( |
40 | 42 |
DALFunctions.GROUP_DATA_ACCESS, |
41 |
DALFunctions.FUNCTION_CURRENT_STORE,
|
|
43 |
FUNCTION_CURRENT_STORE, |
|
42 | 44 |
Range.is(0), |
43 | 45 |
"Return the current store when used in a table filter.\n" |
44 | 46 |
+ "Return null if used outer a table filter.", |
45 |
DALFunctions.FUNCTION_CURRENT_STORE+"()",
|
|
47 |
FUNCTION_CURRENT_STORE+"()", |
|
46 | 48 |
null, |
47 | 49 |
"FeatureStore", |
48 | 50 |
false |
... | ... | |
51 | 53 |
|
52 | 54 |
private Feature current_row(Interpreter interpreter) { |
53 | 55 |
try { |
54 |
Feature f = (Feature) interpreter.call(DALFunctions.FUNCTION_CURRENT_ROW);
|
|
56 |
Feature f = (Feature) interpreter.call(FUNCTION_CURRENT_ROW); |
|
55 | 57 |
return f; |
56 | 58 |
} catch (Exception ex) { |
57 | 59 |
return null; |
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/ExistsFunction.java | ||
---|---|---|
30 | 30 |
import org.gvsig.expressionevaluator.Interpreter; |
31 | 31 |
import org.gvsig.expressionevaluator.impl.DALFunctions; |
32 | 32 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
33 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS; |
|
33 | 34 |
import org.gvsig.tools.util.UnmodifiableBasicCollection; |
34 | 35 |
import org.gvsig.tools.util.UnmodifiableBasicCollection64; |
35 | 36 |
|
... | ... | |
51 | 52 |
// NVL2(COALESCE(lista-subselect),FALSE,TRUE) |
52 | 53 |
// |
53 | 54 |
super(DALFunctions.SYMBOLTABLE_NAME, |
54 |
DALFunctions.FUNCTION_EXISTS,
|
|
55 |
FUNCTION_EXISTS, |
|
55 | 56 |
Range.between(1, 2), |
56 | 57 |
"Receive a list as an argument. Returns true if the list has some value and false if the list is empty.", |
57 |
DALFunctions.FUNCTION_EXISTS + "({{list}})",
|
|
58 |
FUNCTION_EXISTS + "({{list}})", |
|
58 | 59 |
new String[]{ |
59 | 60 |
"list - a list of values or null" |
60 | 61 |
}, |
61 | 62 |
"Boolean", |
62 |
true
|
|
63 |
false
|
|
63 | 64 |
); |
64 | 65 |
} |
65 | 66 |
|
... | ... | |
100 | 101 |
return false; |
101 | 102 |
} |
102 | 103 |
boolean isEmpty = true; |
103 |
if (list instanceof List) { |
|
104 |
if (list instanceof Object[]) { |
|
105 |
isEmpty = (((Object[]) list).length==0); |
|
106 |
} else if (list instanceof List) { |
|
104 | 107 |
isEmpty = ((List) list).isEmpty(); |
105 | 108 |
} else if (list instanceof UnmodifiableBasicCollection) { |
106 | 109 |
isEmpty = ((UnmodifiableBasicCollection) list).isEmpty(); |
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/IsSelectedCurrentRowFunction.java | ||
---|---|---|
27 | 27 |
import org.gvsig.expressionevaluator.Interpreter; |
28 | 28 |
import org.gvsig.expressionevaluator.impl.DALFunctions; |
29 | 29 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
30 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW; |
|
31 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_ISSELECTED_CURRENT_ROW; |
|
30 | 32 |
import org.gvsig.fmap.dal.feature.Feature; |
31 | 33 |
import org.gvsig.fmap.dal.feature.FeatureSelection; |
32 | 34 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
... | ... | |
40 | 42 |
public IsSelectedCurrentRowFunction() { |
41 | 43 |
super( |
42 | 44 |
DALFunctions.GROUP_DATA_ACCESS, |
43 |
DALFunctions.FUNCTION_ISSELECTED_CURRENT_ROW,
|
|
45 |
FUNCTION_ISSELECTED_CURRENT_ROW, |
|
44 | 46 |
Range.is(0), |
45 | 47 |
"Return if the current feature is selected in the store when used in a filter.\n" |
46 | 48 |
+ "Return false if used outer a filter.", |
47 |
DALFunctions.FUNCTION_ISSELECTED_CURRENT_ROW+"()",
|
|
49 |
FUNCTION_ISSELECTED_CURRENT_ROW+"()", |
|
48 | 50 |
null, |
49 | 51 |
"Boolean", |
50 | 52 |
false |
... | ... | |
53 | 55 |
|
54 | 56 |
private Feature current_row(Interpreter interpreter) { |
55 | 57 |
try { |
56 |
Feature f = (Feature) interpreter.call(DALFunctions.FUNCTION_CURRENT_ROW);
|
|
58 |
Feature f = (Feature) interpreter.call(FUNCTION_CURRENT_ROW); |
|
57 | 59 |
return f; |
58 | 60 |
} catch (Exception ex) { |
59 | 61 |
return null; |
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 | ||
---|---|---|
35 | 35 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
36 | 36 |
import org.gvsig.fmap.dal.DALLocator; |
37 | 37 |
import org.gvsig.fmap.dal.DataManager; |
38 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
|
38 | 39 |
import org.gvsig.fmap.dal.DataStore; |
39 | 40 |
import org.gvsig.fmap.dal.feature.Feature; |
40 | 41 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
... | ... | |
49 | 50 |
|
50 | 51 |
public SelectFunction() { |
51 | 52 |
super(DALFunctions.GROUP_DATA_ACCESS, |
52 |
DALFunctions.FUNCTION_SELECT,
|
|
53 |
FUNCTION_SELECT, |
|
53 | 54 |
Range.between(1,5), |
54 | 55 |
"Returns a list of features of the table by applying the filter, order and limit indicated.\n"+ |
55 | 56 |
"The syntax is:\n\n"+ |
... | ... | |
64 | 65 |
"limit - Maximum number of features to return" |
65 | 66 |
}, |
66 | 67 |
"List", |
67 |
true
|
|
68 |
false
|
|
68 | 69 |
); |
69 | 70 |
} |
70 | 71 |
|
... | ... | |
87 | 88 |
public boolean useArgumentsInsteadObjects() { |
88 | 89 |
return true; |
89 | 90 |
} |
90 |
|
|
91 |
|
|
91 | 92 |
@Override |
92 | 93 |
public Object call(Interpreter interpreter, Object[] args) throws Exception { |
93 | 94 |
throw new UnsupportedOperationException(); |
... | ... | |
112 | 113 |
try { |
113 | 114 |
DataStore store = this.getStore(storeName); |
114 | 115 |
if (store == null ) { |
115 |
throw new ExpressionRuntimeException("Cant locate the store '" + storeName + "' in function '" + DALFunctions.FUNCTION_SELECT + "'.");
|
|
116 |
throw new ExpressionRuntimeException("Cant locate the store '" + storeName + "' in function '" + FUNCTION_SELECT + "'."); |
|
116 | 117 |
} |
117 | 118 |
if (!(store instanceof FeatureStore)) { |
118 |
throw new ExpressionRuntimeException("The store'" + storeName + "' is not valid for function '" + DALFunctions.FUNCTION_SELECT + "', a FeatureStore is required.");
|
|
119 |
throw new ExpressionRuntimeException("The store'" + storeName + "' is not valid for function '" + FUNCTION_SELECT + "', a FeatureStore is required."); |
|
119 | 120 |
} |
120 | 121 |
FeatureStore featureStore = (FeatureStore) store; |
121 | 122 |
List<Feature> features; |
... | ... | |
141 | 142 |
} catch (ExpressionRuntimeException ex) { |
142 | 143 |
throw ex; |
143 | 144 |
} catch (Exception ex) { |
144 |
throw new ExpressionRuntimeException("Problems calling '" + DALFunctions.FUNCTION_SELECT + "' function", ex);
|
|
145 |
throw new ExpressionRuntimeException("Problems calling '" + FUNCTION_SELECT + "' function", ex); |
|
145 | 146 |
} |
146 | 147 |
} |
147 | 148 |
|
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/DALFunctions.java | ||
---|---|---|
34 | 34 |
|
35 | 35 |
public static final String GROUP_DATA_ACCESS = "Data access"; |
36 | 36 |
|
37 |
public static final String FUNCTION_CURRENT_ROW = "CURRENT_ROW"; |
|
38 |
public static final String FUNCTION_CURRENT_STORE = "CURRENT_STORE"; |
|
39 |
public static final String FUNCTION_ISSELECTED_CURRENT_ROW = "ISSELECTED_CURRENT_ROW"; |
|
40 |
|
|
41 |
public static final String FUNCTION_SELECT = "SELECT"; |
|
42 |
public static final String FUNCTION_SELECT_COUNT = "SELECT_COUNT"; |
|
43 |
public static final String FUNCTION_EXISTS = "EXISTS"; |
|
44 |
public static final String FUNCTION_FOREING_VALUE = "FOREING_VALUE"; |
|
45 |
|
|
46 | 37 |
} |
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 | ||
---|---|---|
38 | 38 |
import org.gvsig.expressionevaluator.impl.DefaultStatement.ArgsBuilderFromNames; |
39 | 39 |
import org.gvsig.expressionevaluator.impl.function.dataaccess.ExistsFunction; |
40 | 40 |
import org.gvsig.expressionevaluator.spi.AbstractGrammarFactory; |
41 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE; |
|
42 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
|
43 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT; |
|
41 | 44 |
|
42 | 45 |
/** |
43 | 46 |
* |
... | ... | |
49 | 52 |
|
50 | 53 |
private class ExistsStatementBuilder extends DefaultStatement.StatementBuilderBase { |
51 | 54 |
|
52 |
private final String ListID; |
|
55 |
private final String listID; |
|
56 |
private final String existsID; |
|
53 | 57 |
|
54 |
public ExistsStatementBuilder(String ListID) { |
|
55 |
super(ExistsFunction.NAME, new ArgsBuilderFromNames(ListID)); |
|
56 |
this.ListID = ListID; |
|
58 |
public ExistsStatementBuilder(String listID, String existsID) { |
|
59 |
super(ExistsFunction.NAME, new ArgsBuilderFromNames(listID,existsID)); |
|
60 |
this.listID = listID; |
|
61 |
this.existsID = existsID; |
|
57 | 62 |
} |
58 | 63 |
|
59 | 64 |
@Override |
60 | 65 |
public Code build(StatementContext context) { |
61 |
UUID x = UUID.randomUUID(); |
|
62 |
String exists_id = x.toString().replaceAll("-", ""); |
|
63 | 66 |
|
64 | 67 |
CodeBuilder codeBuilder = context.getCodeBuilder(); |
65 | 68 |
Caller code = (Caller) super.build(context); |
66 | 69 |
BaseCodes args = (BaseCodes) code.parameters(); |
67 |
args.add("EXISTS_ID", codeBuilder.constant(exists_id)); |
|
70 |
if( args.size()<2 || args.get("ID")==null ) { |
|
71 |
String exists_id = "EXISTS"+UUID.randomUUID().toString().replaceAll("-", ""); |
|
72 |
args.add("ID", codeBuilder.constant(exists_id)); |
|
73 |
} |
|
68 | 74 |
code = codeBuilder.function(ExistsFunction.NAME, args); |
69 | 75 |
return code; |
70 | 76 |
} |
... | ... | |
93 | 99 |
|
94 | 100 |
stmt = theGrammar.createStatement("EXISTS"); |
95 | 101 |
stmt.addRule(stmt.require_any_token("EXISTS")); |
102 |
stmt.addRule(stmt.require_any_token("(")); |
|
96 | 103 |
stmt.addRule(stmt.require_expression("LIST")); |
97 |
stmt.builder(new ExistsStatementBuilder("LIST")); |
|
104 |
stmt.addRule(stmt.optional_any_token(",") |
|
105 |
.addRuleOnTrue(stmt.require_expression("ID")) |
|
106 |
); |
|
107 |
stmt.addRule(stmt.require_any_token(")")); |
|
108 |
stmt.builder(new ExistsStatementBuilder("LIST","ID")); |
|
98 | 109 |
theGrammar.addStatement(stmt); |
99 | 110 |
|
100 | 111 |
stmt = theGrammar.createStatement("FOREING_VALUE"); |
... | ... | |
103 | 114 |
stmt.addRule(stmt.require_any_token("FROM")); |
104 | 115 |
stmt.addRule(stmt.require_identifiers("IDENTIFIERS",".")); |
105 | 116 |
stmt.code( |
106 |
DALFunctions.FUNCTION_FOREING_VALUE,
|
|
117 |
FUNCTION_FOREING_VALUE, |
|
107 | 118 |
stmt.args_names("IDENTIFIERS") |
108 | 119 |
); |
109 | 120 |
theGrammar.addStatement(stmt); |
... | ... | |
144 | 155 |
); |
145 | 156 |
stmt.addRule(stmt.require_any_token(";")); |
146 | 157 |
stmt.code( |
147 |
DALFunctions.FUNCTION_SELECT,
|
|
158 |
FUNCTION_SELECT, |
|
148 | 159 |
stmt.args_names("TABLE","WHERE","ORDER#","ORDER_MODE#","LIMIT") |
149 | 160 |
); |
150 | 161 |
theGrammar.addStatement(stmt); |
... | ... | |
162 | 173 |
); |
163 | 174 |
stmt.addRule(stmt.require_any_token(";")); |
164 | 175 |
stmt.code( |
165 |
DALFunctions.FUNCTION_SELECT_COUNT,
|
|
176 |
FUNCTION_SELECT_COUNT, |
|
166 | 177 |
stmt.args_names("TABLE","WHERE") |
167 | 178 |
); |
168 | 179 |
theGrammar.addStatement(stmt); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/H2SpatialFormatter.java | ||
---|---|---|
4 | 4 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
5 | 5 |
import org.gvsig.expressionevaluator.Formatter; |
6 | 6 |
import org.gvsig.fmap.dal.SQLBuilder; |
7 |
import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter.Select; |
|
7 | 8 |
|
8 | 9 |
/** |
9 | 10 |
* |
... | ... | |
28 | 29 |
new Decode(this.builder, this), |
29 | 30 |
new ILike(this.builder, this), |
30 | 31 |
new Constant(this.builder, this), |
31 |
new ST_AsBinary(this.builder, this) |
|
32 |
new ST_AsBinary(this.builder, this), |
|
33 |
new Exists(this.builder, this), |
|
34 |
new Select(this.builder, this), |
|
32 | 35 |
}; |
33 | 36 |
} |
34 | 37 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/ST_AsBinary.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import static org.gvsig.expressionevaluator.GeometryExpressionBuilder.FUNCTION_ST_ASBINARY; |
7 | 8 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
... | ... | |
33 | 34 |
|
34 | 35 |
@Override |
35 | 36 |
public String format(Value function) { |
36 |
List<Value> parameters = ((Function) function).parameters();
|
|
37 |
String p1 = parameters.get(0).toString(formatter); |
|
37 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
38 |
String p1 = parameters.get(0).getValue().toString(formatter);
|
|
38 | 39 |
String r = MessageFormat.format("NVL2({0},ST_AsBinary({0}),NULL)", p1); |
39 | 40 |
return r; |
40 | 41 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/Exists.java | ||
---|---|---|
1 |
package org.gvsig.fmap.dal.store.h2.expressionbuilderformatter; |
|
2 |
|
|
3 |
import org.apache.commons.lang3.StringUtils; |
|
4 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
5 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
|
6 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
|
7 |
import org.gvsig.expressionevaluator.Formatter; |
|
8 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS; |
|
9 |
import org.gvsig.fmap.dal.SQLBuilder; |
|
10 |
|
|
11 |
/** |
|
12 |
* |
|
13 |
* @author jjdelcerro |
|
14 |
*/ |
|
15 |
public class Exists implements Formatter<Value> { |
|
16 |
|
|
17 |
private final SQLBuilder sqlbuilder; |
|
18 |
private final Formatter<Value> formatter; |
|
19 |
|
|
20 |
public Exists(SQLBuilder sqlbuilder, Formatter<Value> formatter) { |
|
21 |
this.sqlbuilder = sqlbuilder; |
|
22 |
this.formatter = formatter; |
|
23 |
} |
|
24 |
@Override |
|
25 |
public boolean canApply(ExpressionBuilder.Value value) { |
|
26 |
if (value instanceof ExpressionBuilder.Function) { |
|
27 |
return StringUtils.equalsIgnoreCase(FUNCTION_EXISTS, ((Function) value).name()); |
|
28 |
} |
|
29 |
return false; |
|
30 |
} |
|
31 |
|
|
32 |
@Override |
|
33 |
public String format(Value function0) { |
|
34 |
Function function = (Function) function0; |
|
35 |
Value exp = function.parameters().get(0).getValue(); |
|
36 |
return "NVL2(COALESCE("+exp.toString(formatter)+"),FALSE,TRUE)"; |
|
37 |
} |
|
38 |
|
|
39 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/ST_AsEWKB.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import static org.gvsig.expressionevaluator.GeometryExpressionBuilder.FUNCTION_ST_ASEWKB; |
7 | 8 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
... | ... | |
33 | 34 |
|
34 | 35 |
@Override |
35 | 36 |
public String format(Value function) { |
36 |
List<Value> parameters = ((Function) function).parameters();
|
|
37 |
String p1 = parameters.get(0).toString(formatter); |
|
38 |
String p2 = parameters.get(1).toString(formatter); |
|
37 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
38 |
String p1 = parameters.get(0).getValue().toString(formatter);
|
|
39 |
String p2 = parameters.get(1).getValue().toString(formatter);
|
|
39 | 40 |
String r = MessageFormat.format("ST_AsWKB({0}, {1})", p1, p2); |
40 | 41 |
return r; |
41 | 42 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/Decode.java | ||
---|---|---|
3 | 3 |
import java.util.List; |
4 | 4 |
import java.util.Objects; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
7 | 8 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_DECODE; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
... | ... | |
28 | 29 |
public boolean canApply(ExpressionBuilder.Value value) { |
29 | 30 |
if (value instanceof ExpressionBuilder.Function) { |
30 | 31 |
if( StringUtils.equalsIgnoreCase(FUNCTION_DECODE, ((Function) value).name()) ) { |
31 |
List<Value> parameters = ((Function) value).parameters();
|
|
32 |
List<Pair<String,Value>> parameters = ((Function) value).parameters();
|
|
32 | 33 |
if( parameters.size()==2) { |
33 |
Value p1 = parameters.get(0); |
|
34 |
Value p2 = parameters.get(1); |
|
34 |
Value p1 = parameters.get(0).getValue();
|
|
35 |
Value p2 = parameters.get(1).getValue();
|
|
35 | 36 |
if( p1 instanceof ExpressionBuilder.Constant && |
36 | 37 |
p2 instanceof ExpressionBuilder.Constant && |
37 | 38 |
((ExpressionBuilder.Constant)p1).value() instanceof String && |
... | ... | |
51 | 52 |
|
52 | 53 |
@Override |
53 | 54 |
public String format(Value function) { |
54 |
List<Value> parameters = ((Function) function).parameters();
|
|
55 |
Value p1 = parameters.get(0); |
|
55 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
56 |
Value p1 = parameters.get(0).getValue();
|
|
56 | 57 |
String p1value = Objects.toString(((ExpressionBuilder.Constant)p1).value(), ""); |
57 | 58 |
String r = "X'"+p1value+"'"; |
58 | 59 |
return r; |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/ST_ExtentAggregate.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
7 | 8 |
import static org.gvsig.expressionevaluator.GeometryExpressionBuilder.FUNCTION_ST_EXTENTAGGREGATE; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
... | ... | |
33 | 34 |
|
34 | 35 |
@Override |
35 | 36 |
public String format(Value function) { |
36 |
List<Value> parameters = ((Function) function).parameters();
|
|
37 |
String p1 = parameters.get(0).toString(formatter); |
|
37 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
38 |
String p1 = parameters.get(0).getValue().toString(formatter);
|
|
38 | 39 |
String r = MessageFormat.format("ST_Extent({0})", p1); |
39 | 40 |
return r; |
40 | 41 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/IsNull.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import org.gvsig.expressionevaluator.Code.Constant; |
7 | 8 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
8 | 9 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_IS; |
... | ... | |
28 | 29 |
public boolean canApply(Value value) { |
29 | 30 |
if (value instanceof Function) { |
30 | 31 |
if( StringUtils.equalsIgnoreCase(OPERATOR_IS, ((Function) value).name()) ) { |
31 |
List<Value> parameters = ((Function) value).parameters();
|
|
32 |
Value p2 = parameters.get(1); |
|
32 |
List<Pair<String,Value>> parameters = ((Function) value).parameters();
|
|
33 |
Value p2 = parameters.get(1).getValue();
|
|
33 | 34 |
if( p2 instanceof Constant && ((Constant)p2).value()==null ) { |
34 | 35 |
return true; |
35 | 36 |
} |
... | ... | |
40 | 41 |
|
41 | 42 |
@Override |
42 | 43 |
public String format(Value function) { |
43 |
List<Value> parameters = ((Function) function).parameters();
|
|
44 |
String p1 = parameters.get(0).toString(formatter); |
|
44 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
45 |
String p1 = parameters.get(0).getValue().toString(formatter);
|
|
45 | 46 |
String r = MessageFormat.format("( ({0}) IS NULL )", p1); |
46 | 47 |
return r; |
47 | 48 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/IsNotNull.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import org.gvsig.expressionevaluator.Code.Constant; |
7 | 8 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
8 | 9 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_IS; |
... | ... | |
30 | 31 |
if (value_not instanceof Function) { |
31 | 32 |
// NOT( IS( p1, NULL) ) |
32 | 33 |
if( StringUtils.equalsIgnoreCase(OPERATOR_NOT, ((Function) value_not).name()) ) { |
33 |
List<Value> parameters = ((Function) value_not).parameters();
|
|
34 |
Value value_is = parameters.get(0); |
|
34 |
List<Pair<String,Value>> parameters = ((Function) value_not).parameters();
|
|
35 |
Value value_is = parameters.get(0).getValue();
|
|
35 | 36 |
if( value_is instanceof Function && StringUtils.equalsIgnoreCase(OPERATOR_IS, ((Function)value_is).name()) ) { |
36 |
List<Value> parameters_is = ((Function)value_is).parameters();
|
|
37 |
Value is_p2 = parameters_is.get(1); |
|
37 |
List<Pair<String,Value>> parameters_is = ((Function) value_is).parameters();
|
|
38 |
Value is_p2 = parameters_is.get(1).getValue();
|
|
38 | 39 |
if( is_p2 instanceof Constant && ((Constant)is_p2).value()==null ) { |
39 | 40 |
return true; |
40 | 41 |
} |
... | ... | |
48 | 49 |
public String format(Value value_not) { |
49 | 50 |
// NOT( IS( p1, NULL) ) |
50 | 51 |
|
51 |
List<Value> parameters = ((Function) value_not).parameters();
|
|
52 |
Value value_is = parameters.get(0); |
|
53 |
List<Value> parameters_is = ((Function)value_is).parameters();
|
|
54 |
Value is_p1 = parameters_is.get(0); |
|
52 |
List<Pair<String,Value>> parameters = ((Function) value_not).parameters();
|
|
53 |
Value value_is = parameters.get(0).getValue();
|
|
54 |
List<Pair<String,Value>> parameters_is = ((Function)value_is).parameters();
|
|
55 |
Value is_p1 = parameters_is.get(0).getValue();
|
|
55 | 56 |
String r = MessageFormat.format( |
56 | 57 |
"( ({0}) IS NOT NULL )", |
57 | 58 |
is_p1.toString(formatter) |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/IfNull.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
7 | 8 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_IFNULL; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
... | ... | |
36 | 37 |
|
37 | 38 |
@Override |
38 | 39 |
public String format(Value function) { |
39 |
List<Value> parameters = ((Function) function).parameters();
|
|
40 |
String p1 = parameters.get(0).toString(formatter); |
|
41 |
String p2 = parameters.get(1).toString(formatter); |
|
42 |
String p3 = parameters.get(2).toString(formatter); |
|
40 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
41 |
String p1 = parameters.get(0).getValue().toString(formatter);
|
|
42 |
String p2 = parameters.get(1).getValue().toString(formatter);
|
|
43 |
String p3 = parameters.get(2).getValue().toString(formatter);
|
|
43 | 44 |
String r = MessageFormat.format( |
44 | 45 |
"NVL2({0}, {1}, {2})", |
45 | 46 |
p1, |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/ST_Intersects.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
7 | 8 |
import static org.gvsig.expressionevaluator.GeometryExpressionBuilder.FUNCTION_ST_INTERSECTS; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
... | ... | |
33 | 34 |
|
34 | 35 |
@Override |
35 | 36 |
public String format(Value function) { |
36 |
List<Value> parameters = ((Function) function).parameters();
|
|
37 |
String p1 = parameters.get(0).toString(formatter); |
|
38 |
String p2 = parameters.get(1).toString(formatter); |
|
37 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
38 |
String p1 = parameters.get(0).getValue().toString(formatter);
|
|
39 |
String p2 = parameters.get(1).getValue().toString(formatter);
|
|
39 | 40 |
String r = MessageFormat.format("( (({0}) && ({1})) AND ST_Intersects(({0}),({1}) ))", p1, p2); |
40 | 41 |
return r; |
41 | 42 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/expressionbuilderformatter/ST_GeomFromEWKB.java | ||
---|---|---|
3 | 3 |
import java.text.MessageFormat; |
4 | 4 |
import java.util.List; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.tuple.Pair; |
|
6 | 7 |
import static org.gvsig.expressionevaluator.GeometryExpressionBuilder.FUNCTION_ST_GEOMFROMEWKB; |
7 | 8 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
... | ... | |
33 | 34 |
|
34 | 35 |
@Override |
35 | 36 |
public String format(Value function) { |
36 |
List<Value> parameters = ((Function) function).parameters();
|
|
37 |
String p1 = parameters.get(0).toString(formatter); |
|
38 |
String p2 = parameters.get(1).toString(formatter); |
|
37 |
List<Pair<String,Value>> parameters = ((Function) function).parameters();
|
|
38 |
String p1 = parameters.get(0).getValue().toString(formatter);
|
|
39 |
String p2 = parameters.get(1).getValue().toString(formatter);
|
|
39 | 40 |
String r = MessageFormat.format("ST_GeomFromWKB({0}, {1})", p1, p2); |
40 | 41 |
return r; |
41 | 42 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc2/SQLBuilderTest.java | ||
---|---|---|
574 | 574 |
System.out.println("# SQL1:: " + sqlbuilder.toString()); |
575 | 575 |
|
576 | 576 |
List<String> attrNames = new ArrayList<>(); |
577 |
helper.replaceForeingValueFunction(sqlbuilder, ft, attrNames);
|
|
577 |
helper.processSpecialFunctions(sqlbuilder, ft, attrNames);
|
|
578 | 578 |
|
579 | 579 |
System.out.println("# SQL2:: " + sqlbuilder.toString()); |
580 | 580 |
System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names())); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/JDBCHelper.java | ||
---|---|---|
184 | 184 |
|
185 | 185 |
public boolean isThreadSafe(); |
186 | 186 |
|
187 |
public void replaceForeingValueFunction(
|
|
187 |
public void processSpecialFunctions(
|
|
188 | 188 |
SQLBuilder sqlbuilder, |
189 | 189 |
FeatureType type, |
190 | 190 |
List<String> extra_column_names // Output param |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/ResultSetForSetProviderOperation.java | ||
---|---|---|
214 | 214 |
PROP_FEATURE_TYPE, this.storeType, |
215 | 215 |
PROP_TABLE, table |
216 | 216 |
); |
217 |
this.helper.replaceForeingValueFunction(sqlbuilder, storeType, extraColumnNames);
|
|
217 |
this.helper.processSpecialFunctions(sqlbuilder, storeType, extraColumnNames);
|
|
218 | 218 |
String sql = sqlbuilder.toString(); |
219 | 219 |
return sql; |
220 | 220 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/CountOperation.java | ||
---|---|---|
131 | 131 |
} |
132 | 132 |
} |
133 | 133 |
} |
134 |
this.helper.replaceForeingValueFunction(sqlbuilder, featureType, null);
|
|
134 |
this.helper.processSpecialFunctions(sqlbuilder, featureType, null);
|
|
135 | 135 |
|
136 | 136 |
select.remove_all_columns(); |
137 | 137 |
select.column().value(sqlbuilder.count().all()); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/CalculateEnvelopeOfColumnOperation.java | ||
---|---|---|
114 | 114 |
sqlbuilder.select().where().and( |
115 | 115 |
expbuilder.not_is_null(expbuilder.column(columnName)) |
116 | 116 |
); |
117 |
this.helper.replaceForeingValueFunction(sqlbuilder, featureType, null);
|
|
117 |
this.helper.processSpecialFunctions(sqlbuilder, featureType, null);
|
|
118 | 118 |
sqlbuilder.setProperties( |
119 | 119 |
Variable.class, |
120 | 120 |
PROP_TABLE, table |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/TableIsEmptyOperation.java | ||
---|---|---|
67 | 67 |
sqlbuilder.select().where().and(expbuilder.toValue(filter)); |
68 | 68 |
} |
69 | 69 |
sqlbuilder.select().limit(1); |
70 |
this.helper.replaceForeingValueFunction(sqlbuilder, featureType, null);
|
|
70 |
this.helper.processSpecialFunctions(sqlbuilder, featureType, null);
|
|
71 | 71 |
sqlbuilder.setProperties( |
72 | 72 |
ExpressionBuilder.Variable.class, |
73 | 73 |
PROP_TABLE, table |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/expressionbuilderformatter/Exists.java | ||
---|---|---|
1 |
package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter; |
|
2 |
|
|
3 |
import org.apache.commons.lang3.StringUtils; |
|
4 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
5 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
|
6 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
|
7 |
import org.gvsig.expressionevaluator.Formatter; |
|
8 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS; |
|
9 |
import org.gvsig.fmap.dal.SQLBuilder; |
|
10 |
|
|
11 |
/** |
|
12 |
* |
|
13 |
* @author jjdelcerro |
|
14 |
*/ |
|
15 |
public class Exists implements Formatter<Value> { |
|
16 |
|
|
17 |
private final SQLBuilder sqlbuilder; |
|
18 |
private final Formatter<Value> formatter; |
|
19 |
|
|
20 |
public Exists(SQLBuilder sqlbuilder, Formatter<Value> formatter) { |
|
21 |
this.sqlbuilder = sqlbuilder; |
|
22 |
this.formatter = formatter; |
|
23 |
} |
|
24 |
@Override |
|
25 |
public boolean canApply(ExpressionBuilder.Value value) { |
|
26 |
if (value instanceof ExpressionBuilder.Function) { |
|
27 |
return StringUtils.equalsIgnoreCase(FUNCTION_EXISTS, ((Function) value).name()); |
|
28 |
} |
|
29 |
return false; |
|
30 |
} |
|
31 |
|
|
32 |
@Override |
|
33 |
public String format(Value function0) { |
|
34 |
Function function = (Function) function0; |
|
35 |
Value exp = function.parameters().get(0).getValue(); |
|
36 |
return "EXISTS("+exp.toString(formatter)+")"; |
|
37 |
} |
|
38 |
|
|
39 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/expressionbuilderformatter/Select.java | ||
---|---|---|
1 |
package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter; |
|
2 |
|
|
3 |
import org.apache.commons.lang3.StringUtils; |
|
4 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
5 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
|
6 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
|
7 |
import org.gvsig.expressionevaluator.Formatter; |
|
8 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
|
9 |
import org.gvsig.fmap.dal.SQLBuilder; |
|
10 |
|
|
11 |
/** |
|
12 |
* |
|
13 |
* @author jjdelcerro |
|
14 |
*/ |
|
15 |
public class Select implements Formatter<Value> { |
|
16 |
|
|
17 |
private final SQLBuilder sqlbuilder; |
|
18 |
private final Formatter<Value> formatter; |
|
19 |
|
|
20 |
public Select(SQLBuilder sqlbuilder, Formatter<Value> formatter) { |
|
21 |
this.sqlbuilder = sqlbuilder; |
|
22 |
this.formatter = formatter; |
|
23 |
} |
|
24 |
@Override |
|
25 |
public boolean canApply(ExpressionBuilder.Value value) { |
|
26 |
if (value instanceof ExpressionBuilder.Function) { |
|
27 |
return StringUtils.equalsIgnoreCase(FUNCTION_SELECT, ((Function) value).name()); |
Also available in: Unified diff