clickhouse-activerecord 0.4.0 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b584e48174f94997dc9dd04d3ffde3ff7c4b24535117c565e580c646f2f2581c
|
4
|
+
data.tar.gz: 9e7c01a185d23ac6e5ac16da635b118a59e7a7c7cdf86ce1c28e92aebacd3baa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b3132522dbc7abaffa180049e350d4ceea82863ab3c208611c4b3227e6ebece1f706262daebec562bd13822fdcd31d44e6321ec97083543484e238e3e07ed2f
|
7
|
+
data.tar.gz: 44f3c58ff30e78b4e83066fbf9609bd656bf9c3e64f56a6113713068b98393c680ec949b5d8832da533ea6cc12216584a9fcf7b34279efc8c499ec9ff376a166
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -125,7 +125,11 @@ Schema load from `db/clickhouse_schema.rb` file:
|
|
125
125
|
|
126
126
|
$ rake clickhouse:schema:load
|
127
127
|
|
128
|
-
|
128
|
+
For export schema to PostgreSQL, you need use:
|
129
|
+
|
130
|
+
$ rake clickhouse:schema:dump -- --simple
|
131
|
+
|
132
|
+
Schema will be dump to `db/clickhouse_schema_simple.rb`. If default file exists, it will be auto update after migration.
|
129
133
|
|
130
134
|
Structure dump to `db/clickhouse_structure.sql` file:
|
131
135
|
|
@@ -244,6 +244,10 @@ module ActiveRecord
|
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
247
|
+
def rename_table(table_name, new_name)
|
248
|
+
do_execute apply_cluster "RENAME TABLE #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}"
|
249
|
+
end
|
250
|
+
|
247
251
|
def drop_table(table_name, options = {}) # :nodoc:
|
248
252
|
do_execute apply_cluster "DROP TABLE#{' IF EXISTS' if options[:if_exists]} #{quote_table_name(table_name)}"
|
249
253
|
end
|
@@ -277,7 +281,7 @@ module ActiveRecord
|
|
277
281
|
end
|
278
282
|
|
279
283
|
def apply_replica(table, options)
|
280
|
-
if replica && cluster
|
284
|
+
if replica && cluster && options[:options]
|
281
285
|
match = options[:options].match(/^(.*?MergeTree)\(([^\)]*)\)(.*?)$/)
|
282
286
|
if match
|
283
287
|
options[:options] = "Replicated#{match[1]}(#{([replica_path(table), replica].map{|v| "'#{v}'"} + [match[2].presence]).compact.join(', ')})#{match[3]}"
|
@@ -1,6 +1,19 @@
|
|
1
1
|
module ClickhouseActiverecord
|
2
2
|
class SchemaDumper < ::ActiveRecord::ConnectionAdapters::SchemaDumper
|
3
3
|
|
4
|
+
attr_accessor :simple
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def dump(connection = ActiveRecord::Base.connection, stream = STDOUT, config = ActiveRecord::Base, default = false)
|
8
|
+
dumper = connection.create_schema_dumper(generate_options(config))
|
9
|
+
dumper.simple = default
|
10
|
+
dumper.dump(stream)
|
11
|
+
stream
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
4
17
|
def header(stream)
|
5
18
|
stream.puts <<HEADER
|
6
19
|
# This file is auto-generated from the current state of the database. Instead
|
@@ -8,27 +21,29 @@ module ClickhouseActiverecord
|
|
8
21
|
# incrementally modify your database, and then regenerate this schema definition.
|
9
22
|
#
|
10
23
|
# This file is the source Rails uses to define your schema when running `rails
|
11
|
-
# clickhouse:schema:load`. When creating a new database, `rails clickhouse:schema:load` tends to
|
24
|
+
# #{simple ? 'db' : 'clickhouse'}:schema:load`. When creating a new database, `rails #{simple ? 'db' : 'clickhouse'}:schema:load` tends to
|
12
25
|
# be faster and is potentially less error prone than running all of your
|
13
26
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
14
27
|
# migrations use external dependencies or application code.
|
15
28
|
#
|
16
29
|
# It's strongly recommended that you check this file into your version control system.
|
17
30
|
|
18
|
-
ClickhouseActiverecord::Schema.define(#{define_params}) do
|
31
|
+
#{simple ? 'ActiveRecord' : 'ClickhouseActiverecord'}::Schema.define(#{define_params}) do
|
19
32
|
|
20
33
|
HEADER
|
21
34
|
end
|
22
35
|
|
23
36
|
def table(table, stream)
|
24
37
|
if table.match(/^\.inner\./).nil?
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
38
|
+
unless simple
|
39
|
+
stream.puts " # TABLE: #{table}"
|
40
|
+
sql = @connection.do_system_execute("SHOW CREATE TABLE `#{table.gsub(/^\.inner\./, '')}`")['data'].try(:first).try(:first)
|
41
|
+
stream.puts " # SQL: #{sql.gsub(/ENGINE = Replicated(.*?)\('[^']+',\s*'[^']+',?\s?([^\)]*)?\)/, "ENGINE = \\1(\\2)")}" if sql
|
42
|
+
# super(table.gsub(/^\.inner\./, ''), stream)
|
43
|
+
|
44
|
+
# detect view table
|
45
|
+
match = sql.match(/^CREATE\s+(MATERIALIZED)\s+VIEW/)
|
46
|
+
end
|
32
47
|
|
33
48
|
# Copy from original dumper
|
34
49
|
columns = @connection.columns(table)
|
@@ -40,9 +55,11 @@ HEADER
|
|
40
55
|
|
41
56
|
tbl.print " create_table #{remove_prefix_and_suffix(table).inspect}"
|
42
57
|
|
43
|
-
|
44
|
-
|
45
|
-
|
58
|
+
unless simple
|
59
|
+
# Add materialize flag
|
60
|
+
tbl.print ', view: true' if match
|
61
|
+
tbl.print ', materialized: true' if match && match[1].presence
|
62
|
+
end
|
46
63
|
|
47
64
|
case pk
|
48
65
|
when String
|
@@ -58,9 +75,11 @@ HEADER
|
|
58
75
|
tbl.print ", id: false"
|
59
76
|
end
|
60
77
|
|
61
|
-
|
62
|
-
|
63
|
-
|
78
|
+
unless simple
|
79
|
+
table_options = @connection.table_options(table)
|
80
|
+
if table_options.present?
|
81
|
+
tbl.print ", #{format_options(table_options)}"
|
82
|
+
end
|
64
83
|
end
|
65
84
|
|
66
85
|
tbl.puts ", force: :cascade do |t|"
|
@@ -96,5 +115,13 @@ HEADER
|
|
96
115
|
end
|
97
116
|
super
|
98
117
|
end
|
118
|
+
|
119
|
+
def format_colspec(colspec)
|
120
|
+
if simple
|
121
|
+
super.gsub(/CAST\(([^,]+),.*?\)/, "\\1")
|
122
|
+
else
|
123
|
+
super
|
124
|
+
end
|
125
|
+
end
|
99
126
|
end
|
100
127
|
end
|
data/lib/tasks/clickhouse.rake
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
namespace :clickhouse do
|
4
4
|
|
5
5
|
task prepare_schema_migration_table: :environment do
|
6
|
-
ClickhouseActiverecord::SchemaMigration.create_table
|
6
|
+
ClickhouseActiverecord::SchemaMigration.create_table unless ENV['simple'] || ARGV.map{|a| a.include?('--simple') ? true : nil}.compact.any?
|
7
7
|
end
|
8
8
|
|
9
9
|
task prepare_internal_metadata_table: :environment do
|
10
|
-
ClickhouseActiverecord::InternalMetadata.create_table
|
10
|
+
ClickhouseActiverecord::InternalMetadata.create_table unless ENV['simple'] || ARGV.map{|a| a.include?('--simple') ? true : nil}.compact.any?
|
11
11
|
end
|
12
12
|
|
13
13
|
task load_config: :environment do
|
@@ -20,16 +20,18 @@ namespace :clickhouse do
|
|
20
20
|
|
21
21
|
# todo not testing
|
22
22
|
desc 'Load database schema'
|
23
|
-
task load: [:load_config, :prepare_schema_migration_table, :prepare_internal_metadata_table] do
|
24
|
-
|
23
|
+
task load: [:load_config, :prepare_schema_migration_table, :prepare_internal_metadata_table] do |t, args|
|
24
|
+
simple = ENV['simple'] || ARGV.map{|a| a.include?('--simple') ? true : nil}.compact.any? ? '_simple' : nil
|
25
|
+
load("#{Rails.root}/db/clickhouse_schema#{simple}.rb")
|
25
26
|
end
|
26
27
|
|
27
28
|
desc 'Dump database schema'
|
28
|
-
task dump: :environment do
|
29
|
-
|
29
|
+
task dump: :environment do |t, args|
|
30
|
+
simple = ENV['simple'] || args[:simple] || ARGV.map{|a| a.include?('--simple') ? true : nil}.compact.any? ? '_simple' : nil
|
31
|
+
filename = "#{Rails.root}/db/clickhouse_schema#{simple}.rb"
|
30
32
|
File.open(filename, 'w:utf-8') do |file|
|
31
33
|
ActiveRecord::Base.establish_connection(:"#{Rails.env}_clickhouse")
|
32
|
-
ClickhouseActiverecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
|
34
|
+
ClickhouseActiverecord::SchemaDumper.dump(ActiveRecord::Base.connection, file, ActiveRecord::Base, !!simple)
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -71,6 +73,9 @@ namespace :clickhouse do
|
|
71
73
|
desc 'Migrate the clickhouse database'
|
72
74
|
task migrate: [:load_config, :prepare_schema_migration_table, :prepare_internal_metadata_table] do
|
73
75
|
Rake::Task['db:migrate'].execute
|
76
|
+
if File.exists? "#{Rails.root}/db/clickhouse_schema_simple.rb"
|
77
|
+
Rake::Task['clickhouse:schema:dump'].execute(simple: true)
|
78
|
+
end
|
74
79
|
end
|
75
80
|
|
76
81
|
desc 'Rollback the clickhouse database'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clickhouse-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Odintsov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|