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;