Class CommonDatabaseAdapter

    • Constructor Detail

      • CommonDatabaseAdapter

        protected CommonDatabaseAdapter​(IDatabaseTarget tgt,
                                        IDatabaseTranslator dt)
        Protected constructor
        Parameters:
        tgt - database targeted
        dt - the translator for this type of database
      • CommonDatabaseAdapter

        protected CommonDatabaseAdapter​(IConnectionProvider cp,
                                        IDatabaseTranslator dt)
        Public constructor for when we're using a connection provider
        Parameters:
        cp -
        dt -
      • CommonDatabaseAdapter

        protected CommonDatabaseAdapter()
        Constructor used by AddColumn only for getting DB type specific column name.
    • Method Detail

      • buildColumns

        protected java.lang.String buildColumns​(java.util.List<ColumnBase> columns,
                                                IdentityDef identity)
        Build the list of columns in the create table statement
      • buildCreateTableStatement

        protected java.lang.String buildCreateTableStatement​(java.lang.String schema,
                                                             java.lang.String name,
                                                             java.util.List<ColumnBase> columns,
                                                             PrimaryKeyDef pkDef,
                                                             IdentityDef identity,
                                                             java.lang.String tablespaceName,
                                                             java.util.List<With> withs,
                                                             java.util.List<CheckConstraint> checkConstraints)
        Generate a create table statement suitable for Derby
        Parameters:
        schema -
        name -
        columns -
        pkDef -
        tablespaceName -
        withs - the list of table metadata parameters
        Returns:
      • createUniqueIndex

        public void createUniqueIndex​(java.lang.String schemaName,
                                      java.lang.String tableName,
                                      java.lang.String indexName,
                                      java.lang.String tenantColumnName,
                                      java.util.List<OrderedColumnDef> indexColumns,
                                      java.util.List<java.lang.String> includeColumns)
        Specified by:
        createUniqueIndex in interface IDatabaseAdapter
      • createUniqueIndex

        public void createUniqueIndex​(java.lang.String schemaName,
                                      java.lang.String tableName,
                                      java.lang.String indexName,
                                      java.lang.String tenantColumnName,
                                      java.util.List<OrderedColumnDef> indexColumns)
        Specified by:
        createUniqueIndex in interface IDatabaseAdapter
      • createIndex

        public void createIndex​(java.lang.String schemaName,
                                java.lang.String tableName,
                                java.lang.String indexName,
                                java.lang.String tenantColumnName,
                                java.util.List<OrderedColumnDef> indexColumns)
        Specified by:
        createIndex in interface IDatabaseAdapter
      • prefixTenantColumn

        protected java.util.List<OrderedColumnDef> prefixTenantColumn​(java.lang.String tenantColumnName,
                                                                      java.util.List<OrderedColumnDef> columns)
        Prefix the tenantColumnName to the list of columns, or do nothing if tenantColumnName is null
        Parameters:
        tenantColumnName -
        columns -
        Returns:
      • runStatement

        protected void runStatement​(java.lang.String ddl)
        Execute the statement on a connection managed by our connection provider
        Parameters:
        ddl -
      • getQualifiedName

        public java.lang.String getQualifiedName​(java.lang.String schemaName,
                                                 java.lang.String objectName)
        Return the fully qualified name in the form "SCHEMA.OBJECT" Validates that both schema and object names are valid
        Parameters:
        schemaName -
        objectName -
        Returns:
        the fully qualified name
        Throws:
        java.lang.IllegalArgumentException - if either name is not a valid database object name
      • dropTable

        public void dropTable​(java.lang.String schemaName,
                              java.lang.String tableName)
        Description copied from interface: IDatabaseAdapter
        Drop table from the schema
        Specified by:
        dropTable in interface IDatabaseAdapter
      • dropProcedure

        public void dropProcedure​(java.lang.String schemaName,
                                  java.lang.String procedureName)
        Description copied from interface: IDatabaseAdapter
        Drop the given procedure
        Specified by:
        dropProcedure in interface IDatabaseAdapter
      • dropFunction

        public void dropFunction​(java.lang.String schemaName,
                                 java.lang.String functionName)
        Description copied from interface: IDatabaseAdapter
        drops a given function
        Specified by:
        dropFunction in interface IDatabaseAdapter
      • dropPermission

        public void dropPermission​(java.lang.String schemaName,
                                   java.lang.String permissionName)
        Description copied from interface: IDatabaseAdapter
        Drop permission object from the schema
        Specified by:
        dropPermission in interface IDatabaseAdapter
      • dropVariable

        public void dropVariable​(java.lang.String schemaName,
                                 java.lang.String variableName)
        Specified by:
        dropVariable in interface IDatabaseAdapter
      • createForeignKeyConstraint

        public void createForeignKeyConstraint​(java.lang.String constraintName,
                                               java.lang.String schemaName,
                                               java.lang.String name,
                                               java.lang.String targetSchema,
                                               java.lang.String targetTable,
                                               java.lang.String targetColumnName,
                                               java.lang.String tenantColumnName,
                                               java.util.List<java.lang.String> columns,
                                               boolean enforced)
        Specified by:
        createForeignKeyConstraint in interface IDatabaseAdapter
      • createUniqueConstraint

        public void createUniqueConstraint​(java.lang.String constraintName,
                                           java.util.List<java.lang.String> columns,
                                           java.lang.String schemaName,
                                           java.lang.String name)
        Description copied from interface: IDatabaseAdapter
        create a unique constraint on a table.
        Specified by:
        createUniqueConstraint in interface IDatabaseAdapter
      • allocateTenant

        public int allocateTenant​(java.lang.String adminSchemaName,
                                  java.lang.String schemaName,
                                  java.lang.String tenantName,
                                  java.lang.String tenantKey,
                                  java.lang.String tenantSalt,
                                  java.lang.String idSequenceName)
        Description copied from interface: IDatabaseAdapter
        Allocate a new tenant
        Specified by:
        allocateTenant in interface IDatabaseAdapter
        Returns:
      • updateTenantStatus

        public void updateTenantStatus​(java.lang.String adminSchemaName,
                                       int tenantId,
                                       TenantStatus status)
        Update the tenant status
        Specified by:
        updateTenantStatus in interface IDatabaseAdapter
        Parameters:
        adminSchemaName -
        tenantId -
        status -
      • addNewTenantPartitions

        public void addNewTenantPartitions​(java.util.Collection<Table> tables,
                                           java.lang.String schemaName,
                                           int newTenantId)
        Add a new tenant partition to each of the tables in the collection. Idempotent, so can be run to add partitions for existing tenants to new tables
        Specified by:
        addNewTenantPartitions in interface IDatabaseAdapter
        Parameters:
        tables -
        schemaName -
        newTenantId -
      • runStatement

        public void runStatement​(IDatabaseStatement stmt)
        Run the statement using the connectionProvider to obtain a new connection. Also, there should be a transaction open on the current thread at this time
        Specified by:
        runStatement in interface IDatabaseAdapter
        Parameters:
        stmt -
      • createOrReplaceProcedure

        public void createOrReplaceProcedure​(java.lang.String schemaName,
                                             java.lang.String procedureName,
                                             java.util.function.Supplier<java.lang.String> supplier)
        Description copied from interface: IDatabaseAdapter
        Create the stored procedure using the DDL text provided by the supplier
        Specified by:
        createOrReplaceProcedure in interface IDatabaseAdapter
      • createOrReplaceFunction

        public void createOrReplaceFunction​(java.lang.String schemaName,
                                            java.lang.String functionName,
                                            java.util.function.Supplier<java.lang.String> supplier)
        Description copied from interface: IDatabaseAdapter
        creates or replaces the SQL function
        Specified by:
        createOrReplaceFunction in interface IDatabaseAdapter
      • createSequence

        public void createSequence​(java.lang.String schemaName,
                                   java.lang.String sequenceName,
                                   long startWith,
                                   int cache,
                                   int incrementBy)
        Specified by:
        createSequence in interface IDatabaseAdapter
        startWith - the START WITH value for the sequence
        cache - the sequence CACHE value
      • dropSequence

        public void dropSequence​(java.lang.String schemaName,
                                 java.lang.String sequenceName)
        Specified by:
        dropSequence in interface IDatabaseAdapter
      • alterSequenceRestartWith

        public void alterSequenceRestartWith​(java.lang.String schemaName,
                                             java.lang.String sequenceName,
                                             long restartWith,
                                             int cache,
                                             int incrementBy)
        Description copied from interface: IDatabaseAdapter
        Sets/resets the sequence to start with the given value.
        Specified by:
        alterSequenceRestartWith in interface IDatabaseAdapter
      • alterTableColumnIdentityCache

        public void alterTableColumnIdentityCache​(java.lang.String schemaName,
                                                  java.lang.String tableName,
                                                  java.lang.String columnName,
                                                  int cache)
        Description copied from interface: IDatabaseAdapter
        Change the CACHE value of the named identity generated always column
        Specified by:
        alterTableColumnIdentityCache in interface IDatabaseAdapter
      • dropForeignKey

        public void dropForeignKey​(java.lang.String schemaName,
                                   java.lang.String tableName,
                                   java.lang.String constraintName)
        Description copied from interface: IDatabaseAdapter
        Drop the FK on the table with the given constraint name
        Specified by:
        dropForeignKey in interface IDatabaseAdapter
      • findTenantId

        public int findTenantId​(java.lang.String adminSchemaName,
                                java.lang.String tenantName)
        Description copied from interface: IDatabaseAdapter
        Get the tenant id for the given schema and tenant name
        Specified by:
        findTenantId in interface IDatabaseAdapter
        Returns:
      • grantObjectPrivileges

        public void grantObjectPrivileges​(java.lang.String schemaName,
                                          java.lang.String tableName,
                                          java.util.Collection<Privilege> privileges,
                                          java.lang.String toUser)
        Description copied from interface: IDatabaseAdapter
        Grant the list of privileges on the named object to the user. This is a general purpose method which can be used to specify privileges for any object type which doesn't need the object type to be specified in the grant DDL.
        Specified by:
        grantObjectPrivileges in interface IDatabaseAdapter
      • grantProcedurePrivileges

        public void grantProcedurePrivileges​(java.lang.String schemaName,
                                             java.lang.String procedureName,
                                             java.util.Collection<Privilege> privileges,
                                             java.lang.String toUser)
        Description copied from interface: IDatabaseAdapter
        Grant the collection of privileges on the named procedure to the user
        Specified by:
        grantProcedurePrivileges in interface IDatabaseAdapter
      • grantFunctionPrivileges

        public void grantFunctionPrivileges​(java.lang.String schemaName,
                                            java.lang.String functionName,
                                            java.util.Collection<Privilege> privileges,
                                            java.lang.String toUser)
        Description copied from interface: IDatabaseAdapter
        grants permissions on a given function
        Specified by:
        grantFunctionPrivileges in interface IDatabaseAdapter
      • grantVariablePrivileges

        public void grantVariablePrivileges​(java.lang.String schemaName,
                                            java.lang.String variableName,
                                            java.util.Collection<Privilege> privileges,
                                            java.lang.String toUser)
        Description copied from interface: IDatabaseAdapter
        Grant the collection of privileges on the named variable to the user
        Specified by:
        grantVariablePrivileges in interface IDatabaseAdapter
      • grantSequencePrivileges

        public void grantSequencePrivileges​(java.lang.String schemaName,
                                            java.lang.String variableName,
                                            java.util.Collection<Privilege> privileges,
                                            java.lang.String toUser)
        Description copied from interface: IDatabaseAdapter
        Grant the collection of privileges on the named variable to the user
        Specified by:
        grantSequencePrivileges in interface IDatabaseAdapter
      • deleteTenantMeta

        public void deleteTenantMeta​(java.lang.String adminSchemaName,
                                     int tenantId)
        Description copied from interface: IDatabaseAdapter
        Delete all the metadata associated with the given tenant identifier, as long as the tenant status is DROPPED.
        Specified by:
        deleteTenantMeta in interface IDatabaseAdapter
      • dropIndex

        public void dropIndex​(java.lang.String schemaName,
                              java.lang.String indexName)
        Description copied from interface: IDatabaseAdapter
        Drop the named index
        Specified by:
        dropIndex in interface IDatabaseAdapter
      • dropView

        public void dropView​(java.lang.String schemaName,
                             java.lang.String viewName)
        Description copied from interface: IDatabaseAdapter
        Drop the view from the database
        Specified by:
        dropView in interface IDatabaseAdapter
      • createOrReplaceView

        public void createOrReplaceView​(java.lang.String schemaName,
                                        java.lang.String viewName,
                                        java.lang.String selectClause)
        Description copied from interface: IDatabaseAdapter
        Create or replace the view
        Specified by:
        createOrReplaceView in interface IDatabaseAdapter
      • createView

        public void createView​(java.lang.String schemaName,
                               java.lang.String viewName,
                               java.lang.String selectClause)
        Description copied from interface: IDatabaseAdapter
        Create the view as defined by the selectClause
        Specified by:
        createView in interface IDatabaseAdapter
      • reorgTable

        public void reorgTable​(java.lang.String schemaName,
                               java.lang.String tableName)
        Description copied from interface: IDatabaseAdapter
        Reorg the table if the underlying database supports it. Required after columns are added/removed from a table.
        Specified by:
        reorgTable in interface IDatabaseAdapter
      • grantSchemaUsage

        public void grantSchemaUsage​(java.lang.String schemaName,
                                     java.lang.String grantToUser)
        Description copied from interface: IDatabaseAdapter
        Grants USAGE on the given schemaName to the given user
        Specified by:
        grantSchemaUsage in interface IDatabaseAdapter
      • grantAllSequenceUsage

        public void grantAllSequenceUsage​(java.lang.String schemaName,
                                          java.lang.String grantToUser)
        Description copied from interface: IDatabaseAdapter
        Grant access to all sequences in the named schema
        Specified by:
        grantAllSequenceUsage in interface IDatabaseAdapter