Included Modules

DataMapper::Migrations::OracleAdapter

Public Class Methods

included(base) click to toggle source

@api private

    # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 11
11:       def self.included(base)
12:         base.extend DataObjectsAdapter::ClassMethods
13:         base.extend ClassMethods
14:       end

Public Instance Methods

create_model_storage(model) click to toggle source

@api semipublic

     # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 73
 73:       def create_model_storage(model)
 74:         name       = self.name
 75:         properties = model.properties_with_subclasses(name)
 76:         table_name = model.storage_name(name)
 77:         truncate_or_delete = self.class.auto_migrate_with
 78:         table_is_truncated = truncate_or_delete && @truncated_tables && @truncated_tables[table_name]
 79: 
 80:         return false if storage_exists?(table_name) && !table_is_truncated
 81:         return false if properties.empty?
 82: 
 83:         with_connection do |connection|
 84:           # if table was truncated then check if all columns for properties are present
 85:           # TODO: check all other column definition options
 86:           if table_is_truncated && storage_has_all_fields?(table_name, properties)
 87:             @truncated_tables[table_name] = nil
 88:           else
 89:             # forced drop of table if properties are different
 90:             if truncate_or_delete
 91:               destroy_model_storage(model, true)
 92:             end
 93: 
 94:             statements = [ create_table_statement(connection, model, properties) ]
 95:             statements.concat(create_index_statements(model))
 96:             statements.concat(create_unique_index_statements(model))
 97:             statements.concat(create_sequence_statements(model))
 98: 
 99:             statements.each do |statement|
100:               command   = connection.create_command(statement)
101:               command.execute_non_query
102:             end
103:           end
104: 
105:         end
106: 
107:         true
108:       end
destroy_model_storage(model, forced = false) click to toggle source

@api semipublic

     # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 111
111:       def destroy_model_storage(model, forced = false)
112:         table_name = model.storage_name(name)
113:         klass      = self.class
114:         truncate_or_delete = klass.auto_migrate_with
115:         if storage_exists?(table_name)
116:           if truncate_or_delete && !forced
117:             case truncate_or_delete
118:             when :truncate
119:               execute(truncate_table_statement(model))
120:             when :delete
121:               execute(delete_table_statement(model))
122:             else
123:               raise ArgumentError, "Unsupported auto_migrate_with option"
124:             end
125:             @truncated_tables ||= {}
126:             @truncated_tables[table_name] = true
127:           else
128:             execute(drop_table_statement(model))
129:             @truncated_tables[table_name] = nil if @truncated_tables
130:           end
131:         end
132:         # added destroy of sequences
133:         reset_sequences = klass.auto_migrate_reset_sequences
134:         table_is_truncated = @truncated_tables && @truncated_tables[table_name]
135:         unless truncate_or_delete && !reset_sequences && !forced
136:           if sequence_exists?(model_sequence_name(model))
137:             statement = if table_is_truncated && !forced
138:               reset_sequence_statement(model)
139:             else
140:               drop_sequence_statement(model)
141:             end
142:             execute(statement) if statement
143:           end
144:         end
145:         true
146:       end
drop_table_statement(model) click to toggle source
    # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 66
66:       def drop_table_statement(model)
67:         table_name = quote_name(model.storage_name(name))
68:         "DROP TABLE #{table_name} CASCADE CONSTRAINTS"
69:       end
field_exists?(storage_name, field_name) click to toggle source

@api semipublic

    # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 42
42:       def field_exists?(storage_name, field_name)
43:         statement = DataMapper::Ext::String.compress_lines(          SELECT COUNT(*)          FROM all_tab_columns          WHERE owner = ?          AND table_name = ?          AND column_name = ?)
44: 
45:         select(statement, schema_name, oracle_upcase(storage_name), oracle_upcase(field_name)).first > 0
46:       end
sequence_exists?(sequence_name) click to toggle source

@api semipublic

    # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 29
29:       def sequence_exists?(sequence_name)
30:         return false unless sequence_name
31:         statement = DataMapper::Ext::String.compress_lines(          SELECT COUNT(*)          FROM all_sequences          WHERE sequence_owner = ?          AND sequence_name = ?)
32: 
33:         select(statement, schema_name, oracle_upcase(sequence_name)).first > 0
34:       end
storage_exists?(storage_name) click to toggle source

@api semipublic

    # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 17
17:       def storage_exists?(storage_name)
18:         statement = DataMapper::Ext::String.compress_lines(          SELECT COUNT(*)          FROM all_tables          WHERE owner = ?          AND table_name = ?)
19: 
20:         select(statement, schema_name, oracle_upcase(storage_name)).first > 0
21:       end
storage_fields(storage_name) click to toggle source

@api semipublic

    # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 55
55:       def storage_fields(storage_name)
56:         statement = DataMapper::Ext::String.compress_lines(          SELECT column_name          FROM all_tab_columns          WHERE owner = ?          AND table_name = ?)
57: 
58:         select(statement, schema_name, oracle_upcase(storage_name))
59:       end

Private Instance Methods

oracle_upcase(name) click to toggle source

If table or column name contains just lowercase characters then do uppercase as uppercase version will be used in Oracle data dictionary tables

     # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 156
156:       def oracle_upcase(name)
157:         name =~ /[A-Z]/ ? name : name.upcase
158:       end
storage_has_all_fields?(table_name, properties) click to toggle source
     # File lib/dm-migrations/adapters/dm-oracle-adapter.rb, line 150
150:       def storage_has_all_fields?(table_name, properties)
151:         properties.map { |property| oracle_upcase(property.field) }.sort == storage_fields(table_name).sort
152:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.