module RailsSync::Table
Attributes
dest_table_name[R]
Public Instance Methods
create_temp_table()
click to toggle source
# File lib/rails_sync/table.rb, line 89 def create_temp_table unless @dest_columns.include?(dest_primary_key) @dest_columns.unshift dest_primary_key end sql = "CREATE TABLE `#{@dest_table_name}` (\n" sql << dest_sql_table(only: @dest_columns) sql << ")" sql << "ENGINE=FEDERATED\n" sql << "CONNECTION='#{adapter.url}/#{@dest_table}';" connection.execute(sql) end
dest_columns()
click to toggle source
# File lib/rails_sync/table.rb, line 19 def dest_columns adapter.connection.columns(@dest_table) end
dest_indexes()
click to toggle source
# File lib/rails_sync/table.rb, line 23 def dest_indexes results = adapter.connection.indexes(@dest_table) results = results.map { |result| { result.name => result.columns } } results.to_combined_hash # rails_com core ext results end
dest_primary_key()
click to toggle source
# File lib/rails_sync/table.rb, line 30 def dest_primary_key adapter.connection.primary_key(@dest_table) end
dest_sql_table(only: [], except: [], pure: true)
click to toggle source
# File lib/rails_sync/table.rb, line 34 def dest_sql_table(only: [], except: [], pure: true) if only.size > 0 _columns = dest_columns.select { |column| only.include?(column.name) } else _columns = dest_columns.reject { |column| except.include?(column.name) } end if pure sql = "" else sql = "CREATE TABLE `#{@dest_table}` (\n" end _columns.each do |column| sql << " `#{column.name}` #{column.sql_type}" sql << " COLLATE #{column.collation}" if column.collation.present? sql << " NOT NULL" if column.null.is_a?(FalseClass) if column.default sql << " DEFAULT '#{column.default}',\n" elsif column.default.nil? && column.null sql << " DEFAULT NULL,\n" else sql << ",\n" end end sql << " PRIMARY KEY (`#{dest_primary_key}`)" _indexes = dest_indexes.reject { |_, value| (Array(value) & _columns.map { |col| col.name }).blank? } if _indexes.present? sql << ",\n" else sql << "\n" end _indexes.each do |index, columns| sql << " KEY `#{index}` (" sql << Array(columns).map { |col| "`#{col}`" }.join(',') sql << "),\n" end sql.chomp!(",\n") if pure sql else sql << ")" end end
drop_temp_table()
click to toggle source
# File lib/rails_sync/table.rb, line 103 def drop_temp_table sql = "DROP TABLE IF EXISTS `#{@dest_table_name}`" connection.execute(sql) end
instance_table()
click to toggle source
# File lib/rails_sync/table.rb, line 5 def instance_table if same_server? # `source.table_name` @dest_table_name = @adapter.instance_variable_get(:@adapter_options)[:database].to_s + '.' + @dest_table.to_s else # `source_table_name` @dest_table_name = @dest.to_s + '_' + @table_name + '-' + @dest_table.to_s end end
reset_temp_table()
click to toggle source
# File lib/rails_sync/table.rb, line 84 def reset_temp_table drop_temp_table create_temp_table end
same_server?()
click to toggle source
# File lib/rails_sync/table.rb, line 15 def same_server? @server_id == adapter.server_id end