org.apache.manifoldcf.core.database
Class DBInterfaceDerby

java.lang.Object
  extended by org.apache.manifoldcf.core.database.Database
      extended by org.apache.manifoldcf.core.database.DBInterfaceDerby
All Implemented Interfaces:
IDBInterface

public class DBInterfaceDerby
extends Database
implements IDBInterface


Nested Class Summary
protected static class DBInterfaceDerby.TableStatistics
          Table accumulation records.
 
Nested classes/interfaces inherited from class org.apache.manifoldcf.core.database.Database
Database.ExecuteQueryThread, Database.QueryCacheExecutor
 
Field Summary
protected static java.lang.String _driver
           
static java.lang.String _rcsid
           
protected static java.lang.String _url
           
protected static java.util.Map analyzeThresholds
          Table analyze thresholds, as read from configuration information.
protected  java.lang.String cacheKey
           
protected static int commitThreshold
          The number of inserts, deletes, etc.
protected static java.util.Map currentAnalyzeStatistics
          Accumulated analyze statistics.
protected static java.util.Map currentReindexStatistics
          Accumulated reindex statistics.
static java.lang.String databasePathProperty
           
protected  ILockManager lockManager
          A lock manager handle.
protected  java.lang.String password
           
protected static java.util.Map reindexThresholds
          Table reindex thresholds, as read from configuration information.
protected  int serializableDepth
           
protected static java.lang.String statsAnalyzePrefix
           
protected static java.lang.String statslockAnalyzePrefix
           
protected static java.lang.String statslockReindexPrefix
           
protected static java.lang.String statsReindexPrefix
           
protected  java.util.ArrayList tablesToAnalyze
           
protected  java.util.ArrayList tablesToReindex
           
protected  java.lang.String userName
           
 
Fields inherited from class org.apache.manifoldcf.core.database.Database
_TRANSACTION_, cacheManager, connection, context, databaseName, delayedTransactionDepth, doRollback, jdbcDriverClass, jdbcUrl, random, th
 
Fields inherited from interface org.apache.manifoldcf.core.interfaces.IDBInterface
TRANSACTION_ENCLOSING, TRANSACTION_READCOMMITTED, TRANSACTION_SERIALIZED
 
Constructor Summary
DBInterfaceDerby(IThreadContext tc, java.lang.String databaseName, java.lang.String userName, java.lang.String password)
           
 
Method Summary
 void addTableIndex(java.lang.String tableName, boolean unique, java.util.ArrayList columnList)
          Add an index to a table.
 void analyzeTable(java.lang.String tableName)
          Analyze a table.
protected  void analyzeTableInternal(java.lang.String tableName)
           
protected  void appendDescription(java.lang.StringBuffer queryBuffer, java.lang.String columnName, ColumnDescription cd, boolean forceNull)
           
 void beginTransaction()
          Begin a database transaction.
 void beginTransaction(int transactionType)
          Begin a database transaction.
static java.lang.String caseInsensitiveRegularExpressionCompare(java.lang.String value, java.lang.String regularExpression)
          Method to compare a value using a case-insensitive regular expression.
static java.lang.String caseInsensitiveSubstring(java.lang.String value, java.lang.String regularExpression)
          Method to get a substring out of a case-insensitive regular expression group.
static java.lang.String caseSensitiveRegularExpressionCompare(java.lang.String value, java.lang.String regularExpression)
          Method to compare a value using a case-sensitive regular expression.
static java.lang.String caseSensitiveSubstring(java.lang.String value, java.lang.String regularExpression)
          Method to get a substring out of a case-sensitive regular expression group.
 void closeDatabase()
          Uninitialize.
protected  void commitCurrentTransaction()
          Abstract method to commit a transaction
 java.lang.String constructDistinctOnClause(java.util.ArrayList outputParameters, java.lang.String baseQuery, java.util.ArrayList baseParameters, java.lang.String[] distinctFields, java.util.Map otherFields)
          Construct a 'distinct on (x)' filter.
 java.lang.String constructOffsetLimitClause(int offset, int limit)
          Construct an offset/limit clause.
 java.lang.String constructRegexpClause(java.lang.String column, java.lang.String regularExpression, boolean caseInsensitive)
          Construct a regular-expression match clause.
 java.lang.String constructSubstringClause(java.lang.String column, java.lang.String regularExpression, boolean caseInsensitive)
          Construct a regular-expression substring clause.
 void createUserAndDatabase(java.lang.String adminUserName, java.lang.String adminPassword, StringSet invalidateKeys)
          Create user and database.
 void dropUserAndDatabase(java.lang.String adminUserName, java.lang.String adminPassword, StringSet invalidateKeys)
          Drop user and database.
 void endTransaction()
          End a database transaction, either performing a commit or a rollback (depending on whether signalRollback() was called within the transaction).
 StringSet getAllTables(StringSet cacheKeys, java.lang.String queryClass)
          Get a database's tables.
 java.lang.String getDatabaseCacheKey()
          Get the database general cache key.
protected static java.lang.String getFullDatabasePath(java.lang.String databaseName)
           
 int getMaxInClause()
          Obtain the maximum number of individual items that should be present in an IN clause.
 int getMaxOrClause()
          Obtain the maximum number of individual clauses that should be present in a sequence of OR clauses.
 java.util.Map getTableIndexes(java.lang.String tableName, StringSet cacheKeys, java.lang.String queryClass)
          Get a table's indexes.
 java.util.Map getTableSchema(java.lang.String tableName, StringSet cacheKeys, java.lang.String queryClass)
          Get a table's schema.
protected  java.lang.String mapColumnName(java.lang.String rawColumnName)
          Abstract method for mapping a column name from resultset
protected static java.lang.String mapType(java.lang.String inputType)
          Map a standard type into a derby type.
 void noteModifications(java.lang.String tableName, int insertCount, int modifyCount, int deleteCount)
          Note a number of inserts, modifications, or deletions to a specific table.
 void openDatabase()
          Initialize.
 void performAddIndex(java.lang.String indexName, java.lang.String tableName, IndexDescription description)
          Add an index to a table.
 void performAlter(java.lang.String tableName, java.util.Map columnMap, java.util.Map columnModifyMap, java.util.ArrayList columnDeleteList, StringSet invalidateKeys)
          Perform a table alter operation.
 void performCreate(java.lang.String tableName, java.util.Map columnMap, StringSet invalidateKeys)
          Perform a table creation operation.
 void performDelete(java.lang.String tableName, java.lang.String whereClause, java.util.ArrayList whereParameters, StringSet invalidateKeys)
          Perform a delete operation.
 void performDrop(java.lang.String tableName, StringSet invalidateKeys)
          Perform a table drop operation.
 void performInsert(java.lang.String tableName, java.util.Map parameterMap, StringSet invalidateKeys)
          Perform an insert operation.
 void performLock(java.lang.String tableName)
          Perform a table lock operation.
 void performModification(java.lang.String query, java.util.ArrayList params, StringSet invalidateKeys)
          Perform a general database modification query.
 IResultSet performQuery(java.lang.String query, java.util.ArrayList params, StringSet cacheKeys, java.lang.String queryClass)
          Perform a general "data fetch" query.
 IResultSet performQuery(java.lang.String query, java.util.ArrayList params, StringSet cacheKeys, java.lang.String queryClass, int maxResults, ILimitChecker returnLimit)
          Perform a general "data fetch" query.
 IResultSet performQuery(java.lang.String query, java.util.ArrayList params, StringSet cacheKeys, java.lang.String queryClass, int maxResults, ResultSpecification resultSpec, ILimitChecker returnLimit)
          Perform a general "data fetch" query.
 void performRemoveIndex(java.lang.String indexName)
          Remove an index.
 void performUpdate(java.lang.String tableName, java.util.Map parameterMap, java.lang.String whereClause, java.util.ArrayList whereParameters, StringSet invalidateKeys)
          Perform an update operation.
protected  int readDatum(java.lang.String datumName)
          Read a datum, presuming zero if the datum does not exist.
protected static void recursiveDelete(java.io.File f)
           
 void reindexTable(java.lang.String tableName)
          Reindex a table.
protected  void reindexTableInternal(java.lang.String tableName)
           
protected  ManifoldCFException reinterpretException(ManifoldCFException theException)
          Reinterpret an exception tossed by the database layer.
protected  void rollbackCurrentTransaction()
          Abstract method to roll back a transaction
 void signalRollback()
          Signal that a rollback should occur on the next endTransaction().
protected  void startATransaction()
          Abstract method to start a transaction
protected  void writeDatum(java.lang.String datumName, int value)
          Write a datum, presuming zero if the datum does not exist.
 
Methods inherited from class org.apache.manifoldcf.core.database.Database
cleanupParameters, execute, executeQuery, executeUncachedQuery, executeViaThread, explainQuery, findColumn, getBLOB, getCurrentTransactionType, getData, getDatabaseName, getObject, getSleepAmt, getTransactionID, internalTransactionBegin, isBinary, isBLOB, loadPS, sleepFor, synchronizeTransactions
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.manifoldcf.core.interfaces.IDBInterface
getDatabaseName, getSleepAmt, getTransactionID, sleepFor
 

Field Detail

_rcsid

public static final java.lang.String _rcsid
See Also:
Constant Field Values

_url

protected static final java.lang.String _url
See Also:
Constant Field Values

_driver

protected static final java.lang.String _driver
See Also:
Constant Field Values

databasePathProperty

public static final java.lang.String databasePathProperty
See Also:
Constant Field Values

lockManager

protected ILockManager lockManager
A lock manager handle.


userName

protected java.lang.String userName

password

protected java.lang.String password

cacheKey

protected java.lang.String cacheKey

serializableDepth

protected int serializableDepth

tablesToAnalyze

protected java.util.ArrayList tablesToAnalyze

tablesToReindex

protected java.util.ArrayList tablesToReindex

currentReindexStatistics

protected static java.util.Map currentReindexStatistics
Accumulated reindex statistics. This map is keyed by the table name, and contains TableStatistics values.


reindexThresholds

protected static java.util.Map reindexThresholds
Table reindex thresholds, as read from configuration information. Keyed by table name, contains Integer values.


currentAnalyzeStatistics

protected static java.util.Map currentAnalyzeStatistics
Accumulated analyze statistics. This map is keyed by the table name, and contains TableStatistics values.


analyzeThresholds

protected static java.util.Map analyzeThresholds
Table analyze thresholds, as read from configuration information. Keyed by table name, contains Integer values.


commitThreshold

protected static final int commitThreshold
The number of inserts, deletes, etc. before we update the shared area.

See Also:
Constant Field Values

statslockReindexPrefix

protected static final java.lang.String statslockReindexPrefix
See Also:
Constant Field Values

statsReindexPrefix

protected static final java.lang.String statsReindexPrefix
See Also:
Constant Field Values

statslockAnalyzePrefix

protected static final java.lang.String statslockAnalyzePrefix
See Also:
Constant Field Values

statsAnalyzePrefix

protected static final java.lang.String statsAnalyzePrefix
See Also:
Constant Field Values
Constructor Detail

DBInterfaceDerby

public DBInterfaceDerby(IThreadContext tc,
                        java.lang.String databaseName,
                        java.lang.String userName,
                        java.lang.String password)
                 throws ManifoldCFException
Throws:
ManifoldCFException
Method Detail

getFullDatabasePath

protected static java.lang.String getFullDatabasePath(java.lang.String databaseName)
                                               throws ManifoldCFException
Throws:
ManifoldCFException

openDatabase

public void openDatabase()
                  throws ManifoldCFException
Initialize. This method is called once per JVM instance, in order to set up database communication.

Specified by:
openDatabase in interface IDBInterface
Throws:
ManifoldCFException

closeDatabase

public void closeDatabase()
                   throws ManifoldCFException
Uninitialize. This method is called during JVM shutdown, in order to close all database communication.

Specified by:
closeDatabase in interface IDBInterface
Throws:
ManifoldCFException

getDatabaseCacheKey

public java.lang.String getDatabaseCacheKey()
Get the database general cache key.

Specified by:
getDatabaseCacheKey in interface IDBInterface
Returns:
the general cache key for the database.

performLock

public void performLock(java.lang.String tableName)
                 throws ManifoldCFException
Perform a table lock operation.

Specified by:
performLock in interface IDBInterface
Parameters:
tableName - is the name of the table.
Throws:
ManifoldCFException

performInsert

public void performInsert(java.lang.String tableName,
                          java.util.Map parameterMap,
                          StringSet invalidateKeys)
                   throws ManifoldCFException
Perform an insert operation.

Specified by:
performInsert in interface IDBInterface
Parameters:
tableName - is the name of the table.
invalidateKeys - are the cache keys that should be invalidated.
parameterMap - is the map of column name/values to write.
Throws:
ManifoldCFException

performUpdate

public void performUpdate(java.lang.String tableName,
                          java.util.Map parameterMap,
                          java.lang.String whereClause,
                          java.util.ArrayList whereParameters,
                          StringSet invalidateKeys)
                   throws ManifoldCFException
Perform an update operation.

Specified by:
performUpdate in interface IDBInterface
Parameters:
tableName - is the name of the table.
invalidateKeys - are the cache keys that should be invalidated.
parameterMap - is the map of column name/values to write.
whereClause - is the where clause describing the match (including the WHERE), or null if none.
whereParameters - are the parameters that come with the where clause, if any.
Throws:
ManifoldCFException

performDelete

public void performDelete(java.lang.String tableName,
                          java.lang.String whereClause,
                          java.util.ArrayList whereParameters,
                          StringSet invalidateKeys)
                   throws ManifoldCFException
Perform a delete operation.

Specified by:
performDelete in interface IDBInterface
Parameters:
tableName - is the name of the table to delete from.
invalidateKeys - are the cache keys that should be invalidated.
whereClause - is the where clause describing the match (including the WHERE), or null if none.
whereParameters - are the parameters that come with the where clause, if any.
Throws:
ManifoldCFException

performCreate

public void performCreate(java.lang.String tableName,
                          java.util.Map columnMap,
                          StringSet invalidateKeys)
                   throws ManifoldCFException
Perform a table creation operation.

Specified by:
performCreate in interface IDBInterface
Parameters:
tableName - is the name of the table to create.
columnMap - is the map describing the columns and types. NOTE that these are abstract types, which will be mapped to the proper types for the actual database inside this layer.
invalidateKeys - are the cache keys that should be invalidated, if any.
Throws:
ManifoldCFException

appendDescription

protected void appendDescription(java.lang.StringBuffer queryBuffer,
                                 java.lang.String columnName,
                                 ColumnDescription cd,
                                 boolean forceNull)
                          throws ManifoldCFException
Throws:
ManifoldCFException

performAlter

public void performAlter(java.lang.String tableName,
                         java.util.Map columnMap,
                         java.util.Map columnModifyMap,
                         java.util.ArrayList columnDeleteList,
                         StringSet invalidateKeys)
                  throws ManifoldCFException
Perform a table alter operation.

Specified by:
performAlter in interface IDBInterface
Parameters:
tableName - is the name of the table to alter.
columnMap - is the map describing the columns and types to add. These are in the same form as for performCreate.
columnModifyMap - is the map describing the columns to be changed. The key is the existing column name, and the value is the new type of the column. Data will be copied from the old column to the new.
columnDeleteList - is the list of column names to delete.
invalidateKeys - are the cache keys that should be invalidated, if any.
Throws:
ManifoldCFException

mapType

protected static java.lang.String mapType(java.lang.String inputType)
Map a standard type into a derby type.

Parameters:
inputType - is the input type.
Returns:
the output type.

addTableIndex

public void addTableIndex(java.lang.String tableName,
                          boolean unique,
                          java.util.ArrayList columnList)
                   throws ManifoldCFException
Add an index to a table.

Specified by:
addTableIndex in interface IDBInterface
Parameters:
tableName - is the name of the table to add the index for.
unique - is a boolean that if true describes a unique index.
columnList - is the list of columns that need to be included in the index, in order.
Throws:
ManifoldCFException

performAddIndex

public void performAddIndex(java.lang.String indexName,
                            java.lang.String tableName,
                            IndexDescription description)
                     throws ManifoldCFException
Add an index to a table.

Specified by:
performAddIndex in interface IDBInterface
Parameters:
tableName - is the name of the table to add the index for.
indexName - is the optional name of the table index. If null, a name will be chosen automatically.
description - is the index description.
Throws:
ManifoldCFException

performRemoveIndex

public void performRemoveIndex(java.lang.String indexName)
                        throws ManifoldCFException
Remove an index.

Specified by:
performRemoveIndex in interface IDBInterface
Parameters:
indexName - is the name of the index to remove.
Throws:
ManifoldCFException

readDatum

protected int readDatum(java.lang.String datumName)
                 throws ManifoldCFException
Read a datum, presuming zero if the datum does not exist.

Throws:
ManifoldCFException

writeDatum

protected void writeDatum(java.lang.String datumName,
                          int value)
                   throws ManifoldCFException
Write a datum, presuming zero if the datum does not exist.

Throws:
ManifoldCFException

analyzeTable

public void analyzeTable(java.lang.String tableName)
                  throws ManifoldCFException
Analyze a table.

Specified by:
analyzeTable in interface IDBInterface
Parameters:
tableName - is the name of the table to analyze/calculate statistics for.
Throws:
ManifoldCFException

reindexTable

public void reindexTable(java.lang.String tableName)
                  throws ManifoldCFException
Reindex a table.

Specified by:
reindexTable in interface IDBInterface
Parameters:
tableName - is the name of the table to rebuild indexes for.
Throws:
ManifoldCFException

analyzeTableInternal

protected void analyzeTableInternal(java.lang.String tableName)
                             throws ManifoldCFException
Throws:
ManifoldCFException

reindexTableInternal

protected void reindexTableInternal(java.lang.String tableName)
                             throws ManifoldCFException
Throws:
ManifoldCFException

performDrop

public void performDrop(java.lang.String tableName,
                        StringSet invalidateKeys)
                 throws ManifoldCFException
Perform a table drop operation.

Specified by:
performDrop in interface IDBInterface
Parameters:
tableName - is the name of the table to drop.
invalidateKeys - are the cache keys that should be invalidated, if any.
Throws:
ManifoldCFException

createUserAndDatabase

public void createUserAndDatabase(java.lang.String adminUserName,
                                  java.lang.String adminPassword,
                                  StringSet invalidateKeys)
                           throws ManifoldCFException
Create user and database.

Specified by:
createUserAndDatabase in interface IDBInterface
Parameters:
adminUserName - is the admin user name.
adminPassword - is the admin password.
invalidateKeys - are the cache keys that should be invalidated, if any.
Throws:
ManifoldCFException

dropUserAndDatabase

public void dropUserAndDatabase(java.lang.String adminUserName,
                                java.lang.String adminPassword,
                                StringSet invalidateKeys)
                         throws ManifoldCFException
Drop user and database.

Specified by:
dropUserAndDatabase in interface IDBInterface
Parameters:
adminUserName - is the admin user name.
adminPassword - is the admin password.
invalidateKeys - are the cache keys that should be invalidated, if any.
Throws:
ManifoldCFException

recursiveDelete

protected static void recursiveDelete(java.io.File f)

reinterpretException

protected ManifoldCFException reinterpretException(ManifoldCFException theException)
Reinterpret an exception tossed by the database layer. We need to disambiguate the various kinds of exception that should be thrown.

Parameters:
theException - is the exception to reinterpret
Returns:
the reinterpreted exception to throw.

performModification

public void performModification(java.lang.String query,
                                java.util.ArrayList params,
                                StringSet invalidateKeys)
                         throws ManifoldCFException
Perform a general database modification query.

Specified by:
performModification in interface IDBInterface
Parameters:
query - is the query string.
params - are the parameterized values, if needed.
invalidateKeys - are the cache keys to invalidate.
Throws:
ManifoldCFException

getTableSchema

public java.util.Map getTableSchema(java.lang.String tableName,
                                    StringSet cacheKeys,
                                    java.lang.String queryClass)
                             throws ManifoldCFException
Get a table's schema.

Specified by:
getTableSchema in interface IDBInterface
Parameters:
tableName - is the name of the table.
cacheKeys - are the keys against which to cache the query, or null.
queryClass - is the name of the query class, or null.
Returns:
a map of column names and ColumnDescription objects, describing the schema, or null if the table doesn't exist.
Throws:
ManifoldCFException

getTableIndexes

public java.util.Map getTableIndexes(java.lang.String tableName,
                                     StringSet cacheKeys,
                                     java.lang.String queryClass)
                              throws ManifoldCFException
Get a table's indexes.

Specified by:
getTableIndexes in interface IDBInterface
Parameters:
tableName - is the name of the table.
cacheKeys - are the keys against which to cache the query, or null.
queryClass - is the name of the query class, or null.
Returns:
a map of index names and IndexDescription objects, describing the indexes.
Throws:
ManifoldCFException

getAllTables

public StringSet getAllTables(StringSet cacheKeys,
                              java.lang.String queryClass)
                       throws ManifoldCFException
Get a database's tables.

Specified by:
getAllTables in interface IDBInterface
Parameters:
cacheKeys - are the cache keys for the query, or null.
queryClass - is the name of the query class, or null.
Returns:
the set of tables.
Throws:
ManifoldCFException

performQuery

public IResultSet performQuery(java.lang.String query,
                               java.util.ArrayList params,
                               StringSet cacheKeys,
                               java.lang.String queryClass)
                        throws ManifoldCFException
Perform a general "data fetch" query.

Specified by:
performQuery in interface IDBInterface
Parameters:
query - is the query string.
params - are the parameterized values, if needed.
cacheKeys - are the cache keys, if needed (null if no cache desired).
queryClass - is the LRU class name against which this query would be cached, or null if no LRU behavior desired.
Returns:
a resultset.
Throws:
ManifoldCFException

performQuery

public IResultSet performQuery(java.lang.String query,
                               java.util.ArrayList params,
                               StringSet cacheKeys,
                               java.lang.String queryClass,
                               int maxResults,
                               ILimitChecker returnLimit)
                        throws ManifoldCFException
Perform a general "data fetch" query.

Specified by:
performQuery in interface IDBInterface
Parameters:
query - is the query string.
params - are the parameterized values, if needed.
cacheKeys - are the cache keys, if needed (null if no cache desired).
queryClass - is the LRU class name against which this query would be cached, or null if no LRU behavior desired.
maxResults - is the maximum number of results returned (-1 for all).
returnLimit - is a description of how to limit the return result, or null if no limit.
Returns:
a resultset.
Throws:
ManifoldCFException

performQuery

public IResultSet performQuery(java.lang.String query,
                               java.util.ArrayList params,
                               StringSet cacheKeys,
                               java.lang.String queryClass,
                               int maxResults,
                               ResultSpecification resultSpec,
                               ILimitChecker returnLimit)
                        throws ManifoldCFException
Perform a general "data fetch" query.

Specified by:
performQuery in interface IDBInterface
Parameters:
query - is the query string.
params - are the parameterized values, if needed.
cacheKeys - are the cache keys, if needed (null if no cache desired).
queryClass - is the LRU class name against which this query would be cached, or null if no LRU behavior desired.
maxResults - is the maximum number of results returned (-1 for all).
resultSpec - is a result specification, or null for the standard treatment.
returnLimit - is a description of how to limit the return result, or null if no limit.
Returns:
a resultset.
Throws:
ManifoldCFException

constructRegexpClause

public java.lang.String constructRegexpClause(java.lang.String column,
                                              java.lang.String regularExpression,
                                              boolean caseInsensitive)
Construct a regular-expression match clause. This method builds both the text part of a regular-expression match.

Specified by:
constructRegexpClause in interface IDBInterface
Parameters:
column - is the column specifier string.
regularExpression - is the properly-quoted regular expression string, or "?" if a parameterized value is to be used.
caseInsensitive - is true of the regular expression match is to be case insensitive.
Returns:
the query chunk needed, not padded with spaces on either side.

constructSubstringClause

public java.lang.String constructSubstringClause(java.lang.String column,
                                                 java.lang.String regularExpression,
                                                 boolean caseInsensitive)
Construct a regular-expression substring clause. This method builds an expression that extracts a specified string section from a field, based on a regular expression.

Specified by:
constructSubstringClause in interface IDBInterface
Parameters:
column - is the column specifier string.
regularExpression - is the properly-quoted regular expression string, or "?" if a parameterized value is to be used.
caseInsensitive - is true if the regular expression match is to be case insensitive.
Returns:
the expression chunk needed, not padded with spaces on either side.

constructOffsetLimitClause

public java.lang.String constructOffsetLimitClause(int offset,
                                                   int limit)
Construct an offset/limit clause. This method constructs an offset/limit clause in the proper manner for the database in question.

Specified by:
constructOffsetLimitClause in interface IDBInterface
Parameters:
offset - is the starting offset number.
limit - is the limit of result rows to return.
Returns:
the proper clause, with no padding spaces on either side.

constructDistinctOnClause

public java.lang.String constructDistinctOnClause(java.util.ArrayList outputParameters,
                                                  java.lang.String baseQuery,
                                                  java.util.ArrayList baseParameters,
                                                  java.lang.String[] distinctFields,
                                                  java.util.Map otherFields)
Construct a 'distinct on (x)' filter. This filter wraps a query and returns a new query whose results are similar to POSTGRESQL's DISTINCT-ON feature. Specifically, for each combination of the specified distinct fields in the result, only the first such row is included in the final result.

Specified by:
constructDistinctOnClause in interface IDBInterface
Parameters:
outputParameters - is a blank arraylist into which to put parameters. Null may be used if the baseParameters parameter is null.
baseQuery - is the base query, which is another SELECT statement, without parens, e.g. "SELECT ..."
baseParameters - are the parameters corresponding to the baseQuery.
distinctFields - are the fields to consider to be distinct. These should all be keys in otherFields below.
otherFields - are the rest of the fields to return, keyed by the AS name, value being the base query column value, e.g. "value AS key"
Returns:
a revised query that performs the necessary DISTINCT ON operation. The arraylist outputParameters will also be appropriately filled in.

getMaxInClause

public int getMaxInClause()
Obtain the maximum number of individual items that should be present in an IN clause. Exceeding this amount will potentially cause the query performance to drop.

Specified by:
getMaxInClause in interface IDBInterface
Returns:
the maximum number of IN clause members.

getMaxOrClause

public int getMaxOrClause()
Obtain the maximum number of individual clauses that should be present in a sequence of OR clauses. Exceeding this amount will potentially cause the query performance to drop.

Specified by:
getMaxOrClause in interface IDBInterface
Returns:
the maximum number of OR clause members.

noteModifications

public void noteModifications(java.lang.String tableName,
                              int insertCount,
                              int modifyCount,
                              int deleteCount)
                       throws ManifoldCFException
Note a number of inserts, modifications, or deletions to a specific table. This is so we can decide when to do appropriate maintenance.

Specified by:
noteModifications in interface IDBInterface
Overrides:
noteModifications in class Database
Parameters:
tableName - is the name of the table being modified.
insertCount - is the number of inserts.
modifyCount - is the number of updates.
deleteCount - is the number of deletions.
Throws:
ManifoldCFException

beginTransaction

public void beginTransaction()
                      throws ManifoldCFException
Begin a database transaction. This method call MUST be paired with an endTransaction() call, or database handles will be lost. If the transaction should be rolled back, then signalRollback() should be called before the transaction is ended. It is strongly recommended that the code that uses transactions be structured so that a try block starts immediately after this method call. The body of the try block will contain all direct or indirect calls to executeQuery(). After this should be a catch for every exception type, including Error, which should call the signalRollback() method, and rethrow the exception. Then, after that a finally{} block which calls endTransaction().

Specified by:
beginTransaction in interface IDBInterface
Throws:
ManifoldCFException

beginTransaction

public void beginTransaction(int transactionType)
                      throws ManifoldCFException
Begin a database transaction. This method call MUST be paired with an endTransaction() call, or database handles will be lost. If the transaction should be rolled back, then signalRollback() should be called before the transaction is ended. It is strongly recommended that the code that uses transactions be structured so that a try block starts immediately after this method call. The body of the try block will contain all direct or indirect calls to executeQuery(). After this should be a catch for every exception type, including Error, which should call the signalRollback() method, and rethrow the exception. Then, after that a finally{} block which calls endTransaction().

Specified by:
beginTransaction in interface IDBInterface
Overrides:
beginTransaction in class Database
Parameters:
transactionType - is the kind of transaction desired.
Throws:
ManifoldCFException

signalRollback

public void signalRollback()
Signal that a rollback should occur on the next endTransaction().

Specified by:
signalRollback in interface IDBInterface
Overrides:
signalRollback in class Database

endTransaction

public void endTransaction()
                    throws ManifoldCFException
End a database transaction, either performing a commit or a rollback (depending on whether signalRollback() was called within the transaction).

Specified by:
endTransaction in interface IDBInterface
Overrides:
endTransaction in class Database
Throws:
ManifoldCFException

startATransaction

protected void startATransaction()
                          throws ManifoldCFException
Abstract method to start a transaction

Overrides:
startATransaction in class Database
Throws:
ManifoldCFException

commitCurrentTransaction

protected void commitCurrentTransaction()
                                 throws ManifoldCFException
Abstract method to commit a transaction

Overrides:
commitCurrentTransaction in class Database
Throws:
ManifoldCFException

rollbackCurrentTransaction

protected void rollbackCurrentTransaction()
                                   throws ManifoldCFException
Abstract method to roll back a transaction

Overrides:
rollbackCurrentTransaction in class Database
Throws:
ManifoldCFException

mapColumnName

protected java.lang.String mapColumnName(java.lang.String rawColumnName)
Abstract method for mapping a column name from resultset

Overrides:
mapColumnName in class Database

caseInsensitiveRegularExpressionCompare

public static java.lang.String caseInsensitiveRegularExpressionCompare(java.lang.String value,
                                                                       java.lang.String regularExpression)
                                                                throws java.sql.SQLException
Method to compare a value using a case-insensitive regular expression.

Throws:
java.sql.SQLException

caseSensitiveRegularExpressionCompare

public static java.lang.String caseSensitiveRegularExpressionCompare(java.lang.String value,
                                                                     java.lang.String regularExpression)
                                                              throws java.sql.SQLException
Method to compare a value using a case-sensitive regular expression.

Throws:
java.sql.SQLException

caseInsensitiveSubstring

public static java.lang.String caseInsensitiveSubstring(java.lang.String value,
                                                        java.lang.String regularExpression)
                                                 throws java.sql.SQLException
Method to get a substring out of a case-insensitive regular expression group.

Throws:
java.sql.SQLException

caseSensitiveSubstring

public static java.lang.String caseSensitiveSubstring(java.lang.String value,
                                                      java.lang.String regularExpression)
                                               throws java.sql.SQLException
Method to get a substring out of a case-sensitive regular expression group.

Throws:
java.sql.SQLException