From fbb43fa8841251b080ab294c5077c9e35fcf1d56 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 23 Jun 2021 15:41:10 +0200 Subject: [PATCH] [jOOQ/jOOQ#11191] Generated code of a routine with TIMESTAMP parameter has too little precision --- .../org/jooq/meta/postgres/PostgresDatabase.java | 13 ++++++++++++- .../meta/postgres/PostgresRoutineDefinition.java | 14 +++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) 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 b0cf347a31..0646840e23 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 @@ -958,7 +958,18 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat : r1.DATA_TYPE.as("data_type"), r1.CHARACTER_MAXIMUM_LENGTH, - r1.NUMERIC_PRECISION, + + // [#12048] TODO: Maintain whether we know the precision or not + when(r1.NUMERIC_PRECISION.isNull().and(r1.DATA_TYPE.in( + inline("time"), + inline("timetz"), + inline("time without time zone"), + inline("time with time zone"), + inline("timestamp"), + inline("timestamptz"), + inline("timestamp without time zone"), + inline("timestamp with time zone"))), inline(6)) + .else_(r1.NUMERIC_PRECISION).as(r1.NUMERIC_PRECISION), r1.NUMERIC_SCALE, r1.TYPE_UDT_SCHEMA, r1.TYPE_UDT_NAME, 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 fce2300c20..ffcaaac880 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 @@ -42,6 +42,7 @@ import static org.jooq.impl.DSL.count; 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.PARAMETERS; import static org.jooq.meta.postgres.information_schema.Tables.ROUTINES; @@ -129,7 +130,18 @@ public class PostgresRoutineDefinition extends AbstractRoutineDefinition { p.PARAMETER_NAME, p.DATA_TYPE, p.CHARACTER_MAXIMUM_LENGTH, - p.NUMERIC_PRECISION, + + // [#12048] TODO: Maintain whether we know the precision or not + when(p.NUMERIC_PRECISION.isNull().and(p.DATA_TYPE.in( + inline("time"), + inline("timetz"), + inline("time without time zone"), + inline("time with time zone"), + inline("timestamp"), + inline("timestamptz"), + inline("timestamp without time zone"), + inline("timestamp with time zone"))), inline(6)) + .else_(p.NUMERIC_PRECISION).as(p.NUMERIC_PRECISION), p.NUMERIC_SCALE, p.UDT_SCHEMA, p.UDT_NAME,