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 @@ -185,20 +185,22 @@ def read_table(table, rows_count)
185
185
186
186
columns = Marshal . load ( entry )
187
187
columns_sql = columns_insert_sql ( columns )
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
188
+ with_disabled_indexes table do
189
+ Progress . start ( table , rows_count ) do
190
+ until entry . eof?
191
+ rows_sql = [ ]
192
+ 1000 . times do
193
+ rows_sql << values_insert_sql ( Marshal . load ( entry ) ) unless entry . eof?
194
+ end
194
195
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
196
+ begin
197
+ insert_into_table ( table_sql , columns_sql , rows_sql )
198
+ Progress . step ( rows_sql . length )
199
+ rescue
200
+ rows_sql . each do |row_sql |
201
+ insert_into_table ( table_sql , columns_sql , row_sql )
202
+ Progress . step
203
+ end
202
204
end
203
205
end
204
206
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