Module: DataMapper::Constraints::Adapters::OracleAdapter
- Includes:
- DataObjectsAdapter
- Defined in:
- lib/data_mapper/constraints/adapters/oracle_adapter.rb
Instance Method Summary collapse
-
#constraint_exists?(storage_name, constraint_name) ⇒ Boolean
private
oracle does not provide the information_schema table To question internal state like postgres or mysql.
-
#create_constraints_statement(constraint_name, constraint_type, source_storage_name, source_keys, target_storage_name, target_keys) ⇒ Object
private
TODO: is it desirable to always set ‘INITIALLY DEFERRED DEFERRABLE`?.
- #destroy_constraints_statement(storage_name, constraint_name) ⇒ Object private
Methods included from DataObjectsAdapter
#create_relationship_constraint, #destroy_relationship_constraint
Instance Method Details
#constraint_exists?(storage_name, constraint_name) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
oracle does not provide the information_schema table To question internal state like postgres or mysql
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/data_mapper/constraints/adapters/oracle_adapter.rb', line 15 def constraint_exists?(storage_name, constraint_name) statement = DataMapper::Ext::String.compress_lines(<<-SQL) SELECT COUNT(*) FROM USER_CONSTRAINTS WHERE table_name = ? AND constraint_name = ? SQL 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) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
TODO: is it desirable to always set ‘INITIALLY DEFERRED DEFERRABLE`?
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/data_mapper/constraints/adapters/oracle_adapter.rb', line 31 def create_constraints_statement(constraint_name, constraint_type, source_storage_name, source_keys, target_storage_name, target_keys) DataMapper::Ext::String.compress_lines(<<-SQL) 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 SQL end |
#destroy_constraints_statement(storage_name, constraint_name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
43 44 45 46 47 48 49 |
# File 'lib/data_mapper/constraints/adapters/oracle_adapter.rb', line 43 def destroy_constraints_statement(storage_name, constraint_name) DataMapper::Ext::String.compress_lines(<<-SQL) ALTER TABLE #{quote_name(storage_name)} DROP CONSTRAINT #{quote_name(constraint_name)} CASCADE SQL end |