Revision 47320

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/SearchConditionFieldController.java
1243 1243
        if (parentDescriptor == null) {
1244 1244
            fieldOp = builder.expression().column(this.store.getName(), descriptor.getName());
1245 1245
            if (StringUtils.equalsIgnoreCase(operator, ExpressionBuilder.OPERATOR_ILIKE) && descriptor.getType() != DataTypes.STRING) {
1246
                fieldOp = builder.expression().toStr(fieldOp);
1246
                fieldOp = builder.expression().cast(fieldOp,DataTypes.STRING);
1247 1247
            }
1248 1248

  
1249 1249

  
......
1267 1267
                            descriptor.getName()
1268 1268
                    );
1269 1269
                    if (StringUtils.equalsIgnoreCase(operator, ExpressionBuilder.OPERATOR_ILIKE) && descriptor.getType() != DataTypes.STRING) {
1270
                        fieldOp = builder.expression().toStr(fieldOp);
1270
                        fieldOp = builder.expression().cast(fieldOp,DataTypes.STRING);
1271 1271
                    }
1272 1272

  
1273 1273
                    filter = builder.expression().binaryOperator(
......
1290 1290
                            descriptor.getName()
1291 1291
                    );
1292 1292
                    if (StringUtils.equalsIgnoreCase(operator, ExpressionBuilder.OPERATOR_ILIKE) && descriptor.getType() != DataTypes.STRING) {
1293
                        fieldOp = builder.expression().toStr(fieldOp);
1293
                        fieldOp = builder.expression().cast(fieldOp,DataTypes.STRING);
1294 1294
                    }
1295 1295
                    op_composition = builder.expression().binaryOperator(
1296 1296
                            operator,
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/DelegatedExpressionBuilder.java
556 556
    public Function cast(Value object, Value typeName) {
557 557
       return this.delegate.cast(object, typeName);
558 558
    }
559
    
560
    @Override
561
    public Function cast(Value object, int type) {
562
       return this.delegate.cast(object, type);
563
    }
559 564

  
560 565
    @Override
561 566
    public Function toDouble(Value object) {
......
736 741
    public Map<String, Object> getProperties() {
737 742
       return this.delegate.getProperties();
738 743
    }
739
    
744

  
740 745
}
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
585 585
    public Function decode(Value value, Value format);
586 586

  
587 587
    public Function cast(Value object, Value typeName);
588
    
589
    public Function cast(Value object, int type);
588 590

  
589 591
    public Function toDouble(Value object);
590 592

  
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/spi/formatter/value/Cast.java
7 7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8 8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9 9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.tools.dataTypes.DataTypes;
10 11

  
11 12
/**
12 13
 *
......
32 33
        Function function = (Function) function0;
33 34
        StringBuilder builder = new StringBuilder();
34 35
        List<Value> args = function.parameters();
36
        String typeName = (String)((ExpressionBuilder.Constant)args.get(1)).value();
37
        if(StringUtils.equalsIgnoreCase(typeName, DataTypes.STRING_NAME)){
38
            typeName = "TEXT";
39
        }
35 40
        builder.append("CAST(");
36 41
        builder.append(args.get(0).toString(formatter));
37 42
        builder.append(" AS ");
38
        builder.append(((ExpressionBuilder.Constant)args.get(1)).value());
43
        builder.append(typeName);
39 44
        builder.append(")");
40 45
        return builder.toString();
41 46
    }
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/TestGrammarCompiler.java
247 247

  
248 248
        Code code = compiler.compileExpression(source);
249 249
        link(code);
250
        checkEquals("CAST(\"V1\", 'INTEGER')", code.toString());
250
        checkEquals("CAST(\"V1\" AS INTEGER)", code.toString());
251 251
    }
252 252

  
253 253
    public void testCast2() {
......
257 257

  
258 258
        Code code = compiler.compileExpression(source);
259 259
        link(code);
260
        checkEquals("CAST(\"V1\", 'INTEGER')", code.toString());
260
        checkEquals("CAST(\"V1\" AS INTEGER)", code.toString());
261 261
    }
262 262

  
263 263
    public void testMatch() {
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/typeconversion/CastFunction.java
1 1
package org.gvsig.expressionevaluator.impl.function.typeconversion;
2 2

  
3 3
import java.util.Iterator;
4
import java.util.function.Function;
4 5
import org.apache.commons.lang3.Range;
6
import org.gvsig.expressionevaluator.Code;
7
import org.gvsig.expressionevaluator.Codes;
8
import org.gvsig.expressionevaluator.ExpressionBuilder;
5 9
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_CAST;
10
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_GETATTR;
11
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
12
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
6 13
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
14
import org.gvsig.expressionevaluator.Formatter;
7 15
import org.gvsig.expressionevaluator.Interpreter;
8 16
import org.gvsig.expressionevaluator.spi.AbstractFunction;
9 17
import org.gvsig.tools.ToolsLocator;
......
66 74
        return "The valid type names for the function CAST are:\n"+ builder.toString();
67 75
    }
68 76
    
77
    @Override
78
    public String toString(Codes args, Formatter<Code> formatter) {
79
        StringBuilder builder = new StringBuilder();
80
        Code expression = args.get(0);
81
        Code typeName = args.get(1);
82
        if( typeName instanceof Code.Constant && ((Code.Constant)typeName).value() instanceof CharSequence ) {
83
          builder.append(this.name());
84
          builder.append("(");
85
          builder.append(expression.toString(formatter));
86
          builder.append(" AS ");
87
          builder.append(((Code.Constant)typeName).value().toString());
88
          builder.append(")");
89
          return builder.toString();
90
        }
91
        return super.toString(args, formatter);
92
    }
93

  
94
    
95
    
96
    
97
    
69 98
}
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
15 15
import org.apache.commons.lang3.StringUtils;
16 16
import org.gvsig.expressionevaluator.Code;
17 17
import org.gvsig.expressionevaluator.Expression;
18

  
19 18
import org.gvsig.expressionevaluator.ExpressionBuilder;
20 19
import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_CONSTANT;
21 20
import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_VARIABLE;
......
26 25
import org.gvsig.expressionevaluator.ReprMethod;
27 26
import org.gvsig.tools.ToolsLocator;
28 27
import org.gvsig.tools.dataTypes.Coercion;
28
import org.gvsig.tools.dataTypes.DataTypes;
29 29
import org.gvsig.tools.dataTypes.DataTypesManager;
30 30
import org.gvsig.tools.util.PropertiesSupportHelper;
31 31

  
......
579 579
            }
580 580
        }
581 581
    }
582
    
583
    public class CastBase extends FunctionBase {
582 584

  
585
        public CastBase() {
586
            super(FUNCTION_CAST);
587
        }
588

  
589
        @Override
590
        public String toString(Formatter<Value> formatter) {
591
            if( formatter!=null && formatter.canApply(this) ) {
592
                return formatter.format(this);
593
            }
594
            StringBuilder builder = new StringBuilder();
595
            builder.append(name);
596
            builder.append("(");
597
            builder.append(this.parameters.get(0).toString(formatter));
598

  
599
            builder.append(" AS ");
600
            builder.append(((ExpressionBuilder.Constant)this.parameters.get(1)).value().toString());
601
            builder.append(")");
602
            
603
            return builder.toString();
604
        }
605
        
606
    }
607

  
583 608
    public class MethodBase extends FunctionBase implements Method {
584 609

  
585 610
        private Value instance;
......
1465 1490

  
1466 1491
    @Override
1467 1492
    public Function cast(Value object, Value typeName) {
1468
       return function(FUNCTION_CAST, object, typeName);
1493
        FunctionBase func = new CastBase();
1494
        func.parameter(object);
1495
        func.parameter(typeName);
1496
        return func;
1469 1497
    }    
1498
    
1499
    @Override
1500
    public Function cast(Value object, int type) {
1501
       String typeName;
1502
       switch(type) {
1503
           case DataTypes.BOOLEAN:
1504
           case DataTypes.BYTE:
1505
           case DataTypes.CHAR:
1506
           case DataTypes.DATE:
1507
           case DataTypes.DECIMAL:
1508
           case DataTypes.DOUBLE:
1509
           case DataTypes.FLOAT:
1510
           case DataTypes.INT:
1511
           case DataTypes.LONG:
1512
           case DataTypes.STRING:
1513
           case DataTypes.TIME:
1514
           case DataTypes.TIMESTAMP:
1515
               break;
1516
           default:
1517
               throw new IllegalArgumentException("Type "+type+" not valid");
1518
       }
1519
       
1520
       DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
1521
       typeName = dataTypesManager.getTypeName(type);
1522
       return cast(object, this.constant(typeName));
1523
    }
1470 1524

  
1471 1525
    @Override
1472 1526
    public Function decode(Value value, Value format) {

Also available in: Unified diff