[jOOQ/jOOQ#12425] [jOOQ/jOOQ#11959] Fixed regression
A recent query object model refactoring (where Mul, Div, Add, Sub were extracted) created a regression in the expression data type calculation for interval data types.
This commit is contained in:
parent
27d911dede
commit
c13afc0941
@ -953,7 +953,10 @@ abstract class AbstractField<T> extends AbstractTypedNamed<T> implements Field<T
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public final Field<T> mul(Field<? extends Number> value) {
|
||||
return new Mul<T>(this, (Field<T>) (getDataType().isTemporal() ? nullSafe(value) : nullSafe(value, getDataType())));
|
||||
return new Mul<T>(this, (Field<T>) (getDataType().isTemporal() || nullSafe(value).getDataType().isTemporal()
|
||||
? nullSafe(value)
|
||||
: nullSafe(value, getDataType())
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -964,7 +967,10 @@ abstract class AbstractField<T> extends AbstractTypedNamed<T> implements Field<T
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public final Field<T> div(Field<? extends Number> value) {
|
||||
return new Div<T>(this, (Field<T>) (getDataType().isTemporal() ? nullSafe(value) : nullSafe(value, getDataType())));
|
||||
return new Div<T>(this, (Field<T>) (getDataType().isTemporal() || nullSafe(value).getDataType().isTemporal()
|
||||
? nullSafe(value)
|
||||
: nullSafe(value, getDataType())
|
||||
));
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
@ -118,6 +118,13 @@ implements
|
||||
return Expression.transform(this, arg1, ExpressionOperator.ADD, arg2, false, transform);
|
||||
}
|
||||
|
||||
@Override
|
||||
final DataType<?> getExpressionDataType() {
|
||||
|
||||
// [#11959] Workaround for lack of proper data type information for interval based expressions
|
||||
return Expression.getExpressionDataType((AbstractField<?>) arg1, ExpressionOperator.ADD, (AbstractField<?>) arg2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -111,6 +111,13 @@ implements
|
||||
return Expression.transform(this, arg1, ExpressionOperator.DIVIDE, arg2, false, transform);
|
||||
}
|
||||
|
||||
@Override
|
||||
final DataType<?> getExpressionDataType() {
|
||||
|
||||
// [#11959] Workaround for lack of proper data type information for interval based expressions
|
||||
return Expression.getExpressionDataType((AbstractField<?>) arg1, ExpressionOperator.DIVIDE, (AbstractField<?>) arg2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -130,13 +130,7 @@ final class Expression<T> extends AbstractTransformable<T> implements UOperator2
|
||||
this.rhs = rhs;
|
||||
}
|
||||
|
||||
@Override
|
||||
final DataType<?> getExpressionDataType() {
|
||||
|
||||
// [#11959] Workaround for lack of proper data type information for interval based expressions
|
||||
AbstractField<?> l = (AbstractField<?>) lhs;
|
||||
AbstractField<?> r = (AbstractField<?>) rhs;
|
||||
|
||||
static final DataType<?> getExpressionDataType(AbstractField<?> l, ExpressionOperator operator, AbstractField<?> r) {
|
||||
DataType<?> lt = l.getExpressionDataType();
|
||||
DataType<?> rt = r.getExpressionDataType();
|
||||
|
||||
@ -152,6 +146,13 @@ final class Expression<T> extends AbstractTransformable<T> implements UOperator2
|
||||
return lt;
|
||||
}
|
||||
|
||||
@Override
|
||||
final DataType<?> getExpressionDataType() {
|
||||
|
||||
// [#11959] Workaround for lack of proper data type information for interval based expressions
|
||||
return getExpressionDataType((AbstractField<?>) lhs, operator, (AbstractField<?>) rhs);
|
||||
}
|
||||
|
||||
@Override
|
||||
final void accept0(Context<?> ctx) {
|
||||
SQLDialect family = ctx.family();
|
||||
|
||||
@ -118,6 +118,13 @@ implements
|
||||
return Expression.transform(this, arg1, ExpressionOperator.MULTIPLY, arg2, false, transform);
|
||||
}
|
||||
|
||||
@Override
|
||||
final DataType<?> getExpressionDataType() {
|
||||
|
||||
// [#11959] Workaround for lack of proper data type information for interval based expressions
|
||||
return Expression.getExpressionDataType((AbstractField<?>) arg1, ExpressionOperator.MULTIPLY, (AbstractField<?>) arg2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -111,6 +111,13 @@ implements
|
||||
return Expression.transform(this, arg1, ExpressionOperator.SUBTRACT, arg2, false, transform);
|
||||
}
|
||||
|
||||
@Override
|
||||
final DataType<?> getExpressionDataType() {
|
||||
|
||||
// [#11959] Workaround for lack of proper data type information for interval based expressions
|
||||
return Expression.getExpressionDataType((AbstractField<?>) arg1, ExpressionOperator.SUBTRACT, (AbstractField<?>) arg2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user