org.datanucleus.store.rdbms.adapter
Class MSSQLServerAdapter

java.lang.Object
  extended by org.datanucleus.store.rdbms.adapter.DatabaseAdapter
      extended by org.datanucleus.store.rdbms.adapter.MSSQLServerAdapter
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 MSSQLServerAdapter
extends DatabaseAdapter

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

See Also:
DatabaseAdapter

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
MSSQLServerAdapter(java.sql.DatabaseMetaData metadata)
          Constructs a Microsoft SQL Server adapter based on the given JDBC metadata.
 
Method Summary
 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 getCatalogName(java.sql.Connection conn)
          Accessor for the catalog name.
 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 return the INSERT statement to use when inserting into a table that has no columns specified.
 java.lang.String getNewUUIDFunction()
          The function to creates a unique value of type uniqueidentifier.
 org.datanucleus.store.mapped.expression.NumericExpression getNumericExpressionForMethod(java.lang.String method, org.datanucleus.store.mapped.expression.ScalarExpression expr)
          Accessor for a numeric expression to represent the method call, with passed argument.
 java.lang.String getOperatorConcat()
          An operator in a string expression that concatenates two or more character or binary strings, columns, or a combination of strings and column names into one expression (a string operator).
 java.lang.String getSchemaName(java.sql.Connection conn)
          Accessor for the Schema Name for this datastore.
 java.lang.String getSelectNewUUIDStmt()
          The function to creates a unique value of type uniqueidentifier.
 java.lang.String getSelectWithLockOption()
          The option to specify in "SELECT ...
 java.lang.String getVendorID()
           
 org.datanucleus.store.mapped.expression.NumericExpression indexOfMethod(org.datanucleus.store.mapped.expression.ScalarExpression source, org.datanucleus.store.mapped.expression.ScalarExpression str, org.datanucleus.store.mapped.expression.NumericExpression from)
          Method to handle the indexOf operation.
 void initialiseTypes(org.datanucleus.store.schema.StoreSchemaHandler handler, org.datanucleus.ManagedConnection mconn)
          Initialise the types for this datastore.
 boolean isIdentityFieldDataType(java.lang.String columnDef)
          Verifies if the given columnDef is auto incremented by the datastore.
 RDBMSColumnInfo newRDBMSColumnInfo(java.sql.ResultSet rs)
          Method to create a column info for the current row.
 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.BooleanExpression startsWithMethod(org.datanucleus.store.mapped.expression.ScalarExpression source, org.datanucleus.store.mapped.expression.ScalarExpression str)
          Method to handle the starts with operation.
 org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str, org.datanucleus.store.mapped.expression.NumericExpression begin)
          Returns the appropriate SQL expression for the JDOQL String.substring(str,begin) method.
 org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str, org.datanucleus.store.mapped.expression.NumericExpression begin, org.datanucleus.store.mapped.expression.NumericExpression end)
          Returns the appropriate SQL expression for the JDOQL String.substring(str,begin,end) method.
 boolean supportsQueryFetchSize(int size)
          Whether the datastore will support setting the query fetch size to the supplied value.
 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, getAddColumnStatement, getAddForeignKeyStatement, getAddPrimaryKeyStatement, getCatalogSeparator, getCheckConstraintForValues, getColumns, getConnection, getContinuationString, getCreateIndexStatement, getCreateTableStatement, getCurrentDateMethod, getCurrentTimeMethod, getCurrentTimestampMethod, getDatastoreDateStatement, getDatastoreIdentifierMaxLength, getDatastoreMajorVersion, getDatastoreMinorVersion, getDriverMajorVersion, getDriverMinorVersion, getDropViewStatement, getEscapeCharacter, getEscapedPatternExpression, getEscapePatternExpression, getExistingIndexes, getIdentifierQuoteString, getMapping, getMappingManager, getMaxForeignKeys, getMaxIndexes, getMiliseconds, getNonAnsiInnerJoinWhereClause, getNonAnsiLeftOuterJoinWhereClause, getNonAnsiRightOuterJoinWhereClause, getNumericConversionFunction, getPatternExpressionAnyCharacter, getPatternExpressionZeroMoreCharacters, getRangeByLimitSelectClause, getRangeByLimitWhereClause, getRangeByRowNumberColumn, getRequiredTransactionIsolationLevel, getSelectForUpdateText, getSequenceCreateStmt, getSequenceNextStmt, getSupportedOptions, getSurrogateForEmptyStrings, getTime, getTransactionIsolationForSchemaCreation, getUnlimitedLengthPrecisionValue, getValueForProperty, initialiseDatastore, isKeyword, isReservedKeyword, isValidPrimaryKeyType, iteratorReservedWords, logConfiguration, lowerMethod, matchesMethod, modOperator, newFKInfo, newQueryStatement, newTableExpression, parseKeywordList, removeUnsupportedMappings, setProperties, supportsOption, 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

MSSQLServerAdapter

public MSSQLServerAdapter(java.sql.DatabaseMetaData metadata)
Constructs a Microsoft SQL Server 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()
Specified by:
getVendorID in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getVendorID in class DatabaseAdapter

getCatalogName

public java.lang.String getCatalogName(java.sql.Connection conn)
                                throws java.sql.SQLException
Accessor for the catalog name.

Specified by:
getCatalogName in interface RDBMSAdapter
Overrides:
getCatalogName in class DatabaseAdapter
Parameters:
conn - The Connection to use
Returns:
The catalog name used by this connection
Throws:
java.sql.SQLException

getSchemaName

public java.lang.String getSchemaName(java.sql.Connection conn)
                               throws java.sql.SQLException
Description copied from class: DatabaseAdapter
Accessor for the Schema Name for this datastore.

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.

getSelectNewUUIDStmt

public java.lang.String getSelectNewUUIDStmt()
The function to creates a unique value of type uniqueidentifier.

Specified by:
getSelectNewUUIDStmt in interface RDBMSAdapter
Overrides:
getSelectNewUUIDStmt in class DatabaseAdapter
Returns:
The function. e.g. "SELECT NEWID()"

getNewUUIDFunction

public java.lang.String getNewUUIDFunction()
The function to creates a unique value of type uniqueidentifier.

Overrides:
getNewUUIDFunction in class DatabaseAdapter
Returns:
The function. e.g. "NEWID()"

supportsQueryFetchSize

public boolean supportsQueryFetchSize(int size)
Whether the datastore will support setting the query fetch size to the supplied value.

Specified by:
supportsQueryFetchSize in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
supportsQueryFetchSize in class DatabaseAdapter
Parameters:
size - The value to set to
Returns:
Whether it is supported.

newRDBMSColumnInfo

public RDBMSColumnInfo newRDBMSColumnInfo(java.sql.ResultSet rs)
Method to create a column info for the current row. Overrides the dataType/columnSize/decimalDigits to cater for MSSQL particularities.

Specified by:
newRDBMSColumnInfo in interface RDBMSAdapter
Overrides:
newRDBMSColumnInfo in class DatabaseAdapter
Parameters:
rs - ResultSet from DatabaseMetaData.getColumns()
Returns:
column info

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

getDropTableStatement

public java.lang.String getDropTableStatement(org.datanucleus.store.mapped.DatastoreContainerObject table)
Description copied from class: DatabaseAdapter
Returns the appropriate SQL to drop the given table. It should return something like:

 DROP TABLE FOO CASCADE
 

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

isIdentityFieldDataType

public boolean isIdentityFieldDataType(java.lang.String columnDef)
Verifies if the given columnDef is auto incremented by the datastore.

Specified by:
isIdentityFieldDataType in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
isIdentityFieldDataType in class DatabaseAdapter
Parameters:
columnDef - the datastore type name
Returns:
true when the columnDef has values auto incremented by the datastore

getInsertStatementForNoColumns

public java.lang.String getInsertStatementForNoColumns(Table table)
Method to return 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 statement for the INSERT

getOperatorConcat

public java.lang.String getOperatorConcat()
An operator in a string expression that concatenates two or more character or binary strings, columns, or a combination of strings and column names into one expression (a string operator).

Specified by:
getOperatorConcat in interface org.datanucleus.store.mapped.expression.ExpressionOperatorAdapter
Overrides:
getOperatorConcat in class DatabaseAdapter
Returns:
the operator SQL String

getSelectWithLockOption

public java.lang.String getSelectWithLockOption()
Description copied from class: DatabaseAdapter
The option to specify in "SELECT ... FROM TABLE ... WITH (option)" to lock instances Null if not supported.

Specified by:
getSelectWithLockOption in interface RDBMSAdapter
Overrides:
getSelectWithLockOption in class DatabaseAdapter
Returns:
The option to specify with "SELECT ... FROM TABLE ... WITH (option)"

getNumericExpressionForMethod

public org.datanucleus.store.mapped.expression.NumericExpression getNumericExpressionForMethod(java.lang.String method,
                                                                                               org.datanucleus.store.mapped.expression.ScalarExpression expr)
Accessor for a numeric expression to represent the method call, with passed argument.

Specified by:
getNumericExpressionForMethod in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getNumericExpressionForMethod in class DatabaseAdapter
Parameters:
method - The method (case insensitive)
expr - The argument to the method
Returns:
The numeric expression that results

substringMethod

public org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str,
                                                                                org.datanucleus.store.mapped.expression.NumericExpression begin)
Description copied from class: DatabaseAdapter
Returns the appropriate SQL expression for the JDOQL String.substring(str,begin) method. It should return something like:

 SUBSTRING(str FROM begin)
 
Note that the value of begin is base 0(Java-style), while most SQL string functions use base 1.

Specified by:
substringMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
substringMethod in class DatabaseAdapter
Parameters:
str - The first argument to the substring() method.
begin - The second argument to the substring() method.
Returns:
The text of the SQL expression.

substringMethod

public org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str,
                                                                                org.datanucleus.store.mapped.expression.NumericExpression begin,
                                                                                org.datanucleus.store.mapped.expression.NumericExpression end)
Description copied from class: DatabaseAdapter
Returns the appropriate SQL expression for the JDOQL String.substring(str,begin,end) method. It should return something like:

 SUBSTRING(str FROM begin FOR len)
 
Note that the value of begin is base 0 (Java-style), while most SQL string functions use base 1. Note also that an end position is given, while most SQL substring functions take a length.

Specified by:
substringMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
substringMethod in class DatabaseAdapter
Parameters:
str - The first argument to the substring() method.
begin - The second argument to the substring() method.
end - The third argument to the substring() method.
Returns:
The text of the SQL expression.

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.

startsWithMethod

public org.datanucleus.store.mapped.expression.BooleanExpression startsWithMethod(org.datanucleus.store.mapped.expression.ScalarExpression source,
                                                                                  org.datanucleus.store.mapped.expression.ScalarExpression str)
Method to handle the starts with operation.

Specified by:
startsWithMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
startsWithMethod in class DatabaseAdapter
Parameters:
source - The expression with the searched string
str - The expression for the search string
Returns:
The expression.

indexOfMethod

public org.datanucleus.store.mapped.expression.NumericExpression indexOfMethod(org.datanucleus.store.mapped.expression.ScalarExpression source,
                                                                               org.datanucleus.store.mapped.expression.ScalarExpression str,
                                                                               org.datanucleus.store.mapped.expression.NumericExpression from)
Method to handle the indexOf operation.

Specified by:
indexOfMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
indexOfMethod in class DatabaseAdapter
Parameters:
source - The expression with the searched string
str - The expression for the search string
from - The from position (or null if not specified)
Returns:
The expression.


Copyright © 2009. All Rights Reserved.