clickhouse-activerecord 1.0.4 → 1.0.6
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 +4 -4
- data/.docker/clickhouse/cluster/server1_config.xml +117 -0
- data/.docker/clickhouse/cluster/server2_config.xml +117 -0
- data/.docker/clickhouse/single/config.xml +54 -0
- data/.docker/clickhouse/users.xml +34 -0
- data/.docker/docker-compose.cluster.yml +52 -0
- data/.docker/docker-compose.yml +17 -0
- data/.docker/nginx/local.conf +12 -0
- data/.github/workflows/testing.yml +77 -0
- data/CHANGELOG.md +28 -0
- data/README.md +31 -2
- data/lib/active_record/connection_adapters/clickhouse/oid/uuid.rb +16 -6
- data/lib/active_record/connection_adapters/clickhouse/schema_creation.rb +26 -2
- data/lib/active_record/connection_adapters/clickhouse/schema_definitions.rb +17 -0
- data/lib/active_record/connection_adapters/clickhouse/schema_statements.rb +89 -18
- data/lib/active_record/connection_adapters/clickhouse_adapter.rb +69 -10
- data/lib/arel/visitors/clickhouse.rb +7 -0
- data/lib/clickhouse-activerecord/schema_dumper.rb +30 -2
- data/lib/clickhouse-activerecord/tasks.rb +22 -6
- data/lib/clickhouse-activerecord/version.rb +1 -1
- data/lib/clickhouse-activerecord.rb +4 -6
- data/lib/core_extensions/active_record/internal_metadata.rb +42 -34
- data/lib/core_extensions/active_record/schema_migration.rb +28 -30
- data/lib/tasks/clickhouse.rake +14 -11
- metadata +12 -4
- /data/{core_extensions → lib/core_extensions}/active_record/migration/command_recorder.rb +0 -0
@@ -1,47 +1,45 @@
|
|
1
1
|
module CoreExtensions
|
2
2
|
module ActiveRecord
|
3
3
|
module SchemaMigration
|
4
|
-
module ClassMethods
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
def create_table
|
6
|
+
return super unless connection.is_a?(::ActiveRecord::ConnectionAdapters::ClickhouseAdapter)
|
8
7
|
|
9
|
-
|
8
|
+
return if table_exists?
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
version_options = connection.internal_string_options_for_primary_key
|
11
|
+
table_options = {
|
12
|
+
id: false, options: 'ReplacingMergeTree(ver) ORDER BY (version)', if_not_exists: true
|
13
|
+
}
|
14
|
+
full_config = connection.instance_variable_get(:@config) || {}
|
16
15
|
|
17
|
-
|
18
|
-
|
16
|
+
if full_config[:distributed_service_tables]
|
17
|
+
table_options.merge!(with_distributed: table_name, sharding_key: 'cityHash64(version)')
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
distributed_suffix = "_#{full_config[:distributed_service_tables_suffix] || 'distributed'}"
|
20
|
+
else
|
21
|
+
distributed_suffix = ''
|
22
|
+
end
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
24
|
+
connection.create_table(table_name + distributed_suffix.to_s, **table_options) do |t|
|
25
|
+
t.string :version, **version_options
|
26
|
+
t.column :active, 'Int8', null: false, default: '1'
|
27
|
+
t.datetime :ver, null: false, default: -> { 'now()' }
|
30
28
|
end
|
29
|
+
end
|
31
30
|
|
32
|
-
|
33
|
-
|
31
|
+
def delete_version(version)
|
32
|
+
return super unless connection.is_a?(::ActiveRecord::ConnectionAdapters::ClickhouseAdapter)
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
im = ::Arel::InsertManager.new(arel_table)
|
35
|
+
im.insert(arel_table[primary_key] => version.to_s, arel_table['active'] => 0)
|
36
|
+
connection.insert(im, "#{self.class} Create Rollback Version", primary_key, version)
|
37
|
+
end
|
39
38
|
|
40
|
-
|
41
|
-
|
39
|
+
def all_versions
|
40
|
+
return super unless connection.is_a?(::ActiveRecord::ConnectionAdapters::ClickhouseAdapter)
|
42
41
|
|
43
|
-
|
44
|
-
end
|
42
|
+
final.where(active: 1).order(:version).pluck(:version)
|
45
43
|
end
|
46
44
|
end
|
47
45
|
end
|
data/lib/tasks/clickhouse.rake
CHANGED
@@ -15,15 +15,18 @@ namespace :clickhouse do
|
|
15
15
|
# TODO: deprecated
|
16
16
|
desc 'Load database schema'
|
17
17
|
task load: %i[prepare_internal_metadata_table] do
|
18
|
+
puts 'Warning: `rake clickhouse:schema:load` is deprecated! Use `rake db:schema:load:clickhouse` instead'
|
18
19
|
simple = ENV['simple'] || ARGV.any? { |a| a.include?('--simple') } ? '_simple' : nil
|
19
20
|
ActiveRecord::Base.establish_connection(:clickhouse)
|
20
|
-
ActiveRecord::
|
21
|
+
connection = ActiveRecord::Tasks::DatabaseTasks.migration_connection
|
22
|
+
connection.schema_migration.drop_table
|
21
23
|
load(Rails.root.join("db/clickhouse_schema#{simple}.rb"))
|
22
24
|
end
|
23
25
|
|
24
26
|
# TODO: deprecated
|
25
27
|
desc 'Dump database schema'
|
26
28
|
task dump: :environment do |_, args|
|
29
|
+
puts 'Warning: `rake clickhouse:schema:dump` is deprecated! Use `rake db:schema:dump:clickhouse` instead'
|
27
30
|
simple = ENV['simple'] || args[:simple] || ARGV.any? { |a| a.include?('--simple') } ? '_simple' : nil
|
28
31
|
filename = Rails.root.join("db/clickhouse_schema#{simple}.rb")
|
29
32
|
File.open(filename, 'w:utf-8') do |file|
|
@@ -36,43 +39,38 @@ namespace :clickhouse do
|
|
36
39
|
namespace :structure do
|
37
40
|
desc 'Load database structure'
|
38
41
|
task load: ['db:check_protected_environments'] do
|
39
|
-
config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: 'clickhouse')
|
40
42
|
ClickhouseActiverecord::Tasks.new(config).structure_load(Rails.root.join('db/clickhouse_structure.sql'))
|
41
43
|
end
|
42
44
|
|
43
45
|
desc 'Dump database structure'
|
44
46
|
task dump: ['db:check_protected_environments'] do
|
45
|
-
config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: 'clickhouse')
|
46
47
|
ClickhouseActiverecord::Tasks.new(config).structure_dump(Rails.root.join('db/clickhouse_structure.sql'))
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
50
51
|
desc 'Creates the database from DATABASE_URL or config/database.yml'
|
51
52
|
task create: [] do
|
52
|
-
|
53
|
-
ActiveRecord::Tasks::DatabaseTasks.create(config)
|
53
|
+
puts 'Warning: `rake clickhouse:create` is deprecated! Use `rake db:create:clickhouse` instead'
|
54
54
|
end
|
55
55
|
|
56
56
|
desc 'Drops the database from DATABASE_URL or config/database.yml'
|
57
57
|
task drop: ['db:check_protected_environments'] do
|
58
|
-
|
59
|
-
ActiveRecord::Tasks::DatabaseTasks.drop(config)
|
58
|
+
puts 'Warning: `rake clickhouse:drop` is deprecated! Use `rake db:drop:clickhouse` instead'
|
60
59
|
end
|
61
60
|
|
62
61
|
desc 'Empty the database from DATABASE_URL or config/database.yml'
|
63
62
|
task purge: ['db:check_protected_environments'] do
|
64
|
-
|
65
|
-
ActiveRecord::Tasks::DatabaseTasks.purge(config)
|
63
|
+
puts 'Warning: `rake clickhouse:purge` is deprecated! Use `rake db:reset:clickhouse` instead'
|
66
64
|
end
|
67
65
|
|
68
66
|
# desc 'Resets your database using your migrations for the current environment'
|
69
67
|
task :reset do
|
70
|
-
|
71
|
-
Rake::Task['clickhouse:migrate'].execute
|
68
|
+
puts 'Warning: `rake clickhouse:reset` is deprecated! Use `rake db:reset:clickhouse` instead'
|
72
69
|
end
|
73
70
|
|
74
71
|
desc 'Migrate the clickhouse database'
|
75
72
|
task migrate: %i[prepare_schema_migration_table prepare_internal_metadata_table] do
|
73
|
+
puts 'Warning: `rake clickhouse:migrate` is deprecated! Use `rake db:migrate:clickhouse` instead'
|
76
74
|
Rake::Task['db:migrate:clickhouse'].execute
|
77
75
|
if File.exist? "#{Rails.root}/db/clickhouse_schema_simple.rb"
|
78
76
|
Rake::Task['clickhouse:schema:dump'].execute(simple: true)
|
@@ -81,9 +79,14 @@ namespace :clickhouse do
|
|
81
79
|
|
82
80
|
desc 'Rollback the clickhouse database'
|
83
81
|
task rollback: %i[prepare_schema_migration_table prepare_internal_metadata_table] do
|
82
|
+
puts 'Warning: `rake clickhouse:rollback` is deprecated! Use `rake db:rollback:clickhouse` instead'
|
84
83
|
Rake::Task['db:rollback:clickhouse'].execute
|
85
84
|
if File.exist? "#{Rails.root}/db/clickhouse_schema_simple.rb"
|
86
85
|
Rake::Task['clickhouse:schema:dump'].execute(simple: true)
|
87
86
|
end
|
88
87
|
end
|
88
|
+
|
89
|
+
def config
|
90
|
+
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: 'clickhouse')
|
91
|
+
end
|
89
92
|
end
|
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: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Odintsov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -87,6 +87,14 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
+
- ".docker/clickhouse/cluster/server1_config.xml"
|
91
|
+
- ".docker/clickhouse/cluster/server2_config.xml"
|
92
|
+
- ".docker/clickhouse/single/config.xml"
|
93
|
+
- ".docker/clickhouse/users.xml"
|
94
|
+
- ".docker/docker-compose.cluster.yml"
|
95
|
+
- ".docker/docker-compose.yml"
|
96
|
+
- ".docker/nginx/local.conf"
|
97
|
+
- ".github/workflows/testing.yml"
|
90
98
|
- ".gitignore"
|
91
99
|
- ".rspec"
|
92
100
|
- CHANGELOG.md
|
@@ -98,7 +106,6 @@ files:
|
|
98
106
|
- bin/console
|
99
107
|
- bin/setup
|
100
108
|
- clickhouse-activerecord.gemspec
|
101
|
-
- core_extensions/active_record/migration/command_recorder.rb
|
102
109
|
- lib/active_record/connection_adapters/clickhouse/oid/array.rb
|
103
110
|
- lib/active_record/connection_adapters/clickhouse/oid/big_integer.rb
|
104
111
|
- lib/active_record/connection_adapters/clickhouse/oid/date.rb
|
@@ -119,6 +126,7 @@ files:
|
|
119
126
|
- lib/clickhouse-activerecord/tasks.rb
|
120
127
|
- lib/clickhouse-activerecord/version.rb
|
121
128
|
- lib/core_extensions/active_record/internal_metadata.rb
|
129
|
+
- lib/core_extensions/active_record/migration/command_recorder.rb
|
122
130
|
- lib/core_extensions/active_record/relation.rb
|
123
131
|
- lib/core_extensions/active_record/schema_migration.rb
|
124
132
|
- lib/core_extensions/arel/nodes/select_core.rb
|
@@ -146,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
154
|
- !ruby/object:Gem::Version
|
147
155
|
version: '0'
|
148
156
|
requirements: []
|
149
|
-
rubygems_version: 3.
|
157
|
+
rubygems_version: 3.3.7
|
150
158
|
signing_key:
|
151
159
|
specification_version: 4
|
152
160
|
summary: ClickHouse ActiveRecord
|
File without changes
|