Module: ActiveRecord::ConnectionAdapters::Clickhouse::SchemaStatements
- Included in:
- ActiveRecord::ConnectionAdapters::ClickhouseAdapter
- Defined in:
- lib/active_record/connection_adapters/clickhouse/schema_statements.rb
Instance Method Summary collapse
- #assume_migrated_upto_version(version, migrations_paths = nil) ⇒ Object
- #data_sources ⇒ Object
- #do_execute(sql, name = nil, format: 'JSONCompact', settings: {}) ⇒ Object
- #do_system_execute(sql, name = nil) ⇒ Object
- #exec_delete(_sql, _name = nil, _binds = []) ⇒ Object
- #exec_insert(sql, name, _binds, _pk = nil, _sequence_name = nil) ⇒ Object
- #exec_insert_all(sql, name) ⇒ Object
- #exec_query(sql, name = nil, binds = [], prepare: false) ⇒ Object
- #exec_update(_sql, _name = nil, _binds = []) ⇒ Object
- #execute(sql, name = nil, settings: {}) ⇒ Object
-
#indexes(table_name, name = nil) ⇒ Object
Not indexes on clickhouse.
- #table_options(table) ⇒ Object
- #tables(name = nil) ⇒ Object
Instance Method Details
#assume_migrated_upto_version(version, migrations_paths = nil) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 79 def assume_migrated_upto_version(version, migrations_paths = nil) version = version.to_i sm_table = quote_table_name(schema_migration.table_name) migrated = migration_context.get_all_versions versions = migration_context.migrations.map(&:version) unless migrated.include?(version) exec_insert "INSERT INTO #{sm_table} (version) VALUES (#{quote(version.to_s)})", nil, nil end inserting = (versions - migrated).select { |v| v < version } if inserting.any? if (duplicate = inserting.detect { |v| inserting.count(v) > 1 }) raise "Duplicate migration #{duplicate}. Please renumber your migrations to resolve the conflict." end do_execute(insert_versions_sql(inserting), nil, settings: {max_partitions_per_insert_block: [100, inserting.size].max}) end end |
#data_sources ⇒ Object
57 58 59 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 57 def data_sources tables end |
#do_execute(sql, name = nil, format: 'JSONCompact', settings: {}) ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 69 def do_execute(sql, name = nil, format: 'JSONCompact', settings: {}) log(sql, "#{adapter_name} #{name}") do formatted_sql = apply_format(sql, format) request_params = @config || {} res = @connection.post("/?#{request_params.merge(settings).to_param}", formatted_sql, 'User-Agent' => "Clickhouse ActiveRecord #{ClickhouseActiverecord::VERSION}") process_response(res) end end |
#do_system_execute(sql, name = nil) ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 61 def do_system_execute(sql, name = nil) log_with_debug(sql, "#{adapter_name} #{name}") do res = @connection.post("/?#{@config.to_param}", "#{sql} FORMAT JSONCompact", 'User-Agent' => "Clickhouse ActiveRecord #{ClickhouseActiverecord::VERSION}") process_response(res) end end |
#exec_delete(_sql, _name = nil, _binds = []) ⇒ Object
37 38 39 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 37 def exec_delete(_sql, _name = nil, _binds = []) raise ActiveRecord::ActiveRecordError, 'Clickhouse delete is not supported' end |
#exec_insert(sql, name, _binds, _pk = nil, _sequence_name = nil) ⇒ Object
13 14 15 16 17 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 13 def exec_insert(sql, name, _binds, _pk = nil, _sequence_name = nil) new_sql = sql.dup.sub(/ (DEFAULT )?VALUES/, " VALUES") do_execute(new_sql, name, format: nil) true end |
#exec_insert_all(sql, name) ⇒ Object
28 29 30 31 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 28 def exec_insert_all(sql, name) do_execute(sql, name, format: nil) true end |
#exec_query(sql, name = nil, binds = [], prepare: false) ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 19 def exec_query(sql, name = nil, binds = [], prepare: false) result = do_execute(sql, name) ActiveRecord::Result.new(result['meta'].map { |m| m['name'] }, result['data'], result['meta'].map { |m| [m['name'], type_map.lookup(m['type'])] }.to_h) rescue ActiveRecord::ActiveRecordError => e raise e rescue StandardError => e raise ActiveRecord::ActiveRecordError, "Response: #{e.}" end |
#exec_update(_sql, _name = nil, _binds = []) ⇒ Object
33 34 35 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 33 def exec_update(_sql, _name = nil, _binds = []) raise ActiveRecord::ActiveRecordError, 'Clickhouse update is not supported' end |
#execute(sql, name = nil, settings: {}) ⇒ Object
9 10 11 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 9 def execute(sql, name = nil, settings: {}) do_execute(sql, name, settings: settings) end |
#indexes(table_name, name = nil) ⇒ Object
Not indexes on clickhouse
53 54 55 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 53 def indexes(table_name, name = nil) [] end |
#table_options(table) ⇒ Object
47 48 49 50 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 47 def (table) sql = show_create_table(table) { options: sql.gsub(/^(?:.*?)(?:ENGINE = (.*?))?( AS SELECT .*?)?$/, '\\1').presence, as: sql.match(/^CREATE (?:.*?) AS (SELECT .*?)$/).try(:[], 1) }.compact end |
#tables(name = nil) ⇒ Object
41 42 43 44 45 |
# File 'lib/active_record/connection_adapters/clickhouse/schema_statements.rb', line 41 def tables(name = nil) result = do_system_execute("SHOW TABLES WHERE name NOT LIKE '.inner_id.%'", name) return [] if result.nil? result['data'].flatten end |