diff --git a/jOOQ-meta/src/main/java/org/jooq/util/firebird/FirebirdTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/firebird/FirebirdTableDefinition.java index c5deefe46b..e5415e2092 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/firebird/FirebirdTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/firebird/FirebirdTableDefinition.java @@ -82,7 +82,12 @@ public class FirebirdTableDefinition extends AbstractTableDefinition { r.RDB$NULL_FLAG.nvl((short) 0), r.RDB$DEFAULT_SOURCE, r.RDB$FIELD_POSITION, - f.RDB$FIELD_LENGTH, + + // [#3342] FIELD_LENGTH should be ignored for LOBs + decode().value(f.RDB$FIELD_TYPE) + .when((short) 261, (short) 0) + .otherwise(f.RDB$FIELD_LENGTH) + .as("FIELD_LENGTH"), f.RDB$FIELD_PRECISION, f.RDB$FIELD_SCALE.neg().as("FIELD_SCALE"), @@ -132,7 +137,7 @@ public class FirebirdTableDefinition extends AbstractTableDefinition { getDatabase(), getSchema(), record.getValue("FIELD_TYPE", String.class), - record.getValue(f.RDB$FIELD_LENGTH), + record.getValue("FIELD_LENGTH", short.class), record.getValue(f.RDB$FIELD_PRECISION), record.getValue("FIELD_SCALE", Integer.class), record.getValue(r.RDB$NULL_FLAG.nvl((short) 0)) == 0, diff --git a/jOOQ-test/src/main/resources/org/jooq/test/firebird/create.sql b/jOOQ-test/src/main/resources/org/jooq/test/firebird/create.sql index 8c34f2704e..e179c05125 100644 --- a/jOOQ-test/src/main/resources/org/jooq/test/firebird/create.sql +++ b/jOOQ-test/src/main/resources/org/jooq/test/firebird/create.sql @@ -36,6 +36,7 @@ DROP TABLE "t_941"/ DROP TABLE T_943/ DROP TABLE t_unsigned/ DROP TABLE t_booleans/ +DROP TABLE t_3342/ @@ -289,6 +290,11 @@ CREATE TABLE x_test_case_2025 ( ); / +CREATE TABLE t_3342 ( + b BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET NONE COLLATE NONE +); +/ + CREATE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT T_AUTHOR.FIRST_NAME || ' ' || T_AUTHOR.LAST_NAME, T_BOOK.TITLE FROM T_AUTHOR JOIN T_BOOK ON T_BOOK.AUTHOR_ID = T_AUTHOR.ID;