Module: JdbcSpec::MissingFunctionalityHelper
- Included in:
- Derby
- Defined in:
- lib/jdbc_adapter/missing_functionality_helper.rb
Instance Method Summary collapse
-
#alter_table(table_name, options = {}) ⇒ Object
Taken from SQLite adapter.
-
#copy_table(from, to, options = {}) ⇒ Object
:nodoc:.
-
#copy_table_contents(from, to, columns, rename = {}) ⇒ Object
:nodoc:.
-
#copy_table_indexes(from, to) ⇒ Object
:nodoc:.
-
#move_table(from, to, options = {}, &block) ⇒ Object
:nodoc:.
Instance Method Details
#alter_table(table_name, options = {}) ⇒ Object
Taken from SQLite adapter
5 6 7 8 9 10 11 12 13 14 |
# File 'lib/jdbc_adapter/missing_functionality_helper.rb', line 5 def alter_table(table_name, = {}) #:nodoc: table_name = table_name.to_s.downcase altered_table_name = "altered_#{table_name}" caller = lambda {|definition| yield definition if block_given?} transaction do move_table(table_name, altered_table_name, ) move_table(altered_table_name, table_name, &caller) end end |
#copy_table(from, to, options = {}) ⇒ Object
:nodoc:
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/jdbc_adapter/missing_functionality_helper.rb', line 21 def copy_table(from, to, = {}) #:nodoc: create_table(to, ) do |@definition| columns(from).each do |column| column_name = [:rename] ? ([:rename][column.name] || [:rename][column.name.to_sym] || column.name) : column.name column_name = column_name.to_s @definition.column(column_name, column.type, :limit => column.limit, :default => column.default, :null => column.null) end @definition.primary_key(primary_key(from)) yield @definition if block_given? end copy_table_indexes(from, to) copy_table_contents(from, to, @definition.columns, [:rename] || {}) end |
#copy_table_contents(from, to, columns, rename = {}) ⇒ Object
:nodoc:
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/jdbc_adapter/missing_functionality_helper.rb', line 59 def copy_table_contents(from, to, columns, rename = {}) #:nodoc: column_mappings = Hash[*columns.map {|col| [col.name, col.name]}.flatten] rename.inject(column_mappings) {|map, a| map[a.last] = a.first; map} from_columns = columns(from).collect {|col| col.name} columns = columns.find_all{|col| from_columns.include?(column_mappings[col.name])} execute("SELECT * FROM #{from}").each do |row| sql = "INSERT INTO #{to} ("+columns.map(&:name)*','+") VALUES (" sql << columns.map {|col| quote(row[column_mappings[col.name]],col)} * ', ' sql << ')' execute sql end end |
#copy_table_indexes(from, to) ⇒ Object
:nodoc:
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/jdbc_adapter/missing_functionality_helper.rb', line 43 def copy_table_indexes(from, to) #:nodoc: indexes(from).each do |index| name = index.name.downcase if to == "altered_#{from}" name = "temp_#{name}" elsif from == "altered_#{to}" name = name[5..-1] end # index name can't be the same opts = { :name => name.gsub(/_(#{from})_/, "_#{to}_") } opts[:unique] = true if index.unique add_index(to, index.columns, opts) end end |
#move_table(from, to, options = {}, &block) ⇒ Object
:nodoc:
16 17 18 19 |
# File 'lib/jdbc_adapter/missing_functionality_helper.rb', line 16 def move_table(from, to, = {}, &block) #:nodoc: copy_table(from, to, , &block) drop_table(from) end |