[#860] SQLite CEIL function is incorrectly simulated. CEIL(2.0) returns 3.0 instead of 2.0

This commit is contained in:
Lukas Eder 2011-10-09 11:05:55 +00:00
parent 362e31e019
commit d4c01f8397
3 changed files with 25 additions and 4 deletions

View File

@ -4832,12 +4832,23 @@ public abstract class jOOQAbstractTest<
Field<Double> f3b = val(-1.111).floor();
Field<Double> f4b = val(-1.111).ceil();
Field<Float> f1c = val(2.0f).round();
Field<Float> f2c = val(2.0f).round(2);
Field<Float> f3c = val(2.0f).floor();
Field<Float> f4c = val(2.0f).ceil();
Field<Double> f1d = val(-2.0).round();
Field<Double> f2d = val(-2.0).round(2);
Field<Double> f3d = val(-2.0).floor();
Field<Double> f4d = val(-2.0).ceil();
// Some arbitrary checks on having multiple select clauses
Record record =
create().select(f1a)
.select(f2a, f3a)
.select(f4a)
.select(f1b, f2b, f3b, f4b).fetchOne();
.select(f1b, f2b, f3b, f4b)
.select(f1c, f2c, f3c, f4c)
.select(f1d, f2d, f3d, f4d).fetchOne();
assertNotNull(record);
assertEquals("1.0", record.getValueAsString(f1a));
@ -4850,6 +4861,16 @@ public abstract class jOOQAbstractTest<
assertEquals("-2.0", record.getValueAsString(f3b));
assertEquals("-1.0", record.getValueAsString(f4b));
assertEquals("2.0", record.getValueAsString(f1c));
assertEquals("2.0", record.getValueAsString(f2c));
assertEquals("2.0", record.getValueAsString(f3c));
assertEquals("2.0", record.getValueAsString(f4c));
assertEquals("-2.0", record.getValueAsString(f1d));
assertEquals("-2.0", record.getValueAsString(f2d));
assertEquals("-2.0", record.getValueAsString(f3d));
assertEquals("-2.0", record.getValueAsString(f4d));
// Greatest and least
record = create().select(
val(1).greatest(2, 3, 4),

View File

@ -60,9 +60,9 @@ class Ceil<T> extends AbstractFunction<T> {
final Field<T> getFunction0(Configuration configuration) {
switch (configuration.getDialect()) {
// evaluate "floor" if unavailable
// evaluate "ceil" if unavailable
case SQLITE:
return argument.add(0.5).round();
return argument.add(0.499999999999999).round();
case ASE:
case H2:

View File

@ -62,7 +62,7 @@ class Floor<T> extends AbstractFunction<T> {
// evaluate "floor" if unavailable
case SQLITE:
return argument.sub(0.5).round();
return argument.sub(0.499999999999999).round();
default:
return new Function<T>("floor", getDataType(), argument);