@@ -44,8 +44,8 @@ public final class ArrowFlightConnection extends AvaticaConnection {
4444 private final ArrowFlightSqlClientHandler clientHandler ;
4545 private final ArrowFlightConnectionConfigImpl config ;
4646 private ExecutorService executorService ;
47- int metadataResultSetCount ;
48- Map <Integer , ArrowFlightJdbcFlightStreamResultSet > metadataResultSetMap = new HashMap <>();
47+ private int metadataResultSetCount ;
48+ private Map <Integer , ArrowFlightJdbcFlightStreamResultSet > metadataResultSetMap = new HashMap <>();
4949
5050 /**
5151 * Creates a new {@link ArrowFlightConnection}.
@@ -178,6 +178,31 @@ synchronized ExecutorService getExecutorService() {
178178 : executorService ;
179179 }
180180
181+ /**
182+ * Registers a new metadata ResultSet and assigns it a unique ID. Metadata ResultSets are those
183+ * created without an associated Statement.
184+ *
185+ * @param resultSet the ResultSet to register
186+ * @return the assigned ID
187+ */
188+ int getNewMetadataResultSetId (ArrowFlightJdbcFlightStreamResultSet resultSet ) {
189+ metadataResultSetMap .put (metadataResultSetCount , resultSet );
190+ return metadataResultSetCount ++;
191+ }
192+
193+ /**
194+ * Unregisters a metadata ResultSet when it is closed. This method is called by metadata
195+ * ResultSets during their close operation to remove themselves from the tracking map.
196+ *
197+ * @param id the ID of the ResultSet to unregister, or null if not a metadata ResultSet
198+ */
199+ void onResultSetClose (Integer id ) {
200+ if (id == null ) {
201+ return ;
202+ }
203+ metadataResultSetMap .remove (id );
204+ }
205+
181206 @ Override
182207 public Properties getClientInfo () {
183208 final Properties copy = new Properties ();
0 commit comments