Class IngresDialect

java.lang.Object
org.hibernate.dialect.Dialect
org.hibernate.dialect.IngresDialect
Direct Known Subclasses:
Ingres9Dialect

public class IngresDialect extends Dialect
An SQL dialect for Ingres 9.2.

Known limitations:

  • Only supports simple constants or columns on the left side of an IN, making (1,2,3) in (...) or (<subselect>) in (...) non-supported.
  • Supports only 39 digits in decimal.
  • Explicitly set USE_GET_GENERATED_KEYS property to false.
  • Perform string casts to varchar; removes space padding.
  • Constructor Details

    • IngresDialect

      public IngresDialect()
  • Method Details

    • getSelectGUIDString

      public String getSelectGUIDString()
      Expression for created UUID string
      Overrides:
      getSelectGUIDString in class Dialect
      Returns:
      The appropriate command.
    • dropConstraints

      public boolean dropConstraints()
      Do we need to drop constraints before dropping tables in this dialect?
      Overrides:
      dropConstraints in class Dialect
      Returns:
      boolean
    • supportsForUpdateOf

      public boolean supportsForUpdateOf()
      Does this dialect support FOR UPDATE OF, allowing particular rows to be locked?
      Returns:
      True (Ingres does support "for update of" syntax...)
    • getAddColumnString

      public String getAddColumnString()
      The syntax used to add a column to a table (optional).
      Overrides:
      getAddColumnString in class Dialect
      Returns:
      The "add column" fragment.
    • getNullColumnString

      public String getNullColumnString()
      The keyword used to specify a nullable column.
      Overrides:
      getNullColumnString in class Dialect
      Returns:
      String
    • supportsSequences

      public boolean supportsSequences()
      Does this dialect support sequences?
      Overrides:
      supportsSequences in class Dialect
      Returns:
      boolean
    • getSequenceNextValString

      public String getSequenceNextValString(String sequenceName)
      The syntax that fetches the next value of a sequence, if sequences are supported.
      Overrides:
      getSequenceNextValString in class Dialect
      Parameters:
      sequenceName - the name of the sequence
      Returns:
      String
    • getSelectSequenceNextValString

      public String getSelectSequenceNextValString(String sequenceName)
      Description copied from class: Dialect
      Generate the select expression fragment that will retrieve the next value of a sequence as part of another (typically DML) statement.

      This differs from Dialect.getSequenceNextValString(String) in that this should return an expression usable within another statement.

      Overrides:
      getSelectSequenceNextValString in class Dialect
      Parameters:
      sequenceName - the name of the sequence
      Returns:
      The "nextval" fragment.
    • getCreateSequenceString

      public String getCreateSequenceString(String sequenceName)
      The syntax used to create a sequence, if sequences are supported.
      Overrides:
      getCreateSequenceString in class Dialect
      Parameters:
      sequenceName - the name of the sequence
      Returns:
      String
    • getDropSequenceString

      public String getDropSequenceString(String sequenceName)
      The syntax used to drop a sequence, if sequences are supported.
      Overrides:
      getDropSequenceString in class Dialect
      Parameters:
      sequenceName - the name of the sequence
      Returns:
      String
    • getQuerySequencesString

      public String getQuerySequencesString()
      A query used to find all sequences
      Overrides:
      getQuerySequencesString in class Dialect
      Returns:
      The select command; or null if sequences are not supported.
      See Also:
    • getLowercaseFunction

      public String getLowercaseFunction()
      The name of the SQL function that transforms a string to lowercase
      Overrides:
      getLowercaseFunction in class Dialect
      Returns:
      String
    • supportsLimit

      public boolean supportsLimit()
      Does this Dialect have some kind of LIMIT syntax?
      Overrides:
      supportsLimit in class Dialect
      Returns:
      True if this dialect supports some form of LIMIT.
    • supportsLimitOffset

      public boolean supportsLimitOffset()
      Does this dialect support an offset?
      Overrides:
      supportsLimitOffset in class Dialect
      Returns:
      True if the dialect supports an offset within the limit support.
    • getLimitString

      public String getLimitString(String querySelect, int offset, int limit)
      Add a LIMIT clause to the given SQL SELECT
      Overrides:
      getLimitString in class Dialect
      Parameters:
      querySelect - The query to which to apply the limit.
      offset - The offset of the limit
      limit - The limit of the limit ;)
      Returns:
      the modified SQL
    • supportsVariableLimit

      public boolean supportsVariableLimit()
      Description copied from class: Dialect
      Does this dialect support bind variables (i.e., prepared statement parameters) for its limit/offset?
      Overrides:
      supportsVariableLimit in class Dialect
      Returns:
      True if bind variables can be used; false otherwise.
    • useMaxForLimit

      public boolean useMaxForLimit()
      Does the LIMIT clause take a "maximum" row number instead of a total number of returned rows?
      Overrides:
      useMaxForLimit in class Dialect
      Returns:
      True if limit is relative from offset; false otherwise.
    • supportsNotNullUnique

      public boolean supportsNotNullUnique()
      Ingres explicitly needs "unique not null", because "with null" is default
      Overrides:
      supportsNotNullUnique in class Dialect
    • supportsTemporaryTables

      public boolean supportsTemporaryTables()
      Does this dialect support temporary tables?
      Overrides:
      supportsTemporaryTables in class Dialect
      Returns:
      True if temp tables are supported; false otherwise.
    • getCreateTemporaryTableString

      public String getCreateTemporaryTableString()
      Description copied from class: Dialect
      Command used to create a temporary table.
      Overrides:
      getCreateTemporaryTableString in class Dialect
      Returns:
      The command used to create a temporary table.
    • getCreateTemporaryTablePostfix

      public String getCreateTemporaryTablePostfix()
      Description copied from class: Dialect
      Get any fragments needing to be postfixed to the command for temporary table creation.
      Overrides:
      getCreateTemporaryTablePostfix in class Dialect
      Returns:
      Any required postfix.
    • generateTemporaryTableName

      public String generateTemporaryTableName(String baseTableName)
      Description copied from class: Dialect
      Generate a temporary table name given the base table.
      Overrides:
      generateTemporaryTableName in class Dialect
      Parameters:
      baseTableName - The table name from which to base the temp table name.
      Returns:
      The generated temp table name.
    • getCurrentTimestampSQLFunctionName

      public String getCurrentTimestampSQLFunctionName()
      Expression for current_timestamp
      Overrides:
      getCurrentTimestampSQLFunctionName in class Dialect
      Returns:
      The function name.
    • supportsSubselectAsInPredicateLHS

      public boolean supportsSubselectAsInPredicateLHS()
      Description copied from class: Dialect
      Are subselects supported as the left-hand-side (LHS) of IN-predicates.

      In other words, is syntax like "... IN (1, 2, 3) ..." supported?

      Overrides:
      supportsSubselectAsInPredicateLHS in class Dialect
      Returns:
      True if subselects can appear as the LHS of an in-predicate; false otherwise.
    • supportsEmptyInList

      public boolean supportsEmptyInList()
      Description copied from class: Dialect
      Does this dialect support empty IN lists?

      For example, is [where XYZ in ()] a supported construct?

      Overrides:
      supportsEmptyInList in class Dialect
      Returns:
      True if empty in lists are supported; false otherwise.
    • supportsExpectedLobUsagePattern

      public boolean supportsExpectedLobUsagePattern()
      Description copied from class: Dialect
      Expected LOB usage pattern is such that I can perform an insert via prepared statement with a parameter binding for a LOB value without crazy casting to JDBC driver implementation-specific classes...

      Part of the trickiness here is the fact that this is largely driver dependent. For example, Oracle (which is notoriously bad with LOB support in their drivers historically) actually does a pretty good job with LOB support as of the 10.2.x versions of their drivers...

      Overrides:
      supportsExpectedLobUsagePattern in class Dialect
      Returns:
      True if normal LOB usage patterns can be used with this driver; false if driver-specific hookiness needs to be applied.
    • supportsTupleDistinctCounts

      public boolean supportsTupleDistinctCounts()
      Ingres does not support the syntax `count(distinct a,b)`?
      Overrides:
      supportsTupleDistinctCounts in class Dialect
      Returns:
      False, not supported.