An integration test added recently for a MySQL issue doesn't work for Derby:
byte[] a = new byte[] { 'a' };
Field<String> s = field("s", CLOB.default_("a"));
Field<byte[]> b = field("b", BLOB.default_(a));
create().createTable(t)
.column(dummy)
.column(s)
.column(b)
.primaryKey(dummy)
.execute();
This throws:
12:52:25,524 DEBUG [LoggerListener ] - Exception
org.jooq.exception.DataAccessException: SQL [create table "t" ("dummy" int, s clob default 'a', b blob default cast(X'61' as blob), primary key ("dummy"))]; Syntax error: Encountered "cast" at line 1, column 67.
at org.jooq_3.20.0-SNAPSHOT.DERBY.debug(Unknown Source) ~[?:?]
at org.jooq.impl.Tools.translate(Tools.java:3648) ~[classes/:?]
at org.jooq.impl.Tools.translate(Tools.java:3621) ~[classes/:?]
at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:827) ~[classes/:?]
at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:362) [classes/:?]
at org.jooq.test.all.testcases.DDLTests.testCreateTableWithConstantDefaultsMySQLTextLimitation(DDLTests.java:4847) [test-classes/:?]
at org.jooq.test.jOOQAbstractTest.testCreateTableWithConstantDefaultsMySQLTextLimitation(jOOQAbstractTest.java:4525) [test-classes/:?]
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
I currently don't know how to work around this. The BLOB literal doesn't work for DEFAULT expressions:
create table "t" (
"dummy" int,
s clob default 'a',
b blob default cast(X'61' as blob),
primary key ("dummy")
)
Error being:
SQL Error [30000] [42X01]: Syntax error: Encountered "cast" at line 4, column 18.
Without the cast:
SQL Error [30000] [42821]: Columns of type 'BLOB' cannot hold values of type 'CHAR () FOR BIT DATA'.
An integration test added recently for a MySQL issue doesn't work for Derby:
This throws:
I currently don't know how to work around this. The
BLOB
literal doesn't work forDEFAULT
expressions:Error being:
Without the cast:
See also:
The MySQL issue is:
16853