Revision 46082
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 | ||
---|---|---|
125 | 125 |
public static final String FUNCTION_DICT = "DICT"; |
126 | 126 |
public static final String FUNCTION_$CONSTANT = "$CONSTANT"; |
127 | 127 |
public static final String FUNCTION_$IDENTIFIER = "$IDENTIFIER"; |
128 |
public static final String FUNCTION_$EVAL = "$EVAL";
|
|
128 |
public static final String FUNCTION_$HOSTEXPRESSION = "$HOSTEXPRESSION";
|
|
129 | 129 |
|
130 | 130 |
public static final String FUNCTION_GETATTR = "GETATTR"; |
131 | 131 |
public static final String FUNCTION_GETITEM = "GETITEM"; |
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/CodeBuilder.java | ||
---|---|---|
80 | 80 |
|
81 | 81 |
Code let(String identifier, Code value); |
82 | 82 |
|
83 |
Code $eval(Code value);
|
|
83 |
Code $HostExpression(Code value, String mode_specier);
|
|
84 | 84 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestCompiler.java | ||
---|---|---|
582 | 582 |
|
583 | 583 |
Code code = compiler.compileExpression(source); |
584 | 584 |
code.link(this.createSymbolTable()); |
585 |
assertEquals( "($EVAL(\"a\") + \"b\")", code.toString());
|
|
585 |
assertEquals( "($HOSTEXPRESSION(\"a\", 'IN') + \"b\")", code.toString());
|
|
586 | 586 |
} |
587 | 587 |
|
588 | 588 |
public void testColon2() { |
... | ... | |
592 | 592 |
|
593 | 593 |
Code code = compiler.compileExpression(source); |
594 | 594 |
code.link(this.createSymbolTable()); |
595 |
assertEquals( "($EVAL((\"a\" + \"b\")) + \"c\")", code.toString());
|
|
595 |
assertEquals( "($HOSTEXPRESSION((\"a\" + \"b\"), 'IN') + \"c\")", code.toString());
|
|
596 | 596 |
} |
597 | 597 |
|
598 | 598 |
|
... | ... | |
603 | 603 |
|
604 | 604 |
Code code = compiler.compileExpression(source); |
605 | 605 |
code.link(this.createSymbolTable()); |
606 |
assertEquals( "GETATTR($EVAL(\"a\"), 'c')", code.toString());
|
|
606 |
assertEquals( "GETATTR($HOSTEXPRESSION(\"a\", 'IN'), 'c')", code.toString());
|
|
607 | 607 |
} |
608 | 608 |
|
609 | 609 |
public void testColon4() { |
... | ... | |
613 | 613 |
|
614 | 614 |
Code code = compiler.compileExpression(source); |
615 | 615 |
code.link(this.createSymbolTable()); |
616 |
assertEquals( "GETATTR($EVAL(\"a\"), 'c')", code.toString());
|
|
616 |
assertEquals( "GETATTR($HOSTEXPRESSION(\"a\", 'IN'), 'c')", code.toString());
|
|
617 | 617 |
} |
618 | 618 |
|
619 |
|
|
620 |
|
|
621 | 619 |
} |
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/DefaultCompiler.java | ||
---|---|---|
568 | 568 |
// Solo estamos dando soporte al especificador de modo "IN". |
569 | 569 |
lexer.next(); |
570 | 570 |
token = lexer.look(); |
571 |
String mode_specifier = "IN"; |
|
571 | 572 |
if( token.getType() == Token.IDENTIFIER ) { |
572 | 573 |
switch(token.getLiteral().trim().toUpperCase()) { |
573 | 574 |
case "IN": |
574 | 575 |
lexer.next(); |
576 |
mode_specifier = "IN"; |
|
575 | 577 |
break; |
576 | 578 |
case "OUT": |
579 |
lexer.next(); |
|
580 |
mode_specifier = "OUT"; |
|
581 |
break; |
|
577 | 582 |
case "INOUT": |
578 |
// Invalid mode specifier in host expression |
|
579 |
throw new ExpressionSyntaxException( |
|
580 |
I18N.invalid_mode_specifier_in_host_expression(), |
|
581 |
lexer |
|
582 |
); |
|
583 |
lexer.next(); |
|
584 |
mode_specifier = "INOUT"; |
|
585 |
break; |
|
583 | 586 |
} |
584 | 587 |
} |
585 | 588 |
Code op = parse_termino(); |
586 |
return codeBuilder.$eval(op);
|
|
589 |
return codeBuilder.$HostExpression(op, mode_specifier);
|
|
587 | 590 |
} |
588 | 591 |
return parse_termino(); |
589 | 592 |
} |
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 | ||
---|---|---|
989 | 989 |
} |
990 | 990 |
|
991 | 991 |
@Override |
992 |
public Code $eval(Code obj) {
|
|
992 |
public Code $HostExpression(Code obj, String mode_specifier) {
|
|
993 | 993 |
BaseCodes args = args(); |
994 | 994 |
args.add(obj); |
995 |
return function(ExpressionBuilder.FUNCTION_$EVAL, args); |
|
995 |
args.add(constant(mode_specifier)); |
|
996 |
return function(ExpressionBuilder.FUNCTION_$HOSTEXPRESSION, args); |
|
996 | 997 |
} |
997 | 998 |
|
998 | 999 |
} |
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/symboltable/ProgrammingSymbolTable.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import org.gvsig.expressionevaluator.Function; |
4 | 4 |
import org.gvsig.expressionevaluator.impl.function.programming.$ConstantFunction; |
5 |
import org.gvsig.expressionevaluator.impl.function.programming.$EvalFunction;
|
|
5 |
import org.gvsig.expressionevaluator.impl.function.programming.$HostExpressionFunction;
|
|
6 | 6 |
import org.gvsig.expressionevaluator.impl.function.programming.$IdentifierFunction; |
7 | 7 |
import org.gvsig.expressionevaluator.impl.function.programming.CallFunction; |
8 | 8 |
import org.gvsig.expressionevaluator.impl.function.programming.CallMethodFunction; |
... | ... | |
92 | 92 |
this.addFunction(new ShowWindowFunction()); |
93 | 93 |
this.addFunction(new CreateHtmlPanelFunction()); |
94 | 94 |
this.addFunction(new SwingBlockFunction()); |
95 |
this.addFunction(new $EvalFunction());
|
|
95 |
this.addFunction(new $HostExpressionFunction());
|
|
96 | 96 |
} |
97 | 97 |
|
98 | 98 |
private void addOperator(Function operator) { |
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/$EvalFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.programming; |
|
2 |
|
|
3 |
import org.apache.commons.lang3.Range; |
|
4 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$EVAL; |
|
5 |
import org.gvsig.expressionevaluator.Function; |
|
6 |
import org.gvsig.expressionevaluator.Interpreter; |
|
7 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
8 |
|
|
9 |
public class $EvalFunction extends AbstractFunction { |
|
10 |
|
|
11 |
public $EvalFunction() { |
|
12 |
super(Function.GROUP_PROGRAMMING, |
|
13 |
FUNCTION_$EVAL, |
|
14 |
Range.is(1), |
|
15 |
"Returns the value passed as a parameter.\n", |
|
16 |
FUNCTION_$EVAL+"({{expression}})", |
|
17 |
null, |
|
18 |
"Object", |
|
19 |
false |
|
20 |
); |
|
21 |
} |
|
22 |
|
|
23 |
@Override |
|
24 |
public boolean allowConstantFolding() { |
|
25 |
return false; |
|
26 |
} |
|
27 |
|
|
28 |
@Override |
|
29 |
public Object call(Interpreter interpreter, final Object[] args) throws Exception { |
|
30 |
return args[0]; |
|
31 |
} |
|
32 |
|
|
33 |
|
|
34 |
} |
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/$HostExpressionFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.programming; |
|
2 |
|
|
3 |
import org.apache.commons.lang3.Range; |
|
4 |
import org.gvsig.expressionevaluator.Function; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$HOSTEXPRESSION; |
|
8 |
|
|
9 |
public class $HostExpressionFunction extends AbstractFunction { |
|
10 |
|
|
11 |
// https://docs.oracle.com/cd/A87860_01/doc/java.817/a83723/blangfe3.htm |
|
12 |
// Esta funcion esta pensada para dar soporte a la funcionadad de "Host expressions" de SQLJ |
|
13 |
|
|
14 |
public $HostExpressionFunction() { |
|
15 |
super(Function.GROUP_PROGRAMMING, |
|
16 |
FUNCTION_$HOSTEXPRESSION, |
|
17 |
Range.is(2), |
|
18 |
"Returns the value passed as a parameter.\n", |
|
19 |
FUNCTION_$HOSTEXPRESSION+"({{expression}},mode_specifier)", |
|
20 |
null, |
|
21 |
"Object", |
|
22 |
false |
|
23 |
); |
|
24 |
} |
|
25 |
|
|
26 |
@Override |
|
27 |
public boolean allowConstantFolding() { |
|
28 |
return false; |
|
29 |
} |
|
30 |
|
|
31 |
@Override |
|
32 |
public Object call(Interpreter interpreter, final Object[] args) throws Exception { |
|
33 |
return args[0]; |
|
34 |
} |
|
35 |
|
|
36 |
|
|
37 |
} |
Also available in: Unified diff