module DataMapper::Constraints::Adapters::OracleAdapter

Public Instance Methods

constraint_exists?(storage_name, constraint_name) click to toggle source

oracle does not provide the information_schema table To question internal state like postgres or mysql

@see DataMapper::Constraints::Adapters::DataObjectsAdapter

@api private

# File lib/data_mapper/constraints/adapters/oracle_adapter.rb, line 16
        def constraint_exists?(storage_name, constraint_name)
          statement = DataMapper::Ext::String.compress_lines("            SELECT COUNT(*)
            FROM USER_CONSTRAINTS
            WHERE table_name = ?
            AND constraint_name = ?
")

          select(statement, oracle_upcase(storage_name)[0, self.class::IDENTIFIER_MAX_LENGTH].gsub('"', '_'), oracle_upcase(constraint_name)[0, self.class::IDENTIFIER_MAX_LENGTH].gsub('"', '_')).first > 0

        end
create_constraints_statement(constraint_name, constraint_type, source_storage_name, source_keys, target_storage_name, target_keys) click to toggle source

@see DataMapper::Constraints::Adapters::DataObjectsAdapter::SQL#create_constraints_statement

@api private

TODO: is it desirable to always set `INITIALLY DEFERRED DEFERRABLE`?

# File lib/data_mapper/constraints/adapters/oracle_adapter.rb, line 34
        def create_constraints_statement(constraint_name, constraint_type, source_storage_name, source_keys, target_storage_name, target_keys)
          DataMapper::Ext::String.compress_lines("            ALTER TABLE #{quote_name(source_storage_name)}
            ADD CONSTRAINT #{quote_name(constraint_name)}
            FOREIGN KEY (#{source_keys.join(', ')})
            REFERENCES #{quote_name(target_storage_name)} (#{target_keys.join(', ')})
            #{"ON DELETE " + constraint_type if constraint_type && constraint_type != "NO ACTION"}
            INITIALLY DEFERRED DEFERRABLE
")
        end
destroy_constraints_statement(storage_name, constraint_name) click to toggle source

@api private

# File lib/data_mapper/constraints/adapters/oracle_adapter.rb, line 46
        def destroy_constraints_statement(storage_name, constraint_name)
          DataMapper::Ext::String.compress_lines("            ALTER TABLE #{quote_name(storage_name)}
            DROP CONSTRAINT #{quote_name(constraint_name)}
            CASCADE
")
        end