clickhouse-activerecord 1.1.1 → 1.1.3

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: 33b7616478a348a6d6cb1566fbf48bf5e1bad4f0dbb72269eb9befd851416121
4
- data.tar.gz: d6479be11b4f06096e7fdf24bb75742e1ac2381e671918088ca05f83960bd6a9
3
+ metadata.gz: 419c50a4b99b183f729939034e8f6b671bf899fb0ef93fc97f105798fa437aa1
4
+ data.tar.gz: 7508a2ed443d64565ca6b1f5af48bf076cf40d2eae91fd3c3187cae05371a864
5
5
  SHA512:
6
- metadata.gz: dc19098e7e42c154e6255a90e6abf4e46d4546658c8db1b8ade27caa3e73e3fb29636e64c05c3160522a9bdd8c12f95b515300a637453e05a520a6d92746b248
7
- data.tar.gz: 64c7023e7cc381696a6f97ae8fa3b5ed20cdf6d971bc7f852a8403895ce62d0274fddc3325978f6d733b086e322967c7b827e94bc10e09da364fc7fd040081fe
6
+ metadata.gz: 8e8607fa219f6e17e22a3029ba564e6d3d6d2bd39cf86f639d277a6e83fe2ffb1a47e93fceb8d20c4de6a7e9679f8a15b40ee744bfa445be14e6e0693dde4a0e
7
+ data.tar.gz: 5e58b79aab91a64387dc74821a75710c70738791227084a3a6ce29e72827a40e0458d48643a99c14b6d2dc6c94bbed8672d31051d7501084aa3a7e0bc27ef6a1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ### Version 1.1.2 (Aug 27, 2024)
2
+ * 🎉 Support for rails 7.2 #156
3
+ * Add method `views` for getting table `View` list in #152
4
+ * Add support for Map datatype in #144
5
+ * Add support window named functions
6
+ * Fix schema dumper default values for number
7
+ * Normalize table name in schema dump in #148
8
+ * Noop savepoint functionality in #150
9
+ * Fix `#find_by` in #153
10
+ * Add RSpec configure
11
+ * Fix detect model primary key
12
+
1
13
  ### Version 1.0.7 (Apr 27, 2024)
2
14
 
3
15
  * Support table indexes
@@ -6,11 +6,11 @@ module ActiveRecord
6
6
 
7
7
  module ClassMethods # :nodoc:
8
8
  def quote_column_name(name)
9
- name
9
+ name.to_s.include?('.') ? "`#{name}`" : name.to_s
10
10
  end
11
11
 
12
12
  def quote_table_name(name)
13
- name
13
+ name.to_s
14
14
  end
15
15
  end
16
16
  end
@@ -47,7 +47,7 @@ module ActiveRecord
47
47
 
48
48
  module ModelSchema
49
49
  module ClassMethods
50
- delegate :final, :final!, :settings, :settings!, to: :all
50
+ delegate :final, :final!, :settings, :settings!, :window, :window!, to: :all
51
51
 
52
52
  def is_view
53
53
  @is_view || false
@@ -142,6 +142,11 @@ module ActiveRecord
142
142
  connect
143
143
  end
144
144
 
145
+ # Return ClickHouse server version
146
+ def server_version
147
+ @server_version ||= do_system_execute('SELECT version()')['data'][0][0]
148
+ end
149
+
145
150
  # Savepoints are not supported, noop
146
151
  def create_savepoint(name)
147
152
  end
@@ -276,10 +281,15 @@ module ActiveRecord
276
281
 
277
282
  # SCHEMA STATEMENTS ========================================
278
283
 
279
- def primary_key(table_name) #:nodoc:
284
+ def primary_keys(table_name)
285
+ if server_version.to_f >= 23.4
286
+ structure = do_system_execute("SHOW COLUMNS FROM `#{table_name}`")
287
+ return structure['data'].select {|m| m[3]&.include?('PRI') }.pluck(0)
288
+ end
289
+
280
290
  pk = table_structure(table_name).first
281
- return 'id' if pk.present? && pk[0] == 'id'
282
- false
291
+ return ['id'] if pk.present? && pk[0] == 'id'
292
+ []
283
293
  end
284
294
 
285
295
  def create_schema_dumper(options) # :nodoc:
@@ -74,6 +74,14 @@ module Arel
74
74
  infix_value o, collector, op
75
75
  end
76
76
 
77
+ def visit_Arel_Nodes_Rows(o, collector)
78
+ if o.expr.is_a?(String)
79
+ collector << "ROWS #{o.expr}"
80
+ else
81
+ super
82
+ end
83
+ end
84
+
77
85
  def sanitize_as_setting_value(value)
78
86
  if value == :default
79
87
  'DEFAULT'
@@ -54,16 +54,11 @@ module ClickhouseActiverecord
54
54
  tbl.print ', materialized: true' if match && match[1].presence
55
55
  end
56
56
 
57
- case pk
58
- when String
59
- tbl.print ", primary_key: #{pk.inspect}" unless pk == "id"
60
- pkcol = columns.detect { |c| c.name == pk }
61
- pkcolspec = column_spec_for_primary_key(pkcol)
62
- if pkcolspec.present?
63
- tbl.print ", #{format_colspec(pkcolspec)}"
57
+ if (id = columns.detect { |c| c.name == 'id' })
58
+ spec = column_spec_for_primary_key(id)
59
+ if spec.present?
60
+ tbl.print ", #{format_colspec(spec)}"
64
61
  end
65
- when Array
66
- tbl.print ", primary_key: #{pk.inspect}"
67
62
  else
68
63
  tbl.print ", id: false"
69
64
  end
@@ -1,3 +1,3 @@
1
1
  module ClickhouseActiverecord
2
- VERSION = '1.1.1'
2
+ VERSION = '1.1.3'
3
3
  end
@@ -64,6 +64,23 @@ module CoreExtensions
64
64
  self
65
65
  end
66
66
 
67
+ # Windows functions let you perform calculations across a set of rows that are related to the current row. For example:
68
+ #
69
+ # users = User.window('x', order: 'date', partition: 'name', rows: 'UNBOUNDED PRECEDING').select('sum(value) OVER x')
70
+ # # SELECT sum(value) OVER x FROM users WINDOW x AS (PARTITION BY name ORDER BY date ROWS UNBOUNDED PRECEDING)
71
+ #
72
+ # @param [String] name
73
+ # @param [Hash] opts
74
+ def window(name, **opts)
75
+ spawn.window!(name, **opts)
76
+ end
77
+
78
+ def window!(name, **opts)
79
+ @values[:windows] = [] unless @values[:windows]
80
+ @values[:windows] << [name, opts]
81
+ self
82
+ end
83
+
67
84
  private
68
85
 
69
86
  def check_command(cmd)
@@ -80,6 +97,7 @@ module CoreExtensions
80
97
  arel.final! if @values[:final].present?
81
98
  arel.settings(@values[:settings]) if @values[:settings].present?
82
99
  arel.using(@values[:using]) if @values[:using].present?
100
+ arel.windows(@values[:windows]) if @values[:windows].present?
83
101
 
84
102
  arel
85
103
  end
@@ -13,6 +13,18 @@ module CoreExtensions
13
13
  self
14
14
  end
15
15
 
16
+ # @param [Array] windows
17
+ def windows(windows)
18
+ @ctx.windows = windows.map do |name, opts|
19
+ # https://github.com/rails/rails/blob/main/activerecord/test/cases/arel/select_manager_test.rb#L790
20
+ window = ::Arel::Nodes::NamedWindow.new(name)
21
+ opts.each do |key, value|
22
+ window.send(key, value)
23
+ end
24
+ window
25
+ end
26
+ end
27
+
16
28
  def using(*exprs)
17
29
  @ctx.source.right.last.right = ::Arel::Nodes::Using.new(::Arel.sql(exprs.join(',')))
18
30
  self
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.1.1
4
+ version: 1.1.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: 2024-08-19 00:00:00.000000000 Z
11
+ date: 2024-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler