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