DRILL-2961: Part 1--Prep., Hyg.: Split DrillStatement -> DrillStatement{,Impl}.
Preparation for query/network timeout methods: - Moved class ...jdbc.DrillStatement to ...jdbc.impl.DrillStatementImpl. - Created interface ...jdbc.DrillStatement interface, extending java.sql.Statement (for place for Drill-specific narrowed declarations and documentation). Declared DrillStatementImpl to implement new DrillStatement. - Updated references. - Adjusted visibility (temporarily make somethings publich until DRILL-2089 is done more). Misc. code hygiene: - Purged extraneous imports of ResultSet. - Purged TODO made obsolete by UserException. - Misc. whitespace. Project: http://git-wip-us.apache.org/repos/asf/drill/repo Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/1dcf6cfb Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/1dcf6cfb Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/1dcf6cfb Branch: refs/heads/master Commit: 1dcf6cfb0d52435bcc7d1f4eada48fc0ce366dc4 Parents: 84371ea Author: dbarclay <dbarc...@maprtech.com> Authored: Tue May 5 22:39:25 2015 -0700 Committer: Parth Chandra <par...@apache.org> Committed: Sun May 10 23:47:17 2015 -0700 ---------------------------------------------------------------------- .../drill/jdbc/AlreadyClosedSqlException.java | 2 - .../apache/drill/jdbc/DrillConnectionImpl.java | 14 ++- .../apache/drill/jdbc/DrillJdbc41Factory.java | 3 +- .../org/apache/drill/jdbc/DrillStatement.java | 114 ++--------------- .../drill/jdbc/DrillStatementRegistry.java | 3 +- .../jdbc/InvalidCursorStateSqlException.java | 1 - .../apache/drill/jdbc/JdbcApiSqlException.java | 4 - .../drill/jdbc/impl/DrillStatementImpl.java | 123 +++++++++++++++++++ 8 files changed, 147 insertions(+), 117 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/AlreadyClosedSqlException.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/AlreadyClosedSqlException.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/AlreadyClosedSqlException.java index 6e41bb4..a2a06ab 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/AlreadyClosedSqlException.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/AlreadyClosedSqlException.java @@ -17,8 +17,6 @@ */ package org.apache.drill.jdbc; -import java.sql.ResultSet; - /** * SQLException for object-already-closed conditions, e.g., calling a method http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillConnectionImpl.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillConnectionImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillConnectionImpl.java index 74c6655..f8c6c8b 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillConnectionImpl.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillConnectionImpl.java @@ -40,6 +40,7 @@ import org.apache.drill.exec.server.Drillbit; import org.apache.drill.exec.server.RemoteServiceSet; import org.apache.drill.exec.store.StoragePluginRegistry; import org.apache.drill.exec.util.TestUtilities; +import org.apache.drill.jdbc.impl.DrillStatementImpl; // (Public until JDBC impl. classes moved out of published-intf. package. (DRILL-2089).) /** @@ -53,7 +54,8 @@ public abstract class DrillConnectionImpl extends AvaticaConnection implements DrillConnection { private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(DrillConnection.class); - final DrillStatementRegistry openStatementsRegistry = new DrillStatementRegistry(); + // (Public until JDBC impl. classes moved out of published-intf. package. (DRILL-2089).) + public final DrillStatementRegistry openStatementsRegistry = new DrillStatementRegistry(); final DrillConnectionConfig config; private final DrillClient client; @@ -167,9 +169,9 @@ public abstract class DrillConnectionImpl extends AvaticaConnection } @Override - public void commit() throws SQLException { + public void commit() throws SQLException { checkNotClosed(); - if ( getAutoCommit() ) { + if ( getAutoCommit() ) { throw new JdbcApiSqlException( "Can't call commit() in auto-commit mode." ); } else { @@ -258,11 +260,11 @@ public abstract class DrillConnectionImpl extends AvaticaConnection } @Override - public DrillStatement createStatement(int resultSetType, int resultSetConcurrency, + public DrillStatementImpl createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkNotClosed(); - DrillStatement statement = - (DrillStatement) super.createStatement(resultSetType, resultSetConcurrency, + DrillStatementImpl statement = + (DrillStatementImpl) super.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); return statement; } http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillJdbc41Factory.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillJdbc41Factory.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillJdbc41Factory.java index a4a97fd..6240b62 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillJdbc41Factory.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillJdbc41Factory.java @@ -30,6 +30,7 @@ import java.util.Properties; import java.util.TimeZone; import org.apache.drill.jdbc.impl.DrillResultSetImpl; +import org.apache.drill.jdbc.impl.DrillStatementImpl; import net.hydromatic.avatica.AvaticaConnection; import net.hydromatic.avatica.AvaticaDatabaseMetaData; @@ -98,7 +99,7 @@ public class DrillJdbc41Factory extends DrillFactory { } - private static class DrillJdbc41Statement extends DrillStatement { + private static class DrillJdbc41Statement extends DrillStatementImpl { public DrillJdbc41Statement(DrillConnectionImpl connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) { super(connection, resultSetType, resultSetConcurrency, resultSetHoldability); http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatement.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatement.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatement.java index a609bb1..79ae9dd 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatement.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatement.java @@ -1,11 +1,10 @@ /** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * @@ -17,101 +16,12 @@ */ package org.apache.drill.jdbc; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.sql.Statement; -import net.hydromatic.avatica.AvaticaStatement; -public abstract class DrillStatement extends AvaticaStatement - implements DrillRemoteStatement { - - DrillStatement(DrillConnectionImpl connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) { - super(connection, resultSetType, resultSetConcurrency, resultSetHoldability); - connection.openStatementsRegistry.addStatement(this); - } - - /** - * Throws AlreadyClosedSqlException if this Statement is closed. - * - * @throws AlreadyClosedSqlException if Statement is closed - * @throws SQLException if error in calling {@link #isClosed()} - */ - private void checkNotClosed() throws SQLException { - if ( isClosed() ) { - throw new AlreadyClosedSqlException( "Statement is already closed." ); - } - } - - @Override - public DrillConnectionImpl getConnection() { - return (DrillConnectionImpl) connection; - } - - // WORKAROUND: Work around AvaticaStatement's code that wraps _any_ exception, - // even if SQLException, by unwrapping to get cause exception so caller can - // throw it directly if it's a SQLException: - // TODO: Any ideas for a better name? - private SQLException unwrapIfExtra( final SQLException superMethodException ) { - final SQLException result; - final Throwable cause = superMethodException.getCause(); - if ( null != cause && cause instanceof SQLException ) { - result = (SQLException) cause; - } - else { - result = superMethodException; - } - return result; - } - - @Override - public boolean execute( String sql ) throws SQLException { - checkNotClosed(); - try { - return super.execute( sql ); - } - catch ( final SQLException possiblyExtraWrapperException ) { - throw unwrapIfExtra( possiblyExtraWrapperException ); - } - } - - @Override - public ResultSet executeQuery( String sql ) throws SQLException { - try { - checkNotClosed(); - return super.executeQuery( sql ); - } - catch ( final SQLException possiblyExtraWrapperException ) { - throw unwrapIfExtra( possiblyExtraWrapperException ); - } - } - - @Override - public int executeUpdate( String sql ) throws SQLException { - checkNotClosed(); - try { - return super.executeUpdate( sql ); - } - catch ( final SQLException possiblyExtraWrapperException ) { - throw unwrapIfExtra( possiblyExtraWrapperException ); - } - } - - @Override - public int executeUpdate( String sql, int[] columnIndexes ) throws SQLException { - checkNotClosed(); - return super.executeUpdate( sql, columnIndexes ); - } - - @Override - public int executeUpdate( String sql, String[] columnNames ) throws SQLException { - checkNotClosed(); - return super.executeUpdate( sql, columnNames ); - } - - @Override - public void cleanup() { - final DrillConnectionImpl connection1 = (DrillConnectionImpl) connection; - connection1.openStatementsRegistry.removeStatement(this); - } +/** + * Drill-specific {@link Statement}. + */ +public interface DrillStatement extends Statement { -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatementRegistry.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatementRegistry.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatementRegistry.java index adbbb64..fb38e31 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatementRegistry.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillStatementRegistry.java @@ -37,7 +37,8 @@ import static org.slf4j.LoggerFactory.getLogger; * coordinated elsewhere).) * </p> */ -class DrillStatementRegistry { +// (Public until JDBC impl. classes moved out of published-intf. package. (DRILL-2089).) +public class DrillStatementRegistry { private static final Logger logger = getLogger( DrillStatementRegistry.class ); http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/InvalidCursorStateSqlException.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/InvalidCursorStateSqlException.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/InvalidCursorStateSqlException.java index 8d882e9..d71248c 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/InvalidCursorStateSqlException.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/InvalidCursorStateSqlException.java @@ -17,7 +17,6 @@ */ package org.apache.drill.jdbc; -import java.sql.ResultSet; /** * SQLException for invalid-cursor-state conditions, e.g., calling a column http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/JdbcApiSqlException.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/JdbcApiSqlException.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/JdbcApiSqlException.java index a7e6d98..ce83e01 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/JdbcApiSqlException.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/JdbcApiSqlException.java @@ -37,10 +37,6 @@ import java.sql.SQLNonTransientException; * {@link SQLTransientException}), or internal Drill errors.) * </p> * <p> - * TODO: Consider having a DrillSqlException (in part for reviewing, - * coordinating, and revising the many uses of SQLException in the code). - * </p> - * <p> * TODO: Consider using ANSI-/XOPEN-standard SQL State values. (See: * </p> * <ul> http://git-wip-us.apache.org/repos/asf/drill/blob/1dcf6cfb/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillStatementImpl.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillStatementImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillStatementImpl.java new file mode 100644 index 0000000..0f0d174 --- /dev/null +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillStatementImpl.java @@ -0,0 +1,123 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill.jdbc.impl; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.apache.drill.jdbc.AlreadyClosedSqlException; +import org.apache.drill.jdbc.DrillConnectionImpl; +import org.apache.drill.jdbc.DrillRemoteStatement; +import org.apache.drill.jdbc.DrillStatement; + +import net.hydromatic.avatica.AvaticaStatement; + +public abstract class DrillStatementImpl extends AvaticaStatement + implements DrillStatement, DrillRemoteStatement { + + // (Public until JDBC impl. classes moved out of published-intf. package. (DRILL-2089).) + public DrillStatementImpl(DrillConnectionImpl connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) { + super(connection, resultSetType, resultSetConcurrency, resultSetHoldability); + connection.openStatementsRegistry.addStatement(this); + } + + /** + * Throws AlreadyClosedSqlException if this Statement is closed. + * + * @throws AlreadyClosedSqlException if Statement is closed + * @throws SQLException if error in calling {@link #isClosed()} + */ + private void checkNotClosed() throws SQLException { + if ( isClosed() ) { + throw new AlreadyClosedSqlException( "Statement is already closed." ); + } + } + + @Override + public DrillConnectionImpl getConnection() { + return (DrillConnectionImpl) connection; + } + + // WORKAROUND: Work around AvaticaStatement's code that wraps _any_ exception, + // even if SQLException, by unwrapping to get cause exception so caller can + // throw it directly if it's a SQLException: + // TODO: Any ideas for a better name? + private SQLException unwrapIfExtra( final SQLException superMethodException ) { + final SQLException result; + final Throwable cause = superMethodException.getCause(); + if ( null != cause && cause instanceof SQLException ) { + result = (SQLException) cause; + } + else { + result = superMethodException; + } + return result; + } + + @Override + public boolean execute( String sql ) throws SQLException { + checkNotClosed(); + try { + return super.execute( sql ); + } + catch ( final SQLException possiblyExtraWrapperException ) { + throw unwrapIfExtra( possiblyExtraWrapperException ); + } + } + + @Override + public ResultSet executeQuery( String sql ) throws SQLException { + try { + checkNotClosed(); + return super.executeQuery( sql ); + } + catch ( final SQLException possiblyExtraWrapperException ) { + throw unwrapIfExtra( possiblyExtraWrapperException ); + } + } + + @Override + public int executeUpdate( String sql ) throws SQLException { + checkNotClosed(); + try { + return super.executeUpdate( sql ); + } + catch ( final SQLException possiblyExtraWrapperException ) { + throw unwrapIfExtra( possiblyExtraWrapperException ); + } + } + + @Override + public int executeUpdate( String sql, int[] columnIndexes ) throws SQLException { + checkNotClosed(); + return super.executeUpdate( sql, columnIndexes ); + } + + @Override + public int executeUpdate( String sql, String[] columnNames ) throws SQLException { + checkNotClosed(); + return super.executeUpdate( sql, columnNames ); + } + + @Override + public void cleanup() { + final DrillConnectionImpl connection1 = (DrillConnectionImpl) connection; + connection1.openStatementsRegistry.removeStatement(this); + } + +}