Class: ClickhouseActiverecord::Tasks
- Inherits:
-
Object
- Object
- ClickhouseActiverecord::Tasks
- Defined in:
- lib/clickhouse-activerecord/tasks.rb
Class Method Summary collapse
Instance Method Summary collapse
- #create ⇒ Object
- #drop ⇒ Object
-
#initialize(configuration) ⇒ Tasks
constructor
A new instance of Tasks.
- #migrate ⇒ Object
- #purge ⇒ Object
- #structure_dump(*args) ⇒ Object
- #structure_load(*args) ⇒ Object
Constructor Details
#initialize(configuration) ⇒ Tasks
Returns a new instance of Tasks.
11 12 13 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 11 def initialize(configuration) @configuration = configuration end |
Class Method Details
.using_database_configurations? ⇒ Boolean
7 8 9 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 7 def self.using_database_configurations? true end |
Instance Method Details
#create ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 15 def create establish_master_connection connection.create_database @configuration.database rescue ActiveRecord::StatementInvalid => e if e.cause.to_s.include?('already exists') raise ActiveRecord::DatabaseAlreadyExists else raise end end |
#drop ⇒ Object
26 27 28 29 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 26 def drop establish_master_connection connection.drop_database @configuration.database end |
#migrate ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 78 def migrate check_target_version verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] != "false" : true scope = ENV["SCOPE"] verbose_was, ActiveRecord::Migration.verbose = ActiveRecord::Migration.verbose, verbose connection.migration_context.migrate(target_version) do |migration| scope.blank? || scope == migration.scope end ActiveRecord::Base.clear_cache! ensure ActiveRecord::Migration.verbose = verbose_was end |
#purge ⇒ Object
31 32 33 34 35 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 31 def purge ActiveRecord::Base.connection_handler.clear_active_connections!(:all) drop create end |
#structure_dump(*args) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 37 def structure_dump(*args) establish_master_connection # get all tables tables = connection.execute("SHOW TABLES FROM #{@configuration.database} WHERE name NOT LIKE '.inner_id.%'")['data'].flatten.map do |table| next if %w[schema_migrations ar_internal_metadata].include?(table) connection.show_create_table(table).gsub("#{@configuration.database}.", '') end.compact # sort view to last tables.sort_by! {|table| table.match(/^CREATE\s+(MATERIALIZED\s+)?VIEW/) ? 1 : 0} # get all functions functions = connection.execute("SELECT create_query FROM system.functions WHERE origin = 'SQLUserDefined' ORDER BY name")['data'].flatten # put to file File.open(args.first, 'w:utf-8') do |file| functions.each do |function| file.puts function.gsub('\\n', "\n") + ";\n\n" end tables.each do |table| file.puts table + ";\n\n" end end end |
#structure_load(*args) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/clickhouse-activerecord/tasks.rb', line 64 def structure_load(*args) File.read(args.first).split(";\n\n").each do |sql| if sql.gsub(/[a-z]/i, '').blank? next elsif sql =~ /^INSERT INTO/ connection.do_execute(sql, nil, format: nil) elsif sql =~ /^CREATE .*?FUNCTION/ connection.do_execute(sql, nil, format: nil) else connection.execute(sql) end end end |