diff --git a/jdbc/src/main/java/tech/ydb/jdbc/context/YdbContext.java b/jdbc/src/main/java/tech/ydb/jdbc/context/YdbContext.java index be5da35..c1bf440 100644 --- a/jdbc/src/main/java/tech/ydb/jdbc/context/YdbContext.java +++ b/jdbc/src/main/java/tech/ydb/jdbc/context/YdbContext.java @@ -429,9 +429,10 @@ public YdbPreparedQuery findOrPrepareParams(YdbQuery query, YdbPrepareMode mode) } QueryType type = query.getType(); + YqlBatcher batcher = query.getYqlBatcher(); if (type == QueryType.BULK_QUERY) { - if (query.getYqlBatcher() == null || query.getYqlBatcher().getCommand() != YqlBatcher.Cmd.UPSERT) { + if (batcher == null || batcher.getCommand() != YqlBatcher.Cmd.UPSERT) { throw new SQLException(YdbConst.BULKS_UNSUPPORTED); } } @@ -441,8 +442,8 @@ public YdbPreparedQuery findOrPrepareParams(YdbQuery query, YdbPrepareMode mode) return new InMemoryQuery(query, queryOptions.isDeclareJdbcParameters()); } - if (query.getYqlBatcher() != null && (mode == YdbPrepareMode.AUTO || type == QueryType.BULK_QUERY)) { - String tablePath = joined(getPrefixPath(), query.getYqlBatcher().getTableName()); + if (batcher != null && (mode == YdbPrepareMode.AUTO || type == QueryType.BULK_QUERY)) { + String tablePath = joined(getPrefixPath(), batcher.getTableName()); TableDescription description = tableDescribeCache.getIfPresent(tablePath); if (description == null) { YdbTracer tracer = getTracer(); @@ -469,7 +470,7 @@ public YdbPreparedQuery findOrPrepareParams(YdbQuery query, YdbPrepareMode mode) if (query.getReturning() != null) { throw new SQLException(YdbConst.BULK_NOT_SUPPORT_RETURNING); } - return BulkUpsertQuery.build(types, tablePath, query.getYqlBatcher().getColumns(), description); + return BulkUpsertQuery.build(types, tablePath, batcher.getColumns(), description); } if (description != null) { diff --git a/jdbc/src/main/java/tech/ydb/jdbc/impl/BaseYdbResultSet.java b/jdbc/src/main/java/tech/ydb/jdbc/impl/BaseYdbResultSet.java index e76b11c..3f71094 100644 --- a/jdbc/src/main/java/tech/ydb/jdbc/impl/BaseYdbResultSet.java +++ b/jdbc/src/main/java/tech/ydb/jdbc/impl/BaseYdbResultSet.java @@ -93,7 +93,7 @@ private ValueReader readValue(int columnIndex) throws SQLException { ValueReader value = getValue(columnIndex - 1); ColumnInfo type = columns[columnIndex - 1]; - wasNull = type.isNull() || (type.isOptional() && !value.isOptionalItemPresent()); + wasNull = type == null || type.isNull() || (type.isOptional() && !value.isOptionalItemPresent()); return value; } @@ -594,10 +594,10 @@ public Value getNativeColumn(int columnIndex) throws SQLException { if (wasNull) { return null; } - while (value.getType().getKind() == Type.Kind.OPTIONAL) { + while (value != null && value.getType().getKind() == Type.Kind.OPTIONAL) { value = value.getOptionalItem(); } - return value.getValue(); + return value == null ? null : value.getValue(); } @Override diff --git a/jdbc/src/main/java/tech/ydb/jdbc/query/params/BatchedQuery.java b/jdbc/src/main/java/tech/ydb/jdbc/query/params/BatchedQuery.java index 21b029d..005b7cf 100644 --- a/jdbc/src/main/java/tech/ydb/jdbc/query/params/BatchedQuery.java +++ b/jdbc/src/main/java/tech/ydb/jdbc/query/params/BatchedQuery.java @@ -234,6 +234,9 @@ public static BatchedQuery createAutoBatched(YdbTypes types, YdbQuery query, Tab throws SQLException { YqlBatcher batcher = query.getYqlBatcher(); + if (batcher == null) { + return null; + } // DELETE and UPDATE may be batched only if WHERE contains only primary key columns if (batcher.getCommand() == YqlBatcher.Cmd.DELETE || batcher.getCommand() == YqlBatcher.Cmd.UPDATE) {