clickhouse-activerecord 0.4.4 → 0.4.9

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: 1cf76e043406ab83146104d257da665657dc9905b6517ea02956f9034ae52ebf
4
- data.tar.gz: 21da146747adec65a6e61bd09dc1ded2be7fd025ecea23736d0985708bafa70b
3
+ metadata.gz: 64fdd9e93e5277c2639a5f88ced05132f09f1c8e455d7db2c171b8cf524295c2
4
+ data.tar.gz: f9745f682cd6a74c940dcf6e049b802e2ceefad4df10c249c0f7f47d7ac2756c
5
5
  SHA512:
6
- metadata.gz: bee84efbe4e210107575a1121a4adc8df4da2f85349abfec2f27c964917a7655438b01cceed36d83fe49f2f70e8f0d8ba32f7e92bb26b5ac5beceddf5243e626
7
- data.tar.gz: bb1576674cbec042f2f2d949a6e35e8ce4ce22615a0bb0aac2d0ee56b35e200cdb28d72a31010e1143c95b47d397821568e709aa6fdd3c0ee9f8f76605de356c
6
+ metadata.gz: df3570664e14b336f3f6bbfa91c03a1450647e1936c45f1e61e812fd449c842be49764d3e16f2b1184bc329a7f9f2e03c6000f10e4344c132cd1f1b269e6395c
7
+ data.tar.gz: 436b4436079fe95ee5e99b3579c6b191738178540f384f6317199f4eaca99a452a178134ae2706f7fe36a121d56c458dfe215118558c5c539956804cecb85790
@@ -36,7 +36,7 @@ module ActiveRecord
36
36
  end
37
37
 
38
38
  def table_options(table)
39
- sql = do_system_execute("SHOW CREATE TABLE `#{table}`")['data'].try(:first).try(:first)
39
+ sql = show_create_table(table)
40
40
  { options: sql.gsub(/^(?:.*?)ENGINE = (.*?)$/, '\\1') }
41
41
  end
42
42
 
@@ -156,6 +156,8 @@ module ActiveRecord
156
156
  when "true".freeze, "false".freeze
157
157
  default
158
158
  # Object identifier types
159
+ when "''"
160
+ ''
159
161
  when /\A-?\d+\z/
160
162
  $1
161
163
  else
@@ -201,6 +201,12 @@ module ActiveRecord
201
201
  ClickhouseActiverecord::SchemaDumper.create(self, options)
202
202
  end
203
203
 
204
+ # @param [String] table
205
+ # @return [String]
206
+ def show_create_table(table)
207
+ do_system_execute("SHOW CREATE TABLE `#{table}`")['data'].try(:first).try(:first).gsub(/[\n\s]+/m, ' ')
208
+ end
209
+
204
210
  # Create a new ClickHouse database.
205
211
  def create_database(name)
206
212
  sql = apply_cluster "CREATE DATABASE #{quote_table_name(name)}"
@@ -7,7 +7,7 @@ module ClickhouseActiverecord
7
7
  unless table_exists?
8
8
  version_options = connection.internal_string_options_for_primary_key
9
9
 
10
- connection.create_table(table_name, id: false, options: 'ReplacingMergeTree(ver) PARTITION BY version ORDER BY (version)') do |t|
10
+ connection.create_table(table_name, id: false, options: 'ReplacingMergeTree(ver) PARTITION BY version ORDER BY (version)', if_not_exists: true) do |t|
11
11
  t.string :version, version_options
12
12
  t.column :active, 'Int8', null: false, default: '1'
13
13
  t.datetime :ver, null: false, default: -> { 'now()' }
@@ -27,7 +27,7 @@ module ClickhouseActiverecord
27
27
  unless table_exists?
28
28
  key_options = connection.internal_string_options_for_primary_key
29
29
 
30
- connection.create_table(table_name, id: false, options: 'MergeTree() PARTITION BY toDate(created_at) ORDER BY (created_at)') do |t|
30
+ connection.create_table(table_name, id: false, options: 'MergeTree() PARTITION BY toDate(created_at) ORDER BY (created_at)', if_not_exists: true) do |t|
31
31
  t.string :key, key_options
32
32
  t.string :value
33
33
  t.timestamps
@@ -33,11 +33,19 @@ module ClickhouseActiverecord
33
33
  HEADER
34
34
  end
35
35
 
36
+ def tables(stream)
37
+ sorted_tables = @connection.tables.sort {|a,b| @connection.show_create_table(a).match(/^CREATE\s+(MATERIALIZED)\s+VIEW/) ? 1 : a <=> b }
38
+
39
+ sorted_tables.each do |table_name|
40
+ table(table_name, stream) unless ignored?(table_name)
41
+ end
42
+ end
43
+
36
44
  def table(table, stream)
37
- if table.match(/^\.inner\./).nil?
45
+ if table.match(/^\.inner/).nil?
38
46
  unless simple
39
47
  stream.puts " # TABLE: #{table}"
40
- sql = @connection.do_system_execute("SHOW CREATE TABLE `#{table.gsub(/^\.inner\./, '')}`")['data'].try(:first).try(:first)
48
+ sql = @connection.show_create_table(table)
41
49
  stream.puts " # SQL: #{sql.gsub(/ENGINE = Replicated(.*?)\('[^']+',\s*'[^']+',?\s?([^\)]*)?\)/, "ENGINE = \\1(\\2)")}" if sql
42
50
  # super(table.gsub(/^\.inner\./, ''), stream)
43
51
 
@@ -85,13 +93,15 @@ HEADER
85
93
  tbl.puts ", force: :cascade do |t|"
86
94
 
87
95
  # then dump all non-primary key columns
88
- columns.each do |column|
89
- raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" unless @connection.valid_type?(column.type)
90
- next if column.name == pk
91
- type, colspec = column_spec(column)
92
- tbl.print " t.#{type} #{column.name.inspect}"
93
- tbl.print ", #{format_colspec(colspec)}" if colspec.present?
94
- tbl.puts
96
+ if simple || !match
97
+ columns.each do |column|
98
+ raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" unless @connection.valid_type?(column.type)
99
+ next if column.name == pk
100
+ type, colspec = column_spec(column)
101
+ tbl.print " t.#{type} #{column.name.inspect}"
102
+ tbl.print ", #{format_colspec(colspec)}" if colspec.present?
103
+ tbl.puts
104
+ end
95
105
  end
96
106
 
97
107
  indexes_in_create(table, tbl)
@@ -123,5 +133,10 @@ HEADER
123
133
  super
124
134
  end
125
135
  end
136
+
137
+ def schema_limit(column)
138
+ return nil if column.type == :float
139
+ super
140
+ end
126
141
  end
127
142
  end
@@ -1,3 +1,3 @@
1
1
  module ClickhouseActiverecord
2
- VERSION = '0.4.4'
2
+ VERSION = '0.4.9'
3
3
  end
@@ -20,8 +20,9 @@ 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 |t, args|
23
+ task load: [:load_config, :prepare_internal_metadata_table] do |t, args|
24
24
  simple = ENV['simple'] || ARGV.map{|a| a.include?('--simple') ? true : nil}.compact.any? ? '_simple' : nil
25
+ ClickhouseActiverecord::SchemaMigration.drop_table
25
26
  load("#{Rails.root}/db/clickhouse_schema#{simple}.rb")
26
27
  end
27
28
 
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
4
+ version: 0.4.9
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-23 00:00:00.000000000 Z
11
+ date: 2021-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  - !ruby/object:Gem::Version
150
150
  version: '0'
151
151
  requirements: []
152
- rubygems_version: 3.0.1
152
+ rubygems_version: 3.0.3
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: ClickHouse ActiveRecord