Class SingleStoreDialect

  • All Implemented Interfaces:
    org.hibernate.boot.model.FunctionContributor, org.hibernate.boot.model.TypeContributor, org.hibernate.exception.spi.ConversionContext

    public class SingleStoreDialect
    extends org.hibernate.dialect.Dialect
    An SQL dialect for SingleStore.

    The following are some of the key aspects and limitations of SingleStore that may affect Hibernate functionality:

    • SingleStore supports two table types: COLUMNSTORE and ROWSTORE. Explicit table type can be configured by setting 'hibernate.dialect.singlestore.table_type' property. Refer to SingleStoreDialect.SingleStoreTableType for details.
    • SingleStore has a random order for SELECT queries, which may impact the predictability of query results.
    • SingleStore does not support foreign keys and referential integrity, which could affect the design of your database schema.
    • The SingleStore dialect ignores unique key constraints. See SingleStoreDialect.DoNothingUniqueDelegate for more information.
    • SingleStore does not support zoned timestamps, which might require adjustments to how you handle time-related data.
    • Updating primary keys in SingleStore is restricted because every primary key is also a unique key and shard key.
    • SingleStore does not support the ALL/ANY clause in SQL queries.
    • Sub-selects with references to outer table fields are not supported in SingleStore.
    • SingleStore does not support the 'FOR UPDATE' clause for table locking with distributed joins. It's disabled by default, can be enabled by setting 'hibernate.dialect.singlestore.for_update_lock_enabled' property SINGLE_STORE_FOR_UPDATE_LOCK_ENABLED.
    • The LIKE clause in SingleStore is case-insensitive, which might differ from other SQL implementations.
    • Field Detail

      • SINGLE_STORE_TABLE_TYPE

        public static final String SINGLE_STORE_TABLE_TYPE
        Specifies SingleStore explicit table type.
        See Also:
        Constant Field Values
        Default Value:
        null
      • SINGLE_STORE_FOR_UPDATE_LOCK_ENABLED

        public static final String SINGLE_STORE_FOR_UPDATE_LOCK_ENABLED
        Specifies SingleStore FOR UPDATE clause lock enable.
        See Also:
        Constant Field Values
        Default Value:
        false
    • Constructor Detail

      • SingleStoreDialect

        public SingleStoreDialect()
      • SingleStoreDialect

        public SingleStoreDialect​(org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo info)
    • Method Detail

      • getMinimumSupportedVersion

        protected org.hibernate.dialect.DatabaseVersion getMinimumSupportedVersion()
        Overrides:
        getMinimumSupportedVersion in class org.hibernate.dialect.Dialect
      • useMaterializedLobWhenCapacityExceeded

        public boolean useMaterializedLobWhenCapacityExceeded()
        Overrides:
        useMaterializedLobWhenCapacityExceeded in class org.hibernate.dialect.Dialect
      • extractPattern

        public String extractPattern​(org.hibernate.query.sqm.TemporalUnit unit)
        Overrides:
        extractPattern in class org.hibernate.dialect.Dialect
      • timestampaddPattern

        public String timestampaddPattern​(org.hibernate.query.sqm.TemporalUnit unit,
                                          TemporalType temporalType,
                                          org.hibernate.query.sqm.IntervalType intervalType)
        Overrides:
        timestampaddPattern in class org.hibernate.dialect.Dialect
      • timestampdiffPattern

        public String timestampdiffPattern​(org.hibernate.query.sqm.TemporalUnit unit,
                                           TemporalType fromTemporalType,
                                           TemporalType toTemporalType)
        Overrides:
        timestampdiffPattern in class org.hibernate.dialect.Dialect
      • appendDateTimeLiteral

        public void appendDateTimeLiteral​(org.hibernate.sql.ast.spi.SqlAppender appender,
                                          TemporalAccessor temporalAccessor,
                                          TemporalType precision,
                                          TimeZone jdbcTimeZone)
        Overrides:
        appendDateTimeLiteral in class org.hibernate.dialect.Dialect
      • appendDateTimeLiteral

        public void appendDateTimeLiteral​(org.hibernate.sql.ast.spi.SqlAppender appender,
                                          Date date,
                                          TemporalType precision,
                                          TimeZone jdbcTimeZone)
        Overrides:
        appendDateTimeLiteral in class org.hibernate.dialect.Dialect
      • appendDateTimeLiteral

        public void appendDateTimeLiteral​(org.hibernate.sql.ast.spi.SqlAppender appender,
                                          Calendar calendar,
                                          TemporalType precision,
                                          TimeZone jdbcTimeZone)
        Overrides:
        appendDateTimeLiteral in class org.hibernate.dialect.Dialect
      • getGroupBySelectItemReferenceStrategy

        public org.hibernate.dialect.SelectItemReferenceStrategy getGroupBySelectItemReferenceStrategy()
        Overrides:
        getGroupBySelectItemReferenceStrategy in class org.hibernate.dialect.Dialect
      • getEnumTypeDeclaration

        public String getEnumTypeDeclaration​(String name,
                                             String[] values)
        Overrides:
        getEnumTypeDeclaration in class org.hibernate.dialect.Dialect
      • getQueryHintString

        public String getQueryHintString​(String query,
                                         String hints)
        Overrides:
        getQueryHintString in class org.hibernate.dialect.Dialect
      • getViolatedConstraintNameExtractor

        public org.hibernate.exception.spi.ViolatedConstraintNameExtractor getViolatedConstraintNameExtractor()
        Specified by:
        getViolatedConstraintNameExtractor in interface org.hibernate.exception.spi.ConversionContext
        Overrides:
        getViolatedConstraintNameExtractor in class org.hibernate.dialect.Dialect
      • qualifyIndexName

        public boolean qualifyIndexName()
        Overrides:
        qualifyIndexName in class org.hibernate.dialect.Dialect
      • registerColumnTypes

        protected void registerColumnTypes​(org.hibernate.boot.model.TypeContributions typeContributions,
                                           org.hibernate.service.ServiceRegistry serviceRegistry)
        Overrides:
        registerColumnTypes in class org.hibernate.dialect.Dialect
      • initializeFunctionRegistry

        public void initializeFunctionRegistry​(org.hibernate.boot.model.FunctionContributions functionContributions)
        Overrides:
        initializeFunctionRegistry in class org.hibernate.dialect.Dialect
      • getCreateTableString

        public String getCreateTableString()
        Overrides:
        getCreateTableString in class org.hibernate.dialect.Dialect
      • contributeTypes

        public void contributeTypes​(org.hibernate.boot.model.TypeContributions typeContributions,
                                    org.hibernate.service.ServiceRegistry serviceRegistry)
        Overrides:
        contributeTypes in class org.hibernate.dialect.Dialect
      • resolveSqlTypeDescriptor

        public org.hibernate.type.descriptor.jdbc.JdbcType resolveSqlTypeDescriptor​(String columnTypeName,
                                                                                    int jdbcTypeCode,
                                                                                    int precision,
                                                                                    int scale,
                                                                                    org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry jdbcTypeRegistry)
        Overrides:
        resolveSqlTypeDescriptor in class org.hibernate.dialect.Dialect
      • columnType

        protected String columnType​(int sqlTypeCode)
        Overrides:
        columnType in class org.hibernate.dialect.Dialect
      • castPattern

        public String castPattern​(org.hibernate.query.sqm.CastType from,
                                  org.hibernate.query.sqm.CastType to)
        Overrides:
        castPattern in class org.hibernate.dialect.Dialect
      • getPreferredSqlTypeCodeForBoolean

        public int getPreferredSqlTypeCodeForBoolean()
        Overrides:
        getPreferredSqlTypeCodeForBoolean in class org.hibernate.dialect.Dialect
      • castType

        protected String castType​(int sqlTypeCode)
        Overrides:
        castType in class org.hibernate.dialect.Dialect
      • getSizeStrategy

        public org.hibernate.dialect.Dialect.SizeStrategy getSizeStrategy()
        Overrides:
        getSizeStrategy in class org.hibernate.dialect.Dialect
      • getFloatPrecision

        public int getFloatPrecision()
        Overrides:
        getFloatPrecision in class org.hibernate.dialect.Dialect
      • currentTimestamp

        public String currentTimestamp()
        Overrides:
        currentTimestamp in class org.hibernate.dialect.Dialect
      • getFractionalSecondPrecisionInNanos

        public long getFractionalSecondPrecisionInNanos()
        Overrides:
        getFractionalSecondPrecisionInNanos in class org.hibernate.dialect.Dialect
      • getDefaultLobLength

        public long getDefaultLobLength()
        Overrides:
        getDefaultLobLength in class org.hibernate.dialect.Dialect
      • resolveSqlTypeLength

        public int resolveSqlTypeLength​(String columnTypeName,
                                        int jdbcTypeCode,
                                        int precision,
                                        int scale,
                                        int displaySize)
        Overrides:
        resolveSqlTypeLength in class org.hibernate.dialect.Dialect
      • getSqlAstTranslatorFactory

        public org.hibernate.sql.ast.SqlAstTranslatorFactory getSqlAstTranslatorFactory()
        Overrides:
        getSqlAstTranslatorFactory in class org.hibernate.dialect.Dialect
      • getSchemaNameResolver

        public org.hibernate.engine.jdbc.env.spi.SchemaNameResolver getSchemaNameResolver()
        Overrides:
        getSchemaNameResolver in class org.hibernate.dialect.Dialect
      • getInExpressionCountLimit

        public int getInExpressionCountLimit()
        Overrides:
        getInExpressionCountLimit in class org.hibernate.dialect.Dialect
      • getMaxVarbinaryLength

        public int getMaxVarbinaryLength()
        The biggest size value that can be supplied as argument
        Overrides:
        getMaxVarbinaryLength in class org.hibernate.dialect.Dialect
      • getMaxVarcharLength

        public int getMaxVarcharLength()
        Overrides:
        getMaxVarcharLength in class org.hibernate.dialect.Dialect
      • getNullColumnString

        public String getNullColumnString​(String columnType)
        Overrides:
        getNullColumnString in class org.hibernate.dialect.Dialect
      • supportsColumnCheck

        public boolean supportsColumnCheck()
        Feature 'Check constraints' is not supported by SingleStore.
        Overrides:
        supportsColumnCheck in class org.hibernate.dialect.Dialect
      • supportsTableCheck

        public boolean supportsTableCheck()
        Feature 'Check constraints' is not supported by SingleStore.
        Overrides:
        supportsTableCheck in class org.hibernate.dialect.Dialect
      • getDefaultDecimalPrecision

        public int getDefaultDecimalPrecision()
        Overrides:
        getDefaultDecimalPrecision in class org.hibernate.dialect.Dialect
      • doesRoundTemporalOnOverflow

        public boolean doesRoundTemporalOnOverflow()
        Overrides:
        doesRoundTemporalOnOverflow in class org.hibernate.dialect.Dialect
      • supportsWindowFunctions

        public boolean supportsWindowFunctions()
        Overrides:
        supportsWindowFunctions in class org.hibernate.dialect.Dialect
      • supportsRecursiveCTE

        public boolean supportsRecursiveCTE()
        Overrides:
        supportsRecursiveCTE in class org.hibernate.dialect.Dialect
      • dropConstraints

        public boolean dropConstraints()
        Overrides:
        dropConstraints in class org.hibernate.dialect.Dialect
      • appendLiteral

        public void appendLiteral​(org.hibernate.sql.ast.spi.SqlAppender appender,
                                  String literal)
        Overrides:
        appendLiteral in class org.hibernate.dialect.Dialect
      • appendDatetimeFormat

        public void appendDatetimeFormat​(org.hibernate.sql.ast.spi.SqlAppender appender,
                                         String format)
        Overrides:
        appendDatetimeFormat in class org.hibernate.dialect.Dialect
      • datetimeFormat

        public static org.hibernate.dialect.Replacer datetimeFormat​(String format)
      • getDropForeignKeyString

        public String getDropForeignKeyString()
        Overrides:
        getDropForeignKeyString in class org.hibernate.dialect.Dialect
      • getDropUniqueKeyString

        public String getDropUniqueKeyString()
        Overrides:
        getDropUniqueKeyString in class org.hibernate.dialect.Dialect
      • getAlterColumnTypeString

        public String getAlterColumnTypeString​(String columnName,
                                               String columnType,
                                               String columnDefinition)
        Overrides:
        getAlterColumnTypeString in class org.hibernate.dialect.Dialect
      • supportsAlterColumnType

        public boolean supportsAlterColumnType()
        SingleStore doesn't support modifying column type on columnstore tables. It only supports modifying column type on rowstore table.
        Overrides:
        supportsAlterColumnType in class org.hibernate.dialect.Dialect
      • getLimitHandler

        public org.hibernate.dialect.pagination.LimitHandler getLimitHandler()
        Overrides:
        getLimitHandler in class org.hibernate.dialect.Dialect
      • closeQuote

        public char closeQuote()
        Overrides:
        closeQuote in class org.hibernate.dialect.Dialect
      • openQuote

        public char openQuote()
        Overrides:
        openQuote in class org.hibernate.dialect.Dialect
      • canCreateCatalog

        public boolean canCreateCatalog()
        Overrides:
        canCreateCatalog in class org.hibernate.dialect.Dialect
      • getCreateCatalogCommand

        public String[] getCreateCatalogCommand​(String catalogName)
        Overrides:
        getCreateCatalogCommand in class org.hibernate.dialect.Dialect
      • getDropCatalogCommand

        public String[] getDropCatalogCommand​(String catalogName)
        Overrides:
        getDropCatalogCommand in class org.hibernate.dialect.Dialect
      • canCreateSchema

        public boolean canCreateSchema()
        Overrides:
        canCreateSchema in class org.hibernate.dialect.Dialect
      • getCreateSchemaCommand

        public String[] getCreateSchemaCommand​(String schemaName)
        Overrides:
        getCreateSchemaCommand in class org.hibernate.dialect.Dialect
      • getDropSchemaCommand

        public String[] getDropSchemaCommand​(String schemaName)
        Overrides:
        getDropSchemaCommand in class org.hibernate.dialect.Dialect
      • supportsIfExistsBeforeTableName

        public boolean supportsIfExistsBeforeTableName()
        Overrides:
        supportsIfExistsBeforeTableName in class org.hibernate.dialect.Dialect
      • getSelectGUIDString

        public String getSelectGUIDString()
        Overrides:
        getSelectGUIDString in class org.hibernate.dialect.Dialect
      • supportsCommentOn

        public boolean supportsCommentOn()
        Overrides:
        supportsCommentOn in class org.hibernate.dialect.Dialect
      • getTableComment

        public String getTableComment​(String comment)
        Overrides:
        getTableComment in class org.hibernate.dialect.Dialect
      • getColumnComment

        public String getColumnComment​(String comment)
        Overrides:
        getColumnComment in class org.hibernate.dialect.Dialect
      • getNullOrdering

        public org.hibernate.dialect.NullOrdering getNullOrdering()
        Overrides:
        getNullOrdering in class org.hibernate.dialect.Dialect
      • getFallbackSqmMutationStrategy

        public org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategy getFallbackSqmMutationStrategy​(org.hibernate.metamodel.mapping.EntityMappingType rootEntityDescriptor,
                                                                                                                 org.hibernate.metamodel.spi.RuntimeModelCreationContext runtimeModelCreationContext)
        Overrides:
        getFallbackSqmMutationStrategy in class org.hibernate.dialect.Dialect
      • getFallbackSqmInsertStrategy

        public org.hibernate.query.sqm.mutation.spi.SqmMultiTableInsertStrategy getFallbackSqmInsertStrategy​(org.hibernate.metamodel.mapping.EntityMappingType rootEntityDescriptor,
                                                                                                             org.hibernate.metamodel.spi.RuntimeModelCreationContext runtimeModelCreationContext)
        Overrides:
        getFallbackSqmInsertStrategy in class org.hibernate.dialect.Dialect
      • getSupportedTemporaryTableKind

        public org.hibernate.dialect.temptable.TemporaryTableKind getSupportedTemporaryTableKind()
        Overrides:
        getSupportedTemporaryTableKind in class org.hibernate.dialect.Dialect
      • getTemporaryTableCreateCommand

        public String getTemporaryTableCreateCommand()
        Overrides:
        getTemporaryTableCreateCommand in class org.hibernate.dialect.Dialect
      • getTemporaryTableDropCommand

        public String getTemporaryTableDropCommand()
        Overrides:
        getTemporaryTableDropCommand in class org.hibernate.dialect.Dialect
      • getTemporaryTableAfterUseAction

        public org.hibernate.query.sqm.mutation.internal.temptable.AfterUseAction getTemporaryTableAfterUseAction()
        Overrides:
        getTemporaryTableAfterUseAction in class org.hibernate.dialect.Dialect
      • getTemporaryTableBeforeUseAction

        public org.hibernate.query.sqm.mutation.internal.temptable.BeforeUseAction getTemporaryTableBeforeUseAction()
        Overrides:
        getTemporaryTableBeforeUseAction in class org.hibernate.dialect.Dialect
      • getMaxAliasLength

        public int getMaxAliasLength()
        Overrides:
        getMaxAliasLength in class org.hibernate.dialect.Dialect
      • getMaxIdentifierLength

        public int getMaxIdentifierLength()
        Overrides:
        getMaxIdentifierLength in class org.hibernate.dialect.Dialect
      • supportsIsTrue

        public boolean supportsIsTrue()
        Overrides:
        supportsIsTrue in class org.hibernate.dialect.Dialect
      • supportsCurrentTimestampSelection

        public boolean supportsCurrentTimestampSelection()
        Overrides:
        supportsCurrentTimestampSelection in class org.hibernate.dialect.Dialect
      • isCurrentTimestampSelectStringCallable

        public boolean isCurrentTimestampSelectStringCallable()
        Overrides:
        isCurrentTimestampSelectStringCallable in class org.hibernate.dialect.Dialect
      • getCurrentTimestampSelectString

        public String getCurrentTimestampSelectString()
        Overrides:
        getCurrentTimestampSelectString in class org.hibernate.dialect.Dialect
      • registerResultSetOutParameter

        public int registerResultSetOutParameter​(CallableStatement statement,
                                                 int col)
                                          throws SQLException
        Overrides:
        registerResultSetOutParameter in class org.hibernate.dialect.Dialect
        Throws:
        SQLException
      • supportsNullPrecedence

        public boolean supportsNullPrecedence()
        Overrides:
        supportsNullPrecedence in class org.hibernate.dialect.Dialect
      • supportsLobValueChangePropagation

        public boolean supportsLobValueChangePropagation()
        Overrides:
        supportsLobValueChangePropagation in class org.hibernate.dialect.Dialect
      • supportsSubqueryOnMutatingTable

        public boolean supportsSubqueryOnMutatingTable()
        Overrides:
        supportsSubqueryOnMutatingTable in class org.hibernate.dialect.Dialect
      • supportsLockTimeouts

        public boolean supportsLockTimeouts()
        Overrides:
        supportsLockTimeouts in class org.hibernate.dialect.Dialect
      • buildSQLExceptionConversionDelegate

        public org.hibernate.exception.spi.SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate()
        Overrides:
        buildSQLExceptionConversionDelegate in class org.hibernate.dialect.Dialect
      • getNameQualifierSupport

        public org.hibernate.engine.jdbc.env.spi.NameQualifierSupport getNameQualifierSupport()
        Overrides:
        getNameQualifierSupport in class org.hibernate.dialect.Dialect
      • buildIdentifierHelper

        public org.hibernate.engine.jdbc.env.spi.IdentifierHelper buildIdentifierHelper​(org.hibernate.engine.jdbc.env.spi.IdentifierHelperBuilder builder,
                                                                                        DatabaseMetaData dbMetaData)
                                                                                 throws SQLException
        Overrides:
        buildIdentifierHelper in class org.hibernate.dialect.Dialect
        Throws:
        SQLException
      • getAddForeignKeyConstraintString

        public String getAddForeignKeyConstraintString​(String constraintName,
                                                       String[] foreignKey,
                                                       String referencedTable,
                                                       String[] primaryKey,
                                                       boolean referencesPrimaryKey)
        Overrides:
        getAddForeignKeyConstraintString in class org.hibernate.dialect.Dialect
      • getAddForeignKeyConstraintString

        public String getAddForeignKeyConstraintString​(String constraintName,
                                                       String foreignKeyDefinition)
        Overrides:
        getAddForeignKeyConstraintString in class org.hibernate.dialect.Dialect
      • getAddPrimaryKeyConstraintString

        public String getAddPrimaryKeyConstraintString​(String constraintName)
        Overrides:
        getAddPrimaryKeyConstraintString in class org.hibernate.dialect.Dialect
      • getWriteLockString

        public String getWriteLockString​(String aliases,
                                         int timeout)
        Overrides:
        getWriteLockString in class org.hibernate.dialect.Dialect
      • getForUpdateSkipLockedString

        public String getForUpdateSkipLockedString​(String aliases)
        Overrides:
        getForUpdateSkipLockedString in class org.hibernate.dialect.Dialect
      • getForUpdateNowaitString

        public String getForUpdateNowaitString​(String aliases)
        Overrides:
        getForUpdateNowaitString in class org.hibernate.dialect.Dialect
      • getForUpdateString

        public String getForUpdateString()
        Overrides:
        getForUpdateString in class org.hibernate.dialect.Dialect
      • supportsOffsetInSubquery

        public boolean supportsOffsetInSubquery()
        Overrides:
        supportsOffsetInSubquery in class org.hibernate.dialect.Dialect
      • supportsPartitionBy

        public boolean supportsPartitionBy()
        Overrides:
        supportsPartitionBy in class org.hibernate.dialect.Dialect
      • supportsWait

        public boolean supportsWait()
        Overrides:
        supportsWait in class org.hibernate.dialect.Dialect
      • registerDefaultKeywords

        protected void registerDefaultKeywords()
        Overrides:
        registerDefaultKeywords in class org.hibernate.dialect.Dialect
      • getFunctionalDependencyAnalysisSupport

        public org.hibernate.dialect.FunctionalDependencyAnalysisSupport getFunctionalDependencyAnalysisSupport()
        Overrides:
        getFunctionalDependencyAnalysisSupport in class org.hibernate.dialect.Dialect
      • getDmlTargetColumnQualifierSupport

        public org.hibernate.dialect.DmlTargetColumnQualifierSupport getDmlTargetColumnQualifierSupport()
        Overrides:
        getDmlTargetColumnQualifierSupport in class org.hibernate.dialect.Dialect
      • supportsFromClauseInUpdate

        public boolean supportsFromClauseInUpdate()
        Overrides:
        supportsFromClauseInUpdate in class org.hibernate.dialect.Dialect
      • supportsCircularCascadeDeleteConstraints

        public boolean supportsCircularCascadeDeleteConstraints()
        Overrides:
        supportsCircularCascadeDeleteConstraints in class org.hibernate.dialect.Dialect
      • getIdentityColumnSupport

        public org.hibernate.dialect.identity.IdentityColumnSupport getIdentityColumnSupport()
        Overrides:
        getIdentityColumnSupport in class org.hibernate.dialect.Dialect
      • isJdbcLogWarningsEnabledByDefault

        public boolean isJdbcLogWarningsEnabledByDefault()
        Overrides:
        isJdbcLogWarningsEnabledByDefault in class org.hibernate.dialect.Dialect
      • supportsCascadeDelete

        public boolean supportsCascadeDelete()
        Overrides:
        supportsCascadeDelete in class org.hibernate.dialect.Dialect
      • supportsNonQueryWithCTE

        public boolean supportsNonQueryWithCTE()
        Overrides:
        supportsNonQueryWithCTE in class org.hibernate.dialect.Dialect
      • getSequenceExporter

        public org.hibernate.tool.schema.spi.Exporter<org.hibernate.boot.model.relational.Sequence> getSequenceExporter()
        Overrides:
        getSequenceExporter in class org.hibernate.dialect.Dialect
      • getForeignKeyExporter

        public org.hibernate.tool.schema.spi.Exporter<org.hibernate.mapping.ForeignKey> getForeignKeyExporter()
        SingleStore does not support foreign keys and referential integrity
        Overrides:
        getForeignKeyExporter in class org.hibernate.dialect.Dialect
      • getUniqueDelegate

        public org.hibernate.dialect.unique.UniqueDelegate getUniqueDelegate()
        Overrides:
        getUniqueDelegate in class org.hibernate.dialect.Dialect
      • isForUpdateLockingEnabled

        public boolean isForUpdateLockingEnabled()
      • getDual

        public String getDual()
        Overrides:
        getDual in class org.hibernate.dialect.Dialect