File tree Expand file tree Collapse file tree 2 files changed +45
-13
lines changed Expand file tree Collapse file tree 2 files changed +45
-13
lines changed Original file line number Diff line number Diff line change @@ -184,20 +184,22 @@ def read_table(table, rows_count)
184
184
185
185
columns = Marshal . load ( entry )
186
186
columns_sql = columns_insert_sql ( columns )
187
- Progress . start ( table , rows_count ) do
188
- until entry . eof?
189
- rows_sql = [ ]
190
- 1000 . times do
191
- rows_sql << values_insert_sql ( Marshal . load ( entry ) ) unless entry . eof?
192
- end
187
+ with_disabled_indexes table do
188
+ Progress . start ( table , rows_count ) do
189
+ until entry . eof?
190
+ rows_sql = [ ]
191
+ 1000 . times do
192
+ rows_sql << values_insert_sql ( Marshal . load ( entry ) ) unless entry . eof?
193
+ end
193
194
194
- begin
195
- insert_into_table ( table_sql , columns_sql , rows_sql )
196
- Progress . step ( rows_sql . length )
197
- rescue
198
- rows_sql . each do |row_sql |
199
- insert_into_table ( table_sql , columns_sql , row_sql )
200
- Progress . step
195
+ begin
196
+ insert_into_table ( table_sql , columns_sql , rows_sql )
197
+ Progress . step ( rows_sql . length )
198
+ rescue
199
+ rows_sql . each do |row_sql |
200
+ insert_into_table ( table_sql , columns_sql , row_sql )
201
+ Progress . step
202
+ end
201
203
end
202
204
end
203
205
end
Original file line number Diff line number Diff line change @@ -28,6 +28,36 @@ def clear_table(table_sql)
28
28
ActiveRecord ::Base . connection . delete ( "DELETE FROM #{ table_sql } " , 'Clearing table' )
29
29
end
30
30
31
+ def with_disabled_indexes ( table , &block )
32
+ all_indexes = ActiveRecord ::Base . connection . indexes ( table )
33
+ table_indexes = all_indexes . keep_if { |index | index . table == table }
34
+
35
+ remove_indexes ( table_indexes )
36
+ block . call
37
+ add_indexes ( table_indexes )
38
+ end
39
+
40
+ def remove_indexes ( indexes )
41
+ indexes . each do |index |
42
+ ActiveRecord ::Base . connection . remove_index index . table , :name => index . name
43
+ end
44
+ end
45
+
46
+ def add_indexes ( indexes )
47
+ indexes . each do |index |
48
+ options = {
49
+ :name => index . name ,
50
+ :unique => index . unique ,
51
+ :length => index . lengths ,
52
+ :order => index . orders ,
53
+ :where => index . where ,
54
+ :type => index . type ,
55
+ :using => index . using
56
+ }
57
+ ActiveRecord ::Base . connection . add_index index . table , index . columns , options
58
+ end
59
+ end
60
+
31
61
def insert_into_table ( table_sql , columns_sql , values_sql )
32
62
values_sql = values_sql . join ( ',' ) if values_sql . is_a? ( Array )
33
63
ActiveRecord ::Base . connection . insert ( "INSERT INTO #{ table_sql } #{ columns_sql } VALUES #{ values_sql } " , 'Loading dump' )
You can’t perform that action at this time.
0 commit comments