org.datanucleus.store.rdbms.adapter
Class HSQLAdapter

java.lang.Object
  extended by org.datanucleus.store.rdbms.adapter.DatabaseAdapter
      extended by org.datanucleus.store.rdbms.adapter.HSQLAdapter
All Implemented Interfaces:
org.datanucleus.store.mapped.DatastoreAdapter, org.datanucleus.store.mapped.expression.ExpressionConversionAdapter, org.datanucleus.store.mapped.expression.ExpressionLogicSetAdapter, org.datanucleus.store.mapped.expression.ExpressionMethodAdapter, org.datanucleus.store.mapped.expression.ExpressionOperatorAdapter, org.datanucleus.store.mapped.expression.ExpressionPatternAdapter, RDBMSAdapter

public class HSQLAdapter
extends DatabaseAdapter

Provides methods for adapting SQL language elements to the Hypersonic SQL Server database.


Field Summary
 
Fields inherited from class org.datanucleus.store.rdbms.adapter.DatabaseAdapter
catalogSeparator, datastoreMajorVersion, datastoreMinorVersion, datastoreProductName, datastoreProductVersion, datastoreRevisionVersion, driverMajorVersion, driverMinorVersion, driverName, driverVersion, identifierQuoteString, LOCALISER, LOCALISER_BASE, maxColumnNameLength, maxConstraintNameLength, maxIndexNameLength, maxTableNameLength, properties, reservedKeywords, supportedOptions
 
Fields inherited from interface org.datanucleus.store.rdbms.adapter.RDBMSAdapter
ACCESS_PARENTQUERY_IN_SUBQUERY, ALTER_TABLE_DROP_CONSTRAINT_SYNTAX, ALTER_TABLE_DROP_FOREIGN_KEY_CONSTRAINT, ANSI_JOIN_SYNTAX, AUTO_INCREMENT_COLUMN_TYPE_SPECIFICATION, AUTO_INCREMENT_KEYS_NULL_SPECIFICATION, BLOB_SET_USING_SETSTRING, CHAR_COLUMNS_PADDED_WITH_SPACES, CHECK_IN_CREATE_STATEMENTS, CHECK_IN_END_CREATE_STATEMENTS, CLOB_SET_USING_SETSTRING, CREATE_INDEXES_BEFORE_FOREIGN_KEYS, DATETIME_STORES_MILLISECS, DEFAULT_BEFORE_NULL_IN_COLUMN_OPTIONS, DEFAULT_KEYWORD_IN_COLUMN_OPTIONS, DEFAULT_KEYWORD_WITH_NOT_NULL_IN_COLUMN_OPTIONS, DEFERRED_CONSTRAINTS, DISTINCT_WITH_SELECT_FOR_UPDATE, EXISTS_SYNTAX, FK_DELETE_ACTION_CASCADE, FK_DELETE_ACTION_DEFAULT, FK_DELETE_ACTION_NULL, FK_DELETE_ACTION_RESTRICT, FK_UPDATE_ACTION_CASCADE, FK_UPDATE_ACTION_DEFAULT, FK_UPDATE_ACTION_NULL, FK_UPDATE_ACTION_RESTRICT, GET_GENERATED_KEYS_STATEMENT, INCLUDE_ORDERBY_COLS_IN_SELECT, LOCK_OPTION_PLACED_AFTER_FROM, LOCK_OPTION_PLACED_WITHIN_JOIN, LOCK_WITH_SELECT_FOR_UPDATE, NULL_EQUALS_EMPTY_STRING, NULLS_IN_CANDIDATE_KEYS, NULLS_KEYWORD_IN_COLUMN_OPTIONS, ORDERBY_USING_SELECT_COLUMN_INDEX, PERSIST_OF_UNASSIGNED_CHAR, PRIMARYKEY_IN_CREATE_STATEMENTS, STATEMENT_BATCHING, TX_ISOLATION_NONE, TX_ISOLATION_READ_COMMITTED, TX_ISOLATION_READ_UNCOMMITTED, TX_ISOLATION_REPEATABLE_READ, TX_ISOLATION_SERIALIZABLE, UNION_SYNTAX, UNIQUE_IN_END_CREATE_STATEMENTS, USE_UNION_ALL, VIEWS
 
Fields inherited from interface org.datanucleus.store.mapped.DatastoreAdapter
ANALYSIS_METHODS, BIT_IS_REALLY_BOOLEAN, BOOLEAN_COMPARISON, CATALOGS_IN_TABLE_DEFINITIONS, ESCAPE_EXPRESSION_IN_LIKE_PREDICATE, IDENTIFIERS_LOWERCASE, IDENTIFIERS_LOWERCASE_QUOTED, IDENTIFIERS_MIXEDCASE, IDENTIFIERS_MIXEDCASE_QUOTED, IDENTIFIERS_MIXEDCASE_QUOTED_SENSITIVE, IDENTIFIERS_MIXEDCASE_SENSITIVE, IDENTIFIERS_UPPERCASE, IDENTIFIERS_UPPERCASE_QUOTED, IDENTITY_COLUMNS, PROJECTION_IN_TABLE_REFERENCE_JOINS, SCHEMAS_IN_TABLE_DEFINITIONS, SEQUENCES
 
Constructor Summary
HSQLAdapter(java.sql.DatabaseMetaData metadata)
          Constructs a Hypersonic SQL adapter based on the given JDBC metadata.
 
Method Summary
 java.lang.String getAddColumnStatement(org.datanucleus.store.mapped.DatastoreContainerObject table, Column col)
          Accessor for the SQL statement to add a column to a table.
 java.lang.String getAddPrimaryKeyStatement(PrimaryKey pk, org.datanucleus.store.mapped.IdentifierFactory factory)
          HSQL 1.7.0 does not support ALTER TABLE to define a primary key
 java.lang.String getAutoIncrementKeyword()
          Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).
 java.lang.String getAutoIncrementStmt(Table table, java.lang.String columnName)
          Accessor for the auto-increment sql statement for this datastore.
 java.lang.String getDatastoreDateStatement()
          Accessor for a statement that will return the statement to use to get the datastore date.
 int getDatastoreIdentifierMaxLength(org.datanucleus.store.mapped.IdentifierType identifierType)
          Method to return the maximum length of a datastore identifier of the specified type.
 java.lang.String getDropTableStatement(org.datanucleus.store.mapped.DatastoreContainerObject table)
          Returns the appropriate SQL to drop the given table.
 java.lang.String getInsertStatementForNoColumns(Table table)
          Method to retutn the INSERT statement to use when inserting into a table that has no columns specified.
 java.lang.String getRangeByLimitSelectClause(long offset, long count)
          Method to return the SQL to append to the SELECT clause of a SELECT statement to handle restriction of ranges using the LIMUT keyword.
 java.lang.String getSchemaName(java.sql.Connection conn)
          Accessor for the Schema Name for this datastore.
 java.lang.String getSequenceCreateStmt(java.lang.String sequence_name, java.lang.String min, java.lang.String max, java.lang.String start, java.lang.String increment, java.lang.String cache_size)
          Accessor for the sequence statement to create the sequence.
 java.lang.String getSequenceNextStmt(java.lang.String sequence_name)
          Accessor for the statement for getting the next id from the sequence for this datastore.
 java.lang.String getVendorID()
          Accessor for the vendor ID for this adapter.
 void initialiseTypes(org.datanucleus.store.schema.StoreSchemaHandler handler, org.datanucleus.ManagedConnection mconn)
          Initialise the types for this datastore.
 boolean isValidPrimaryKeyType(int datatype)
          Accessor for whether the specified type is allow to be part of a PK.
 org.datanucleus.store.mapped.expression.NumericExpression modOperator(org.datanucleus.store.mapped.expression.ScalarExpression operand1, org.datanucleus.store.mapped.expression.ScalarExpression operand2)
          Method to generate a modulus expression.
 SQLTypeInfo newSQLTypeInfo(java.sql.ResultSet rs)
          Create a new SQL type info from the current row of the passed ResultSet.
 org.datanucleus.store.mapped.expression.StringExpression trimMethod(org.datanucleus.store.mapped.expression.StringExpression str, boolean leading, boolean trailing)
          Returns the appropriate SQL expression for the java query "trim" method.
 
Methods inherited from class org.datanucleus.store.rdbms.adapter.DatabaseAdapter
addSQLTypeForJDBCType, cartersianProduct, concatOperator, endsWithMethod, getAdapterTime, getAddCandidateKeyStatement, getAddForeignKeyStatement, getCatalogName, getCatalogSeparator, getCheckConstraintForValues, getColumns, getConnection, getContinuationString, getCreateIndexStatement, getCreateTableStatement, getCurrentDateMethod, getCurrentTimeMethod, getCurrentTimestampMethod, getDatastoreMajorVersion, getDatastoreMinorVersion, getDriverMajorVersion, getDriverMinorVersion, getDropViewStatement, getEscapeCharacter, getEscapedPatternExpression, getEscapePatternExpression, getExistingIndexes, getIdentifierQuoteString, getMapping, getMappingManager, getMaxForeignKeys, getMaxIndexes, getMiliseconds, getNewUUIDFunction, getNonAnsiInnerJoinWhereClause, getNonAnsiLeftOuterJoinWhereClause, getNonAnsiRightOuterJoinWhereClause, getNumericConversionFunction, getNumericExpressionForMethod, getOperatorConcat, getPatternExpressionAnyCharacter, getPatternExpressionZeroMoreCharacters, getRangeByLimitWhereClause, getRangeByRowNumberColumn, getRequiredTransactionIsolationLevel, getSelectForUpdateText, getSelectNewUUIDStmt, getSelectWithLockOption, getSupportedOptions, getSurrogateForEmptyStrings, getTime, getTransactionIsolationForSchemaCreation, getUnlimitedLengthPrecisionValue, getValueForProperty, indexOfMethod, initialiseDatastore, isIdentityFieldDataType, isKeyword, isReservedKeyword, iteratorReservedWords, logConfiguration, lowerMethod, matchesMethod, newFKInfo, newQueryStatement, newRDBMSColumnInfo, newTableExpression, parseKeywordList, removeUnsupportedMappings, setProperties, startsWithMethod, substringMethod, substringMethod, supportsOption, supportsQueryFetchSize, supportsTransactionIsolation, toNumericExpression, toString, toStringExpression, toStringExpression, translateMethod, upperMethod
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

HSQLAdapter

public HSQLAdapter(java.sql.DatabaseMetaData metadata)
Constructs a Hypersonic SQL adapter based on the given JDBC metadata.

Parameters:
metadata - the database metadata.
Method Detail

initialiseTypes

public void initialiseTypes(org.datanucleus.store.schema.StoreSchemaHandler handler,
                            org.datanucleus.ManagedConnection mconn)
Initialise the types for this datastore.

Specified by:
initialiseTypes in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
initialiseTypes in class DatabaseAdapter
Parameters:
handler - SchemaHandler that we initialise the types for
mconn - Managed connection to use

getVendorID

public java.lang.String getVendorID()
Accessor for the vendor ID for this adapter.

Specified by:
getVendorID in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getVendorID in class DatabaseAdapter
Returns:
The vendor ID

getDatastoreIdentifierMaxLength

public int getDatastoreIdentifierMaxLength(org.datanucleus.store.mapped.IdentifierType identifierType)
Method to return the maximum length of a datastore identifier of the specified type. If no limit exists then returns -1

Specified by:
getDatastoreIdentifierMaxLength in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getDatastoreIdentifierMaxLength in class DatabaseAdapter
Parameters:
identifierType - Type of identifier (see IdentifierFactory.TABLE, etc)
Returns:
The max permitted length of this type of identifier

getAddColumnStatement

public java.lang.String getAddColumnStatement(org.datanucleus.store.mapped.DatastoreContainerObject table,
                                              Column col)
Accessor for the SQL statement to add a column to a table.

Specified by:
getAddColumnStatement in interface RDBMSAdapter
Overrides:
getAddColumnStatement in class DatabaseAdapter
Parameters:
table - The table
col - The column
Returns:
The SQL necessary to add the column

getRangeByLimitSelectClause

public java.lang.String getRangeByLimitSelectClause(long offset,
                                                    long count)
Method to return the SQL to append to the SELECT clause of a SELECT statement to handle restriction of ranges using the LIMUT keyword.

Specified by:
getRangeByLimitSelectClause in interface RDBMSAdapter
Overrides:
getRangeByLimitSelectClause in class DatabaseAdapter
Parameters:
offset - The offset to return from
count - The number of items to return
Returns:
The SQL to append to allow for ranges using LIMIT.

newSQLTypeInfo

public SQLTypeInfo newSQLTypeInfo(java.sql.ResultSet rs)
Description copied from interface: RDBMSAdapter
Create a new SQL type info from the current row of the passed ResultSet. Allows an adapter to override particular types where the JDBC driver is known to be buggy.

Specified by:
newSQLTypeInfo in interface RDBMSAdapter
Overrides:
newSQLTypeInfo in class DatabaseAdapter
Parameters:
rs - ResultSet
Returns:
The SQL type info

getSchemaName

public java.lang.String getSchemaName(java.sql.Connection conn)
                               throws java.sql.SQLException
Accessor for the Schema Name for this datastore. HSQL 1.7.0 does not support schemas (catalog)

Specified by:
getSchemaName in interface RDBMSAdapter
Overrides:
getSchemaName in class DatabaseAdapter
Parameters:
conn - Connection to the datastore
Returns:
The schema name
Throws:
java.sql.SQLException - Thrown if error occurs in determining the schema name.

getAddPrimaryKeyStatement

public java.lang.String getAddPrimaryKeyStatement(PrimaryKey pk,
                                                  org.datanucleus.store.mapped.IdentifierFactory factory)
HSQL 1.7.0 does not support ALTER TABLE to define a primary key

Specified by:
getAddPrimaryKeyStatement in interface RDBMSAdapter
Overrides:
getAddPrimaryKeyStatement in class DatabaseAdapter
Parameters:
pk - An object describing the primary key.
factory - Identifier factory
Returns:
The PK statement

getDropTableStatement

public java.lang.String getDropTableStatement(org.datanucleus.store.mapped.DatastoreContainerObject table)
Returns the appropriate SQL to drop the given table. It should return something like:
 DROP TABLE FOO
 

Specified by:
getDropTableStatement in interface RDBMSAdapter
Overrides:
getDropTableStatement in class DatabaseAdapter
Parameters:
table - The table to drop.
Returns:
The text of the SQL statement.

getAutoIncrementStmt

public java.lang.String getAutoIncrementStmt(Table table,
                                             java.lang.String columnName)
Accessor for the auto-increment sql statement for this datastore.

Specified by:
getAutoIncrementStmt in interface RDBMSAdapter
Overrides:
getAutoIncrementStmt in class DatabaseAdapter
Parameters:
table - Name of the table that the autoincrement is for
columnName - Name of the column that the autoincrement is for
Returns:
The statement for getting the latest auto-increment key

getAutoIncrementKeyword

public java.lang.String getAutoIncrementKeyword()
Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).

Specified by:
getAutoIncrementKeyword in interface RDBMSAdapter
Overrides:
getAutoIncrementKeyword in class DatabaseAdapter
Returns:
The keyword for a column using auto-increment

getInsertStatementForNoColumns

public java.lang.String getInsertStatementForNoColumns(Table table)
Method to retutn the INSERT statement to use when inserting into a table that has no columns specified. This is the case when we have a single column in the table and that column is autoincrement/identity (and so is assigned automatically in the datastore).

Specified by:
getInsertStatementForNoColumns in interface RDBMSAdapter
Overrides:
getInsertStatementForNoColumns in class DatabaseAdapter
Parameters:
table - The table
Returns:
The INSERT statement

isValidPrimaryKeyType

public boolean isValidPrimaryKeyType(int datatype)
Accessor for whether the specified type is allow to be part of a PK.

Specified by:
isValidPrimaryKeyType in interface RDBMSAdapter
Overrides:
isValidPrimaryKeyType in class DatabaseAdapter
Parameters:
datatype - The JDBC type
Returns:
Whether it is permitted in the PK

getDatastoreDateStatement

public java.lang.String getDatastoreDateStatement()
Accessor for a statement that will return the statement to use to get the datastore date.

Specified by:
getDatastoreDateStatement in interface RDBMSAdapter
Overrides:
getDatastoreDateStatement in class DatabaseAdapter
Returns:
SQL statement to get the datastore date

getSequenceCreateStmt

public java.lang.String getSequenceCreateStmt(java.lang.String sequence_name,
                                              java.lang.String min,
                                              java.lang.String max,
                                              java.lang.String start,
                                              java.lang.String increment,
                                              java.lang.String cache_size)
Accessor for the sequence statement to create the sequence.

Specified by:
getSequenceCreateStmt in interface RDBMSAdapter
Overrides:
getSequenceCreateStmt in class DatabaseAdapter
Parameters:
sequence_name - Name of the sequence
min - Minimum value for the sequence
max - Maximum value for the sequence
start - Start value for the sequence
increment - Increment value for the sequence
cache_size - Cache size for the sequence
Returns:
The statement for getting the next id from the sequence

getSequenceNextStmt

public java.lang.String getSequenceNextStmt(java.lang.String sequence_name)
Accessor for the statement for getting the next id from the sequence for this datastore.

Specified by:
getSequenceNextStmt in interface RDBMSAdapter
Overrides:
getSequenceNextStmt in class DatabaseAdapter
Parameters:
sequence_name - Name of the sequence
Returns:
The statement for getting the next id for the sequence

modOperator

public org.datanucleus.store.mapped.expression.NumericExpression modOperator(org.datanucleus.store.mapped.expression.ScalarExpression operand1,
                                                                             org.datanucleus.store.mapped.expression.ScalarExpression operand2)
Method to generate a modulus expression. The binary % operator is said to yield the remainder of its operands from an implied division; the left-hand operand is the dividend and the right-hand operand is the divisor. This returns MOD(expr1, expr2).

Specified by:
modOperator in interface org.datanucleus.store.mapped.DatastoreAdapter
Specified by:
modOperator in interface org.datanucleus.store.mapped.expression.ExpressionOperatorAdapter
Overrides:
modOperator in class DatabaseAdapter
Parameters:
operand1 - the left expression
operand2 - the right expression
Returns:
The Expression for modulus

trimMethod

public org.datanucleus.store.mapped.expression.StringExpression trimMethod(org.datanucleus.store.mapped.expression.StringExpression str,
                                                                           boolean leading,
                                                                           boolean trailing)
Returns the appropriate SQL expression for the java query "trim" method. It should return something like:
LTRIM(RTRIM(str))

Specified by:
trimMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
trimMethod in class DatabaseAdapter
Parameters:
str - The first argument to the trim() method.
leading - Whether to trim leading spaces
trailing - Whether to trim trailing spaces
Returns:
The text of the SQL expression.


Copyright © 2009. All Rights Reserved.