Package com.mckoi.database.jdbc

## Class MConnection

- java.lang.Object
- - com.mckoi.database.jdbc.MConnection

All Implemented Interfaces:
  `DatabaseCallBack`, `java.lang.AutoCloseable`, `java.sql.Connection`, `java.sql.Wrapper`

    public class MConnection
    extends java.lang.Object
    implements java.sql.Connection, DatabaseCallBack

JDBC implementation of the connection object to a Mckoi database. The implementation specifics for how the connection talks with the database is left up to the implementation of DatabaseInterface.

This object is thread safe. It may be accessed safely from concurrent threads.

Author:
  Tobias Downer

### Field Summary

### Fields inherited from interface java.sql.Connection

`TRANSACTION_NONE, TRANSACTION_READ_COMMITTED, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE`

### Constructor Summary

Constructors
`MConnection​(java.lang.String url, DatabaseInterface db_interface, int cache_size, int max_size)` Constructor.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `abort​(java.util.concurrent.Executor executor)`
`protected void` `addSQLWarning​(java.sql.SQLWarning warning)` Adds a new SQLWarning to the chain.
`void` `clearWarnings()`
`void` `close()`
`void` `commit()`
`java.sql.Array` `createArrayOf​(java.lang.String typeName, java.lang.Object[] elements)`
`java.sql.Blob` `createBlob()`
`java.sql.Clob` `createClob()`
`java.sql.NClob` `createNClob()`
`java.sql.SQLXML` `createSQLXML()`
`java.sql.Statement` `createStatement()`
`java.sql.Statement` `createStatement​(int resultSetType, int resultSetConcurrency)`
`java.sql.Statement` `createStatement​(int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
`java.sql.Struct` `createStruct​(java.lang.String typeName, java.lang.Object[] attributes)`
`void` `databaseEvent​(int event_type, java.lang.String event_message)` Called when the database has generated an event that this user is listening for.
`boolean` `getAutoCommit()`
`java.lang.String` `getCatalog()`
`java.util.Properties` `getClientInfo()`
`java.lang.String` `getClientInfo​(java.lang.String name)`
`int` `getHoldability()`
`java.sql.DatabaseMetaData` `getMetaData()`
`int` `getNetworkTimeout()`
`protected com.mckoi.database.jdbc.RowCache` `getRowCache()` Returns the row Cache object for this connection.
`java.lang.String` `getSchema()`
`int` `getTransactionIsolation()`
`java.util.Map` `getTypeMap()`
`java.sql.SQLWarning` `getWarnings()`
`void` `internalClose()` Closes this connection by calling the 'dispose' method in the database interface.
`boolean` `isCaseInsensitiveIdentifiers()` Returns true if the database has case insensitive identifiers.
`boolean` `isClosed()`
`boolean` `isReadOnly()`
`boolean` `isStrictGetObject()` Returns true if strict get object is enabled (default).
`boolean` `isValid​(int timeout)`
`boolean` `isWrapperFor​(java.lang.Class iface)`
`void` `login​(java.lang.String default_schema, java.lang.String username, java.lang.String password)` Attempts to login to the database interface with the given default schema, username and password.
`java.lang.String` `nativeSQL​(java.lang.String sql)`
`java.sql.CallableStatement` `prepareCall​(java.lang.String sql)`
`java.sql.CallableStatement` `prepareCall​(java.lang.String sql, int resultSetType, int resultSetConcurrency)`
`java.sql.CallableStatement` `prepareCall​(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int autoGeneratedKeys)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int[] columnIndexes)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int resultSetType, int resultSetConcurrency)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, java.lang.String[] columnNames)`
`void` `releaseSavepoint​(java.sql.Savepoint savepoint)`
`void` `rollback()`
`void` `rollback​(java.sql.Savepoint savepoint)`
`void` `setAutoCommit​(boolean autoCommit)`
`void` `setCaseInsensitiveIdentifiers​(boolean status)` Toggles whether this connection is handling identifiers as case insensitive or not.
`void` `setCatalog​(java.lang.String catalog)`
`void` `setClientInfo​(java.lang.String name, java.lang.String value)`
`void` `setClientInfo​(java.util.Properties properties)`
`void` `setHoldability​(int holdability)`
`void` `setNetworkTimeout​(java.util.concurrent.Executor executor, int milliseconds)`
`void` `setReadOnly​(boolean readOnly)`
`java.sql.Savepoint` `setSavepoint()`
`java.sql.Savepoint` `setSavepoint​(java.lang.String name)`
`void` `setSchema​(java.lang.String schema)`
`void` `setStrictGetObject​(boolean status)` Toggles strict get object.
`void` `setTransactionIsolation​(int level)`
`void` `setTypeMap​(java.util.Map map)`
`void` `setVerboseColumnNames​(boolean status)` Toggles verbose column names from ResultSetMetaData.
`java.lang.Object` `unwrap​(java.lang.Class iface)`
`boolean` `verboseColumnNames()` Returns true if ResultSetMetaData should return verbose column names.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface java.sql.Connection

`beginRequest, endRequest, setShardingKey, setShardingKey, setShardingKeyIfValid, setShardingKeyIfValid`

### Constructor Detail

#### MConnection

    public MConnection​(java.lang.String url,
                       DatabaseInterface db_interface,
                       int cache_size,
                       int max_size)

Constructor.

### Method Detail

#### setStrictGetObject

    public void setStrictGetObject​(boolean status)

Toggles strict get object.

If the 'getObject' method should return the raw object type (eg. BigDecimal for Integer, String for chars, etc) then this is set to false. If this is true (the default) the 'getObject' methods return the correct object types as specified by the JDBC specification.

The default is true.

#### isStrictGetObject

    public boolean isStrictGetObject()

Returns true if strict get object is enabled (default).

#### setVerboseColumnNames

    public void setVerboseColumnNames​(boolean status)

Toggles verbose column names from ResultSetMetaData.

If this is set to true, getColumnName will return 'APP.Part.id' for a column name. If it is false getColumnName will return 'id'. This property is for compatibility with older Mckoi applications.

#### verboseColumnNames

    public boolean verboseColumnNames()

Returns true if ResultSetMetaData should return verbose column names.

#### setCaseInsensitiveIdentifiers

    public void setCaseInsensitiveIdentifiers​(boolean status)

Toggles whether this connection is handling identifiers as case insensitive or not. If this is true then 'getString("app.id")' will match against 'APP.id', etc.

#### isCaseInsensitiveIdentifiers

    public boolean isCaseInsensitiveIdentifiers()

Returns true if the database has case insensitive identifiers.

#### getRowCache

    protected final com.mckoi.database.jdbc.RowCache getRowCache()

Returns the row Cache object for this connection.

#### addSQLWarning

    protected final void addSQLWarning​(java.sql.SQLWarning warning)

Adds a new SQLWarning to the chain.

#### internalClose

    public final void internalClose()
                             throws java.sql.SQLException

Closes this connection by calling the 'dispose' method in the database interface.

Throws:
  `java.sql.SQLException`

#### login

    public void login​(java.lang.String default_schema,
                      java.lang.String username,
                      java.lang.String password)
               throws java.sql.SQLException

Attempts to login to the database interface with the given default schema, username and password. If the authentication fails an SQL exception is generated.

Throws:
  `java.sql.SQLException`

#### databaseEvent

    public void databaseEvent​(int event_type,
                              java.lang.String event_message)

Description copied from interface: `DatabaseCallBack`
Called when the database has generated an event that this user is listening for.

NOTE: The thread that calls back these events is always a volatile thread that may not block. It is especially important that no queries are executed when this calls back. To safely act on events, it is advisable to dispatch onto another thread such as the SwingEventDispatcher thread.

Specified by:
  `databaseEvent` in interface `DatabaseCallBack`

#### createStatement

    public java.sql.Statement 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 getTypeMap()
                             throws java.sql.SQLException

Specified by:
  `getTypeMap` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setTypeMap

    public void setTypeMap​(java.util.Map 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 java.sql.Statement 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`

#### unwrap

    public java.lang.Object unwrap​(java.lang.Class 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`

#### 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`