[jOOQ/jOOQ#14736] PostgreSQL Numeric array type with precision/scale too large in generated code

This commit is contained in:
Lukas Eder 2023-03-02 10:32:47 +01:00
parent d91bb0c31f
commit 43f42acd31

View File

@ -46,6 +46,7 @@ import static org.jooq.impl.DSL.greatest;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.lower;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.nullif;
import static org.jooq.impl.DSL.nvl;
import static org.jooq.impl.DSL.substring;
import static org.jooq.impl.DSL.when;
@ -104,7 +105,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition {
.else_(COLUMNS.DATA_TYPE);
Field<String> udtSchema = COLUMNS.UDT_SCHEMA;
// [#8067] [#11658] [#13919]
// [#8067] [#11658] [#13919] [#14736]
// A more robust / sophisticated decoding might be available via
// - information_schema._pg_char_max_length
// - information_schema._pg_numeric_precision
@ -129,14 +130,14 @@ public class PostgresTableDefinition extends AbstractTableDefinition {
)
.when(
COLUMNS.UDT_NAME.eq(inline("_numeric")),
PG_ATTRIBUTE.ATTTYPMOD.sub(inline(4)).shr(inline(16)).bitAnd(inline(65535))
nullif(PG_ATTRIBUTE.ATTTYPMOD, inline(-1)).sub(inline(4)).shr(inline(16)).bitAnd(inline(65535))
)
);
Field<Integer> scale = nvl(
COLUMNS.NUMERIC_SCALE,
when(
COLUMNS.UDT_NAME.eq(inline("_numeric")),
PG_ATTRIBUTE.ATTTYPMOD.sub(inline(4)).bitAnd(inline(65535))
nullif(PG_ATTRIBUTE.ATTTYPMOD, inline(-1)).sub(inline(4)).bitAnd(inline(65535))
)
);