Revision 46082

View differences:

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