[jOOQ/jOOQ#14653] Patch undefined to mean null

This commit is contained in:
Lukas Eder 2023-02-16 17:56:53 +01:00
parent b463c3784e
commit 5f20e63ed6

View File

@ -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<T, U> implements Binding<T, U> {
static final <R extends Record> Result<R> readMultisetJSON(Scope ctx, AbstractRow<R> row, Class<R> 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<T, U> implements Binding<T, U> {
@Override
final JSON get0(BindingGetResultSetContext<U> 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<U> 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<U> 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<T, U> implements Binding<T, U> {
final int sqltype(Statement statement, Configuration configuration) {
return Types.VARCHAR;
}
static final String patchSnowflakeJSON(Scope ctx, String json) {
return json;
}
}
static final class DefaultJSONBBinding<U> extends InternalBinding<org.jooq.JSONB, U> {
@ -5579,7 +5613,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
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<T, U> implements Binding<T, U> {
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<T, U> implements Binding<T, U> {
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);
}