clickhouse-activerecord 0.5.12 → 0.5.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 324c3a376214e1c201b3f5dd052c971a1eb7330033960db2eb10a2671f13d187
4
- data.tar.gz: 36f71acd4ef651b78d23771f1620b488e0f963576af8ef11890b7c0d83d8c1c2
3
+ metadata.gz: 4ff54c1e4a5da2543e1a64ad8002822bf82ba5d3b6f7f74f00f1cb0ce23679dd
4
+ data.tar.gz: 61158e185f4617e88701d2a9b1d261ddf7b4f9c7617454e66a899d55900a34a8
5
5
  SHA512:
6
- metadata.gz: a1f13b9879af1ca6ef2d6a8dcce1ceb09a4b342659ae4cf7389d47ec41e7b608000f2d1810503996dafa38a3ff84bee901d8d0ec8c413e3086ac99d71c8f5618
7
- data.tar.gz: 43ccc8f02a079bf62569bf0977f1ff45306166a61d30feaa817ddd253732a0426728e9926adeb36c31fcae807ff4b26e969de8b2fe8154952cbd8656e29f3f8d
6
+ metadata.gz: 2d690a0cf443ce6e1b3f90e0443263e27b44be546fd080c11c8aa0278d6f630360371057880e667d4f5f76e31ac9bccf1b71fdfffeda09aa7d4d9a49af786f79
7
+ data.tar.gz: f0f96caa0371b8206cee957e38b9f24993549eaa2dcc03265d4b398e051a0a9ebe32a7262c949bf4510dda3f843d8e9e2bb2437cc364dd9bf06f5a622e085530
@@ -23,6 +23,42 @@ module ActiveRecord
23
23
  @subtype
24
24
  end
25
25
 
26
+ def deserialize(value)
27
+ if value.is_a?(::Array)
28
+ value.map { |item| deserialize(item) }
29
+ else
30
+ return value if value.nil?
31
+ case @subtype
32
+ when :integer
33
+ value.to_i
34
+ when :datetime
35
+ ::DateTime.parse(value)
36
+ when :date
37
+ ::Date.parse(value)
38
+ else
39
+ super
40
+ end
41
+ end
42
+ end
43
+
44
+ def serialize(value)
45
+ if value.is_a?(::Array)
46
+ value.map { |item| serialize(item) }
47
+ else
48
+ return value if value.nil?
49
+ case @subtype
50
+ when :integer
51
+ value.to_i
52
+ when :datetime
53
+ DateTime.new.serialize(value)
54
+ when :date
55
+ Date.new.serialize(value)
56
+ else
57
+ super
58
+ end
59
+ end
60
+ end
61
+
26
62
  end
27
63
  end
28
64
  end
@@ -125,7 +125,11 @@ module ActiveRecord
125
125
  end
126
126
 
127
127
  def current_database
128
- ActiveRecord::Base.connection_db_config.database
128
+ if ActiveRecord::version >= Gem::Version.new('6')
129
+ ActiveRecord::Base.connection_db_config.database
130
+ else
131
+ ActiveRecord::Base.connection_config[:database]
132
+ end
129
133
  end
130
134
  end
131
135
  end
@@ -11,6 +11,7 @@ require 'active_record/connection_adapters/clickhouse/schema_definitions'
11
11
  require 'active_record/connection_adapters/clickhouse/schema_creation'
12
12
  require 'active_record/connection_adapters/clickhouse/schema_statements'
13
13
  require 'net/http'
14
+ require 'openssl'
14
15
 
15
16
  module ActiveRecord
16
17
  class Base
@@ -47,19 +48,6 @@ module ActiveRecord
47
48
  end
48
49
  end
49
50
 
50
- module ClickhouseRelationReverseOrder
51
- def reverse_order!
52
- return super unless connection.is_a?(ConnectionAdapters::ClickhouseAdapter)
53
-
54
- orders = order_values.uniq.compact_blank
55
- return super unless orders.empty? && !primary_key
56
-
57
- self.order_values = %w(date created_at).select {|c| column_names.include?(c) }.map{|c| arel_attribute(c).desc }
58
- self
59
- end
60
- end
61
- Relation.prepend(ClickhouseRelationReverseOrder)
62
-
63
51
  module TypeCaster
64
52
  class Map
65
53
  def is_view
@@ -73,7 +61,7 @@ module ActiveRecord
73
61
  end
74
62
 
75
63
  module ModelSchema
76
- module ClassMethods
64
+ module ClassMethods
77
65
  def is_view
78
66
  @is_view || false
79
67
  end
@@ -224,6 +212,15 @@ module ActiveRecord
224
212
  end
225
213
  end
226
214
 
215
+ def _quote(value)
216
+ case value
217
+ when Array
218
+ '[' + value.map { |v| _quote(v) }.join(', ') + ']'
219
+ else
220
+ super
221
+ end
222
+ end
223
+
227
224
  # Quoting time without microseconds
228
225
  def quoted_date(value)
229
226
  if value.acts_like?(:time)
@@ -301,6 +298,7 @@ module ActiveRecord
301
298
  options = apply_replica(table_name, options)
302
299
  td = create_table_definition(apply_cluster(table_name), **options)
303
300
  block.call td if block_given?
301
+ td.column(:id, options[:id], null: false) if options[:id].present? && td[:id].blank?
304
302
 
305
303
  if options[:force]
306
304
  drop_table(table_name, options.merge(if_exists: true))
@@ -341,8 +339,22 @@ module ActiveRecord
341
339
  end
342
340
  end
343
341
 
342
+ def add_column(table_name, column_name, type, **options)
343
+ return if options[:if_not_exists] == true && column_exists?(table_name, column_name, type)
344
+
345
+ at = create_alter_table table_name
346
+ at.add_column(column_name, type, **options)
347
+ execute(schema_creation.accept(at), nil, settings: {wait_end_of_query: 1, send_progress_in_http_headers: 1})
348
+ end
349
+
350
+ def remove_column(table_name, column_name, type = nil, **options)
351
+ return if options[:if_exists] == true && !column_exists?(table_name, column_name)
352
+
353
+ execute("ALTER TABLE #{quote_table_name(table_name)} #{remove_column_for_alter(table_name, column_name, type, **options)}", nil, settings: {wait_end_of_query: 1, send_progress_in_http_headers: 1})
354
+ end
355
+
344
356
  def change_column(table_name, column_name, type, options = {})
345
- result = do_execute "ALTER TABLE #{quote_table_name(table_name)} #{change_column_for_alter(table_name, column_name, type, options)}"
357
+ result = do_execute("ALTER TABLE #{quote_table_name(table_name)} #{change_column_for_alter(table_name, column_name, type, options)}", nil, settings: {wait_end_of_query: 1, send_progress_in_http_headers: 1})
346
358
  raise "Error parse json response: #{result}" if result.presence && !result.is_a?(Hash)
347
359
  end
348
360
 
@@ -4,6 +4,12 @@ module ClickhouseActiverecord
4
4
  require 'rails'
5
5
 
6
6
  class Railtie < Rails::Railtie
7
+ initializer "clickhouse.load" do
8
+ ActiveSupport.on_load :active_record do
9
+ ClickhouseActiverecord.load
10
+ end
11
+ end
12
+
7
13
  rake_tasks { load 'tasks/clickhouse.rake' }
8
14
  end
9
15
  end
@@ -1,3 +1,3 @@
1
1
  module ClickhouseActiverecord
2
- VERSION = '0.5.12'
2
+ VERSION = '0.5.14'
3
3
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'active_record/connection_adapters/clickhouse_adapter'
4
4
 
5
+ require 'core_extensions/active_record/relation'
6
+
5
7
  require_relative '../core_extensions/active_record/migration/command_recorder'
6
8
  ActiveRecord::Migration::CommandRecorder.include CoreExtensions::ActiveRecord::Migration::CommandRecorder
7
9
 
@@ -14,5 +16,7 @@ if defined?(Rails::Railtie)
14
16
  end
15
17
 
16
18
  module ClickhouseActiverecord
17
-
19
+ def self.load
20
+ ActiveRecord::Relation.prepend(CoreExtensions::ActiveRecord::Relation)
21
+ end
18
22
  end
@@ -0,0 +1,15 @@
1
+ module CoreExtensions
2
+ module ActiveRecord
3
+ module Relation
4
+ def reverse_order!
5
+ return super unless connection.is_a?(::ActiveRecord::ConnectionAdapters::ClickhouseAdapter)
6
+
7
+ orders = order_values.uniq.reject(&:blank?)
8
+ return super unless orders.empty? && !primary_key
9
+
10
+ self.order_values = (column_names & %w[date created_at]).map { |c| arel_table[c].desc }
11
+ self
12
+ end
13
+ end
14
+ end
15
+ 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: 0.5.12
4
+ version: 0.5.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Odintsov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-17 00:00:00.000000000 Z
11
+ date: 2023-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,13 +130,14 @@ files:
130
130
  - lib/clickhouse-activerecord/schema_dumper.rb
131
131
  - lib/clickhouse-activerecord/tasks.rb
132
132
  - lib/clickhouse-activerecord/version.rb
133
+ - lib/core_extensions/active_record/relation.rb
133
134
  - lib/generators/clickhouse_migration_generator.rb
134
135
  - lib/tasks/clickhouse.rake
135
136
  homepage: https://github.com/pnixx/clickhouse-activerecord
136
137
  licenses:
137
138
  - MIT
138
139
  metadata: {}
139
- post_install_message:
140
+ post_install_message:
140
141
  rdoc_options: []
141
142
  require_paths:
142
143
  - lib
@@ -151,8 +152,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
152
  - !ruby/object:Gem::Version
152
153
  version: '0'
153
154
  requirements: []
154
- rubygems_version: 3.0.3.1
155
- signing_key:
155
+ rubygems_version: 3.0.4
156
+ signing_key:
156
157
  specification_version: 4
157
158
  summary: ClickHouse ActiveRecord
158
159
  test_files: []