java.lang.Object
org.nuxeo.ecm.core.storage.sql.jdbc.dialect.Dialect
org.nuxeo.ecm.core.storage.sql.jdbc.dialect.DialectH2

public class DialectH2 extends Dialect
H2-specific dialect.
Author:
Florent Guillaume
  • Field Details

    • RESERVED_KEYWORDS

      protected static final List<String> RESERVED_KEYWORDS
    • DEFAULT_USERS_SEPARATOR

      protected static final String DEFAULT_USERS_SEPARATOR
      See Also:
    • usersSeparator

      protected final String usersSeparator
    • disableVersionACL

      protected final boolean disableVersionACL
    • disableReadVersionPermission

      protected final boolean disableReadVersionPermission
  • Constructor Details

  • Method Details

    • supportsIfExistsAfterTableName

      public boolean supportsIfExistsAfterTableName()
      Overrides:
      supportsIfExistsAfterTableName 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
    • toBooleanValueString

      public String toBooleanValueString(boolean bool)
      Overrides:
      toBooleanValueString in class Dialect
    • getTableName

      public String getTableName(String name)
      Overrides:
      getTableName 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • getUsersSeparator

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