Class SpannerDialect

java.lang.Object
org.hibernate.dialect.Dialect
org.hibernate.dialect.SpannerDialect
All Implemented Interfaces:
FunctionContributor, TypeContributor, ConversionContext

public class SpannerDialect extends Dialect
A SQL dialect for Cloud Spanner.
  • Constructor Details

    • SpannerDialect

      public SpannerDialect()
    • SpannerDialect

      public SpannerDialect(DialectResolutionInfo info)
  • Method Details

    • useIntegerForPrimaryKey

      public boolean useIntegerForPrimaryKey()
    • contributeTypes

      public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry)
      Description copied from class: Dialect
      A callback which allows the Dialect to contribute types.
      Overrides:
      contributeTypes in class Dialect
      Parameters:
      typeContributions - Callback to contribute the types
      serviceRegistry - The service registry
    • createOptionalTableUpdateOperation

      public MutationOperation createOptionalTableUpdateOperation(EntityMutationTarget mutationTarget, org.hibernate.sql.model.internal.OptionalTableUpdate optionalTableUpdate, SessionFactoryImplementor factory)
      Description copied from class: Dialect
      Create a MutationOperation for a updating an optional table
      Overrides:
      createOptionalTableUpdateOperation in class Dialect
    • initDefaultProperties

      protected void initDefaultProperties()
      Description copied from class: Dialect
      Set appropriate default values for configuration properties.

      This default implementation sets "hibernate.jdbc.batch_size", "hibernate.jdbc.lob.non_contextual_creation", and "hibernate.jdbc.use_get_generated_keys" to defaults determined by calling Dialect.getDefaultStatementBatchSize(), Dialect.getDefaultNonContextualLobCreation(), and Dialect.getDefaultUseGetGeneratedKeys().

      An implementation may set additional configuration properties, but this is discouraged.

      Overrides:
      initDefaultProperties in class Dialect
    • resolveSqlTypeDescriptor

      public JdbcType resolveSqlTypeDescriptor(String columnTypeName, int jdbcTypeCode, int precision, int scale, JdbcTypeRegistry jdbcTypeRegistry)
      Description copied from class: Dialect
      Assigns an appropriate JdbcType to a column of a JDBC result set based on the column type name, JDBC type code, precision, and scale.
      Overrides:
      resolveSqlTypeDescriptor in class Dialect
      Parameters:
      columnTypeName - the column type name
      jdbcTypeCode - the type code
      precision - the precision or 0
      scale - the scale or 0
      Returns:
      an appropriate instance of JdbcType
    • registerColumnTypes

      protected void registerColumnTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry)
      Description copied from class: Dialect
      Register ANSI-standard column types using the length limits defined by Dialect.getMaxVarcharLength(), Dialect.getMaxNVarcharLength(), and Dialect.getMaxVarbinaryLength().

      This method is always called when a Dialect is instantiated.

      Overrides:
      registerColumnTypes in class Dialect
    • columnType

      protected String columnType(int sqlTypeCode)
      Description copied from class: Dialect
      The database column type name for a given JDBC type code defined in Types or SqlTypes. This default implementation returns the ANSI-standard type name.

      This method may be overridden by concrete Dialects as an alternative to Dialect.registerColumnTypes(TypeContributions, ServiceRegistry) for simple registrations.

      Note that:

      1. Implementations of this method are expected to define a sensible mapping forTypes.NCLOB Types.NCHAR, and Types.NVARCHAR. On some database, these types are simply remapped to CLOB, CHAR, and VARCHAR.
      2. Mappings for Types.TIMESTAMP and Types.TIMESTAMP_WITH_TIMEZONE should support explicit specification of precision if possible.
      3. As specified by DdlTypeRegistry.getDescriptor(int), this method never receives Types.LONGVARCHAR, Types.LONGNVARCHAR, nor Types.LONGVARBINARY, which are considered synonyms for their non-LONG counterparts.
      4. On the other hand, the types SqlTypes.LONG32VARCHAR, SqlTypes.LONG32NVARCHAR, and SqlTypes.LONG32VARBINARY are not synonyms, and implementations of this method must define sensible mappings, for example to database-native TEXT or CLOB types.
      Overrides:
      columnType in class Dialect
      Parameters:
      sqlTypeCode - a SQL type code
      Returns:
      a column type name, with $l, $p, $s placeholders for length, precision, scale
      See Also:
    • castPattern

      public String castPattern(CastType from, CastType to)
      Description copied from class: Dialect
      Obtain a pattern for the SQL equivalent to a cast() function call. The resulting pattern must contain ?1 and ?2 placeholders for the arguments.
      Overrides:
      castPattern in class Dialect
      Parameters:
      from - a CastType indicating the type of the value argument
      to - a CastType indicating the type the value argument is cast to
    • castType

      protected String castType(int sqlTypeCode)
      Description copied from class: Dialect
      The SQL type to use in cast( ... as ... ) expressions when casting to the target type represented by the given JDBC type code.
      Overrides:
      castType in class Dialect
      Parameters:
      sqlTypeCode - The JDBC type code representing the target type
      Returns:
      The SQL type to use in cast()
    • supportsTruncateWithCast

      public boolean supportsTruncateWithCast()
      Description copied from class: Dialect
      Does this dialect support truncation of values to a specified length via a cast?
      Overrides:
      supportsTruncateWithCast in class Dialect
      Returns:
      true if the database supports truncation via a cast, false otherwise. The default is true.
    • getMaxVarcharLength

      public int getMaxVarcharLength()
      Description copied from class: Dialect
      The biggest size value that can be supplied as argument to a Types.VARCHAR-like type.

      For longer column lengths, use some sort of text-like type for the column.

      Overrides:
      getMaxVarcharLength in class Dialect
    • getMaxVarbinaryLength

      public int getMaxVarbinaryLength()
      Description copied from class: Dialect
      The biggest size value that can be supplied as argument to a Types.VARBINARY-like type.

      For longer column lengths, use some sort of image-like type for the column.

      Overrides:
      getMaxVarbinaryLength in class Dialect
    • supportsStandardArrays

      public boolean supportsStandardArrays()
      Description copied from class: Dialect
      Does this database have native support for ANSI SQL standard arrays which are expressed in terms of the element type name: integer array.
      Overrides:
      supportsStandardArrays in class Dialect
      Returns:
      boolean
    • getArrayTypeName

      public String getArrayTypeName(String javaElementTypeName, String elementTypeName, Integer maxLength)
      Description copied from class: Dialect
      The SQL type name for the array type with elements of the given type name.

      The ANSI-standard syntax is integer array.

      Overrides:
      getArrayTypeName in class Dialect
    • initializeFunctionRegistry

      public void initializeFunctionRegistry(FunctionContributions functionContributions)
      Description copied from class: Dialect
      Initialize the given registry with any dialect-specific functions.

      Support for certain SQL functions is required, and if the database does not support a required function, then the dialect must define a way to emulate it.

      These required functions include the functions defined by the JPA query language specification:

      • avg(arg) - aggregate function
      • count([distinct ]arg) - aggregate function
      • max(arg) - aggregate function
      • min(arg) - aggregate function
      • sum(arg) - aggregate function
      • coalesce(arg0, arg1, ...)
      • nullif(arg0, arg1)
      • lower(arg)
      • upper(arg)
      • length(arg)
      • concat(arg0, arg1, ...)
      • locate(pattern, string[, start])
      • substring(string, start[, length])
      • trim([[spec ][character ]from] string)
      • abs(arg)
      • mod(arg0, arg1)
      • sqrt(arg)
      • current date
      • current time
      • current timestamp
      Along with an additional set of functions defined by ANSI SQL:
      • any(arg) - aggregate function
      • every(arg) - aggregate function
      • var_samp(arg) - aggregate function
      • var_pop(arg) - aggregate function
      • stddev_samp(arg) - aggregate function
      • stddev_pop(arg) - aggregate function
      • cast(arg as Type)
      • extract(field from arg)
      • ln(arg)
      • exp(arg)
      • power(arg0, arg1)
      • floor(arg)
      • ceiling(arg)
      • position(pattern in string)
      • substring(string from start[ for length])
      • overlay(string placing replacement from start[ for length])
      And the following functions for working with java.time types:
      • local date
      • local time
      • local datetime
      • offset datetime
      • instant
      And a number of additional "standard" functions:
      • left(string, length)
      • right(string, length)
      • replace(string, pattern, replacement)
      • pad(string with length spec[ character])
      • repeat(string, times)
      • pi
      • log10(arg)
      • log(base, arg)
      • sign(arg)
      • sin(arg)
      • cos(arg)
      • tan(arg)
      • asin(arg)
      • acos(arg)
      • atan(arg)
      • atan2(arg0, arg1)
      • round(arg0[, arg1])
      • truncate(arg0[, arg1])
      • sinh(arg)
      • tanh(arg)
      • cosh(arg)
      • least(arg0, arg1, ...)
      • greatest(arg0, arg1, ...)
      • degrees(arg)
      • radians(arg)
      • bitand(arg1, arg1)
      • bitor(arg1, arg1)
      • bitxor(arg1, arg1)
      • format(datetime as pattern)
      • collate(string as collation)
      • str(arg) - synonym of cast(a as String)
      • ifnull(arg0, arg1) - synonym of coalesce(a, b)
      • ordinal(arg)
      • string(arg)
      Finally, the following functions are defined as abbreviations for extract(), and desugared by the parser:
      • second(arg) - synonym of extract(second from a)
      • minute(arg) - synonym of extract(minute from a)
      • hour(arg) - synonym of extract(hour from a)
      • day(arg) - synonym of extract(day from a)
      • month(arg) - synonym of extract(month from a)
      • year(arg) - synonym of extract(year from a)
      Note that according to this definition, the second() function returns a floating point value, contrary to the integer type returned by the native function with this name on many databases. Thus, we don't just naively map these HQL functions to the native SQL functions with the same names.
      Overrides:
      initializeFunctionRegistry in class Dialect
    • getSqlAstTranslatorFactory

      public SqlAstTranslatorFactory getSqlAstTranslatorFactory()
      Description copied from class: Dialect
      Return a SqlAstTranslatorFactory specific to this dialect, or null to use the standard translator.
      Overrides:
      getSqlAstTranslatorFactory in class Dialect
      See Also:
    • supportsIfExistsBeforeTableName

      public boolean supportsIfExistsBeforeTableName()
      Description copied from class: Dialect
      For dropping a table, can the phrase if exists be applied before the table name?
      Overrides:
      supportsIfExistsBeforeTableName in class Dialect
      Returns:
      true if if exists can be applied before the table name
    • supportsCurrentTimestampSelection

      public boolean supportsCurrentTimestampSelection()
      Description copied from class: Dialect
      Does this dialect support some way to retrieve the current timestamp value from the database?
      Overrides:
      supportsCurrentTimestampSelection in class Dialect
      Returns:
      True if the current timestamp can be retrieved; false otherwise.
    • isCurrentTimestampSelectStringCallable

      public boolean isCurrentTimestampSelectStringCallable()
      Description copied from class: Dialect
      Is the command returned by Dialect.getCurrentTimestampSelectString() treated as callable?

      Typically, this indicates the use of the JDBC escape syntax.

      Overrides:
      isCurrentTimestampSelectStringCallable in class Dialect
      Returns:
      if the Dialect.getCurrentTimestampSelectString() is treated as callable; false otherwise.
    • getCurrentTimestampSelectString

      public String getCurrentTimestampSelectString()
      Description copied from class: Dialect
      The command used to retrieve the current timestamp from the database.
      Overrides:
      getCurrentTimestampSelectString in class Dialect
    • appendBooleanValueString

      public void appendBooleanValueString(SqlAppender appender, boolean bool)
      Description copied from class: Dialect
      Append the SQL literal expression representing the given boolean value to the given SqlAppender.
      Overrides:
      appendBooleanValueString in class Dialect
      Parameters:
      appender - The SqlAppender to append the literal expression to
      bool - The boolean value
    • appendBinaryLiteral

      public void appendBinaryLiteral(SqlAppender appender, byte[] bytes)
      Description copied from class: Dialect
      Append a binary literal to the given SqlAppender.
      Overrides:
      appendBinaryLiteral in class Dialect
    • appendLiteral

      public void appendLiteral(SqlAppender appender, String literal)
      Description copied from class: Dialect
      Append a literal string to the given SqlAppender.
      Overrides:
      appendLiteral in class Dialect
    • currentTime

      public String currentTime()
      Description copied from class: Dialect
      Translation of the HQL/JPQL current_time function, which maps to the Java type Time which is a time with no time zone. This contradicts ANSI SQL where current_time has the type TIME WITH TIME ZONE.

      It is recommended to override this in dialects for databases which support localtime or time at local.

      Overrides:
      currentTime in class Dialect
    • supportsTemporalLiteralOffset

      public boolean supportsTemporalLiteralOffset()
      Description copied from class: Dialect
      Does this dialect support timezone offsets in temporal literals?
      Overrides:
      supportsTemporalLiteralOffset in class Dialect
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender, TemporalAccessor temporalAccessor, TemporalType precision, TimeZone jdbcTimeZone)
      Description copied from class: Dialect
      Append a datetime literal representing the given java.time value to the given SqlAppender.
      Overrides:
      appendDateTimeLiteral in class Dialect
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender, Date date, TemporalType precision, TimeZone jdbcTimeZone)
      Description copied from class: Dialect
      Append a datetime literal representing the given Date value to the given SqlAppender.
      Overrides:
      appendDateTimeLiteral in class Dialect
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender, Calendar calendar, TemporalType precision, TimeZone jdbcTimeZone)
      Description copied from class: Dialect
      Append a datetime literal representing the given Calendar value to the given SqlAppender.
      Overrides:
      appendDateTimeLiteral in class Dialect
    • translateExtractField

      public String translateExtractField(TemporalUnit unit)
      Description copied from class: Dialect
      Return the name used to identify the given field as an argument to the extract() function, or of this dialect's equivalent function.

      This method does not need to handle TemporalUnit.NANOSECOND, TemporalUnit.NATIVE, TemporalUnit.OFFSET, TemporalUnit.DATE, TemporalUnit.TIME, TemporalUnit.WEEK_OF_YEAR, nor TemporalUnit.WEEK_OF_MONTH, which are already desugared by ExtractFunction.

      Overrides:
      translateExtractField in class Dialect
    • timestampaddPattern

      public String timestampaddPattern(TemporalUnit unit, TemporalType temporalType, IntervalType intervalType)
      Description copied from class: Dialect
      Obtain a pattern for the SQL equivalent to a timestampadd() function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.
      Overrides:
      timestampaddPattern in class Dialect
      Parameters:
      unit - The unit to add to the temporal
      temporalType - The type of the temporal
      intervalType - The type of interval to add or null if it's not a native interval
    • timestampdiffPattern

      public String timestampdiffPattern(TemporalUnit unit, TemporalType fromTemporalType, TemporalType toTemporalType)
      Description copied from class: Dialect
      Obtain a pattern for the SQL equivalent to a timestampdiff() function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.
      Overrides:
      timestampdiffPattern in class Dialect
      Parameters:
      unit - the first argument
      fromTemporalType - true if the first argument is a timestamp, false if a date
      toTemporalType - true if the second argument is
    • appendDatetimeFormat

      public void appendDatetimeFormat(SqlAppender appender, String format)
      Description copied from class: Dialect
      Translate the given datetime format string from the pattern language defined by Java's DateTimeFormatter to whatever pattern language is understood by the native datetime formatting function for this database (often the to_char() function).

      Since it's never possible to translate every pattern letter sequence understood by DateTimeFormatter, only the following subset of pattern letters is accepted by Hibernate:

      • G: era
      • y: year of era
      • Y: year of week-based year
      • M: month of year
      • w: week of week-based year (ISO week number)
      • W: week of month
      • E: day of week (name)
      • e: day of week (number)
      • d: day of month
      • D: day of year
      • a: AM/PM
      • H: hour of day (24-hour time)
      • h: hour of AM/PM (12-hour time)
      • m: minutes
      • s: seconds
      • z,Z,x: timezone offset

      In addition, punctuation characters and single-quoted literal strings are accepted.

      Appends a pattern accepted by the function that formats dates and times in this dialect to a SQL fragment that is being constructed.

      Overrides:
      appendDatetimeFormat in class Dialect
    • datetimeFormat

      public static Replacer datetimeFormat(String format)
    • trimPattern

      public String trimPattern(TrimSpec specification, boolean isWhitespace)
      Description copied from class: Dialect
      Obtain a pattern for the SQL equivalent to a trim() function call. The resulting pattern must contain a ?1 placeholder for the argument of type String and a ?2 placeholder for the trim character if isWhitespace was false.
      Overrides:
      trimPattern in class Dialect
      Parameters:
      specification - leading, trailing, or both
      isWhitespace - true if trimming whitespace, and the ?2 placeholder for the trim character should be omitted, false if the trim character is explicit and the ?2 placeholder must be included in the pattern
    • getTableExporter

      public Exporter<Table> getTableExporter()
      Description copied from class: Dialect
      Get an Exporter for Tables, usually StandardTableExporter.
      Overrides:
      getTableExporter in class Dialect
    • supportsColumnCheck

      public boolean supportsColumnCheck()
      Description copied from class: Dialect
      Does this dialect support column-level check constraints?
      Overrides:
      supportsColumnCheck in class Dialect
      Returns:
      True if column-level check constraints are supported; false otherwise.
    • getCreateIndexString

      public String getCreateIndexString(boolean unique)
      Description copied from class: Dialect
      The command used to create an index, usually create index or create unique index.
      Overrides:
      getCreateIndexString in class Dialect
      Parameters:
      unique - true if the index is a unique index
      Returns:
      The command used to create an index.
    • supportsUniqueConstraints

      public boolean supportsUniqueConstraints()
      Overrides:
      supportsUniqueConstraints in class Dialect
      Returns:
      True if database supports UNIQUE constraint definitions in the create table and alter table statements. If this is not supported, then Hibernate will create a unique index instead.
    • getUniqueDelegate

      public UniqueDelegate getUniqueDelegate()
      Description copied from class: Dialect
      Get the UniqueDelegate supported by this dialect
      Overrides:
      getUniqueDelegate in class Dialect
      Returns:
      The UniqueDelegate
    • getAddForeignKeyConstraintString

      public String getAddForeignKeyConstraintString(String constraintName, String[] foreignKey, String referencedTable, String[] primaryKey, boolean referencesPrimaryKey)
      Description copied from class: Dialect
      The syntax used to add a foreign key constraint to a table, with the referenced key columns explicitly specified.
      Overrides:
      getAddForeignKeyConstraintString in class Dialect
      Parameters:
      constraintName - The foreign key constraint name
      foreignKey - The names of the columns comprising the foreign key
      referencedTable - The table referenced by the foreign key
      primaryKey - The explicit columns in the referencedTable referenced by this foreign key.
      referencesPrimaryKey - if false, constraint should be explicit about which column names the constraint refers to
      Returns:
      the "add FK" fragment
    • supportsCircularCascadeDeleteConstraints

      public boolean supportsCircularCascadeDeleteConstraints()
      Description copied from class: Dialect
      Does this dialect support definition of cascade delete constraints which can cause circular chains?
      Overrides:
      supportsCircularCascadeDeleteConstraints in class Dialect
      Returns:
      True if circular cascade delete constraints are supported; false otherwise.
    • getColumnDefaultString

      public String getColumnDefaultString(String defaultValue)
      Description copied from class: Dialect
      Allows the dialect to format the default value for a column. The default implementation returns the given default value as-is.
      Overrides:
      getColumnDefaultString in class Dialect
      Parameters:
      defaultValue - the default value expression
      Returns:
      the formatted default value expression
    • requiresNotNullBeforeDefault

      public boolean requiresNotNullBeforeDefault()
      Description copied from class: Dialect
      Does this dialect require the not null constraint to precede the default or generated as clause? Spanner strictly requires not null to come before default.
      Overrides:
      requiresNotNullBeforeDefault in class Dialect
      Returns:
      true if not null should precede default
    • generatedAs

      public String generatedAs(String generatedAs)
      Description copied from class: Dialect
      The generated as clause, or similar, for generated column declarations in DDL statements.
      Overrides:
      generatedAs in class Dialect
      Parameters:
      generatedAs - a SQL expression used to generate the column value
      Returns:
      The generated as clause containing the given expression
    • supportsNotNullAfterGeneratedAs

      public boolean supportsNotNullAfterGeneratedAs()
      Description copied from class: Dialect
      Does this dialect allow an explicit not null constraint on a generated as column?
      Overrides:
      supportsNotNullAfterGeneratedAs in class Dialect
    • supportsNoColumnsInsert

      public boolean supportsNoColumnsInsert()
      Description copied from class: Dialect
      Is the INSERT statement is allowed to contain no columns?
      Overrides:
      supportsNoColumnsInsert in class Dialect
      Returns:
      if this dialect supports no-column INSERT.
    • getIdentityColumnSupport

      public IdentityColumnSupport getIdentityColumnSupport()
      Description copied from class: Dialect
      Get the appropriate IdentityColumnSupport for this dialect.
      Overrides:
      getIdentityColumnSupport in class Dialect
      Returns:
      the IdentityColumnSupport
    • getSequenceSupport

      public SequenceSupport getSequenceSupport()
      Description copied from class: Dialect
      Get the appropriate SequenceSupport for this dialect.
      Overrides:
      getSequenceSupport in class Dialect
    • getQuerySequencesString

      public String getQuerySequencesString()
      Description copied from class: Dialect
      Get the select command used retrieve the names of all sequences.
      Overrides:
      getQuerySequencesString in class Dialect
      Returns:
      The select command; or null if sequences are not supported.
    • getNativeValueGenerationStrategy

      public GenerationType getNativeValueGenerationStrategy()
      Description copied from class: Dialect
      The native type of generation supported by this Dialect.
      Overrides:
      getNativeValueGenerationStrategy in class Dialect
      See Also:
    • canCreateSchema

      public boolean canCreateSchema()
      Description copied from class: Dialect
      Does this dialect support creating and dropping schema?
      Overrides:
      canCreateSchema in class Dialect
      Returns:
      True if the dialect supports schema creation; false otherwise.
    • getCreateSchemaCommand

      public String[] getCreateSchemaCommand(String schemaName)
      Description copied from class: Dialect
      Get the SQL command used to create the named schema.
      Overrides:
      getCreateSchemaCommand in class Dialect
      Parameters:
      schemaName - The name of the schema to be created.
      Returns:
      The creation commands
    • getDropSchemaCommand

      public String[] getDropSchemaCommand(String schemaName)
      Description copied from class: Dialect
      Get the SQL command used to drop the named schema.
      Overrides:
      getDropSchemaCommand in class Dialect
      Parameters:
      schemaName - The name of the schema to be dropped.
      Returns:
      The drop commands
    • getCurrentSchemaCommand

      public String getCurrentSchemaCommand()
      Description copied from class: Dialect
      Get the SQL command used to retrieve the current schema name.

      Works in conjunction with Dialect.getSchemaNameResolver(), unless the resulting SchemaNameResolver does not need this information. For example, a custom implementation might make use of the Java 1.7 Connection.getSchema() method.

      Overrides:
      getCurrentSchemaCommand in class Dialect
      Returns:
      The current schema retrieval SQL
    • getSchemaNameResolver

      public SchemaNameResolver getSchemaNameResolver()
      Description copied from class: Dialect
      Get the strategy for determining the schema name from a JDBC Connection, usually DefaultSchemaNameResolver.
      Overrides:
      getSchemaNameResolver in class Dialect
      Returns:
      The schema name resolver strategy
    • qualifyIndexName

      public boolean qualifyIndexName()
      Description copied from class: Dialect
      Do we need to qualify index names with the schema name?
      Overrides:
      qualifyIndexName in class Dialect
      Returns:
      true if we do
    • getAddPrimaryKeyConstraintString

      public String getAddPrimaryKeyConstraintString(String constraintName)
      Description copied from class: Dialect
      The syntax used to add a primary key constraint to a table.
      Overrides:
      getAddPrimaryKeyConstraintString in class Dialect
      Parameters:
      constraintName - The name of the PK constraint.
    • getLockingSupport

      public LockingSupport getLockingSupport()
      Description copied from class: Dialect
      Access to various details and operations related to this Dialect's support for pessimistic locking.
      Overrides:
      getLockingSupport in class Dialect
    • getLockingClauseStrategy

      public LockingClauseStrategy getLockingClauseStrategy(QuerySpec querySpec, LockOptions lockOptions)
      Description copied from class: Dialect
      Strategy for handling locking clause as part of SqlAstTranslator.
      Overrides:
      getLockingClauseStrategy in class Dialect
    • getForUpdateString

      public String getForUpdateString(LockOptions lockOptions)
      Description copied from class: Dialect
      Given a set of LockOptions (lock level, timeout), determine the appropriate for update fragment to use to obtain the lock.
      Overrides:
      getForUpdateString in class Dialect
      Parameters:
      lockOptions - contains the lock mode to apply.
      Returns:
      The appropriate for update fragment.
    • getWriteLockString

      public String getWriteLockString(int timeout)
      Description copied from class: Dialect
      Get the string to append to SELECT statements to acquire pessimistic WRITE locks for this dialect.

      Location of the returned string is treated the same as Dialect.getForUpdateString().

      Overrides:
      getWriteLockString in class Dialect
      Parameters:
      timeout - How long, in milliseconds, the database should wait to acquire the lock. See Timeouts for some "magic values".
      Returns:
      The appropriate LOCK clause string.
    • getWriteLockString

      public String getWriteLockString(Timeout timeout)
      Description copied from class: Dialect
      Get the string to append to SELECT statements to acquire pessimistic WRITE locks for this dialect.
      Overrides:
      getWriteLockString in class Dialect
      Parameters:
      timeout - How long the database should wait to acquire the lock. See Timeouts for some "magic values".
      Returns:
      The appropriate lock clause.
    • getReadLockString

      public String getReadLockString(int timeout)
      Description copied from class: Dialect
      Get the string to append to SELECT statements to acquire READ locks for this dialect.

      Location of the returned string is treated the same as Dialect.getForUpdateString().

      Overrides:
      getReadLockString in class Dialect
      Parameters:
      timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
      Returns:
      The appropriate LOCK clause string.
    • getReadLockString

      public String getReadLockString(Timeout timeout)
      Description copied from class: Dialect
      Get the string to append to SELECT statements to acquire READ locks for this dialect.
      Overrides:
      getReadLockString in class Dialect
      Parameters:
      timeout - How long the database should wait to acquire the lock. See Timeouts for some "magic values".
      Returns:
      The appropriate LOCK clause string.
    • getForUpdateNowaitString

      public String getForUpdateNowaitString()
      Description copied from class: Dialect
      Retrieves the FOR UPDATE NOWAIT syntax specific to this dialect.
      Overrides:
      getForUpdateNowaitString in class Dialect
      Returns:
      The appropriate FOR UPDATE NOWAIT clause string.
    • getForUpdateNowaitString

      public String getForUpdateNowaitString(String aliases)
      Description copied from class: Dialect
      Get the FOR UPDATE OF column_list NOWAIT fragment appropriate for this dialect, given the aliases of the columns to be write locked.
      Overrides:
      getForUpdateNowaitString in class Dialect
      Parameters:
      aliases - The columns to be write locked.
      Returns:
      The appropriate FOR UPDATE OF colunm_list NOWAIT clause string.
    • getForUpdateSkipLockedString

      public String getForUpdateSkipLockedString()
      Description copied from class: Dialect
      Retrieves the FOR UPDATE SKIP LOCKED syntax specific to this dialect.
      Overrides:
      getForUpdateSkipLockedString in class Dialect
      Returns:
      The appropriate FOR UPDATE SKIP LOCKED clause string.
    • getForUpdateSkipLockedString

      public String getForUpdateSkipLockedString(String aliases)
      Description copied from class: Dialect
      Get the FOR UPDATE OF column_list SKIP LOCKED fragment appropriate for this dialect, given the aliases of the columns to be write-locked.
      Overrides:
      getForUpdateSkipLockedString in class Dialect
      Parameters:
      aliases - The columns to be write-locked.
      Returns:
      The appropriate FOR UPDATE colunm_list SKIP LOCKED clause string.
    • supportsOffsetInSubquery

      public boolean supportsOffsetInSubquery()
      Description copied from class: Dialect
      Does this dialect support offset in subqueries?

      For example:

      select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1 offset 1)
      
      Overrides:
      supportsOffsetInSubquery in class Dialect
      Returns:
      true if it does
    • openQuote

      public char openQuote()
      Description copied from class: Dialect
      The character specific to this dialect used to begin a quoted identifier.
      Overrides:
      openQuote in class Dialect
      Returns:
      The dialect-specific open quote character.
    • closeQuote

      public char closeQuote()
      Description copied from class: Dialect
      The character specific to this dialect used to close a quoted identifier.
      Overrides:
      closeQuote in class Dialect
      Returns:
      The dialect-specific close quote character.
    • getLimitHandler

      public LimitHandler getLimitHandler()
      Description copied from class: Dialect
      Obtain a LimitHandler that implements pagination support for Query.setMaxResults(int) and Query.setFirstResult(int).
      Overrides:
      getLimitHandler in class Dialect
    • supportsRowValueConstructorSyntax

      public boolean supportsRowValueConstructorSyntax()
      Description copied from class: Dialect
      Is this dialect known to support what ANSI SQL calls the row value constructor syntax, sometimes called "tuples".

      That is, does it support comparisons like:

      (FIRST_NAME, LAST_NAME) = ('Steve', 'Ebersole')
      Overrides:
      supportsRowValueConstructorSyntax in class Dialect
      Returns:
      True if this SQL dialect is known to support the use of row value constructors as operands of the equality operator; false otherwise.
    • supportsRowValueConstructorSyntaxInQuantifiedPredicates

      public boolean supportsRowValueConstructorSyntaxInQuantifiedPredicates()
      Description copied from class: Dialect
      Is this dialect known to support what ANSI SQL calls the row value constructor syntax with quantified predicates.

      That is, does it support comparisons like:

      (FIRST_NAME, LAST_NAME) = ALL (select ...)
      Overrides:
      supportsRowValueConstructorSyntaxInQuantifiedPredicates in class Dialect
      Returns:
      True if this SQL dialect is known to support the use of row value constructors as operands with quantified predicates; false otherwise.
    • supportsRowValueConstructorSyntaxInInList

      public boolean supportsRowValueConstructorSyntaxInInList()
      Description copied from class: Dialect
      If the dialect supports row value constructors, does it allow them in IN lists?

      For example:

      (FIRST_NAME, LAST_NAME) IN ((?, ?), (?, ?))
      Overrides:
      supportsRowValueConstructorSyntaxInInList in class Dialect
      Returns:
      True if this SQL dialect is known to support the use of row value constructors in IN lists; false otherwise.
    • getDmlTargetColumnQualifierSupport

      public DmlTargetColumnQualifierSupport getDmlTargetColumnQualifierSupport()
      Description copied from class: Dialect
      Get the minimum DmlTargetColumnQualifierSupport required by this dialect.
      Overrides:
      getDmlTargetColumnQualifierSupport in class Dialect
      Returns:
      the column qualifier support required by this dialect
    • buildIdentifierHelper

      public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, DatabaseMetaData metadata) throws SQLException
      Description copied from class: Dialect
      The IdentifierHelper indicated by this dialect for handling identifier conversions. Returning null is allowed and indicates that Hibernate should fall back to building a "standard" helper. In the fallback path, any changes made to the IdentifierHelperBuilder during this call will still be incorporated into the built IdentifierHelper.

      The incoming builder will have the following set:

      By default, Hibernate will do the following:

      Overrides:
      buildIdentifierHelper in class Dialect
      Parameters:
      builder - A partially-configured IdentifierHelperBuilder.
      metadata - Access to the metadata returned from the driver if needed and if available. WARNING: it may be null.
      Returns:
      The IdentifierHelper instance to use, or null to indicate Hibernate should use its fallback path
      Throws:
      SQLException - Accessing the DatabaseMetaData can throw it. Just rethrow and Hibernate will handle it.
      See Also:
    • defaultScrollMode

      public ScrollMode defaultScrollMode()
      Description copied from class: Dialect
      A default ScrollMode to be used by Query.scroll().
      Overrides:
      defaultScrollMode in class Dialect
      Returns:
      the default ScrollMode to use.
    • getTruncateTableStatement

      public String getTruncateTableStatement(String tableName)
      Description copied from class: Dialect
      A SQL statement that truncates the given table.
      Overrides:
      getTruncateTableStatement in class Dialect
      Parameters:
      tableName - the name of the table
    • getSetOperatorSqlString

      public String getSetOperatorSqlString(SetOperator operator)
      Description copied from class: Dialect
      Get the SQL string representation for a specific set operator (UNION, INTERSECT, EXCEPT).

      The default implementation delegates to SetOperator.sqlString(). Dialects like Cloud Spanner that require explicit 'DISTINCT' keywords can override this.

      Overrides:
      getSetOperatorSqlString in class Dialect
      Parameters:
      operator - The set operator
      Returns:
      The SQL fragment (e.g., "union", "union all", "union distinct")
    • getDual

      public String getDual()
      Description copied from class: Dialect
      Returns a table expression that has one row.
      Overrides:
      getDual in class Dialect
      Returns:
      the SQL equivalent to Oracle's dual.
    • getFromDualForSelectOnly

      public String getFromDualForSelectOnly()
      Overrides:
      getFromDualForSelectOnly in class Dialect
    • supportsLateral

      public boolean supportsLateral()
      Description copied from class: Dialect
      Does this dialect support the SQL lateral keyword or a proprietary alternative?
      Overrides:
      supportsLateral in class Dialect
      Returns:
      true if the underlying database supports lateral, false otherwise. The default is false.
    • supportsLobValueChangePropagation

      public boolean supportsLobValueChangePropagation()
      Description copied from class: Dialect
      Does the dialect support propagating changes to LOB values back to the database? Talking about mutating the internal value of the locator, as opposed to supplying a new locator instance.
      Overrides:
      supportsLobValueChangePropagation in class Dialect
      Returns:
      True if the changes are propagated back to the database; false otherwise.
    • getNullOrdering

      public NullOrdering getNullOrdering()
      Description copied from class: Dialect
      Returns the default ordering of null.
      Overrides:
      getNullOrdering in class Dialect
    • supportsNullPrecedence

      public boolean supportsNullPrecedence()
      Description copied from class: Dialect
      Does this dialect support nulls first and nulls last?
      Overrides:
      supportsNullPrecedence in class Dialect
    • supportsWithClauseInSubquery

      public boolean supportsWithClauseInSubquery()
      Description copied from class: Dialect
      Whether the SQL with clause is supported within a subquery.
      Overrides:
      supportsWithClauseInSubquery in class Dialect
    • supportsCteHeaderColumnList

      public boolean supportsCteHeaderColumnList()
      Description copied from class: Dialect
      Does this dialect support defining the column list in the CTE header?

      Standard syntax: WITH cte (col1, col2) AS ...

      If false, Hibernate will generate: WITH cte AS (SELECT ... AS col1, ... AS col2)

      Overrides:
      supportsCteHeaderColumnList in class Dialect
      Returns:
      true if the dialect supports the column list in the CTE header; false otherwise.
    • supportsTupleDistinctCounts

      public boolean supportsTupleDistinctCounts()
      Description copied from class: Dialect
      Does this dialect support count(distinct a,b)?
      Overrides:
      supportsTupleDistinctCounts in class Dialect
      Returns:
      True if the database supports counting distinct tuples; false otherwise.
    • buildSQLExceptionConversionDelegate

      public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate()
      Description copied from class: Dialect
      An instance of SQLExceptionConversionDelegate for interpreting dialect-specific error or SQLState codes.

      If this method is overridden to return a non-null value, the default SQLExceptionConverter will use the returned SQLExceptionConversionDelegate in addition to the following standard delegates:

      1. a "static" delegate based on the JDBC4-defined SQLException hierarchy, and
      2. a delegate that interprets SQLState codes as either X/Open or SQL-2003 codes, depending on what is reported by the JDBC driver.

      It is strongly recommended that every Dialect implementation override this method, since interpretation of a SQL error is much more accurate when based on the vendor-specific error code, rather than on the SQLState.

      Overrides:
      buildSQLExceptionConversionDelegate in class Dialect
      Returns:
      The SQLExceptionConversionDelegate for this dialect