Class AvaticaConnection

  • All Implemented Interfaces:
    java.lang.AutoCloseable, java.sql.Connection, java.sql.Wrapper
    Direct Known Subclasses:
    AvaticaJdbc41Factory.AvaticaJdbc41Connection

    public abstract class AvaticaConnection
    extends java.lang.Object
    implements java.sql.Connection
    Implementation of JDBC connection for the Avatica framework.

    Abstract to allow newer versions of JDBC to add methods.

    • Field Detail

      • ROWCOUNT_COLUMN_NAME

        public static final java.lang.String ROWCOUNT_COLUMN_NAME
        The name of the sole column returned by DML statements, containing the number of rows modified.
        See Also:
        Constant Field Values
      • NUM_EXECUTE_RETRIES_KEY

        public static final java.lang.String NUM_EXECUTE_RETRIES_KEY
        See Also:
        Constant Field Values
      • NUM_EXECUTE_RETRIES_DEFAULT

        public static final java.lang.String NUM_EXECUTE_RETRIES_DEFAULT
        See Also:
        Constant Field Values
      • PLAN_COLUMN_NAME

        public static final java.lang.String PLAN_COLUMN_NAME
        The name of the sole column returned by an EXPLAIN statement.

        Actually Avatica does not care what this column is called, but here is a useful place to define a suggested value.

        See Also:
        Constant Field Values
      • HELPER

        public static final Helper HELPER
      • statementCount

        protected int statementCount
      • closed

        private boolean closed
      • holdability

        private int holdability
      • networkTimeout

        private int networkTimeout
      • id

        public final java.lang.String id
      • url

        final java.lang.String url
      • info

        protected final java.util.Properties info
      • meta

        protected final Meta meta
      • properties

        public final java.util.Map<InternalProperty,​java.lang.Object> properties
      • statementMap

        public final java.util.Map<java.lang.Integer,​AvaticaStatement> statementMap
      • flagMap

        final java.util.Map<java.lang.Integer,​java.util.concurrent.atomic.AtomicBoolean> flagMap
      • maxRetriesPerExecute

        protected final long maxRetriesPerExecute
    • Constructor Detail

      • AvaticaConnection

        protected AvaticaConnection​(UnregisteredDriver driver,
                                    AvaticaFactory factory,
                                    java.lang.String url,
                                    java.util.Properties info)
        Creates an AvaticaConnection.

        Not public; method is called only from the driver or a derived class.

        Parameters:
        driver - Driver
        factory - Factory for JDBC objects
        url - Server URL
        info - Other connection properties
    • Method Detail

      • config

        public ConnectionConfig config()
        Returns a view onto this connection's configuration properties. Code in Avatica and derived projects should use this view rather than calling Properties.getProperty(String). Derived projects will almost certainly subclass ConnectionConfig with their own properties.
      • openConnection

        public void openConnection()
        Opens the connection on the server.
      • checkOpen

        protected void checkOpen()
                          throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • createStatement

        public AvaticaStatement createStatement()
                                         throws java.sql.SQLException
        Specified by:
        createStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareStatement

        public java.sql.PreparedStatement prepareStatement​(java.lang.String sql)
                                                    throws java.sql.SQLException
        Specified by:
        prepareStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareCall

        public java.sql.CallableStatement prepareCall​(java.lang.String sql)
                                               throws java.sql.SQLException
        Specified by:
        prepareCall in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • nativeSQL

        public java.lang.String nativeSQL​(java.lang.String sql)
                                   throws java.sql.SQLException
        Specified by:
        nativeSQL in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setAutoCommit

        public void setAutoCommit​(boolean autoCommit)
                           throws java.sql.SQLException
        Specified by:
        setAutoCommit in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getAutoCommit

        public boolean getAutoCommit()
                              throws java.sql.SQLException
        Specified by:
        getAutoCommit in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • commit

        public void commit()
                    throws java.sql.SQLException
        Specified by:
        commit in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • rollback

        public void rollback()
                      throws java.sql.SQLException
        Specified by:
        rollback in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • close

        public void close()
                   throws java.sql.SQLException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • isClosed

        public boolean isClosed()
                         throws java.sql.SQLException
        Specified by:
        isClosed in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getMetaData

        public java.sql.DatabaseMetaData getMetaData()
                                              throws java.sql.SQLException
        Specified by:
        getMetaData in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setReadOnly

        public void setReadOnly​(boolean readOnly)
                         throws java.sql.SQLException
        Specified by:
        setReadOnly in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • isReadOnly

        public boolean isReadOnly()
                           throws java.sql.SQLException
        Specified by:
        isReadOnly in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setCatalog

        public void setCatalog​(java.lang.String catalog)
                        throws java.sql.SQLException
        Specified by:
        setCatalog in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getCatalog

        public java.lang.String getCatalog()
                                    throws java.sql.SQLException
        Specified by:
        getCatalog in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setTransactionIsolation

        public void setTransactionIsolation​(int level)
                                     throws java.sql.SQLException
        Specified by:
        setTransactionIsolation in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getTransactionIsolation

        public int getTransactionIsolation()
                                    throws java.sql.SQLException
        Specified by:
        getTransactionIsolation in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getWarnings

        public java.sql.SQLWarning getWarnings()
                                        throws java.sql.SQLException
        Specified by:
        getWarnings in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • clearWarnings

        public void clearWarnings()
                           throws java.sql.SQLException
        Specified by:
        clearWarnings in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createStatement

        public java.sql.Statement createStatement​(int resultSetType,
                                                  int resultSetConcurrency)
                                           throws java.sql.SQLException
        Specified by:
        createStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareStatement

        public java.sql.PreparedStatement prepareStatement​(java.lang.String sql,
                                                           int resultSetType,
                                                           int resultSetConcurrency)
                                                    throws java.sql.SQLException
        Specified by:
        prepareStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareCall

        public java.sql.CallableStatement prepareCall​(java.lang.String sql,
                                                      int resultSetType,
                                                      int resultSetConcurrency)
                                               throws java.sql.SQLException
        Specified by:
        prepareCall in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getTypeMap

        public java.util.Map<java.lang.String,​java.lang.Class<?>> getTypeMap()
                                                                            throws java.sql.SQLException
        Specified by:
        getTypeMap in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setTypeMap

        public void setTypeMap​(java.util.Map<java.lang.String,​java.lang.Class<?>> map)
                        throws java.sql.SQLException
        Specified by:
        setTypeMap in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setHoldability

        public void setHoldability​(int holdability)
                            throws java.sql.SQLException
        Specified by:
        setHoldability in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getHoldability

        public int getHoldability()
                           throws java.sql.SQLException
        Specified by:
        getHoldability in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setSavepoint

        public java.sql.Savepoint setSavepoint()
                                        throws java.sql.SQLException
        Specified by:
        setSavepoint in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setSavepoint

        public java.sql.Savepoint setSavepoint​(java.lang.String name)
                                        throws java.sql.SQLException
        Specified by:
        setSavepoint in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • rollback

        public void rollback​(java.sql.Savepoint savepoint)
                      throws java.sql.SQLException
        Specified by:
        rollback in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • releaseSavepoint

        public void releaseSavepoint​(java.sql.Savepoint savepoint)
                              throws java.sql.SQLException
        Specified by:
        releaseSavepoint in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createStatement

        public AvaticaStatement createStatement​(int resultSetType,
                                                int resultSetConcurrency,
                                                int resultSetHoldability)
                                         throws java.sql.SQLException
        Specified by:
        createStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareStatement

        public java.sql.PreparedStatement prepareStatement​(java.lang.String sql,
                                                           int resultSetType,
                                                           int resultSetConcurrency,
                                                           int resultSetHoldability)
                                                    throws java.sql.SQLException
        Specified by:
        prepareStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareCall

        public java.sql.CallableStatement prepareCall​(java.lang.String sql,
                                                      int resultSetType,
                                                      int resultSetConcurrency,
                                                      int resultSetHoldability)
                                               throws java.sql.SQLException
        Specified by:
        prepareCall in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareStatement

        public java.sql.PreparedStatement prepareStatement​(java.lang.String sql,
                                                           int autoGeneratedKeys)
                                                    throws java.sql.SQLException
        Specified by:
        prepareStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareStatement

        public java.sql.PreparedStatement prepareStatement​(java.lang.String sql,
                                                           int[] columnIndexes)
                                                    throws java.sql.SQLException
        Specified by:
        prepareStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • prepareStatement

        public java.sql.PreparedStatement prepareStatement​(java.lang.String sql,
                                                           java.lang.String[] columnNames)
                                                    throws java.sql.SQLException
        Specified by:
        prepareStatement in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createClob

        public java.sql.Clob createClob()
                                 throws java.sql.SQLException
        Specified by:
        createClob in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createBlob

        public java.sql.Blob createBlob()
                                 throws java.sql.SQLException
        Specified by:
        createBlob in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createNClob

        public java.sql.NClob createNClob()
                                   throws java.sql.SQLException
        Specified by:
        createNClob in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createSQLXML

        public java.sql.SQLXML createSQLXML()
                                     throws java.sql.SQLException
        Specified by:
        createSQLXML in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • isValid

        public boolean isValid​(int timeout)
                        throws java.sql.SQLException
        Specified by:
        isValid in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setClientInfo

        public void setClientInfo​(java.lang.String name,
                                  java.lang.String value)
                           throws java.sql.SQLClientInfoException
        Specified by:
        setClientInfo in interface java.sql.Connection
        Throws:
        java.sql.SQLClientInfoException
      • setClientInfo

        public void setClientInfo​(java.util.Properties properties)
                           throws java.sql.SQLClientInfoException
        Specified by:
        setClientInfo in interface java.sql.Connection
        Throws:
        java.sql.SQLClientInfoException
      • getClientInfo

        public java.lang.String getClientInfo​(java.lang.String name)
                                       throws java.sql.SQLException
        Specified by:
        getClientInfo in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getClientInfo

        public java.util.Properties getClientInfo()
                                           throws java.sql.SQLException
        Specified by:
        getClientInfo in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createArrayOf

        public java.sql.Array createArrayOf​(java.lang.String typeName,
                                            java.lang.Object[] elements)
                                     throws java.sql.SQLException
        Specified by:
        createArrayOf in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • createStruct

        public java.sql.Struct createStruct​(java.lang.String typeName,
                                            java.lang.Object[] attributes)
                                     throws java.sql.SQLException
        Specified by:
        createStruct in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setSchema

        public void setSchema​(java.lang.String schema)
                       throws java.sql.SQLException
        Specified by:
        setSchema in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getSchema

        public java.lang.String getSchema()
                                   throws java.sql.SQLException
        Specified by:
        getSchema in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • abort

        public void abort​(java.util.concurrent.Executor executor)
                   throws java.sql.SQLException
        Specified by:
        abort in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • setNetworkTimeout

        public void setNetworkTimeout​(java.util.concurrent.Executor executor,
                                      int milliseconds)
                               throws java.sql.SQLException
        Specified by:
        setNetworkTimeout in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • getNetworkTimeout

        public int getNetworkTimeout()
                              throws java.sql.SQLException
        Specified by:
        getNetworkTimeout in interface java.sql.Connection
        Throws:
        java.sql.SQLException
      • unwrap

        public <T> T unwrap​(java.lang.Class<T> iface)
                     throws java.sql.SQLException
        Specified by:
        unwrap in interface java.sql.Wrapper
        Throws:
        java.sql.SQLException
      • isWrapperFor

        public boolean isWrapperFor​(java.lang.Class<?> iface)
                             throws java.sql.SQLException
        Specified by:
        isWrapperFor in interface java.sql.Wrapper
        Throws:
        java.sql.SQLException
      • getTimeZone

        public java.util.TimeZone getTimeZone()
        Returns the time zone of this connection. Determines the offset applied when converting datetime values from the database into Timestamp values.
      • executeQueryInternal

        protected java.sql.ResultSet executeQueryInternal​(AvaticaStatement statement,
                                                          Meta.Signature signature,
                                                          Meta.Frame firstFrame,
                                                          QueryState state,
                                                          boolean isUpdate)
                                                   throws java.sql.SQLException
        Executes a prepared query, closing any previously open result set.
        Parameters:
        statement - Statement
        signature - Prepared query
        firstFrame - First frame of rows, or null if we need to execute
        state - The state used to create the given result
        isUpdate - Was the caller context via PreparedStatement.executeUpdate().
        Returns:
        Result set
        Throws:
        java.sql.SQLException - if a database error occurs
      • executeBatchUpdateInternal

        protected long[] executeBatchUpdateInternal​(AvaticaPreparedStatement pstmt)
                                             throws java.sql.SQLException
        Executes a batch update using an AvaticaPreparedStatement.
        Parameters:
        pstmt - The prepared statement.
        Returns:
        An array of update counts containing one element for each command in the batch.
        Throws:
        java.sql.SQLException
      • isUpdateCapable

        private void isUpdateCapable​(AvaticaStatement statement)
                              throws java.sql.SQLException
        Returns whether a a statement is capable of updates and if so, and the statement's updateCount is still -1, proceeds to get updateCount value from statement's resultSet.

        Handles "ROWCOUNT" object as Number or List

        Parameters:
        statement - Statement
        Throws:
        java.sql.SQLException - on error
      • createResultSet

        protected java.sql.ResultSet createResultSet​(Meta.MetaResultSet metaResultSet,
                                                     QueryState state)
                                              throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • lookupStatement

        protected AvaticaStatement lookupStatement​(Meta.StatementHandle h)
                                            throws java.sql.SQLException
        Creates a statement wrapper around an existing handle.
        Throws:
        java.sql.SQLException
      • unbox

        private boolean unbox​(java.lang.Boolean b,
                              boolean defaultValue)
        Converts a Boolean to a boolean, with a default value.
      • unbox

        private int unbox​(java.lang.Integer i,
                          int defaultValue)
        Converts an Integer to an int, with a default value.
      • invokeWithRetries

        public <T> T invokeWithRetries​(AvaticaConnection.CallableWithoutException<T> callable)
        Invokes the given "callable", retrying the call when the server responds with an error denoting that the connection is missing on the server.
        Parameters:
        callable - The function to invoke.
        Returns:
        The value from the result of the callable.
      • setKerberosConnection

        public void setKerberosConnection​(KerberosConnection kerberosConnection)
      • getService

        public Service getService()
      • setService

        public void setService​(Service service)