From 65bb1d29e9c45429d861e612fb06ff338d5b3571 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 6 Sep 2011 17:34:47 +0000 Subject: [PATCH] [#800] Add support for Sybase Adaptive Server Enterprise - fixed many integration tests --- jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java | 6 +++++- jOOQ/src/main/java/org/jooq/impl/Atan2.java | 1 + jOOQ/src/main/java/org/jooq/impl/Ceil.java | 3 ++- jOOQ/src/main/java/org/jooq/impl/Cosh.java | 1 + jOOQ/src/main/java/org/jooq/impl/Extract.java | 1 + jOOQ/src/main/java/org/jooq/impl/Factory.java | 7 +++++++ jOOQ/src/main/java/org/jooq/impl/Greatest.java | 8 ++++++-- .../main/java/org/jooq/impl/InsertQueryImpl.java | 2 ++ jOOQ/src/main/java/org/jooq/impl/Least.java | 8 ++++++-- jOOQ/src/main/java/org/jooq/impl/Ln.java | 14 ++++++++------ jOOQ/src/main/java/org/jooq/impl/Position.java | 1 + jOOQ/src/main/java/org/jooq/impl/Round.java | 5 +++-- jOOQ/src/main/java/org/jooq/impl/Sinh.java | 1 + .../src/main/java/org/jooq/impl/SortFieldImpl.java | 1 + jOOQ/src/main/java/org/jooq/impl/Tanh.java | 1 + 15 files changed, 46 insertions(+), 14 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 8cae97f34d..6f3e0345f3 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -696,6 +696,7 @@ public abstract class jOOQAbstractTest< // Schema mapping is supported in many RDBMS. But maintaining several // databases is non-trivial in some of them. switch (getDialect()) { + case ADAPTIVESERVER: case DB2: case DERBY: case H2: @@ -1735,6 +1736,7 @@ public abstract class jOOQAbstractTest< assertEquals(2, result2.size()); switch (getDialect()) { + case ADAPTIVESERVER: case DB2: case DERBY: case HSQLDB: @@ -4903,7 +4905,7 @@ public abstract class jOOQAbstractTest< q.addSelect(position); // https://issues.apache.org/jira/browse/DERBY-5005 - q.addOrderBy(create().field("AUTHOR")); + q.addOrderBy(create().field(VLibrary_AUTHOR().getName())); q.execute(); Record r1 = q.getResult().get(1); // George Orwell @@ -5911,6 +5913,7 @@ public abstract class jOOQAbstractTest< @Test public void testWindowFunctions() throws Exception { switch (getDialect()) { + case ADAPTIVESERVER: case DERBY: case H2: case HSQLDB: @@ -7129,6 +7132,7 @@ public abstract class jOOQAbstractTest< // Update duplicate records // ------------------------ switch (getDialect()) { + case ADAPTIVESERVER: case DERBY: case H2: case INGRES: diff --git a/jOOQ/src/main/java/org/jooq/impl/Atan2.java b/jOOQ/src/main/java/org/jooq/impl/Atan2.java index cbde25c929..ab07c845d2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Atan2.java +++ b/jOOQ/src/main/java/org/jooq/impl/Atan2.java @@ -63,6 +63,7 @@ class Atan2 extends AbstractFunction { @Override final Field getFunction0(Configuration configuration) { switch (configuration.getDialect()) { + case ADAPTIVESERVER: case SQLSERVER: return new Function("atn2", SQLDataType.NUMERIC, arg1, arg2); diff --git a/jOOQ/src/main/java/org/jooq/impl/Ceil.java b/jOOQ/src/main/java/org/jooq/impl/Ceil.java index cb22c3a4a0..5871442cbd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Ceil.java +++ b/jOOQ/src/main/java/org/jooq/impl/Ceil.java @@ -64,7 +64,8 @@ class Ceil extends AbstractFunction { case SQLITE: return argument.add(0.5).round(); - case H2: // No break + case ADAPTIVESERVER: + case H2: case SQLSERVER: return new Function("ceiling", getDataType(), argument); diff --git a/jOOQ/src/main/java/org/jooq/impl/Cosh.java b/jOOQ/src/main/java/org/jooq/impl/Cosh.java index 37429e3d30..5928d814a0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Cosh.java +++ b/jOOQ/src/main/java/org/jooq/impl/Cosh.java @@ -61,6 +61,7 @@ class Cosh extends AbstractFunction { @Override final Field getFunction0(Configuration configuration) { switch (configuration.getDialect()) { + case ADAPTIVESERVER: case HSQLDB: case INGRES: case MYSQL: diff --git a/jOOQ/src/main/java/org/jooq/impl/Extract.java b/jOOQ/src/main/java/org/jooq/impl/Extract.java index 55e246012c..c285364163 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Extract.java +++ b/jOOQ/src/main/java/org/jooq/impl/Extract.java @@ -129,6 +129,7 @@ class Extract extends AbstractFunction { throw new SQLDialectNotSupportedException("DatePart not supported: " + datePart); } + case ADAPTIVESERVER: case SQLSERVER: case SYBASE: switch (datePart) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Factory.java b/jOOQ/src/main/java/org/jooq/impl/Factory.java index 0f9780b25f..174056a9d5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Factory.java +++ b/jOOQ/src/main/java/org/jooq/impl/Factory.java @@ -1629,6 +1629,7 @@ public class Factory implements Configuration { return select(field).fetchOne(field); } + case ADAPTIVESERVER: case SQLSERVER: case SYBASE: { Field field = field("@@identity", BigInteger.class); @@ -2487,6 +2488,9 @@ public class Factory implements Configuration { */ public final Field currentTimestamp() { switch (getDialect()) { + case ADAPTIVESERVER: + return new Function("current_bigdatetime", SQLDataType.TIMESTAMP); + case ORACLE: return new Function("sysdate", SQLDataType.TIMESTAMP); @@ -2512,6 +2516,9 @@ public class Factory implements Configuration { */ public final Field currentUser() { switch (getDialect()) { + case ADAPTIVESERVER: + return field("user", SQLDataType.VARCHAR); + case ORACLE: return new Function("user", SQLDataType.VARCHAR); diff --git a/jOOQ/src/main/java/org/jooq/impl/Greatest.java b/jOOQ/src/main/java/org/jooq/impl/Greatest.java index 96c1da65ac..ff59aa1425 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Greatest.java +++ b/jOOQ/src/main/java/org/jooq/impl/Greatest.java @@ -63,8 +63,12 @@ class Greatest extends AbstractFunction { } switch (configuration.getDialect()) { - case DERBY: // No break - case SQLSERVER: // No break + // This implementation has O(2^n) complexity. Better implementations + // are very welcome + + case ADAPTIVESERVER: + case DERBY: + case SQLSERVER: case SYBASE: { Field first = (Field) getArguments()[0]; Field other = (Field) getArguments()[1]; diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index 7707505313..8d8e61be36 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -320,6 +320,7 @@ class InsertQueryImpl> extends AbstractStoreQuery im // Some dialects can only return AUTO_INCREMENT values // Other values have to be fetched in a second step + case ADAPTIVESERVER: case DERBY: case H2: case INGRES: @@ -382,6 +383,7 @@ class InsertQueryImpl> extends AbstractStoreQuery im // Some dialects can only retrieve "identity" (AUTO_INCREMENT) values // Additional values have to be fetched explicitly + case ADAPTIVESERVER: case DERBY: case H2: case INGRES: diff --git a/jOOQ/src/main/java/org/jooq/impl/Least.java b/jOOQ/src/main/java/org/jooq/impl/Least.java index 4b7c84f852..03b7c9b862 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Least.java +++ b/jOOQ/src/main/java/org/jooq/impl/Least.java @@ -63,8 +63,12 @@ class Least extends AbstractFunction { } switch (configuration.getDialect()) { - case DERBY: // No break - case SQLSERVER: // No break + // This implementation has O(2^n) complexity. Better implementations + // are very welcome + + case ADAPTIVESERVER: + case DERBY: + case SQLSERVER: case SYBASE: { Field first = (Field) getArguments()[0]; Field other = (Field) getArguments()[1]; diff --git a/jOOQ/src/main/java/org/jooq/impl/Ln.java b/jOOQ/src/main/java/org/jooq/impl/Ln.java index dce7f11b75..4c45aed370 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Ln.java +++ b/jOOQ/src/main/java/org/jooq/impl/Ln.java @@ -68,6 +68,7 @@ class Ln extends AbstractFunction { final Field getFunction0(Configuration configuration) { if (base == null) { switch (configuration.getDialect()) { + case ADAPTIVESERVER: case H2: case SQLSERVER: return new Function("log", SQLDataType.NUMERIC, argument); @@ -80,12 +81,13 @@ class Ln extends AbstractFunction { Field baseField = create(configuration).literal(base); switch (configuration.getDialect()) { - case DB2: // No break - case DERBY: // No break - case H2: // No break - case HSQLDB: // No break - case INGRES: // No break - case SQLSERVER: // No break + case ADAPTIVESERVER: + case DB2: + case DERBY: + case H2: + case HSQLDB: + case INGRES: + case SQLSERVER: case SYBASE: return argument.ln().div(baseField.ln()); diff --git a/jOOQ/src/main/java/org/jooq/impl/Position.java b/jOOQ/src/main/java/org/jooq/impl/Position.java index 2fa602d5b7..cad1dff2c8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Position.java +++ b/jOOQ/src/main/java/org/jooq/impl/Position.java @@ -76,6 +76,7 @@ class Position extends AbstractFunction { case ORACLE: return new Function("instr", SQLDataType.INTEGER, in, search); + case ADAPTIVESERVER: case SQLSERVER: return new Function("charindex", SQLDataType.INTEGER, search, in); diff --git a/jOOQ/src/main/java/org/jooq/impl/Round.java b/jOOQ/src/main/java/org/jooq/impl/Round.java index f1da31b876..264503bc51 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Round.java +++ b/jOOQ/src/main/java/org/jooq/impl/Round.java @@ -89,8 +89,9 @@ class Round extends AbstractFunction { } // These dialects have a mandatory decimals argument - case INGRES: // No break - case SQLSERVER: // No break + case ADAPTIVESERVER: + case INGRES: + case SQLSERVER: case SYBASE: { return new Function("round", getDataType(), argument, val(decimals)); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Sinh.java b/jOOQ/src/main/java/org/jooq/impl/Sinh.java index 9f20a49e3c..efcf175335 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Sinh.java +++ b/jOOQ/src/main/java/org/jooq/impl/Sinh.java @@ -61,6 +61,7 @@ class Sinh extends AbstractFunction { @Override final Field getFunction0(Configuration configuration) { switch (configuration.getDialect()) { + case ADAPTIVESERVER: case HSQLDB: case INGRES: case MYSQL: diff --git a/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java index fe3dd122fd..b71958598f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java @@ -105,6 +105,7 @@ class SortFieldImpl extends AbstractNamedTypeProviderQueryPart implements case DB2: // These dialects don't support this syntax at all + case ADAPTIVESERVER: case INGRES: case MYSQL: case SQLITE: diff --git a/jOOQ/src/main/java/org/jooq/impl/Tanh.java b/jOOQ/src/main/java/org/jooq/impl/Tanh.java index 68e026605f..f3fd855547 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tanh.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tanh.java @@ -61,6 +61,7 @@ class Tanh extends AbstractFunction { @Override final Field getFunction0(Configuration configuration) { switch (configuration.getDialect()) { + case ADAPTIVESERVER: case HSQLDB: case INGRES: case MYSQL: