提交 974ad323 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Extract Operation.optimizeDateTime()

上级 ce2f4d82
...@@ -217,6 +217,27 @@ public class Operation extends Expression { ...@@ -217,6 +217,27 @@ public class Operation extends Expression {
dataType = Value.DECIMAL; dataType = Value.DECIMAL;
} }
} else if (DataType.isDateTimeType(l) || DataType.isDateTimeType(r)) { } else if (DataType.isDateTimeType(l) || DataType.isDateTimeType(r)) {
return optimizeDateTime(session, l, r);
} else {
dataType = Value.getHigherOrder(l, r);
if (dataType == Value.ENUM) {
dataType = Value.INT;
} else if (DataType.isStringType(dataType) &&
session.getDatabase().getMode().allowPlusForStringConcat) {
opType = OpType.CONCAT;
}
}
break;
default:
DbException.throwInternalError("type=" + opType);
}
if (left.isConstant() && (right == null || right.isConstant())) {
return ValueExpression.get(getValue(session));
}
return this;
}
private Expression optimizeDateTime(Session session, int l, int r) {
switch (opType) { switch (opType) {
case PLUS: case PLUS:
if (r != Value.getHigherOrder(l, r)) { if (r != Value.getHigherOrder(l, r)) {
...@@ -340,23 +361,6 @@ public class Operation extends Expression { ...@@ -340,23 +361,6 @@ public class Operation extends Expression {
DataType.getDataType(l).name + " " + DataType.getDataType(l).name + " " +
getOperationToken() + " " + getOperationToken() + " " +
DataType.getDataType(r).name); DataType.getDataType(r).name);
} else {
dataType = Value.getHigherOrder(l, r);
if (dataType == Value.ENUM) {
dataType = Value.INT;
} else if (DataType.isStringType(dataType) &&
session.getDatabase().getMode().allowPlusForStringConcat) {
opType = OpType.CONCAT;
}
}
break;
default:
DbException.throwInternalError("type=" + opType);
}
if (left.isConstant() && (right == null || right.isConstant())) {
return ValueExpression.get(getValue(session));
}
return this;
} }
private void swap() { private void swap() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论