Skip to content

Commit 063a2e4

Browse files
Reliably sort functions, views, and materialized views in schema (#181)
1 parent 83675de commit 063a2e4

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

lib/active_record/connection_adapters/clickhouse/schema_statements.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ def views(name = nil)
7272
result['data'].flatten
7373
end
7474

75+
def materialized_views(name = nil)
76+
result = do_system_execute("SHOW TABLES WHERE engine = 'MaterializedView'", name)
77+
return [] if result.nil?
78+
result['data'].flatten
79+
end
80+
7581
def functions
7682
result = do_system_execute("SELECT name FROM system.functions WHERE origin = 'SQLUserDefined'")
7783
return [] if result.nil?

lib/clickhouse-activerecord/schema_dumper.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ def dump(connection = ActiveRecord::Base.connection, stream = STDOUT, config = A
1515
private
1616

1717
def tables(stream)
18-
functions = @connection.functions
18+
functions = @connection.functions.sort
1919
functions.each do |function|
2020
function(function, stream)
2121
end
2222

23-
sorted_tables = @connection.tables.sort {|a,b| @connection.show_create_table(a).match(/^CREATE\s+(MATERIALIZED\s+)?VIEW/) ? 1 : a <=> b }
24-
sorted_tables.each do |table_name|
23+
view_tables = @connection.views.sort
24+
materialized_view_tables = @connection.materialized_views.sort
25+
sorted_tables = @connection.tables.sort - view_tables - materialized_view_tables
26+
27+
(sorted_tables + view_tables + materialized_view_tables).each do |table_name|
2528
table(table_name, stream) unless ignored?(table_name)
2629
end
2730
end

0 commit comments

Comments
 (0)