@@ -9,60 +9,58 @@ module Interro
99 def initialize (@db = CONFIG .write_db)
1010 end
1111
12- def extract_schema : String
13- schema = String .build do |str |
14- str << " -- Generated Schema\n\n "
15-
16- # Extract extensions
17- extensions = query_extensions
18- extensions.each do |ext |
19- str << extension_definition(ext)
20- str << " \n "
21- end
22- str << " \n " if ! extensions.empty?
12+ def extract_schema (to io : IO ) : Nil
13+ io << " -- Generated Schema\n\n "
14+
15+ # Extract extensions
16+ extensions = query_extensions
17+ extensions.each do |ext |
18+ io << extension_definition(ext)
19+ io << " \n "
20+ end
21+ io << " \n " if ! extensions.empty?
2322
24- # Extract and group tables by name
25- tables = query_tables.group_by(& .table_name)
26- tables.each do |table_name , columns |
27- str << table_definition(columns)
28- str << " \n\n "
29- end
23+ # Extract and group tables by name
24+ tables = query_tables.group_by(& .table_name)
25+ tables.each do |table_name , columns |
26+ io << table_definition(columns)
27+ io << " \n\n "
28+ end
3029
31- migrations = query_migrations
32- if migrations.any?
33- str.puts " INSERT INTO schema_migrations (name, added_at)"
34- str.puts " VALUES"
35- migrations.each_with_index 1 do |migration , index |
36- str << " ('#{ migration.name } ', '#{ migration.added_at } ')"
37- if index < migrations.size
38- str.puts ','
39- else
40- str.puts ';'
41- end
30+ migrations = query_migrations
31+ if migrations.any?
32+ io.puts " INSERT INTO schema_migrations (name, added_at)"
33+ io.puts " VALUES"
34+ migrations.each_with_index 1 do |migration , index |
35+ io << " ('#{ migration.name } ', '#{ migration.added_at } ')"
36+ if index < migrations.size
37+ io.puts ','
38+ else
39+ io.puts ';'
4240 end
43- str.puts
44- end
45-
46- # Extract indexes
47- indexes = query_indexes
48- indexes.each do |index |
49- str << index_definition(index)
50- str << " \n "
5141 end
42+ io.puts
43+ end
5244
53- # Extract foreign keys
54- foreign_keys = query_foreign_keys
55- foreign_keys.each do |fk |
56- str << foreign_key_definition(fk)
57- str << " \n "
58- end
45+ # Extract indexes
46+ indexes = query_indexes
47+ indexes.each do |index |
48+ io << index_definition(index)
49+ io << " \n "
5950 end
6051
61- schema
52+ # Extract foreign keys
53+ foreign_keys = query_foreign_keys
54+ foreign_keys.each do |fk |
55+ io << foreign_key_definition(fk)
56+ io << " \n "
57+ end
6258 end
6359
6460 def save_schema (path : String = " db/schema.sql" )
65- File .write(path, extract_schema)
61+ File .open path, " w" do |file |
62+ extract_schema file
63+ end
6664 end
6765
6866 private def query_extensions
0 commit comments