From e8f5e484dce7fa52cd50608fc283a11e3dd2cda8 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 10 Feb 2014 18:04:14 +0100 Subject: [PATCH] [#2492] MS Access fixes --- jOOQ-test/src/org/jooq/test/AccessTest.java | 2 +- .../jooq/test/_/testcases/ExoticTests.java | 1 + .../org/jooq/test/_/testcases/FetchTests.java | 25 +++++--- .../jooq/test/_/testcases/FunctionTests.java | 57 +++++++++++-------- .../test/_/testcases/InsertUpdateTests.java | 8 +++ .../test/_/testcases/ReferentialTests.java | 5 ++ .../test/_/testcases/RenderAndBindTests.java | 7 ++- .../_/testcases/RowValueExpressionTests.java | 4 +- .../jooq/test/_/testcases/TruncateTests.java | 1 + .../src/main/java/org/jooq/InsertSetStep.java | 18 +++++- jOOQ/src/main/java/org/jooq/impl/Ceil.java | 11 +++- jOOQ/src/main/java/org/jooq/impl/Floor.java | 9 ++- jOOQ/src/main/java/org/jooq/impl/Sign.java | 6 ++ jOOQ/src/main/java/org/jooq/impl/Trunc.java | 1 + 14 files changed, 111 insertions(+), 44 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/AccessTest.java b/jOOQ-test/src/org/jooq/test/AccessTest.java index 5ef4c667cc..6d44202c4a 100644 --- a/jOOQ-test/src/org/jooq/test/AccessTest.java +++ b/jOOQ-test/src/org/jooq/test/AccessTest.java @@ -725,7 +725,7 @@ xxxxxx xxxxx xxxxxxxxxx xxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxx xxxxxxx xxxxxxxxxxxxxxxxxxxx x - xxxxxx xxxxx + xxxxxx xxxxxx x xxxxxxxxx diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/ExoticTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/ExoticTests.java index 862113dccd..bbf2ddfcbd 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/ExoticTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/ExoticTests.java @@ -471,6 +471,7 @@ extends BaseTest f6a = sqlite || ingres ? inline(1.11f) : trunc(1.111f, 2); Field f7a = sqlite || ingres ? inline(10.0f) : trunc(11.111f, -1); + Record r1 = + create().select(f1a) + .select(f2a, f3a) + .select(f4a) + .select(f5a, f6a, f7a) + .fetchOne(); + + assertNotNull(r1); + assertEquals("1.0", r1.getValue(f1a, String.class)); + assertEquals("1.11", r1.getValue(f2a, String.class)); + assertEquals("1.0", r1.getValue(f3a, String.class)); + assertEquals("2.0", r1.getValue(f4a, String.class)); + assertEquals("1.0", r1.getValue(f5a, String.class)); + assertEquals("1.11", r1.getValue(f6a, String.class)); + assertEquals("10.0", r1.getValue(f7a, String.class)); + + + Field f1b = round(-1.111); Field f2b = round(-1.111, 2); Field f3b = floor(-1.111); @@ -760,6 +778,20 @@ extends BaseTest f6b = sqlite || ingres ? inline(1.11) : trunc(1.111, 2); Field f7b = sqlite || ingres ? inline(10.0) : trunc(11.111, -1); + Record r2 = + create().select(f1b, f2b, f3b, f4b, f6b, f6b, f7b) + .fetchOne(); + + assertEquals("-1.0", r2.getValue(f1b, String.class)); + assertEquals("-1.11", r2.getValue(f2b, String.class)); + assertEquals("-2.0", r2.getValue(f3b, String.class)); + assertEquals("-1.0", r2.getValue(f4b, String.class)); + assertEquals("1.0", r2.getValue(f5b, String.class)); + assertEquals("1.11", r2.getValue(f6b, String.class)); + assertEquals("10.0", r2.getValue(f7b, String.class)); + + + Field f1c = round(2.0f); Field f2c = round(2.0f, 2); Field f3c = floor(2.0f); @@ -778,36 +810,13 @@ extends BaseTest f3f = floor(0.0); Field f4f = ceil(0.0); - // Some arbitrary checks on having multiple select clauses Record record = - create().select(f1a) - .select(f2a, f3a) - .select(f4a) - .select(f5a, f6a, f7a) - .select(f1b, f2b, f3b, f4b, f6b, f6b, f7b) - .select(f1c, f2c, f3c, f4c) + create().select(f1c, f2c, f3c, f4c) .select(f1d, f2d, f3d, f4d) .select(f1e, f2e, f3e, f4e) .select(f1f, f2f, f3f, f4f) .fetchOne(); - assertNotNull(record); - assertEquals("1.0", record.getValue(f1a, String.class)); - assertEquals("1.11", record.getValue(f2a, String.class)); - assertEquals("1.0", record.getValue(f3a, String.class)); - assertEquals("2.0", record.getValue(f4a, String.class)); - assertEquals("1.0", record.getValue(f5a, String.class)); - assertEquals("1.11", record.getValue(f6a, String.class)); - assertEquals("10.0", record.getValue(f7a, String.class)); - - assertEquals("-1.0", record.getValue(f1b, String.class)); - assertEquals("-1.11", record.getValue(f2b, String.class)); - assertEquals("-2.0", record.getValue(f3b, String.class)); - assertEquals("-1.0", record.getValue(f4b, String.class)); - assertEquals("1.0", record.getValue(f5b, String.class)); - assertEquals("1.11", record.getValue(f6b, String.class)); - assertEquals("10.0", record.getValue(f7b, String.class)); - assertEquals("2.0", record.getValue(f1c, String.class)); assertEquals("2.0", record.getValue(f2c, String.class)); assertEquals("2.0", record.getValue(f3c, String.class)); diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java index 3da036f9ce..4fa1323fed 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java @@ -45,6 +45,7 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; // ... +// ... import static org.jooq.SQLDialect.CUBRID; // ... import static org.jooq.SQLDialect.DERBY; @@ -230,6 +231,13 @@ extends BaseTest authors = create().selectFrom(TAuthor()).orderBy(TAuthor_ID()).fetch(); Result books = create().selectFrom(TBook()).orderBy(TBook_ID()).fetch(); diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java index 70627119cc..b137fd171b 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/RenderAndBindTests.java @@ -229,11 +229,14 @@ extends BaseTest { /** * Add an empty record with default values. */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) InsertReturningStep defaultValues(); /** diff --git a/jOOQ/src/main/java/org/jooq/impl/Ceil.java b/jOOQ/src/main/java/org/jooq/impl/Ceil.java index b09a1f1444..2d721c6c5b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Ceil.java +++ b/jOOQ/src/main/java/org/jooq/impl/Ceil.java @@ -40,7 +40,7 @@ */ package org.jooq.impl; -import static org.jooq.impl.DSL.function; +import static org.jooq.impl.DSL.field; import org.jooq.Configuration; import org.jooq.Field; @@ -67,6 +67,11 @@ class Ceil extends AbstractFunction { final Field getFunction0(Configuration configuration) { switch (configuration.dialect().family()) { + /* [pro] xx + xxxx xxxxxxx + xxxxxx xxxxxxxxxxxxxxxxxxx x xxxx x xxxxxxxxx x xxxxx xxxxxxxxxxxxxx xxxxxxxxxx + xx [/pro] */ + // evaluate "ceil" if unavailable case SQLITE: return DSL.round(argument.add(0.499999999999999)); @@ -76,10 +81,10 @@ class Ceil extends AbstractFunction { xxxx xxxxxxxxxx xx [/pro] */ case H2: - return function("ceiling", getDataType(), argument); + return field("{ceiling}({0})", getDataType(), argument); default: - return function("ceil", getDataType(), argument); + return field("{ceil}({0})", getDataType(), argument); } } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Floor.java b/jOOQ/src/main/java/org/jooq/impl/Floor.java index 2084098743..707cbde916 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Floor.java +++ b/jOOQ/src/main/java/org/jooq/impl/Floor.java @@ -40,7 +40,7 @@ */ package org.jooq.impl; -import static org.jooq.impl.DSL.function; +import static org.jooq.impl.DSL.field; import org.jooq.Configuration; import org.jooq.Field; @@ -67,12 +67,15 @@ class Floor extends AbstractFunction { final Field getFunction0(Configuration configuration) { switch (configuration.dialect()) { - // evaluate "floor" if unavailable + /* [pro] xx + xxxx xxxxxxx + xx [/pro] */ + case SQLITE: return DSL.round(argument.sub(0.499999999999999)); default: - return function("floor", getDataType(), argument); + return field("{floor}({0})", getDataType(), argument); } } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Sign.java b/jOOQ/src/main/java/org/jooq/impl/Sign.java index 831e9ebbf6..029983877d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Sign.java +++ b/jOOQ/src/main/java/org/jooq/impl/Sign.java @@ -40,6 +40,7 @@ */ package org.jooq.impl; +import static org.jooq.impl.DSL.field; import static org.jooq.impl.DSL.function; import static org.jooq.impl.DSL.one; import static org.jooq.impl.DSL.zero; @@ -69,6 +70,11 @@ class Sign extends AbstractFunction { @Override final Field getFunction0(Configuration configuration) { switch (configuration.dialect()) { + /* [pro] xx + xxxx xxxxxxx + xxxxxx xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxx xxxxxxxxxx + xx [/pro] */ + case SQLITE: return DSL.decode() .when(((Field) argument).greaterThan(zero()), one()) diff --git a/jOOQ/src/main/java/org/jooq/impl/Trunc.java b/jOOQ/src/main/java/org/jooq/impl/Trunc.java index 11c4638ad1..3dbbd49a74 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Trunc.java +++ b/jOOQ/src/main/java/org/jooq/impl/Trunc.java @@ -91,6 +91,7 @@ class Trunc extends AbstractFunction { private final Field getNumericFunction(Configuration configuration) { switch (configuration.dialect().family()) { /* [pro] xx + xxxx xxxxxxx xxxx xxxx xx [/pro] */ case DERBY: {