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 bf56bcc0e0..c96176a1f6 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 @@ -72,7 +72,6 @@ import static org.jooq.impl.DSL.select; import static org.jooq.impl.DSL.selectFrom; import static org.jooq.impl.DSL.sql; import static org.jooq.impl.DSL.table; -import static org.jooq.impl.DSL.val; import static org.jooq.impl.DSL.values; import static org.jooq.impl.DSL.when; import static org.jooq.impl.SQLDataType.BIGINT; @@ -102,9 +101,7 @@ import static org.jooq.meta.postgres.pg_catalog.Tables.PG_NAMESPACE; import static org.jooq.meta.postgres.pg_catalog.Tables.PG_PROC; import static org.jooq.meta.postgres.pg_catalog.Tables.PG_SEQUENCE; import static org.jooq.meta.postgres.pg_catalog.Tables.PG_TYPE; -import static org.jooq.util.postgres.PostgresDSL.array; import static org.jooq.util.postgres.PostgresDSL.arrayAppend; -import static org.jooq.util.postgres.PostgresDSL.oid; import java.math.BigDecimal; import java.math.BigInteger; @@ -124,13 +121,10 @@ import org.jooq.Name; import org.jooq.Record; import org.jooq.Record1; import org.jooq.Record12; -import org.jooq.Record2; import org.jooq.Record5; import org.jooq.Record6; -import org.jooq.Records; import org.jooq.Result; import org.jooq.ResultQuery; -import org.jooq.Rows; import org.jooq.SQLDialect; import org.jooq.Select; import org.jooq.SortOrder; @@ -138,7 +132,6 @@ import org.jooq.Table; import org.jooq.TableField; import org.jooq.TableOptions.TableType; import org.jooq.conf.ParseUnknownFunctions; -import org.jooq.conf.SettingsTools; import org.jooq.exception.DataAccessException; import org.jooq.impl.DSL; import org.jooq.impl.ParserException; @@ -168,10 +161,10 @@ import org.jooq.meta.SequenceDefinition; import org.jooq.meta.TableDefinition; import org.jooq.meta.UDTDefinition; import org.jooq.meta.hsqldb.HSQLDBDatabase; +import org.jooq.meta.jaxb.ForcedType; import org.jooq.meta.postgres.information_schema.tables.CheckConstraints; import org.jooq.meta.postgres.information_schema.tables.KeyColumnUsage; import org.jooq.meta.postgres.information_schema.tables.Routines; -import org.jooq.meta.postgres.pg_catalog.Tables; import org.jooq.meta.postgres.pg_catalog.tables.PgClass; import org.jooq.meta.postgres.pg_catalog.tables.PgConstraint; import org.jooq.meta.postgres.pg_catalog.tables.PgIndex; @@ -953,11 +946,14 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat r1.SPECIFIC_NAME, r1.ROUTINE_TYPE, + when(r1.DATA_TYPE.eq(inline("USER-DEFINED")).and(r1.TYPE_UDT_NAME.eq(inline("geometry"))), inline("geometry")) + // Ignore the data type when there is at least one out parameter - canCombineArrays() + .else_(canCombineArrays() ? when(condition("{0} && ARRAY['o','b']::\"char\"[]", PG_PROC.PROARGMODES), inline("void")) - .otherwise(r1.DATA_TYPE).as("data_type") - : r1.DATA_TYPE.as("data_type"), + .else_(r1.DATA_TYPE) + : r1.DATA_TYPE + ).as("data_type"), r1.CHARACTER_MAXIMUM_LENGTH, diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java index 4bacf42c4a..5dda255c56 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java @@ -44,6 +44,7 @@ import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.name; import static org.jooq.impl.DSL.partitionBy; import static org.jooq.impl.DSL.when; +import static org.jooq.meta.postgres.information_schema.Tables.COLUMNS; import static org.jooq.meta.postgres.information_schema.Tables.PARAMETERS; import static org.jooq.meta.postgres.information_schema.Tables.ROUTINES; @@ -131,7 +132,9 @@ public class PostgresRoutineDefinition extends AbstractRoutineDefinition { for (Record record : create().select( p.PARAMETER_NAME, - p.DATA_TYPE, + when(p.DATA_TYPE.eq(inline("USER-DEFINED")).and(p.UDT_NAME.eq(inline("geometry"))), inline("geometry")) + .else_(p.DATA_TYPE) + .as(p.DATA_TYPE), p.CHARACTER_MAXIMUM_LENGTH, pNumericPrecision(p).as(p.NUMERIC_PRECISION), p.NUMERIC_SCALE, 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 fede7ea972..ffd1d17922 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 @@ -89,6 +89,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition { Field dataType = when(COLUMNS.INTERVAL_TYPE.like(any(inline("%YEAR%"), inline("%MONTH%"))), inline("INTERVAL YEAR TO MONTH")) .when(COLUMNS.INTERVAL_TYPE.like(any(inline("%DAY%"), inline("%HOUR%"), inline("%MINUTE%"), inline("%SECOND%"))), inline("INTERVAL DAY TO SECOND")) + .when(COLUMNS.DATA_TYPE.eq(inline("USER-DEFINED")).and(COLUMNS.UDT_NAME.eq(inline("geometry"))), inline("geometry")) .else_(COLUMNS.DATA_TYPE); Field udtSchema = COLUMNS.UDT_SCHEMA; Field precision = nvl(COLUMNS.DATETIME_PRECISION, COLUMNS.NUMERIC_PRECISION); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresUDTDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresUDTDefinition.java index 3c84580a52..ed88e4c668 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresUDTDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresUDTDefinition.java @@ -38,8 +38,11 @@ package org.jooq.meta.postgres; import static org.jooq.impl.DSL.coalesce; +import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.name; +import static org.jooq.impl.DSL.when; import static org.jooq.meta.postgres.information_schema.Tables.ATTRIBUTES; +import static org.jooq.meta.postgres.information_schema.Tables.COLUMNS; import static org.jooq.meta.postgres.information_schema.Tables.DOMAINS; import java.sql.SQLException; @@ -69,7 +72,11 @@ public class PostgresUDTDefinition extends AbstractUDTDefinition { for (Record record : create().select( ATTRIBUTES.ATTRIBUTE_NAME, ATTRIBUTES.ORDINAL_POSITION, - coalesce(DOMAINS.DATA_TYPE, ATTRIBUTES.DATA_TYPE).as(ATTRIBUTES.DATA_TYPE), + coalesce( + DOMAINS.DATA_TYPE, + when(ATTRIBUTES.DATA_TYPE.eq(inline("USER-DEFINED")).and(ATTRIBUTES.ATTRIBUTE_UDT_NAME.eq(inline("geometry"))), inline("geometry")) + .else_(ATTRIBUTES.DATA_TYPE) + ).as(ATTRIBUTES.DATA_TYPE), coalesce(DOMAINS.CHARACTER_MAXIMUM_LENGTH, ATTRIBUTES.CHARACTER_MAXIMUM_LENGTH).as(ATTRIBUTES.CHARACTER_MAXIMUM_LENGTH), coalesce(DOMAINS.NUMERIC_PRECISION, ATTRIBUTES.NUMERIC_PRECISION).as(ATTRIBUTES.NUMERIC_PRECISION), coalesce(DOMAINS.NUMERIC_SCALE, ATTRIBUTES.NUMERIC_SCALE).as(ATTRIBUTES.NUMERIC_SCALE), diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index b35a78e616..38b818bd0c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -5126,6 +5126,20 @@ public class DefaultBinding implements Binding { + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 3820d2733e..2b0b8983dd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -6301,7 +6301,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } - else if (parseFunctionNameIf("ST_WITHIN") && requireProEdition()) { + else if (parseFunctionNameIf("ST_WITHIN", "SDO_INSIDE") && requireProEdition()) { @@ -11906,6 +11906,23 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { break; + case 'G': + if ((parseKeywordOrIdentifierIf("GEOMETRY") || + parseKeywordOrIdentifierIf("SDO_GEOMETRY")) + && requireProEdition() + ) { + + + + } + else if (parseKeywordOrIdentifierIf("GEOGRAPHY") && requireProEdition()) { + + + + } + + break; + case 'I': if (parseKeywordOrIdentifierIf("INTEGER") || parseKeywordOrIdentifierIf("INT") || diff --git a/jOOQ/src/main/java/org/jooq/impl/StWithin.java b/jOOQ/src/main/java/org/jooq/impl/StWithin.java index 23cf821cf1..91b38ac18a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/StWithin.java +++ b/jOOQ/src/main/java/org/jooq/impl/StWithin.java @@ -176,6 +176,10 @@ package org.jooq.impl; + + + +