Class DialectSQLServer


  • public class DialectSQLServer
    extends Dialect
    Microsoft SQL Server-specific dialect.
    Author:
    Florent Guillaume
    • Field Detail

      • CLUSTER_INDEX_COL

        public static final String CLUSTER_INDEX_COL
        Column containing an IDENTITY used to create a clustered index.
        See Also:
        Constant Field Values
      • noRepositoryDescriptor

        protected final boolean noRepositoryDescriptor
      • fulltextAnalyzer

        protected final String fulltextAnalyzer
      • fulltextCatalog

        protected final String fulltextCatalog
      • usersSeparator

        protected final String usersSeparator
      • idSequenceName

        protected String idSequenceName
      • pathOptimizationsEnabled

        protected boolean pathOptimizationsEnabled
      • disableVersionACL

        protected final boolean disableVersionACL
      • disableReadVersionPermission

        protected final boolean disableReadVersionPermission
      • majorVersion

        protected int majorVersion
        9 = SQL Server 2005, 10 = SQL Server 2008, 11 = SQL Server 2012 / Azure
      • engineEdition

        protected int engineEdition
        5 = Azure
      • azure

        protected boolean azure
    • Method Detail

      • supportsPaging

        public boolean supportsPaging()
        Description copied from class: Dialect
        Indicates if dialect supports paging
        Overrides:
        supportsPaging in class Dialect
        Returns:
        true if the dialect supports paging
      • addPagingClause

        public String addPagingClause​(String sql,
                                      long limit,
                                      long offset)
        Description copied from class: Dialect
        Returns the SQL query with a paging clause
        Overrides:
        addPagingClause 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
      • setId

        public void setId​(PreparedStatement ps,
                          int index,
                          Serializable value)
                   throws SQLException
        Description copied from class: Dialect
        Sets a prepared statement value that is a Nuxeo main id (usually UUID).
        Overrides:
        setId in class Dialect
        Parameters:
        ps - the prepared statement
        index - the parameter index in the prepared statement
        value - the value to set
        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
      • 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
      • getQuotedFulltextAnalyzer

        protected String getQuotedFulltextAnalyzer()
      • getLikeEscaping

        public String getLikeEscaping()
        Description copied from class: Dialect
        Gets the SQL fragment to add after a LIKE match to specify the escaping character.
        Overrides:
        getLikeEscaping 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,
                                   String id)
        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
        id - the id, to check syntax with respect to specialized id column types
        Returns:
        an SQL expression with one parameters for the based id that is true if the document is under base id, or null if the query cannot match
      • getUpsertSql

        public String getUpsertSql​(List<Column> columns,
                                   List<Serializable> values,
                                   List<Column> outColumns,
                                   List<Serializable> outValues)
        Description copied from class: Dialect
        Gets the SQL string for an UPSERT expression.
        Specified by:
        getUpsertSql in class Dialect
        Parameters:
        columns - the columns to upsert (first one being the key column)
        values - the values to upsert (first one being the key value)
        outColumns - the columns to use in the prepared statement
        outValues - the values to use in the prepared statement
      • getInsertOnConflictDoNothingSql

        public String getInsertOnConflictDoNothingSql​(List<Column> columns,
                                                      List<Serializable> values,
                                                      List<Column> outColumns,
                                                      List<Serializable> outValues)
        Description copied from class: Dialect
        Gets the SQL string for an INSERT ... ON CONFLICT DO NOTHING expression.
        Overrides:
        getInsertOnConflictDoNothingSql in class Dialect
        Parameters:
        columns - the columns to insert (first one being the key column)
        values - the values to insert (first one being the key value)
        outColumns - the columns to use in the prepared statement
        outValues - the values to use in the prepared statement
      • 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
      • getMd5HashString

        protected String getMd5HashString()
      • supportsLockEscalationDisable

        protected boolean supportsLockEscalationDisable()
      • supportsReadAcl

        public boolean supportsReadAcl()
        Description copied from class: Dialect
        Does the dialect support an optimized read security checks
        Overrides:
        supportsReadAcl 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)
      • getReadAclsCheckSql

        public String getReadAclsCheckSql​(String userIdCol)
        Description copied from class: Dialect
        Gets the expression to check if access is allowed using read acls. The dialect must suppportsReadAcl.
        Overrides:
        getReadAclsCheckSql in class Dialect
        Parameters:
        userIdCol - the quoted name of the aclr_user_map user_id column to use
        Returns:
        an SQL expression with one parameter (principals) that is true if access is allowed
      • getStartupSqls

        public List<String> getStartupSqls​(Model model,
                                           Database database)
        Description copied from class: Dialect
        Gets the sql statements to execute after the repository init (at startup).

        Used for vacuum-like operations.

        Overrides:
        getStartupSqls 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: nodeId, 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
      • isConcurrentUpdateException

        public boolean isConcurrentUpdateException​(Throwable t)
        Description copied from class: Dialect
        Checks if an exception received means that a concurrent update was detected.
        Overrides:
        isConcurrentUpdateException 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
      • getUsersSeparator

        public String getUsersSeparator()
      • 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
      • getDateCast

        public String getDateCast()
        Description copied from class: Dialect
        Get the expression to use to cast a column to a DATE type.
        Overrides:
        getDateCast in class Dialect
        Returns:
        a pattern for String.format with one parameter for the column name
      • castIdToVarchar

        public String castIdToVarchar​(String expr)
        Description copied from class: Dialect
        Casts an id column to a VARCHAR type.

        Used for uuid/varchar joins.

        Overrides:
        castIdToVarchar in class Dialect
        Returns:
        the casted expression
      • needsClusteredColumn

        protected boolean needsClusteredColumn​(Table table)
        Tables created for directories don't need a clustered column automatically defined.
      • getSoftDeleteSql

        public String getSoftDeleteSql()
        Description copied from class: Dialect
        SQL to soft delete documents. SQL returned has free parameters for the array of ids and time.
        Overrides:
        getSoftDeleteSql in class Dialect
      • getSoftDeleteCleanupSql

        public String getSoftDeleteCleanupSql()
        Description copied from class: Dialect
        SQL to clean soft-delete documents. SQL returned has free parameters max and beforeTime.
        Overrides:
        getSoftDeleteCleanupSql in class Dialect
      • checkStoredProcedure

        public List<String> checkStoredProcedure​(String procName,
                                                 String procCreate,
                                                 String ddlMode,
                                                 Connection connection,
                                                 JDBCLogger logger,
                                                 Map<String,​Serializable> properties)
                                          throws SQLException
        Description copied from class: Dialect
        Checks if a given stored procedure exists and is identical to the passed creation SQL.

        There are 3 cases to deal with, and actions to perform:

        • the stored procedure doesn't exist, and must be created (create the stored procedure);
        • the stored procedure exists but is not up to date (drop the old stored procedure and re-create it);
        • the stored procedure exists and is up to date (nothing to do).

        When there is nothing to do, null is returned. Otherwise the returned value is a list of SQL statements to execute. Note that the SQL statements will include also INSERT statements to be executed to remember the creation SQL itself.

        Specified by:
        checkStoredProcedure in class Dialect
        Parameters:
        procName - the stored procedure name
        procCreate - the creation SQL for the stored procedure
        ddlMode - the DDL mode
        connection - the connection
        logger - the logger
        properties - the statement execution properties
        Returns:
        a list of SQL statements
        Throws:
        SQLException
      • normalizeString

        protected static String normalizeString​(String string)
      • getSQLForDump

        public String getSQLForDump​(String sql)
        Description copied from class: Dialect
        Returns the SQL statement with proper terminator to use in a dump.
        Overrides:
        getSQLForDump in class Dialect
        Returns:
        the SQL statement