diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/DefaultGeneratorStrategy.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/DefaultGeneratorStrategy.java index b797ad0fe3..fe8eba7f6e 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/DefaultGeneratorStrategy.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/DefaultGeneratorStrategy.java @@ -39,6 +39,7 @@ package org.jooq.codegen; import static java.util.Arrays.asList; // ... +// ... import static org.jooq.SQLDialect.MARIADB; // ... import static org.jooq.SQLDialect.MYSQL; diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java index dd97be1e0d..3e19362130 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java @@ -367,6 +367,12 @@ class GenerationUtil { + + + + + + case POSTGRES: { // The convention is to prepend a "_" to a type to get an array type @@ -393,14 +399,12 @@ class GenerationUtil { // In HSQLDB 2.2.5, there has been an incompatible INFORMATION_SCHEMA change around the // ELEMENT_TYPES view. Arrays are now described much more explicitly - if ("ARRAY".equalsIgnoreCase(t)) { + if ("ARRAY".equalsIgnoreCase(t)) return name("OTHER"); - } // This is for backwards compatibility - else { + else return name(t.replace(" ARRAY", "")); - } } } diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index a3d8c83e1b..f785cc616f 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -2286,6 +2286,9 @@ public abstract class AbstractDatabase implements Database { + + + case POSTGRES: case H2: return "ARRAY".equals(dataType); 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 95dd3c3972..3c63ca2b34 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java @@ -40,6 +40,7 @@ package org.jooq.meta; import org.jooq.SQLDialect; // ... // ... +// ... import org.jooq.meta.cubrid.CUBRIDDatabase; // ... import org.jooq.meta.derby.DerbyDatabase; @@ -97,6 +98,7 @@ public class Databases { + case CUBRID: result = CUBRIDDatabase.class; break; case DERBY: result = DerbyDatabase.class; break; case FIREBIRD: result = FirebirdDatabase.class; break; diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java index 262c3cab72..3f652ccbca 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java @@ -84,9 +84,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.jooq.Condition; import org.jooq.DSLContext; import org.jooq.Field; import org.jooq.Name; +// ... import org.jooq.Record; import org.jooq.Record2; import org.jooq.Record4; @@ -878,6 +880,22 @@ public class PostgresDatabase extends AbstractDatabase { return exists1(table, TABLES, TABLES.TABLE_SCHEMA, TABLES.TABLE_NAME); } + + + + + + + + + + + + + + + + boolean canCombineArrays() { if (canCombineArrays == null) { diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java index 72dff4e64a..dbc979e5f7 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java @@ -54,6 +54,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import org.jooq.Field; import org.jooq.Record; import org.jooq.meta.AbstractTableDefinition; import org.jooq.meta.ColumnDefinition; @@ -75,10 +76,16 @@ public class PostgresTableDefinition extends AbstractTableDefinition { public List getElements0() throws SQLException { List result = new ArrayList<>(); + Field dataType = COLUMNS.DATA_TYPE; + + + + + for (Record record : create().select( COLUMNS.COLUMN_NAME, COLUMNS.ORDINAL_POSITION, - COLUMNS.DATA_TYPE, + dataType, // [#8067] A more robust / sophisticated decoding might be available nvl( @@ -105,6 +112,9 @@ public class PostgresTableDefinition extends AbstractTableDefinition { .and(PG_DESCRIPTION.OBJSUBID.eq(COLUMNS.ORDINAL_POSITION)) .where(COLUMNS.TABLE_SCHEMA.equal(getSchema().getName())) .and(COLUMNS.TABLE_NAME.equal(getName())) + + + .orderBy(COLUMNS.ORDINAL_POSITION) .fetch()) { @@ -117,7 +127,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition { DataTypeDefinition type = new DefaultDataTypeDefinition( getDatabase(), typeSchema, - record.get(COLUMNS.DATA_TYPE), + record.get(dataType), record.get(COLUMNS.CHARACTER_MAXIMUM_LENGTH), record.get(COLUMNS.NUMERIC_PRECISION), record.get(COLUMNS.NUMERIC_SCALE), diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java index 3e6b6417b9..50fad8c043 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java @@ -863,9 +863,16 @@ public class DefaultDataType implements DataType { result = getDataType(dialect, normalised.substring(1)).getArrayDataType(); // [#6466] HSQLDB reports array types as XYZARRAY - if (result == null && family == HSQLDB && upper.endsWith(" ARRAY")) + else if (result == null && family == HSQLDB && upper.endsWith(" ARRAY")) result = getDataType(dialect, typeName.substring(0, typeName.length() - 6)).getArrayDataType(); + + + + + + + // [#366] Don't log a warning here. The warning is logged when // catching the exception in jOOQ-codegen if (result == null) diff --git a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java index c1fee05fcf..6296610663 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java @@ -41,6 +41,7 @@ package org.jooq.impl; // ... // ... // ... +// ... import static org.jooq.SQLDialect.CUBRID; // ... import static org.jooq.SQLDialect.DERBY; @@ -98,6 +99,7 @@ import org.jooq.types.YearToSecond; // ... // ... // ... +// ... import org.jooq.util.cubrid.CUBRIDDataType; // ... import org.jooq.util.derby.DerbyDataType; @@ -729,6 +731,9 @@ public final class SQLDataType { + + +