diff --git a/src/main/java/net/starschema/clouddb/jdbc/BQForwardOnlyResultSet.java b/src/main/java/net/starschema/clouddb/jdbc/BQForwardOnlyResultSet.java
index 2b7d6027..08808244 100644
--- a/src/main/java/net/starschema/clouddb/jdbc/BQForwardOnlyResultSet.java
+++ b/src/main/java/net/starschema/clouddb/jdbc/BQForwardOnlyResultSet.java
@@ -586,29 +586,10 @@ public void deleteRow() throws SQLException {
throw new BQSQLFeatureNotSupportedException("deleteRow()");
}
- /**
- *
- *
- *
Implementation Details:
- *
- *
- * Not implemented yet.
- *
- * @throws BQSQLException
- */
+ /** {@inheritDoc} */
@Override
public int findColumn(String columnLabel) throws SQLException {
- if (isClosed()) {
- throw new BQSQLException("This Resultset is Closed");
- }
- final ResultSetMetaData metadata = this.getMetaData();
- int columns = metadata.getColumnCount();
- for (int i = 1; i <= columns; i++) {
- if (metadata.getColumnLabel(i).equals(columnLabel)) {
- return i;
- }
- }
- throw new BQSQLException("No Such column labeled: " + columnLabel);
+ return CommonResultSet.findColumn(columnLabel, getMetaData());
}
/**
diff --git a/src/main/java/net/starschema/clouddb/jdbc/BQResultSet.java b/src/main/java/net/starschema/clouddb/jdbc/BQResultSet.java
index 852c1fbc..0bfebfe2 100644
--- a/src/main/java/net/starschema/clouddb/jdbc/BQResultSet.java
+++ b/src/main/java/net/starschema/clouddb/jdbc/BQResultSet.java
@@ -109,18 +109,7 @@ public BQResultSet(
/** {@inheritDoc} */
@Override
public int findColumn(String columnLabel) throws SQLException {
- if (this.isClosed()) {
- throw new BQSQLException("This Resultset is Closed");
- }
- final ResultSetMetaData metadata = this.getMetaData();
- int columns = metadata.getColumnCount();
- for (int i = 1; i <= columns; i++) {
- if (metadata.getColumnLabel(i).equals(columnLabel)) {
- return i;
- }
- }
- SQLException e = new BQSQLException("No Such column labeled: " + columnLabel);
- throw e;
+ return CommonResultSet.findColumn(columnLabel, getMetaData());
}
/** {@inheritDoc} */
diff --git a/src/main/java/net/starschema/clouddb/jdbc/BQScrollableResultSet.java b/src/main/java/net/starschema/clouddb/jdbc/BQScrollableResultSet.java
index d9173442..3cb03009 100644
--- a/src/main/java/net/starschema/clouddb/jdbc/BQScrollableResultSet.java
+++ b/src/main/java/net/starschema/clouddb/jdbc/BQScrollableResultSet.java
@@ -137,17 +137,7 @@ public BQScrollableResultSet(
/** {@inheritDoc} */
@Override
public int findColumn(String columnLabel) throws SQLException {
- if (this.isClosed()) {
- throw new BQSQLException("This Resultset is Closed");
- }
- final ResultSetMetaData metadata = this.getMetaData();
- int columns = metadata.getColumnCount();
- for (int i = 1; i <= columns; i++) {
- if (metadata.getColumnLabel(i).equals(columnLabel)) {
- return i;
- }
- }
- throw new BQSQLException("No Such column labeled: " + columnLabel);
+ return CommonResultSet.findColumn(columnLabel, getMetaData());
}
/** {@inheritDoc} */
diff --git a/src/main/java/net/starschema/clouddb/jdbc/CommonResultSet.java b/src/main/java/net/starschema/clouddb/jdbc/CommonResultSet.java
new file mode 100644
index 00000000..be7a16d6
--- /dev/null
+++ b/src/main/java/net/starschema/clouddb/jdbc/CommonResultSet.java
@@ -0,0 +1,27 @@
+package net.starschema.clouddb.jdbc;
+
+import com.google.cloud.bigquery.BigQuerySQLException;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+/** A static utility class of methods common to all {@link java.sql.ResultSet} implementations. */
+class CommonResultSet {
+
+ /**
+ * A common implementation of {@link java.sql.ResultSet#findColumn(String)}
+ *
+ * @param label the column-to-find's label
+ * @param metadata the metadata from the {@link java.sql.ResultSet}
+ * @return the integer index of the labeled column, if it's found
+ * @throws SQLException if no column with the given label is found
+ */
+ static int findColumn(final String label, final ResultSetMetaData metadata) throws SQLException {
+ int columnCount = metadata.getColumnCount();
+ for (int column = 1; column <= columnCount; column++) {
+ if (metadata.getColumnLabel(column).equals(label)) {
+ return column;
+ }
+ }
+ throw new BigQuerySQLException("No such Column labeled: " + label);
+ }
+}
diff --git a/src/test/java/net/starschema/clouddb/jdbc/CommonTestsForResultSets.java b/src/test/java/net/starschema/clouddb/jdbc/CommonTestsForResultSets.java
index f1368ca8..a3b80a92 100644
--- a/src/test/java/net/starschema/clouddb/jdbc/CommonTestsForResultSets.java
+++ b/src/test/java/net/starschema/clouddb/jdbc/CommonTestsForResultSets.java
@@ -22,6 +22,13 @@
import org.junit.Before;
import org.junit.Test;
+/**
+ * An abstract class that contains tests common to {@link ResultSet} implementations. Its name
+ * doesn't end with Test so that JUnit doesn't try to run it.
+ *
+ * Subclass this in @{link ResultSet} test classes and implement {@link
+ * CommonTestsForResultSets#createStatementForCommonTests(Connection)}.
+ */
public abstract class CommonTestsForResultSets {
private Connection connection;