package nl.topicus.jdbc.resultset; import java.sql.ResultSet; import java.sql.SQLException; import com.google.cloud.spanner.BatchReadOnlyTransaction; import com.google.cloud.spanner.Partition; import nl.topicus.jdbc.statement.CloudSpannerStatement; /** * A specialized version of a {@link ResultSet} that contains the results of one partition of a * partitioned query * * @author loite * */ public class CloudSpannerPartitionResultSet extends CloudSpannerResultSet { private final Partition partition; private final BatchReadOnlyTransaction transaction; private boolean executed = false; public CloudSpannerPartitionResultSet(CloudSpannerStatement statement, BatchReadOnlyTransaction transaction, Partition partition, String sql) { super(statement, sql); this.transaction = transaction; this.partition = partition; } @Override public boolean next() throws SQLException { ensureOpenAndExecuted(); return super.next(); } @Override public CloudSpannerResultSetMetaData getMetaData() throws SQLException { ensureOpenAndExecuted(); return super.getMetaData(); } @Override public int findColumn(String columnLabel) throws SQLException { ensureOpenAndExecuted(); return super.findColumn(columnLabel); } private void ensureOpenAndExecuted() throws SQLException { ensureOpen(); if (!executed) { setResultSet(transaction.execute(partition)); executed = true; } } }