Skip to content

Commit 1cafedb

Browse files
committed
Extract schema to an IO
1 parent 642636c commit 1cafedb

1 file changed

Lines changed: 42 additions & 44 deletions

File tree

src/schema_generator.cr

Lines changed: 42 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)