Nuxeo ECM Projects 5.4.3-SNAPSHOT

org.nuxeo.ecm.core.storage.sql.jdbc.dialect
Class DialectSQLServer

java.lang.Object
  extended by org.nuxeo.ecm.core.storage.sql.jdbc.dialect.Dialect
      extended by org.nuxeo.ecm.core.storage.sql.jdbc.dialect.DialectSQLServer

public class DialectSQLServer
extends Dialect

Microsoft SQL Server-specific dialect.

Author:
Florent Guillaume

Nested Class Summary
 
Nested classes/interfaces inherited from class org.nuxeo.ecm.core.storage.sql.jdbc.dialect.Dialect
Dialect.FulltextMatchInfo, Dialect.FulltextQuery, Dialect.FulltextQueryAnalyzer, Dialect.JDBCInfo
 
Field Summary
 
Fields inherited from class org.nuxeo.ecm.core.storage.sql.jdbc.dialect.Dialect
ARRAY_SEP
 
Constructor Summary
DialectSQLServer(DatabaseMetaData metadata, BinaryManager binaryManager, RepositoryDescriptor repositoryDescriptor)
           
 
Method Summary
 char closeQuote()
           
 boolean doesUpdateFromRepeatSelf()
          When doing an UPDATE t SET ...
 String getAddColumnString()
           
 String getAncestorsIdsSql()
          Gets the SQL query to get the ancestors of a set of ids.
 String getBlobLengthFunction()
          Gets the SQL function that returns the length of a blob, in bytes.
 String getClusterGetInvalidations()
          Gets the SQL to query invalidations for this cluster node.
 String getClusterInsertInvalidations()
          Gets the SQL to send an invalidation to the cluster.
 String getCreateFulltextIndexSql(String indexName, String quotedIndexName, Table table, List<Column> columns, Model model)
          Gets a CREATE INDEX statement for a fulltext index.
 String getDialectFulltextQuery(String query)
          Get the dialect-specific version of a fulltext query.
 Serializable getFromResultSet(ResultSet rs, int index, Column column)
           
 int getFulltextIndexedColumns()
          Specifies what columns of the fulltext table have to be indexed.
 Dialect.FulltextMatchInfo getFulltextScoredMatchInfo(String fulltextQuery, String indexName, int nthMatch, Column mainColumn, Model model, Database database)
          Gets the SQL information needed to do a a fulltext match, either with a direct expression in the WHERE clause, or using a join with an additional table.
 String getInTreeSql(String idColumnName)
          Gets the expression to use to check tree membership.
 Dialect.JDBCInfo getJDBCTypeAndString(ColumnType type)
          Gets the JDBC type and string from Nuxeo's type abstraction.
 boolean getMaterializeFulltextSyntheticColumn()
          Does the fulltext synthetic column have to be materialized.
 String getNoColumnsInsertString()
           
 String getNullColumnString()
           
 String getPrepareUserReadAclsSql()
          Gets the SQL expression to prepare the user read acls cache.
 String getReadAclsCheckSql(String idColumnName)
          Gets the expression to check if access is allowed using read acl the dialect must suppportsReadAcl
 String getRebuildReadAclsSql()
          Gets the statement to rebuild the wall read acls
 String getSecurityCheckSql(String idColumnName)
          Gets the expression to use to check security.
 String getSQLStatementsFilename()
          Gets the name of the file containing the SQL statements.
 Map<String,Serializable> getSQLStatementsProperties(Model model, Database database)
          Gets the properties to use with the SQL statements.
 String getTestSQLStatementsFilename()
           
 String getUpdateReadAclsSql()
          Gets the statement to update the read acls
 String getUsersSeparator()
           
 boolean isAllowedConversion(int expected, int actual, String actualName, int actualSize)
          Check mismatches between expected and actual JDBC types read from database introspection.
 boolean isClusteringSupported()
          Checks that clustering is supported.
 boolean isConnectionClosedException(Throwable t)
          Checks if an exception received means that the low level connection has been trashed and must be reset.
 boolean needsAliasForDerivedTable()
          Whether a derived table (subselect in a FROM statement) needs an alias.
 boolean needsOriginalColumnInGroupBy()
          Whether a GROUP BY can only be used with the original column name and not an alias.
 boolean needsPrepareUserReadAcls()
          The dialect need an extra SQL statement to populate a user read acl cache before running the query.
 char openQuote()
           
 void performPostOpenStatements(Connection connection)
          Set transaction isolation level to snapshot
 boolean qualifyIndexName()
           
 void setToPreparedStatement(PreparedStatement ps, int index, Serializable value, Column column)
           
 boolean supportsCircularCascadeDeleteConstraints()
           
 boolean supportsMultipleFulltextIndexes()
          SQL Server supports only one fulltext index.
 boolean supportsReadAcl()
          Does the dialect support an optimized read security checks
 boolean supportsUpdateFrom()
          Does the dialect support UPDATE t SET ...
 
Methods inherited from class org.nuxeo.ecm.core.storage.sql.jdbc.dialect.Dialect
analyzeFulltextQuery, createArrayOf, createDialect, existingTableDetected, fulltextHasPhrase, getAddForeignKeyConstraintString, getAddPrimaryKeyConstraintString, getBinaryManager, getCascadeDropConstraintsString, getClobCast, getClusterDeleteInvalidations, getColumnName, getConnectionSchema, getCreateIndexSql, getForeignKeyConstraintName, getFreeVariableSetterForType, getFulltextType, getIdentityGeneratedKeySql, getIndexName, getMatchMixinType, getMaximumArgsForIn, getPagingClause, getPostCreateIdentityColumnSql, getPostCreateTableSqls, getPrimaryKeyConstraintName, getTableName, getTableTypeString, getValidationQuery, hasIdentityGeneratedKey, hasNullEmptyString, isClusteringDeleteNeeded, isIdentityAlreadyPrimary, jdbcInfo, jdbcInfo, needsOracleJoins, needsOrderByKeysAfterDistinct, performAdditionalStatements, preCreateTable, storesUpperCaseIdentifiers, supportsAncestorsTable, supportsArrays, supportsArraysReturnInsteadOfRows, supportsIfExistsAfterTableName, supportsIfExistsBeforeTableName, supportsIlike, supportsPaging, supportsSysNameArray, supportsWith, toBooleanValueString, toHexString, translateFulltext
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DialectSQLServer

public DialectSQLServer(DatabaseMetaData metadata,
                        BinaryManager binaryManager,
                        RepositoryDescriptor repositoryDescriptor)
                 throws StorageException
Throws:
StorageException
Method Detail

openQuote

public char openQuote()
Overrides:
openQuote in class Dialect

closeQuote

public char closeQuote()
Overrides:
closeQuote in class Dialect

getNoColumnsInsertString

public String getNoColumnsInsertString()
Overrides:
getNoColumnsInsertString in class Dialect

getNullColumnString

public String getNullColumnString()
Overrides:
getNullColumnString in class Dialect

qualifyIndexName

public boolean qualifyIndexName()
Overrides:
qualifyIndexName in class Dialect

getAddColumnString

public String getAddColumnString()
Overrides:
getAddColumnString in class Dialect

getJDBCTypeAndString

public Dialect.JDBCInfo getJDBCTypeAndString(ColumnType type)
Description copied from class: Dialect
Gets the JDBC type and string from Nuxeo's type abstraction.

Specified by:
getJDBCTypeAndString in class Dialect

isAllowedConversion

public boolean isAllowedConversion(int expected,
                                   int actual,
                                   String actualName,
                                   int actualSize)
Description copied from class: Dialect
Check mismatches between expected and actual JDBC types read from database introspection.

Overrides:
isAllowedConversion in class Dialect

setToPreparedStatement

public void setToPreparedStatement(PreparedStatement ps,
                                   int index,
                                   Serializable value,
                                   Column column)
                            throws SQLException
Specified by:
setToPreparedStatement in class Dialect
Throws:
SQLException

getFromResultSet

public Serializable getFromResultSet(ResultSet rs,
                                     int index,
                                     Column column)
                              throws SQLException
Specified by:
getFromResultSet in class Dialect
Throws:
SQLException

getMaterializeFulltextSyntheticColumn

public boolean getMaterializeFulltextSyntheticColumn()
Description copied from class: Dialect
Does the fulltext synthetic column have to be materialized.

Specified by:
getMaterializeFulltextSyntheticColumn in class Dialect

getFulltextIndexedColumns

public int getFulltextIndexedColumns()
Description copied from class: Dialect
Specifies what columns of the fulltext table have to be indexed.

Specified by:
getFulltextIndexedColumns in class Dialect
Returns:
0 for none, 1 for the synthetic one, 2 for the individual ones

supportsMultipleFulltextIndexes

public boolean supportsMultipleFulltextIndexes()
Description copied from class: Dialect
SQL Server supports only one fulltext index.

Overrides:
supportsMultipleFulltextIndexes in class Dialect

getCreateFulltextIndexSql

public String getCreateFulltextIndexSql(String indexName,
                                        String quotedIndexName,
                                        Table table,
                                        List<Column> columns,
                                        Model model)
Description copied from class: Dialect
Gets a CREATE INDEX statement for a fulltext index.

Specified by:
getCreateFulltextIndexSql in class Dialect

getDialectFulltextQuery

public String getDialectFulltextQuery(String query)
Description copied from class: Dialect
Get the dialect-specific version of a fulltext query.

Specified by:
getDialectFulltextQuery in class Dialect
Parameters:
query - the CMIS-syntax-based fulltext query string
Returns:
the dialect native fulltext query string

getFulltextScoredMatchInfo

public Dialect.FulltextMatchInfo getFulltextScoredMatchInfo(String fulltextQuery,
                                                            String indexName,
                                                            int nthMatch,
                                                            Column mainColumn,
                                                            Model model,
                                                            Database database)
Description copied from class: Dialect
Gets the SQL information needed to do a a fulltext match, either with a direct expression in the WHERE clause, or using a join with an additional table.

Specified by:
getFulltextScoredMatchInfo in class Dialect

supportsCircularCascadeDeleteConstraints

public boolean supportsCircularCascadeDeleteConstraints()
Overrides:
supportsCircularCascadeDeleteConstraints in class Dialect

supportsUpdateFrom

public boolean supportsUpdateFrom()
Description copied from class: Dialect
Does the dialect support UPDATE t SET ... FROM t, u WHERE ... ?

Specified by:
supportsUpdateFrom in class Dialect

doesUpdateFromRepeatSelf

public boolean doesUpdateFromRepeatSelf()
Description copied from class: Dialect
When doing an UPDATE t SET ... FROM t, u WHERE ..., does the FROM clause need to repeate the updated table (t).

Specified by:
doesUpdateFromRepeatSelf in class Dialect

needsAliasForDerivedTable

public boolean needsAliasForDerivedTable()
Description copied from class: Dialect
Whether a derived table (subselect in a FROM statement) needs an alias.

Overrides:
needsAliasForDerivedTable in class Dialect

needsOriginalColumnInGroupBy

public boolean needsOriginalColumnInGroupBy()
Description copied from class: Dialect
Whether a GROUP BY can only be used with the original column name and not an alias.

Overrides:
needsOriginalColumnInGroupBy in class Dialect

getSecurityCheckSql

public String getSecurityCheckSql(String idColumnName)
Description copied from class: Dialect
Gets the expression to use to check security.

Specified by:
getSecurityCheckSql in class Dialect
Parameters:
idColumnName - the quoted name of the id column to use
Returns:
an SQL expression with two parameters (principals and permissions) that is true if access is allowed

getInTreeSql

public String getInTreeSql(String idColumnName)
Description copied from class: Dialect
Gets the expression to use to check tree membership.

Specified by:
getInTreeSql in class Dialect
Parameters:
idColumnName - the quoted name of the id column to use
Returns:
an SQL expression with one parameters for the based id that is true if the document is under base id

getSQLStatementsFilename

public String getSQLStatementsFilename()
Description copied from class: Dialect
Gets the name of the file containing the SQL statements.

Specified by:
getSQLStatementsFilename in class Dialect

getTestSQLStatementsFilename

public String getTestSQLStatementsFilename()
Specified by:
getTestSQLStatementsFilename in class Dialect

getSQLStatementsProperties

public Map<String,Serializable> getSQLStatementsProperties(Model model,
                                                           Database database)
Description copied from class: Dialect
Gets the properties to use with the SQL statements.

Specified by:
getSQLStatementsProperties in class Dialect

supportsReadAcl

public boolean supportsReadAcl()
Description copied from class: Dialect
Does the dialect support an optimized read security checks

Overrides:
supportsReadAcl in class Dialect

getReadAclsCheckSql

public String getReadAclsCheckSql(String idColumnName)
Description copied from class: Dialect
Gets the expression to check if access is allowed using read acl the dialect must suppportsReadAcl

Overrides:
getReadAclsCheckSql in class Dialect
Parameters:
idColumnName - the quoted name of the read acl_id column to use
Returns:
an SQL expression with one parameter (principals) that is true if access is allowed

getUpdateReadAclsSql

public String getUpdateReadAclsSql()
Description copied from class: Dialect
Gets the statement to update the read acls

Overrides:
getUpdateReadAclsSql in class Dialect

getRebuildReadAclsSql

public String getRebuildReadAclsSql()
Description copied from class: Dialect
Gets the statement to rebuild the wall read acls

Overrides:
getRebuildReadAclsSql in class Dialect

isClusteringSupported

public boolean isClusteringSupported()
Description copied from class: Dialect
Checks that clustering is supported.

Overrides:
isClusteringSupported in class Dialect

getClusterInsertInvalidations

public String getClusterInsertInvalidations()
Description copied from class: Dialect
Gets the SQL to send an invalidation to the cluster.

Overrides:
getClusterInsertInvalidations in class Dialect
Returns:
an SQL statement with parameters for: id, fragments, kind

getClusterGetInvalidations

public String getClusterGetInvalidations()
Description copied from class: Dialect
Gets the SQL to query invalidations for this cluster node.

Overrides:
getClusterGetInvalidations in class Dialect
Returns:
an SQL statement returning a result set

isConnectionClosedException

public boolean isConnectionClosedException(Throwable t)
Description copied from class: Dialect
Checks if an exception received means that the low level connection has been trashed and must be reset.

Overrides:
isConnectionClosedException in class Dialect

getBlobLengthFunction

public String getBlobLengthFunction()
Description copied from class: Dialect
Gets the SQL function that returns the length of a blob, in bytes.

Overrides:
getBlobLengthFunction in class Dialect

getPrepareUserReadAclsSql

public String getPrepareUserReadAclsSql()
Description copied from class: Dialect
Gets the SQL expression to prepare the user read acls cache. This can be used to populate a table cache.

Overrides:
getPrepareUserReadAclsSql in class Dialect
Returns:
and SQL expression with one parameter (principals)

needsPrepareUserReadAcls

public boolean needsPrepareUserReadAcls()
Description copied from class: Dialect
The dialect need an extra SQL statement to populate a user read acl cache before running the query.

Overrides:
needsPrepareUserReadAcls in class Dialect

getUsersSeparator

public String getUsersSeparator()

performPostOpenStatements

public void performPostOpenStatements(Connection connection)
                               throws SQLException
Set transaction isolation level to snapshot

Overrides:
performPostOpenStatements in class Dialect
Throws:
SQLException

getAncestorsIdsSql

public String getAncestorsIdsSql()
Description copied from class: Dialect
Gets the SQL query to get the ancestors of a set of ids.

Overrides:
getAncestorsIdsSql in class Dialect
Returns:
null if not available

Nuxeo ECM Projects 5.4.3-SNAPSHOT

Copyright © 2011 Nuxeo SAS. All Rights Reserved.