From aa7c89e50ae40580bd1c7bcb968db58b56d4acf9 Mon Sep 17 00:00:00 2001 From: t-horikawa Date: Fri, 24 Jan 2025 10:04:51 +0900 Subject: [PATCH] enhance error handling in LobReferences --- .../tsubakuro/sql/impl/BlobReferenceForSql.java | 8 ++++---- .../tsubakuro/sql/impl/ClobReferenceForSql.java | 8 ++++---- .../tsubakuro/sql/io/StreamBackedValueInput.java | 11 +++++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/BlobReferenceForSql.java b/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/BlobReferenceForSql.java index bdcc7d72..d91bbf63 100644 --- a/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/BlobReferenceForSql.java +++ b/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/BlobReferenceForSql.java @@ -26,11 +26,11 @@ public final class BlobReferenceForSql implements BlobReference { final SqlCommon.LargeObjectReference largeObjectReference; Response response; - public BlobReferenceForSql(long provider, long objectId) { + public BlobReferenceForSql(SqlCommon.LargeObjectProvider provider, long objectId) { largeObjectReference = SqlCommon.LargeObjectReference.newBuilder() - .setProvider(SqlCommon.LargeObjectProvider.forNumber((int) provider)) - .setObjectId(objectId) - .build(); + .setProvider(provider) + .setObjectId(objectId) + .build(); this.response = null; } diff --git a/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/ClobReferenceForSql.java b/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/ClobReferenceForSql.java index b0892574..417e939a 100644 --- a/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/ClobReferenceForSql.java +++ b/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/impl/ClobReferenceForSql.java @@ -26,11 +26,11 @@ public final class ClobReferenceForSql implements ClobReference { final SqlCommon.LargeObjectReference largeObjectReference; Response response; - public ClobReferenceForSql(long provider, long objectId) { + public ClobReferenceForSql(SqlCommon.LargeObjectProvider provider, long objectId) { largeObjectReference = SqlCommon.LargeObjectReference.newBuilder() - .setProvider(SqlCommon.LargeObjectProvider.forNumber((int) provider)) - .setObjectId(objectId) - .build(); + .setProvider(provider) + .setObjectId(objectId) + .build(); this.response = null; } diff --git a/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/io/StreamBackedValueInput.java b/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/io/StreamBackedValueInput.java index b9b424bd..53447b65 100644 --- a/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/io/StreamBackedValueInput.java +++ b/modules/session/src/main/java/com/tsurugidb/tsubakuro/sql/io/StreamBackedValueInput.java @@ -66,6 +66,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.tsurugidb.sql.proto.SqlCommon; import com.tsurugidb.tsubakuro.sql.BlobReference; import com.tsurugidb.tsubakuro.sql.ClobReference; import com.tsurugidb.tsubakuro.sql.impl.BlobReferenceForSql; @@ -543,7 +544,10 @@ public DateTimeInterval readDateTimeInterval() throws IOException { public BlobReference readBlob() throws IOException { require(EntryType.BLOB); clearHeaderInfo(); - var provider = read8(); + var provider = SqlCommon.LargeObjectProvider.forNumber((int) read8()); + if (provider == null) { + throw new IOException("illegal blob provider"); + } var objectId = read8(); return new BlobReferenceForSql(provider, objectId); } @@ -552,7 +556,10 @@ public BlobReference readBlob() throws IOException { public ClobReference readClob() throws IOException { require(EntryType.CLOB); clearHeaderInfo(); - var provider = read8(); + var provider = SqlCommon.LargeObjectProvider.forNumber((int) read8()); + if (provider == null) { + throw new IOException("illegal clob provider"); + } var objectId = read8(); return new ClobReferenceForSql(provider, objectId); }