Class SpannerDialect

    • Constructor Detail

      • SpannerDialect

        public SpannerDialect()
    • Method Detail

      • 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()
      • 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)
        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
      • 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.
      • 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
      • 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 sequences 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)
      • 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
      • dropConstraints

        public boolean dropConstraints()
        Description copied from class: Dialect
        Do we need to drop constraints before dropping tables in this dialect?
        Overrides:
        dropConstraints in class Dialect
        Returns:
        True if constraints must be dropped prior to dropping the table; false otherwise.
      • 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
      • getDropForeignKeyString

        public String getDropForeignKeyString()
        Description copied from class: Dialect
        The subcommand of the alter table command used to drop a foreign key constraint, usually drop constraint.
        Overrides:
        getDropForeignKeyString in class Dialect
      • 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
      • getAddForeignKeyConstraintString

        public String getAddForeignKeyConstraintString​(String constraintName,
                                                       String foreignKeyDefinition)
        Description copied from class: Dialect
        The syntax used to add a foreign key constraint to a table, given the definition of the foreign key as a string.
        Overrides:
        getAddForeignKeyConstraintString in class Dialect
        Parameters:
        constraintName - The foreign key constraint name
        foreignKeyDefinition - The whole definition of the foreign key as a fragment
      • 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.
        Returns:
        The "add PK" fragment
      • supportsLockTimeouts

        public boolean supportsLockTimeouts()
        Description copied from class: Dialect
        Does this dialect support specifying timeouts when requesting locks.
        Overrides:
        supportsLockTimeouts in class Dialect
        Returns:
        True is this dialect supports specifying lock timeouts.
      • getLockingStrategy

        public LockingStrategy getLockingStrategy​(Lockable lockable,
                                                  LockMode lockMode)
        Description copied from class: Dialect
        A LockingStrategy which is able to acquire a database-level lock with the specified level.
        Overrides:
        getLockingStrategy in class Dialect
        Parameters:
        lockable - The persister for the entity to be locked.
        lockMode - The type of lock to be acquired.
        Returns:
        The appropriate locking strategy.
      • 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.
      • getForUpdateString

        public String getForUpdateString()
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire pessimistic UPGRADE locks for this dialect.
        Overrides:
        getForUpdateString in class Dialect
        Returns:
        The appropriate FOR UPDATE clause string.
      • getForUpdateString

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

        public String getForUpdateString​(String aliases,
                                         LockOptions lockOptions)
        Description copied from class: Dialect
        Get the FOR UPDATE OF or FOR SHARE OF fragment appropriate for this dialect, given the aliases of the columns to be locked.
        Overrides:
        getForUpdateString in class Dialect
        Parameters:
        aliases - The columns to be locked.
        lockOptions - the lock options to apply
        Returns:
        The appropriate FOR UPDATE OF column_list clause string.
      • 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 - in milliseconds, -1 for indefinite wait and 0 for no wait.
        Returns:
        The appropriate LOCK clause string.
      • getWriteLockString

        public String getWriteLockString​(String aliases,
                                         int timeout)
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire WRITE locks for this dialect, given the aliases of the columns to be write locked.

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

        Overrides:
        getWriteLockString in class Dialect
        Parameters:
        aliases - The columns to be read locked.
        timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
        Returns:
        The appropriate LOCK clause string.
      • 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​(String aliases,
                                        int timeout)
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire READ locks for this dialect, given the aliases of the columns to be read locked.

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

        Overrides:
        getReadLockString in class Dialect
        Parameters:
        aliases - The columns to be read locked.
        timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
        Returns:
        The appropriate LOCK clause string.
      • supportsOuterJoinForUpdate

        public boolean supportsOuterJoinForUpdate()
        Description copied from class: Dialect
        Does this dialect support FOR UPDATE in conjunction with outer-joined rows?
        Overrides:
        supportsOuterJoinForUpdate in class Dialect
        Returns:
        True if outer-joined rows can be locked via FOR UPDATE.
      • 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.
      • applyLocksToSql

        public String applyLocksToSql​(String sql,
                                      LockOptions aliasedLockOptions,
                                      Map<String,​String[]> keyColumnNames)
        Description copied from class: Dialect
        Modifies the given SQL, applying the appropriate updates for the specified lock modes and key columns.

        This allows emulation of SELECT FOR UPDATE for dialects which do not support the standard syntax.

        Overrides:
        applyLocksToSql in class Dialect
        Parameters:
        sql - the SQL string to modify
        aliasedLockOptions - lock options indexed by aliased table names.
        keyColumnNames - a map of key columns indexed by aliased table names.
        Returns:
        the modified SQL string.
      • 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.
      • supportsCascadeDelete

        public boolean supportsCascadeDelete()
        Description copied from class: Dialect
        Does this dialect support on delete actions in foreign key definitions?
        Overrides:
        supportsCascadeDelete in class Dialect
        Returns:
        true if the dialect does support the on delete clause.
      • 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.