Class DialectOracle


  • public class DialectOracle
    extends Dialect
    Oracle-specific dialect.
    Author:
    Florent Guillaume
    • Field Detail

      • oraclePreparedStatementRegisterReturnParameter

        protected Method oraclePreparedStatementRegisterReturnParameter
      • oraclePreparedStatementGetReturnResultSet

        protected Method oraclePreparedStatementGetReturnResultSet
      • fulltextParameters

        protected final String fulltextParameters
      • pathOptimizationsEnabled

        protected boolean pathOptimizationsEnabled
      • pathOptimizationsVersion

        protected int pathOptimizationsVersion
      • disableVersionACL

        protected final boolean disableVersionACL
      • disableReadVersionPermission

        protected final boolean disableReadVersionPermission
      • usersSeparator

        protected String usersSeparator
      • idSequenceName

        protected String idSequenceName
      • majorVersion

        protected int majorVersion
      • CHARS_RESERVED

        protected static final Set<Character> CHARS_RESERVED
    • Method Detail

      • 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
      • 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
      • 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
      • 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
      • 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
      • needsOracleJoins

        public boolean needsOracleJoins()
        Description copied from class: Dialect
        Whether implicit Oracle joins (instead of explicit ANSI joins) are needed.
        Overrides:
        needsOracleJoins in class Dialect
      • getClobCast

        public String getClobCast​(boolean inOrderBy)
        Description copied from class: Dialect
        When using a CLOB field in an expression, is some casting required and with what pattern?

        Needed for H2.

        Overrides:
        getClobCast in class Dialect
        Parameters:
        inOrderBy - true if the expression is for an ORDER BY column
        Returns:
        a pattern for String.format with one parameter for the column name and one for the width, or null if no cast is required
      • getQuotedNameForExpression

        public String getQuotedNameForExpression​(Column column)
        Description copied from class: Dialect
        Gets the SQL to use to refer to a column in an expression.

        Needed for Oracle CLOB.

        Overrides:
        getQuotedNameForExpression in class Dialect
        Parameters:
        column - the column used in an expression
        Returns:
        the SQL to use to refer to it
      • 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
      • 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
      • 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
      • 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
      • supportsWith

        public boolean supportsWith()
        Description copied from class: Dialect
        Does the dialect support SQL-99 WITH common table expressions.
        Overrides:
        supportsWith in class Dialect
      • supportsArrays

        public boolean supportsArrays()
        Description copied from class: Dialect
        Does the dialect support passing ARRAY values (to stored procedures mostly).

        If not, we'll simulate them using a string and a separator.

        Overrides:
        supportsArrays in class Dialect
        Returns:
        true if ARRAY values are supported
      • supportsArraysReturnInsteadOfRows

        public boolean supportsArraysReturnInsteadOfRows()
        Description copied from class: Dialect
        Does a stored function returning an result set need to access it as a single array instead of iterating over a normal result set's rows.

        Oracle needs this.

        Overrides:
        supportsArraysReturnInsteadOfRows in class Dialect
      • hasNullEmptyString

        public boolean hasNullEmptyString()
        Description copied from class: Dialect
        Does the dialect have an empty string identical to NULL (Oracle).
        Overrides:
        hasNullEmptyString in class Dialect
      • 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
      • getOracleErrorCode

        protected int getOracleErrorCode​(Throwable t)
      • isConnectionClosed

        protected boolean isConnectionClosed​(int oracleError)
      • 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
      • getValidationQuery

        public String getValidationQuery()
        Description copied from class: Dialect
        A query that, when executed, will make at least a round-trip to the server to check that the connection is alive.

        The query should throw an error if the connection is dead.

        Overrides:
        getValidationQuery 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
      • getPostCreateIdentityColumnSql

        public List<String> getPostCreateIdentityColumnSql​(Column column)
        Description copied from class: Dialect
        Gets additional SQL statements to execute after the CREATE TABLE when creating an identity column.

        Oracle needs both a sequence and a trigger.

        Overrides:
        getPostCreateIdentityColumnSql in class Dialect
      • hasIdentityGeneratedKey

        public boolean hasIdentityGeneratedKey()
        Description copied from class: Dialect
        True if the dialect returns the generated key for the identity from the insert statement.

        Oracle needs a separate call to CURRVAL.

        Overrides:
        hasIdentityGeneratedKey in class Dialect
      • getIdentityGeneratedKeySql

        public String getIdentityGeneratedKeySql​(Column column)
        Description copied from class: Dialect
        Gets the SQL query to execute to retrieve the last generated identity key.

        Oracle needs a separate call to CURRVAL.

        Overrides:
        getIdentityGeneratedKeySql in class Dialect
      • 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
      • needsNullsLastOnDescSort

        public boolean needsNullsLastOnDescSort()
        Description copied from class: Dialect
        True if the dialect need an extra NULLS LAST on DESC sort.
        Overrides:
        needsNullsLastOnDescSort in class Dialect
      • 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
      • getUsersSeparator

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

        public boolean supportsBatchUpdateCount()
        Description copied from class: Dialect
        Does the dialect report accurate update counts for batch updates.
        Overrides:
        supportsBatchUpdateCount in class Dialect