diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java b/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java
index b1a6cf27dd..9c3fa4ecde 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java
@@ -58,6 +58,7 @@ import org.jooq.meta.sqlite.SQLiteDatabase;
// ...
// ...
// ...
+// ...
/**
* A common utility class that provides access to various {@link Database}
@@ -98,6 +99,7 @@ public class Databases {
+
case CUBRID: result = CUBRIDDatabase.class; break;
diff --git a/jOOQ/src/main/java/org/jooq/AlterTableRenameColumnToStep.java b/jOOQ/src/main/java/org/jooq/AlterTableRenameColumnToStep.java
index 0932fb4f55..901c494d40 100644
--- a/jOOQ/src/main/java/org/jooq/AlterTableRenameColumnToStep.java
+++ b/jOOQ/src/main/java/org/jooq/AlterTableRenameColumnToStep.java
@@ -48,15 +48,18 @@ public interface AlterTableRenameColumnToStep {
/**
* Specify a new column name.
*/
+ @Support
AlterTableFinalStep to(Field> newName);
/**
* Specify a new column name.
*/
+ @Support
AlterTableFinalStep to(Name newName);
/**
* Specify a new column name.
*/
+ @Support
AlterTableFinalStep to(String newName);
}
\ No newline at end of file
diff --git a/jOOQ/src/main/java/org/jooq/AlterTableStep.java b/jOOQ/src/main/java/org/jooq/AlterTableStep.java
index f513335f32..9f8e899761 100644
--- a/jOOQ/src/main/java/org/jooq/AlterTableStep.java
+++ b/jOOQ/src/main/java/org/jooq/AlterTableStep.java
@@ -56,6 +56,7 @@ import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
// ...
+// ...
import java.util.Collection;
diff --git a/jOOQ/src/main/java/org/jooq/CommentOnIsStep.java b/jOOQ/src/main/java/org/jooq/CommentOnIsStep.java
index eb6385731d..d12bdaa0c0 100644
--- a/jOOQ/src/main/java/org/jooq/CommentOnIsStep.java
+++ b/jOOQ/src/main/java/org/jooq/CommentOnIsStep.java
@@ -46,6 +46,7 @@ import static org.jooq.SQLDialect.MYSQL;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
+// ...
/**
* The step in the COMMENT ON [ object type ] statement where the
diff --git a/jOOQ/src/main/java/org/jooq/CreateIndexStep.java b/jOOQ/src/main/java/org/jooq/CreateIndexStep.java
index bff1a03a73..9ed82a1439 100644
--- a/jOOQ/src/main/java/org/jooq/CreateIndexStep.java
+++ b/jOOQ/src/main/java/org/jooq/CreateIndexStep.java
@@ -55,6 +55,7 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
+// ...
import java.util.Collection;
diff --git a/jOOQ/src/main/java/org/jooq/CreateTableAsStep.java b/jOOQ/src/main/java/org/jooq/CreateTableAsStep.java
index 9b49aa44af..9249b0050c 100644
--- a/jOOQ/src/main/java/org/jooq/CreateTableAsStep.java
+++ b/jOOQ/src/main/java/org/jooq/CreateTableAsStep.java
@@ -53,6 +53,7 @@ import static org.jooq.SQLDialect.POSTGRES;
// ...
import static org.jooq.SQLDialect.SQLITE;
// ...
+// ...
import java.util.Collection;
diff --git a/jOOQ/src/main/java/org/jooq/CreateTableWithDataStep.java b/jOOQ/src/main/java/org/jooq/CreateTableWithDataStep.java
index f728b25d56..e49c763857 100644
--- a/jOOQ/src/main/java/org/jooq/CreateTableWithDataStep.java
+++ b/jOOQ/src/main/java/org/jooq/CreateTableWithDataStep.java
@@ -53,6 +53,7 @@ import static org.jooq.SQLDialect.POSTGRES;
// ...
import static org.jooq.SQLDialect.SQLITE;
// ...
+// ...
/**
* A {@link Query} that can create tables.
diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java
index 2983228aee..67d24d7190 100644
--- a/jOOQ/src/main/java/org/jooq/DSLContext.java
+++ b/jOOQ/src/main/java/org/jooq/DSLContext.java
@@ -62,6 +62,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
+// ...
import java.math.BigInteger;
import java.sql.Connection;
diff --git a/jOOQ/src/main/java/org/jooq/DropIndexOnStep.java b/jOOQ/src/main/java/org/jooq/DropIndexOnStep.java
index caa70c1036..2441d17850 100644
--- a/jOOQ/src/main/java/org/jooq/DropIndexOnStep.java
+++ b/jOOQ/src/main/java/org/jooq/DropIndexOnStep.java
@@ -55,6 +55,7 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
+// ...
/**
* A {@link Query} that can drop indexes.
diff --git a/jOOQ/src/main/java/org/jooq/Field.java b/jOOQ/src/main/java/org/jooq/Field.java
index 1a843a939f..16348da884 100644
--- a/jOOQ/src/main/java/org/jooq/Field.java
+++ b/jOOQ/src/main/java/org/jooq/Field.java
@@ -59,6 +59,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
+// ...
import java.math.BigDecimal;
import java.util.Collection;
diff --git a/jOOQ/src/main/java/org/jooq/impl/Alias.java b/jOOQ/src/main/java/org/jooq/impl/Alias.java
index f970aa893d..df765b3a7d 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Alias.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Alias.java
@@ -61,6 +61,7 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
+// ...
import static org.jooq.impl.DSL.asterisk;
import static org.jooq.impl.DSL.falseCondition;
import static org.jooq.impl.DSL.field;
diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
index 35341466b1..1482861a17 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
@@ -65,6 +65,7 @@ import static org.jooq.SQLDialect.MYSQL;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
+// ...
import static org.jooq.impl.DSL.alterTable;
import static org.jooq.impl.DSL.commentOnTable;
import static org.jooq.impl.DSL.constraint;
@@ -98,6 +99,7 @@ import static org.jooq.impl.Keywords.K_MODIFY;
import static org.jooq.impl.Keywords.K_NOT_NULL;
import static org.jooq.impl.Keywords.K_NULL;
import static org.jooq.impl.Keywords.K_RAISE;
+import static org.jooq.impl.Keywords.K_RENAME;
import static org.jooq.impl.Keywords.K_RENAME_COLUMN;
import static org.jooq.impl.Keywords.K_RENAME_CONSTRAINT;
import static org.jooq.impl.Keywords.K_RENAME_INDEX;
@@ -176,7 +178,8 @@ final class AlterTableImpl extends AbstractQuery implements
private static final EnumSet NO_SUPPORT_IF_EXISTS_COLUMN = EnumSet.of(CUBRID, DERBY, FIREBIRD);
private static final EnumSet SUPPORT_RENAME_TABLE = EnumSet.of(DERBY);
private static final EnumSet NO_SUPPORT_ALTER_TYPE_AND_NULL = EnumSet.of(POSTGRES);
- private static final EnumSet REQUIRE_REPEAT_KEYWORD_ON_MULTI_ALTER = EnumSet.of(FIREBIRD, MARIADB, MYSQL);
+ private static final EnumSet REQUIRE_REPEAT_ADD_ON_MULTI_ALTER = EnumSet.of(FIREBIRD, MARIADB, MYSQL);
+ private static final EnumSet REQUIRE_REPEAT_DROP_ON_MULTI_ALTER = EnumSet.of(FIREBIRD, MARIADB, MYSQL);
@@ -826,6 +829,18 @@ final class AlterTableImpl extends AbstractQuery implements
.qualify(qualify);
break;
+
+
+
+
+
+
+
+
+
+
+
+
default:
ctx.qualify(false)
.visit(K_RENAME_COLUMN).sql(' ')
@@ -882,13 +897,17 @@ final class AlterTableImpl extends AbstractQuery implements
}
else if (add != null) {
boolean qualify = ctx.qualify();
+ boolean multiAdd = REQUIRE_REPEAT_ADD_ON_MULTI_ALTER.contains(ctx.family());
ctx.start(ALTER_TABLE_ADD)
.visit(K_ADD)
.qualify(false)
- .sql(" (");
+ .sql(' ');
- boolean indent = add.size() > 1;
+ if (!multiAdd)
+ ctx.sql('(');
+
+ boolean indent = !multiAdd && add.size() > 1;
if (indent)
ctx.formatIndentStart()
@@ -896,7 +915,10 @@ final class AlterTableImpl extends AbstractQuery implements
for (int i = 0; i < add.size(); i++) {
if (i > 0)
- ctx.sql(',').formatSeparator();
+ if (multiAdd)
+ ctx.sql(',').formatSeparator().visit(K_ADD).sql(' ');
+ else
+ ctx.sql(',').formatSeparator();
FieldOrConstraint part = add.get(i);
ctx.visit(part);
@@ -911,8 +933,10 @@ final class AlterTableImpl extends AbstractQuery implements
ctx.formatIndentEnd()
.formatNewLine();
- ctx.sql(')')
- .qualify(qualify)
+ if (!multiAdd)
+ ctx.sql(')');
+
+ ctx.qualify(qualify)
.end(ALTER_TABLE_ADD);
}
else if (addColumn != null) {
@@ -1085,7 +1109,7 @@ final class AlterTableImpl extends AbstractQuery implements
else if (dropColumns != null) {
ctx.start(ALTER_TABLE_DROP);
- if (REQUIRE_REPEAT_KEYWORD_ON_MULTI_ALTER.contains(family)) {
+ if (REQUIRE_REPEAT_DROP_ON_MULTI_ALTER.contains(family)) {
String separator = "";
for (Field> dropColumn : dropColumns) {
diff --git a/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java b/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java
index ed564e1b52..c4d7f1b040 100644
--- a/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java
+++ b/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java
@@ -60,6 +60,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
+// ...
import static org.jooq.impl.DSL.nullSafe;
import static org.jooq.impl.DSL.val;
import static org.jooq.impl.Keywords.K_AND;
@@ -88,7 +89,7 @@ final class BetweenCondition extends AbstractCondition implements BetweenAndS
private static final Clause[] CLAUSES_BETWEEN_SYMMETRIC = { CONDITION, CONDITION_BETWEEN_SYMMETRIC };
private static final Clause[] CLAUSES_NOT_BETWEEN = { CONDITION, CONDITION_NOT_BETWEEN };
private static final Clause[] CLAUSES_NOT_BETWEEN_SYMMETRIC = { CONDITION, CONDITION_NOT_BETWEEN_SYMMETRIC };
- private static final EnumSet SUPPORTS_SYMMETRIC = EnumSet.of(CUBRID, DERBY, FIREBIRD, H2, MARIADB, MYSQL, SQLITE);
+ private static final EnumSet NO_SUPPORT_SYMMETRIC = EnumSet.of(CUBRID, DERBY, FIREBIRD, H2, MARIADB, MYSQL, SQLITE);
private final boolean symmetric;
private final boolean not;
@@ -115,9 +116,8 @@ final class BetweenCondition extends AbstractCondition implements BetweenAndS
this.maxValue = nullSafe(f, field.getDataType());
return this;
}
- else {
+ else
return super.and(f);
- }
}
@Override
@@ -131,14 +131,12 @@ final class BetweenCondition extends AbstractCondition implements BetweenAndS
}
private final QueryPartInternal delegate(Configuration configuration) {
- if (symmetric && SUPPORTS_SYMMETRIC.contains(configuration.family())) {
+ if (symmetric && NO_SUPPORT_SYMMETRIC.contains(configuration.family()))
return not
? (QueryPartInternal) field.notBetween(minValue, maxValue).and(field.notBetween(maxValue, minValue))
: (QueryPartInternal) field.between(minValue, maxValue).or(field.between(maxValue, minValue));
- }
- else {
+ else
return new Native();
- }
}
private class Native extends AbstractQueryPart {
diff --git a/jOOQ/src/main/java/org/jooq/impl/BitCount.java b/jOOQ/src/main/java/org/jooq/impl/BitCount.java
index 97223ba3b0..c5e0e03493 100644
--- a/jOOQ/src/main/java/org/jooq/impl/BitCount.java
+++ b/jOOQ/src/main/java/org/jooq/impl/BitCount.java
@@ -79,6 +79,9 @@ final class BitCount extends AbstractFunction {
+
+
+
// Better solutions very welcome! See also:
// See also http://stackoverflow.com/questions/7946349/how-to-simulate-the-mysql-bit-count-function-in-sybase-sql-anywhere
case H2:
diff --git a/jOOQ/src/main/java/org/jooq/impl/CommentOnImpl.java b/jOOQ/src/main/java/org/jooq/impl/CommentOnImpl.java
index 4781dec936..d6d759f9fb 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CommentOnImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CommentOnImpl.java
@@ -38,6 +38,7 @@
package org.jooq.impl;
import static org.jooq.SQLDialect.POSTGRES;
+// ...
import static org.jooq.impl.DSL.comment;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.Keywords.K_ALTER_TABLE;
diff --git a/jOOQ/src/main/java/org/jooq/impl/Cot.java b/jOOQ/src/main/java/org/jooq/impl/Cot.java
index 0cadf8eba3..a004c179bb 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Cot.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Cot.java
@@ -73,6 +73,7 @@ final class Cot extends AbstractFunction {
+
default:
return function("cot", SQLDataType.NUMERIC, argument);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java
index 3959d1d646..744ea50d52 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CreateIndexImpl.java
@@ -48,6 +48,7 @@ import static org.jooq.SQLDialect.FIREBIRD;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
+// ...
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.Keywords.K_CREATE;
@@ -72,7 +73,6 @@ import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.CreateIndexIncludeStep;
import org.jooq.CreateIndexStep;
-import org.jooq.CreateIndexWhereStep;
import org.jooq.Field;
import org.jooq.Index;
import org.jooq.Name;
@@ -90,8 +90,7 @@ final class CreateIndexImpl extends AbstractQuery implements
// Cascading interface implementations for CREATE INDEX behaviour
CreateIndexStep,
- CreateIndexIncludeStep,
- CreateIndexWhereStep {
+ CreateIndexIncludeStep {
/**
* Generated UID
@@ -268,6 +267,7 @@ final class CreateIndexImpl extends AbstractQuery implements
.sql(' ');
boolean supportsInclude = false ;
+ boolean supportsFieldsBeforeTable = false ;
QueryPartList list = new QueryPartList();
if (fields != null)
@@ -278,14 +278,27 @@ final class CreateIndexImpl extends AbstractQuery implements
if (!supportsInclude && include != null)
list.addAll(asList(include));
+
+
+
+
+
+
+
+
+
ctx.visit(K_ON)
.sql(' ')
- .visit(table)
- .sql('(')
- .qualify(false)
- .visit(list)
- .qualify(true)
- .sql(')');
+ .visit(table);
+
+
+
+
+ ctx.sql('(')
+ .qualify(false)
+ .visit(list)
+ .qualify(true)
+ .sql(')');
if (supportsInclude && include != null)
ctx.formatSeparator()
diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java
index 2237dde1e6..ac624d74ac 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java
@@ -63,6 +63,7 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
+// ...
import static org.jooq.impl.DSL.commentOnTable;
import static org.jooq.impl.DSL.createIndex;
import static org.jooq.impl.DSL.field;
diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java
index 14b8338da4..0d20e8a7b2 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CreateViewImpl.java
@@ -51,6 +51,7 @@ import static org.jooq.SQLDialect.H2;
import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
+// ...
import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.selectFrom;
@@ -175,14 +176,15 @@ final class CreateViewImpl extends AbstractQuery implements
// [#3835] SQLite doesn't like renaming columns at the view level
boolean rename = fields != null && fields.length > 0;
boolean renameSupported = ctx.family() != SQLITE;
+ boolean replaceSupported = false ;
// [#4806] CREATE VIEW doesn't accept parameters in most databases
ParamType paramType = ctx.paramType();
ctx.start(CREATE_VIEW_NAME)
- .visit(K_CREATE);
+ .visit(replaceSupported && orReplace ? K_REPLACE : K_CREATE);
- if (orReplace && !NO_SUPPORT_OR_REPLACE.contains(ctx.family())) {
+ if (orReplace && !replaceSupported && !NO_SUPPORT_OR_REPLACE.contains(ctx.family())) {
ctx.sql(' ').visit(K_OR);
switch (ctx.family()) {
diff --git a/jOOQ/src/main/java/org/jooq/impl/CurrentDate.java b/jOOQ/src/main/java/org/jooq/impl/CurrentDate.java
index 16b5664de9..ea1993841a 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CurrentDate.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CurrentDate.java
@@ -81,6 +81,7 @@ final class CurrentDate extends AbstractFunction {
+
case DERBY:
diff --git a/jOOQ/src/main/java/org/jooq/impl/CurrentTime.java b/jOOQ/src/main/java/org/jooq/impl/CurrentTime.java
index 1951982323..fb16b1fb9b 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CurrentTime.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CurrentTime.java
@@ -73,6 +73,7 @@ final class CurrentTime extends AbstractFunction {
+
case DERBY:
case FIREBIRD:
case HSQLDB:
diff --git a/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java b/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java
index 40d0449ee6..2fc884e63e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java
@@ -81,6 +81,7 @@ final class CurrentTimestamp extends AbstractFunction {
+
case DERBY:
diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java
index 9b6ac13f66..8e1cb380c2 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DSL.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java
@@ -70,6 +70,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
+// ...
import static org.jooq.impl.Term.ROW_NUMBER;
import static org.jooq.impl.Tools.EMPTY_FIELD;
import static org.jooq.impl.Tools.EMPTY_QUERYPART;
@@ -13048,7 +13049,7 @@ public class DSL {
*/
@Support({ POSTGRES })
public static Field translate(Field text, Field from, Field to) {
- return function("translate", text.getDataType(), text, from, to);
+ return new Translate(text, from, to);
}
/**
diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java
index 65a298db34..af8c3cde12 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java
@@ -58,6 +58,7 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
+// ...
import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.DSL.cast;
import static org.jooq.impl.DSL.inline;
@@ -1664,6 +1665,11 @@ public class DefaultBinding implements Binding {
+
+
+
+
+
else if (ctx.family() == POSTGRES)
ctx.render()
.sql("E'")
diff --git a/jOOQ/src/main/java/org/jooq/impl/Dual.java b/jOOQ/src/main/java/org/jooq/impl/Dual.java
index 858eb06f18..9e19841844 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Dual.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Dual.java
@@ -59,8 +59,17 @@ final class Dual extends AbstractTable {
+
static final String DUAL_HSQLDB = "select 1 as dual from information_schema.system_users limit 1";
+
+
+
+
+ static final Name DUAL_FIREBIRD = DSL.unquotedName("RDB$DATABASE");
+ static final Name DUAL_CUBRID = DSL.unquotedName("db_root");
+ static final Name DUAL_DERBY = DSL.unquotedName("SYSIBM", "SYSDUMMY1");
+
private final boolean force;
Dual() {
@@ -68,7 +77,7 @@ final class Dual extends AbstractTable {
}
Dual(boolean force) {
- super("dual", (Schema) null);
+ super(DSL.name("dual"), (Schema) null);
this.force = force;
}
@@ -122,7 +131,7 @@ final class Dual extends AbstractTable {
break;
case FIREBIRD:
- ctx.literal("RDB$DATABASE");
+ ctx.visit(DUAL_FIREBIRD);
break;
case HSQLDB:
@@ -130,7 +139,7 @@ final class Dual extends AbstractTable {
break;
case CUBRID:
- ctx.literal("db_root");
+ ctx.visit(DUAL_CUBRID);
break;
// These dialects don't have a DUAL table. But emulation is needed
@@ -163,9 +172,7 @@ final class Dual extends AbstractTable {
case DERBY:
- ctx.literal("SYSIBM")
- .sql('.')
- .literal("SYSDUMMY1");
+ ctx.visit(DUAL_DERBY);
break;
case MARIADB:
diff --git a/jOOQ/src/main/java/org/jooq/impl/Expression.java b/jOOQ/src/main/java/org/jooq/impl/Expression.java
index d6060282a5..a2ab2032b0 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Expression.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Expression.java
@@ -54,6 +54,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
+// ...
import static org.jooq.impl.DSL.function;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.two;
@@ -165,35 +166,35 @@ final class Expression extends AbstractFunction {
DSL.bitNot(DSL.bitAnd(lhsAsNumber(), rhsAsNumber())),
DSL.bitOr(lhsAsNumber(), rhsAsNumber()));
+
+
+
+
+
+
+
// Many dialects don't support shifts. Use multiplication/division instead
- else if (SHL == operator && EMULATE_SHR_SHL.contains(family)) {
+ else if (SHL == operator && EMULATE_SHR_SHL.contains(family))
return lhs.mul((Field extends Number>) DSL.power(two(), rhsAsNumber()).cast(lhs));
- }
// [#3962] This emulation is expensive. If this is emulated, BitCount should
// use division instead of SHR directly
- else if (SHR == operator && EMULATE_SHR_SHL.contains(family)) {
+ else if (SHR == operator && EMULATE_SHR_SHL.contains(family))
return lhs.div((Field extends Number>) DSL.power(two(), rhsAsNumber()).cast(lhs));
- }
// Some dialects support shifts as functions
- else if (SHL == operator && FIREBIRD == family) {
+ else if (SHL == operator && FIREBIRD == family)
return function("bin_shl", getDataType(), getArguments());
- }
- else if (SHR == operator && FIREBIRD == family) {
+ else if (SHR == operator && FIREBIRD == family)
return function("bin_shr", getDataType(), getArguments());
- }
// These operators are not supported in any dialect
- else if (BIT_NAND == operator) {
+ else if (BIT_NAND == operator)
return (Field) DSL.bitNot(DSL.bitAnd(lhsAsNumber(), rhsAsNumber()));
- }
- else if (BIT_NOR == operator) {
+ else if (BIT_NOR == operator)
return (Field) DSL.bitNot(DSL.bitOr(lhsAsNumber(), rhsAsNumber()));
- }
- else if (BIT_XNOR == operator) {
+ else if (BIT_XNOR == operator)
return (Field) DSL.bitNot(DSL.bitXor(lhsAsNumber(), rhsAsNumber()));
- }
// ---------------------------------------------------------------------
// XXX: Date time arithmetic operators
@@ -203,19 +204,16 @@ final class Expression extends AbstractFunction {
else if ((ADD == operator || SUBTRACT == operator) &&
lhs.getDataType().isDateTime() &&
(rhs.get(0).getDataType().isNumeric() ||
- rhs.get(0).getDataType().isInterval())) {
-
+ rhs.get(0).getDataType().isInterval()))
return new DateExpression();
- }
// ---------------------------------------------------------------------
// XXX: Other operators
// ---------------------------------------------------------------------
// Use the default operator expression for all other cases
- else {
+ else
return new DefaultExpression();
- }
}
/**
diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java
index c2d5389518..02e1e4cd4c 100644
--- a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java
+++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java
@@ -41,6 +41,7 @@ import static org.jooq.SQLDialect.POSTGRES;
// ...
import static org.jooq.SQLDialect.SQLITE;
// ...
+// ...
import java.util.EnumSet;
import java.util.Map;
diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java
index 6badcf8513..4d1bc2d64a 100644
--- a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java
+++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java
@@ -137,12 +137,13 @@ final class FieldMapsForInsert extends AbstractQueryPart {
+
case FIREBIRD: {
ctx.formatSeparator()
.start(INSERT_SELECT);
- ctx.visit(insertSelect(ctx));
+ ctx.visit(insertSelect());
ctx.end(INSERT_SELECT);
break;
@@ -162,7 +163,7 @@ final class FieldMapsForInsert extends AbstractQueryPart {
}
}
- private final Select insertSelect(Context> context) {
+ private final Select insertSelect() {
Select select = null;
for (int row = 0; row < rows; row++) {
@@ -171,7 +172,7 @@ final class FieldMapsForInsert extends AbstractQueryPart {
for (List> list : values.values())
fields.add(list.get(row));
- Select iteration = DSL.using(context.configuration()).select(fields);
+ Select iteration = DSL.select(fields);
if (select == null)
select = iteration;
diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java
index e319090b07..5dcf23b820 100644
--- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java
@@ -366,6 +366,7 @@ final class InsertQueryImpl extends AbstractStoreQuery impl
+
case HSQLDB: {
ctx.visit(toMerge(ctx.configuration()));
break;
@@ -463,6 +464,7 @@ final class InsertQueryImpl extends AbstractStoreQuery impl
+
case HSQLDB: {
diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java
index d926127df7..8c45e3cf73 100755
--- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java
@@ -78,6 +78,7 @@ import static org.jooq.SQLDialect.H2;
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
+// ...
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.exists;
import static org.jooq.impl.DSL.notExists;
diff --git a/jOOQ/src/main/java/org/jooq/impl/Ln.java b/jOOQ/src/main/java/org/jooq/impl/Ln.java
index d9c13df1ed..1642a1f596 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Ln.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Ln.java
@@ -99,6 +99,7 @@ final class Ln extends AbstractFunction {
+
case DERBY:
case H2:
case HSQLDB:
diff --git a/jOOQ/src/main/java/org/jooq/impl/Mod.java b/jOOQ/src/main/java/org/jooq/impl/Mod.java
index 225dc85658..8f23d748d6 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Mod.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Mod.java
@@ -74,6 +74,7 @@ final class Mod extends AbstractFunction {
+
case SQLITE:
return new Expression(MODULO, arg1, arg2);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Neg.java b/jOOQ/src/main/java/org/jooq/impl/Neg.java
index 5978c82b1e..f19a7afa68 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Neg.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Neg.java
@@ -44,6 +44,7 @@ import static org.jooq.SQLDialect.HSQLDB;
// ...
// ...
// ...
+// ...
import static org.jooq.impl.ExpressionOperator.BIT_NOT;
import java.util.EnumSet;
@@ -81,28 +82,24 @@ final class Neg extends AbstractField {
public final void accept(Context> ctx) {
SQLDialect family = ctx.configuration().dialect().family();
- if (operator == BIT_NOT && EMULATE_BIT_NOT.contains(family)) {
+ if (operator == BIT_NOT && EMULATE_BIT_NOT.contains(family))
ctx.sql("(0 - ")
.visit(field)
.sql(" - 1)");
- }
-
- else if (operator == BIT_NOT && family == FIREBIRD) {
+ else if (operator == BIT_NOT && family == FIREBIRD)
ctx.sql("bin_not(")
.visit(field)
.sql(')');
- }
- else {
+ else
ctx.sql(operator.toSQL())
.sql('(')
.visit(field)
.sql(')');
- }
}
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Repeat.java b/jOOQ/src/main/java/org/jooq/impl/Repeat.java
index 4378b8aebf..0f68f73b79 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Repeat.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Repeat.java
@@ -71,6 +71,7 @@ final class Repeat extends AbstractFunction {
+
case FIREBIRD:
return DSL.rpad(string, DSL.length(string).mul(count), string);
diff --git a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java
index 86695c56ff..6997132c93 100644
--- a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java
+++ b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java
@@ -82,6 +82,7 @@ import org.jooq.util.sqlite.SQLiteDataType;
// ...
// ...
// ...
+// ...
@@ -596,6 +597,7 @@ public final class SQLDataType {
+
Class.forName(CUBRIDDataType.class.getName());
Class.forName(DerbyDataType.class.getName());
Class.forName(FirebirdDataType.class.getName());
diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
index 2781b3d6f3..b19437b697 100644
--- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
@@ -81,6 +81,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
+// ...
import static org.jooq.SortOrder.DESC;
import static org.jooq.impl.CombineOperator.EXCEPT;
import static org.jooq.impl.CombineOperator.EXCEPT_ALL;
diff --git a/jOOQ/src/main/java/org/jooq/impl/Space.java b/jOOQ/src/main/java/org/jooq/impl/Space.java
index 0adeec3de4..41ff98eb21 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Space.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Space.java
@@ -67,6 +67,7 @@ final class Space extends AbstractFunction {
+
case DERBY:
case FIREBIRD:
case HSQLDB:
diff --git a/jOOQ/src/main/java/org/jooq/impl/Substring.java b/jOOQ/src/main/java/org/jooq/impl/Substring.java
index fff26a16aa..a392f4470b 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Substring.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Substring.java
@@ -63,7 +63,10 @@ final class Substring extends AbstractFunction {
switch (configuration.family()) {
- // [#430] Firebird has its own syntax
+ // [#430] These databases use SQL standard syntax
+
+
+
case FIREBIRD: {
if (getArguments().length == 2) {
return DSL.field("{substring}({0} {from} {1})", SQLDataType.VARCHAR, getArguments());
diff --git a/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java b/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java
index c9bc7f7bac..751f13e11c 100644
--- a/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java
+++ b/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java
@@ -73,6 +73,10 @@ final class WidthBucket extends AbstractField {
+
+
+
+
case POSTGRES:
ctx.visit(DSL.field("{width_bucket}({0}, {1}, {2}, {3})", getType(), field, low, high, buckets));
break;
diff --git a/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java b/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java
index eebbd0a17e..df84e082c3 100644
--- a/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java
+++ b/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java
@@ -75,6 +75,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
+// ...
import java.sql.Array;
import java.sql.Blob;
@@ -261,9 +262,8 @@ public class JDBCUtils {
* "Guess" the {@link SQLDialect} from a connection URL.
*/
public static final SQLDialect dialect(String url) {
- if (url == null) {
+ if (url == null)
return DEFAULT;
- }
// The below list might not be accurate or complete. Feel free to
// contribute fixes related to new / different JDBC driver configurations
@@ -281,44 +281,27 @@ public class JDBCUtils {
-
- else if (url.contains(":cubrid:")) {
+ else if (url.contains(":cubrid:"))
return CUBRID;
- }
- else if (url.contains(":derby:")) {
+ else if (url.contains(":derby:"))
return DERBY;
- }
- else if (url.contains(":firebirdsql:")) {
+ else if (url.contains(":firebirdsql:"))
return FIREBIRD;
- }
- else if (url.contains(":h2:")) {
+ else if (url.contains(":h2:"))
return H2;
- }
- else if (url.contains(":hsqldb:")) {
+ else if (url.contains(":hsqldb:"))
return HSQLDB;
- }
- else if (url.contains(":mariadb:")) {
+ else if (url.contains(":mariadb:"))
return MARIADB;
- }
else if (url.contains(":mysql:")
- || url.contains(":google:")) {
+ || url.contains(":google:"))
return MYSQL;
- }
else if (url.contains(":postgresql:")
- || url.contains(":pgsql:")) {
+ || url.contains(":pgsql:"))
return POSTGRES;
- }
else if (url.contains(":sqlite:")
- || url.contains(":sqldroid:")) {
+ || url.contains(":sqldroid:"))
return SQLITE;
- }
-
-
-
-
-
-
-
@@ -393,6 +376,8 @@ public class JDBCUtils {
+
+