diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index 11fa2bd9b0..abe90582d4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -38,6 +38,7 @@ package org.jooq.impl; import static java.util.Arrays.asList; import static org.jooq.SQLDialect.DB2; import static org.jooq.SQLDialect.DERBY; +import static org.jooq.SQLDialect.H2; import static org.jooq.SQLDialect.HSQLDB; import static org.jooq.SQLDialect.INGRES; import static org.jooq.SQLDialect.POSTGRES; @@ -115,7 +116,7 @@ class Val extends AbstractField implements Param, BindingProvider { // [#722] TODO This is probably not entirely right. case INGRES: - // [#1029] Postgres and [#632] Sybase need explicit casting + // [#1029] Postgres and [#632] Sybase need explicit casting // in very rare cases. case POSTGRES: case SYBASE: { @@ -238,8 +239,17 @@ class Val extends AbstractField implements Param, BindingProvider { context.sql(val.toString()); } else if (type.isArray()) { - context.sql("ARRAY") - .sql(Arrays.toString((Object[]) val)); + + // H2 renders arrays as tuples + if (context.getDialect() == H2) { + context.sql(Arrays.toString((Object[]) val).replaceAll("\\[([^]]*)\\]", "($1)")); + } + + // By default, render HSQLDB / POSTGRES syntax + else { + context.sql("ARRAY") + .sql(Arrays.toString((Object[]) val)); + } } else if (ArrayRecord.class.isAssignableFrom(type)) { context.sql(val.toString());