clickhouse-activerecord 1.4.0 → 1.5.0

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: cd5f6e3d161c6a71abcbafb000b06a3bf0637c07f451bd410c06f9d25fe20901
4
- data.tar.gz: e4ba690507249b3a5d9d1a975b5cc3c7d0bfa6018f5744b84f2a382be3bcd996
3
+ metadata.gz: b8c5d0d360ba85375ca8f11600f5a6c3e37cd24504ede6255dbced8e3652319b
4
+ data.tar.gz: d2491e138a661eeb1c9952064e55125eed84f61fdebab88279e3ba73d881d19f
5
5
  SHA512:
6
- metadata.gz: 3fdc2f20d8540d9599bf6281d19b8408022575d5a6648caaff55337e039bc6538c8da95004f9ab9eea74bd438c514d7907b25cd7ddd58d5f134fbc1ff77732eb
7
- data.tar.gz: 45d9da6d58a53e614d2966bfcf0b7db575dce2e8afab6bfdc8cb0f4853ca977a6bfd15e43f767bcce934dbfea371921abc0215f0fdf304661961c58d499bde4a
6
+ metadata.gz: 3904eff8d2ff017cdb2572483baa5e201e8280799a4ab8753e5545ac27795365bec5174b183b2128cdbe7c8cf075c935f9d9f0b83045c5569db397a22ece8ad7
7
+ data.tar.gz: 80aed33044ca6ebf12280f352e41584a7c9582f7e934f44370a49148ad292a3af499f2d5132621142756fd384cea51111c59bed8f4a188539ed80b552befba7e
@@ -15,15 +15,16 @@
15
15
  <tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
16
16
  <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
17
17
  <access_control_path>/var/lib/clickhouse/access/</access_control_path>
18
+ <format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path>
18
19
  <keep_alive_timeout>3</keep_alive_timeout>
19
20
 
20
21
  <logger>
21
- <level>debug</level>
22
+ <level>error</level>
22
23
  <log>/var/log/clickhouse-server/clickhouse-server.log</log>
23
24
  <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
24
25
  <size>1000M</size>
25
26
  <count>10</count>
26
- <console>1</console>
27
+ <console>0</console>
27
28
  </logger>
28
29
 
29
30
  <remote_servers>
@@ -114,4 +115,11 @@
114
115
  <value>86400</value>
115
116
  </header>
116
117
  </http_options_response>
118
+
119
+ <user_directories>
120
+ <users_xml>
121
+ <path>users.xml</path>
122
+ </users_xml>
123
+ </user_directories>
124
+
117
125
  </clickhouse>
@@ -15,15 +15,16 @@
15
15
  <tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
16
16
  <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
17
17
  <access_control_path>/var/lib/clickhouse/access/</access_control_path>
18
+ <format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path>
18
19
  <keep_alive_timeout>3</keep_alive_timeout>
19
20
 
20
21
  <logger>
21
- <level>debug</level>
22
+ <level>error</level>
22
23
  <log>/var/log/clickhouse-server/clickhouse-server.log</log>
23
24
  <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
24
25
  <size>1000M</size>
25
26
  <count>10</count>
26
- <console>1</console>
27
+ <console>0</console>
27
28
  </logger>
28
29
 
29
30
  <remote_servers>
@@ -114,4 +115,11 @@
114
115
  <value>86400</value>
115
116
  </header>
116
117
  </http_options_response>
118
+
119
+ <user_directories>
120
+ <users_xml>
121
+ <path>users.xml</path>
122
+ </users_xml>
123
+ </user_directories>
124
+
117
125
  </clickhouse>
@@ -14,15 +14,16 @@
14
14
  <tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
15
15
  <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
16
16
  <access_control_path>/var/lib/clickhouse/access/</access_control_path>
17
+ <format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path>
17
18
  <keep_alive_timeout>3</keep_alive_timeout>
18
19
 
19
20
  <logger>
20
- <level>debug</level>
21
+ <level>error</level>
21
22
  <log>/var/log/clickhouse-server/clickhouse-server.log</log>
22
23
  <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
23
24
  <size>1000M</size>
24
25
  <count>10</count>
25
- <console>1</console>
26
+ <console>0</console>
26
27
  </logger>
27
28
 
28
29
  <query_log>
@@ -51,4 +52,10 @@
51
52
  </header>
52
53
  </http_options_response>
53
54
 
55
+ <user_directories>
56
+ <users_xml>
57
+ <path>users.xml</path>
58
+ </users_xml>
59
+ </user_directories>
60
+
54
61
  </clickhouse>
@@ -8,8 +8,17 @@
8
8
  </profiles>
9
9
 
10
10
  <users>
11
+ <test>
12
+ <password>test</password>
13
+ <networks>
14
+ <ip>::/0</ip>
15
+ </networks>
16
+ <profile>default</profile>
17
+ <quota>default</quota>
18
+ <access_management>1</access_management>
19
+ </test>
11
20
  <default>
12
- <password></password>
21
+ <password />
13
22
  <networks>
14
23
  <ip>::/0</ip>
15
24
  </networks>
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  clickhouse1:
3
- image: 'clickhouse/clickhouse-server:${CLICKHOUSE_VERSION-23.11-alpine}'
3
+ image: 'clickhouse/clickhouse-server:${CLICKHOUSE_VERSION}'
4
4
  ulimits:
5
5
  nofile:
6
6
  soft: 262144
@@ -18,7 +18,7 @@ services:
18
18
  interval: 5s
19
19
 
20
20
  clickhouse2:
21
- image: 'clickhouse/clickhouse-server:${CLICKHOUSE_VERSION-23.11-alpine}'
21
+ image: 'clickhouse/clickhouse-server:${CLICKHOUSE_VERSION}'
22
22
  ulimits:
23
23
  nofile:
24
24
  soft: 262144
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  clickhouse:
3
- image: 'clickhouse/clickhouse-server:${CLICKHOUSE_VERSION-23.11-alpine}'
3
+ image: 'clickhouse/clickhouse-server:${CLICKHOUSE_VERSION}'
4
4
  container_name: 'clickhouse-activerecord-clickhouse-server'
5
5
  ports:
6
6
  - '18123:8123'
@@ -14,6 +14,8 @@ jobs:
14
14
  env:
15
15
  CLICKHOUSE_PORT: 18123
16
16
  CLICKHOUSE_DATABASE: default
17
+ CLICKHOUSE_USER: test
18
+ CLICKHOUSE_PASSWORD: test
17
19
 
18
20
  strategy:
19
21
  fail-fast: true
@@ -22,21 +24,21 @@ jobs:
22
24
  version:
23
25
  - ruby: 2.7
24
26
  rails: 7.1.3
25
- - ruby: 3.0
26
- rails: 7.1.3
27
27
  - ruby: 3.2
28
28
  rails: 7.1.3
29
29
  - ruby: 3.2
30
30
  rails: 7.2.1
31
31
  - ruby: 3.2
32
32
  rails: 8.0.1
33
- clickhouse: [ '22.1', '24.9' ]
33
+ - ruby: 3.2
34
+ rails: 8.1
35
+ clickhouse: [ '24.9', '25.10' ]
34
36
 
35
37
  steps:
36
38
  - uses: actions/checkout@v4
37
39
 
38
40
  - name: Start ClickHouse ${{ matrix.clickhouse }}
39
- uses: hoverkraft-tech/compose-action@v2.1.0
41
+ uses: hoverkraft-tech/compose-action@v2.4.1
40
42
  env:
41
43
  CLICKHOUSE_VERSION: ${{ matrix.clickhouse }}
42
44
  with:
@@ -61,6 +63,8 @@ jobs:
61
63
  CLICKHOUSE_PORT: 28123
62
64
  CLICKHOUSE_DATABASE: default
63
65
  CLICKHOUSE_CLUSTER: test_cluster
66
+ CLICKHOUSE_USER: test
67
+ CLICKHOUSE_PASSWORD: test
64
68
 
65
69
  strategy:
66
70
  fail-fast: true
@@ -69,21 +73,21 @@ jobs:
69
73
  version:
70
74
  - ruby: 2.7
71
75
  rails: 7.1.3
72
- - ruby: 3.0
73
- rails: 7.1.3
74
76
  - ruby: 3.2
75
77
  rails: 7.1.3
76
78
  - ruby: 3.2
77
79
  rails: 7.2.1
78
80
  - ruby: 3.2
79
81
  rails: 8.0.1
80
- clickhouse: [ '22.1', '24.9' ]
82
+ - ruby: 3.2
83
+ rails: 8.1
84
+ clickhouse: [ '24.9', '25.10' ]
81
85
 
82
86
  steps:
83
87
  - uses: actions/checkout@v4
84
88
 
85
89
  - name: Start ClickHouse Cluster ${{ matrix.clickhouse }}
86
- uses: hoverkraft-tech/compose-action@v2.1.0
90
+ uses: hoverkraft-tech/compose-action@v2.4.1
87
91
  env:
88
92
  CLICKHOUSE_VERSION: ${{ matrix.clickhouse }}
89
93
  with:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### Version 1.5.0 (Nov 5, 2025)
2
+
3
+ * 🎉 Support for Rails 8.1
4
+ * Fix sql structure dump with `schema_migrations` #138
5
+ * Remove old tasks
6
+
1
7
  ### Version 1.4.0 (Sep 18, 2025)
2
8
 
3
9
  * `CREATE OR REPLACE FUNCTION` in SQL schema dumps in #198
data/README.md CHANGED
@@ -285,10 +285,10 @@ Engines `MergeTree` and all support replication engines will be replaced to `Rep
285
285
 
286
286
  Donations to this project are going directly to [PNixx](https://github.com/PNixx), the original author of this project:
287
287
 
288
- * BTC address: `1H3rhpf7WEF5JmMZ3PVFMQc7Hm29THgUfN`
288
+ * BTC address: `bc1qr73vls0kv2ujk4ugqmpqj6j0qtqvdr3nx25xdl`
289
289
  * ETH address: `0x6F094365A70fe7836A633d2eE80A1FA9758234d5`
290
290
  * XMR address: `42gP71qLB5M43RuDnrQ3vSJFFxis9Kw9VMURhpx9NLQRRwNvaZRjm2TFojAMC8Fk1BQhZNKyWhoyJSn5Ak9kppgZPjE17Zh`
291
- * TON address: `UQBt0-s1igIpJoEup0B1yAUkZ56rzbpruuAjNhQ26MVCaNlC`
291
+ * TON address: `UQBCnxOfBsHPZ3PesGgMedVMEf5UHnm0jrSq-042pMWw08Ux`
292
292
 
293
293
  ## Development
294
294
 
@@ -5,7 +5,7 @@ module ActiveRecord
5
5
 
6
6
  attr_reader :codec
7
7
 
8
- def initialize(name, default, sql_type_metadata = nil, null = true, default_function = nil, codec: nil, **args)
8
+ def initialize(*, codec: nil, **)
9
9
  super
10
10
  @codec = codec
11
11
  end
@@ -43,7 +43,12 @@ module ActiveRecord
43
43
  sql.gsub!(/\s+(.*)/, " \\1 CODEC(#{options[:codec]})")
44
44
  end
45
45
  sql.gsub!(/(\sString)\(\d+\)/, '\1')
46
- sql << " DEFAULT #{quote_default_expression(options[:default], options[:column])}" if options_include_default?(options)
46
+
47
+ if ::ActiveRecord::version >= Gem::Version.new('8.1')
48
+ sql << " DEFAULT #{quote_default_expression_for_column_definition(options[:default], options[:column])}" if options_include_default?(options)
49
+ else
50
+ sql << " DEFAULT #{quote_default_expression(options[:default], options[:column])}" if options_include_default?(options)
51
+ end
47
52
  sql
48
53
  end
49
54
 
@@ -228,15 +228,20 @@ module ActiveRecord
228
228
  end
229
229
 
230
230
  def new_column_from_field(table_name, field, _definitions)
231
- sql_type = field[1]
231
+ column_name, sql_type, default_type, default_expression = field
232
232
  type_metadata = fetch_type_metadata(sql_type)
233
- default_value = extract_value_from_default(field[3], field[2])
234
- default_function = extract_default_function(field[3])
235
- default_value = lookup_cast_type(sql_type).cast(default_value)
236
- Clickhouse::Column.new(field[0], default_value, type_metadata, field[1].include?('Nullable'), default_function, codec: field[5].presence)
233
+ default_value = extract_value_from_default(default_expression, default_type)
234
+ default_function = extract_default_function(default_expression)
235
+ cast_type = lookup_cast_type(sql_type)
236
+ default_value = cast_type.cast(default_value)
237
+
238
+ args = [column_name]
239
+ args << cast_type if ::ActiveRecord::version >= Gem::Version.new('8.1')
240
+ args += [default_value, type_metadata, field[1].include?('Nullable'), default_function]
241
+
242
+ Clickhouse::Column.new(*args, codec: field[5].presence)
237
243
  end
238
244
 
239
- # Extracts the value from a PostgreSQL column default definition.
240
245
  def extract_value_from_default(default_expression, default_type)
241
246
  return nil if default_type != 'DEFAULT' || default_expression.blank?
242
247
  return nil if has_default_function?(default_expression)
@@ -39,7 +39,6 @@ module ClickhouseActiverecord
39
39
 
40
40
  # get all tables
41
41
  tables = connection.execute("SHOW TABLES FROM #{@configuration.database} WHERE name NOT LIKE '.inner_id.%'")['data'].flatten.map do |table|
42
- next if %w[schema_migrations ar_internal_metadata].include?(table)
43
42
  connection.show_create_table(table, single_line: false).gsub("#{@configuration.database}.", '')
44
43
  end.compact
45
44
 
@@ -1,3 +1,3 @@
1
1
  module ClickhouseActiverecord
2
- VERSION = '1.4.0'
2
+ VERSION = '1.5.0'
3
3
  end
@@ -176,7 +176,9 @@ module CoreExtensions
176
176
  end
177
177
 
178
178
  def build_arel(connection_or_aliases = nil, aliases = nil)
179
- if ::ActiveRecord::version >= Gem::Version.new('7.2')
179
+ requirement = Gem::Requirement.new('>= 7.2', '< 8.1')
180
+
181
+ if requirement.satisfied_by?(::ActiveRecord::version)
180
182
  arel = super
181
183
  else
182
184
  arel = super(connection_or_aliases)
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clickhouse-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Odintsov
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-09-18 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -149,12 +148,10 @@ files:
149
148
  - lib/core_extensions/arel/select_manager.rb
150
149
  - lib/core_extensions/arel/table.rb
151
150
  - lib/generators/clickhouse_migration_generator.rb
152
- - lib/tasks/clickhouse.rake
153
151
  homepage: https://github.com/pnixx/clickhouse-activerecord
154
152
  licenses:
155
153
  - MIT
156
154
  metadata: {}
157
- post_install_message:
158
155
  rdoc_options: []
159
156
  require_paths:
160
157
  - lib
@@ -169,8 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
166
  - !ruby/object:Gem::Version
170
167
  version: '0'
171
168
  requirements: []
172
- rubygems_version: 3.3.7
173
- signing_key:
169
+ rubygems_version: 3.6.9
174
170
  specification_version: 4
175
171
  summary: ClickHouse ActiveRecord
176
172
  test_files: []
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- namespace :clickhouse do
4
- task prepare_schema_migration_table: :environment do
5
- connection = ActiveRecord::Tasks::DatabaseTasks.migration_connection
6
- connection.schema_migration.create_table unless ENV['simple'] || ARGV.any? { |a| a.include?('--simple') }
7
- end
8
-
9
- task prepare_internal_metadata_table: :environment do
10
- connection = ActiveRecord::Tasks::DatabaseTasks.migration_connection
11
- connection.internal_metadata.create_table unless ENV['simple'] || ARGV.any? { |a| a.include?('--simple') }
12
- end
13
-
14
- namespace :schema do
15
- # TODO: deprecated
16
- desc 'Load database schema'
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'
19
- simple = ENV['simple'] || ARGV.any? { |a| a.include?('--simple') } ? '_simple' : nil
20
- ActiveRecord::Base.establish_connection(:clickhouse)
21
- connection = ActiveRecord::Tasks::DatabaseTasks.migration_connection
22
- connection.schema_migration.drop_table
23
- load(Rails.root.join("db/clickhouse_schema#{simple}.rb"))
24
- end
25
-
26
- # TODO: deprecated
27
- desc 'Dump database schema'
28
- task dump: :environment do |_, args|
29
- puts 'Warning: `rake clickhouse:schema:dump` is deprecated! Use `rake db:schema:dump:clickhouse` instead'
30
- simple = ENV['simple'] || args[:simple] || ARGV.any? { |a| a.include?('--simple') } ? '_simple' : nil
31
- filename = Rails.root.join("db/clickhouse_schema#{simple}.rb")
32
- File.open(filename, 'w:utf-8') do |file|
33
- ActiveRecord::Base.establish_connection(:clickhouse)
34
- ClickhouseActiverecord::SchemaDumper.dump(ActiveRecord::Base.connection, file, ActiveRecord::Base, simple.present?)
35
- end
36
- end
37
- end
38
-
39
- namespace :structure do
40
- config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: 'clickhouse')
41
-
42
- desc 'Load database structure'
43
- task load: ['db:check_protected_environments'] do
44
- ClickhouseActiverecord::Tasks.new(config).structure_load(Rails.root.join('db/clickhouse_structure.sql'))
45
- end
46
-
47
- desc 'Dump database structure'
48
- task dump: ['db:check_protected_environments'] do
49
- ClickhouseActiverecord::Tasks.new(config).structure_dump(Rails.root.join('db/clickhouse_structure.sql'))
50
- end
51
- end
52
-
53
- desc 'Creates the database from DATABASE_URL or config/database.yml'
54
- task create: [] do
55
- puts 'Warning: `rake clickhouse:create` is deprecated! Use `rake db:create:clickhouse` instead'
56
- end
57
-
58
- desc 'Drops the database from DATABASE_URL or config/database.yml'
59
- task drop: ['db:check_protected_environments'] do
60
- puts 'Warning: `rake clickhouse:drop` is deprecated! Use `rake db:drop:clickhouse` instead'
61
- end
62
-
63
- desc 'Empty the database from DATABASE_URL or config/database.yml'
64
- task purge: ['db:check_protected_environments'] do
65
- puts 'Warning: `rake clickhouse:purge` is deprecated! Use `rake db:reset:clickhouse` instead'
66
- end
67
-
68
- # desc 'Resets your database using your migrations for the current environment'
69
- task :reset do
70
- puts 'Warning: `rake clickhouse:reset` is deprecated! Use `rake db:reset:clickhouse` instead'
71
- end
72
-
73
- desc 'Migrate the clickhouse database'
74
- task migrate: %i[prepare_schema_migration_table prepare_internal_metadata_table] do
75
- puts 'Warning: `rake clickhouse:migrate` is deprecated! Use `rake db:migrate:clickhouse` instead'
76
- Rake::Task['db:migrate:clickhouse'].execute
77
- if File.exist? "#{Rails.root}/db/clickhouse_schema_simple.rb"
78
- Rake::Task['clickhouse:schema:dump'].execute(simple: true)
79
- end
80
- end
81
-
82
- desc 'Rollback the clickhouse database'
83
- task rollback: %i[prepare_schema_migration_table prepare_internal_metadata_table] do
84
- puts 'Warning: `rake clickhouse:rollback` is deprecated! Use `rake db:rollback:clickhouse` instead'
85
- Rake::Task['db:rollback:clickhouse'].execute
86
- if File.exist? "#{Rails.root}/db/clickhouse_schema_simple.rb"
87
- Rake::Task['clickhouse:schema:dump'].execute(simple: true)
88
- end
89
- end
90
- end