From cf3ad6622b68c91bcd07bd9e8f05274983ed92e4 Mon Sep 17 00:00:00 2001 From: Steve Lord Date: Tue, 19 Mar 2024 15:10:18 -0700 Subject: [PATCH] GH-37720: [Java][FlightSQL] Implement stateless prepared statements PR update --- .../arrow/flight/sql/FlightSqlClient.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java index 9a46cbf6f7c77..a94dc563cfbcc 100644 --- a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java +++ b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java @@ -1057,17 +1057,21 @@ public FlightInfo execute(final CallOption... options) { if (parameterBindingRoot != null && parameterBindingRoot.getRowCount() > 0) { try (final SyncPutListener putListener = putParameters(descriptor, options)) { - final PutResult read = putListener.read(); - if (read != null) { - try (final ArrowBuf metadata = read.getApplicationMetadata()) { - final FlightSql.DoPutPreparedStatementResult doPutPreparedStatementResult = - FlightSql.DoPutPreparedStatementResult.parseFrom(metadata.nioBuffer()); - descriptor = FlightDescriptor - .command(Any.pack(CommandPreparedStatementQuery.newBuilder() - .setPreparedStatementHandle( - doPutPreparedStatementResult.getPreparedStatementHandle()) - .build()) - .toByteArray()); + if (getParameterSchema().getFields().size() > 0 && + parameterBindingRoot != null && + parameterBindingRoot.getRowCount() > 0) { + final PutResult read = putListener.read(); + if (read != null) { + try (final ArrowBuf metadata = read.getApplicationMetadata()) { + final FlightSql.DoPutPreparedStatementResult doPutPreparedStatementResult = + FlightSql.DoPutPreparedStatementResult.parseFrom(metadata.nioBuffer()); + descriptor = FlightDescriptor + .command(Any.pack(CommandPreparedStatementQuery.newBuilder() + .setPreparedStatementHandle( + doPutPreparedStatementResult.getPreparedStatementHandle()) + .build()) + .toByteArray()); + } } } } catch (final InterruptedException | ExecutionException e) {