diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index 7a52cf0863..fb026542ba 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -77,6 +77,7 @@ import static org.jooq.SQLDialect.MYSQL; import static org.jooq.SQLDialect.POSTGRES; // ... // ... +// ... import static org.jooq.SQLDialect.SQLITE; // ... // ... @@ -98,6 +99,7 @@ import static org.jooq.impl.DefaultBinding.DefaultDoubleBinding.nan; import static org.jooq.impl.DefaultBinding.DefaultEnumTypeBinding.pgEnumValue; import static org.jooq.impl.DefaultBinding.DefaultEnumTypeBinding.pgRenderEnumCast; import static org.jooq.impl.DefaultBinding.DefaultJSONBBinding.EMULATE_AS_BLOB; +import static org.jooq.impl.DefaultBinding.DefaultJSONBinding.patchSnowflakeJSON; import static org.jooq.impl.DefaultBinding.DefaultResultBinding.readMultisetJSON; import static org.jooq.impl.DefaultBinding.DefaultResultBinding.readMultisetXML; import static org.jooq.impl.DefaultDataType.getDataType; @@ -217,6 +219,7 @@ import java.util.UUID; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; +import java.util.regex.Matcher; import java.util.regex.Pattern; // ... @@ -4199,7 +4202,7 @@ public class DefaultBinding implements Binding { static final Result readMultisetJSON(Scope ctx, AbstractRow row, Class recordType, String s) { if (s.startsWith("{") || s.startsWith("[")) - return new JSONReader<>(ctx.dsl(), row, recordType, true).read(new StringReader(s), true); + return new JSONReader<>(ctx.dsl(), row, recordType, true).read(new StringReader(patchSnowflakeJSON(ctx, s)), true); else return readMultisetScalar(ctx, row, recordType, s); } @@ -5498,19 +5501,19 @@ public class DefaultBinding implements Binding { @Override final JSON get0(BindingGetResultSetContext ctx) throws SQLException { - String string = ctx.resultSet().getString(ctx.index()); + String string = patchSnowflakeJSON(ctx, ctx.resultSet().getString(ctx.index())); return string == null ? null : JSON.valueOf(string); } @Override final JSON get0(BindingGetStatementContext ctx) throws SQLException { - String string = ctx.statement().getString(ctx.index()); + String string = patchSnowflakeJSON(ctx, ctx.statement().getString(ctx.index())); return string == null ? null : JSON.valueOf(string); } @Override final JSON get0(BindingGetSQLInputContext ctx) throws SQLException { - String string = ctx.input().readString(); + String string = patchSnowflakeJSON(ctx, ctx.input().readString()); return string == null ? null : JSON.valueOf(string); } @@ -5518,6 +5521,37 @@ public class DefaultBinding implements Binding { final int sqltype(Statement statement, Configuration configuration) { return Types.VARCHAR; } + + + + + + + + + + + + + + + + static final String patchSnowflakeJSON(Scope ctx, String json) { + + + + + + + + + + + + + + return json; + } } static final class DefaultJSONBBinding extends InternalBinding { @@ -5579,7 +5613,7 @@ public class DefaultBinding implements Binding { if (EMULATE_AS_BLOB.contains(ctx.dialect())) return bytesConverter(ctx.configuration()).from(bytes(ctx.configuration()).get0(ctx), ctx.converterContext()); - String string = ctx.resultSet().getString(ctx.index()); + String string = patchSnowflakeJSON(ctx, ctx.resultSet().getString(ctx.index())); return string == null ? null : JSONB.valueOf(string); } @@ -5588,7 +5622,7 @@ public class DefaultBinding implements Binding { if (EMULATE_AS_BLOB.contains(ctx.dialect())) return bytesConverter(ctx.configuration()).from(bytes(ctx.configuration()).get0(ctx), ctx.converterContext()); - String string = ctx.statement().getString(ctx.index()); + String string = patchSnowflakeJSON(ctx, ctx.statement().getString(ctx.index())); return string == null ? null : JSONB.valueOf(string); } @@ -5597,7 +5631,7 @@ public class DefaultBinding implements Binding { if (EMULATE_AS_BLOB.contains(ctx.dialect())) return bytesConverter(ctx.configuration()).from(bytes(ctx.configuration()).get0(ctx), ctx.converterContext()); - String string = ctx.input().readString(); + String string = patchSnowflakeJSON(ctx, ctx.input().readString()); return string == null ? null : JSONB.valueOf(string); }