clickhouse-activerecord 0.1.3 → 0.1.4

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
  SHA1:
3
- metadata.gz: eac051324737a5cccf85980602ca00a03a67144f
4
- data.tar.gz: e5944f2ddaf351da5607187a3d9d4b0b008ae55d
3
+ metadata.gz: 526a938e8ee69d1c9ed717405c965e7995d497f5
4
+ data.tar.gz: 0e073d0606e1dd2c0f96504d571e2fcdbb2df041
5
5
  SHA512:
6
- metadata.gz: b0440948eda2c9aaf4dae8762cba4a8e506b0620e06e6a4160d64f7865f9e4963966cba30665a6a2cb7660c4f674e94dc7388399d93cb6c788e88c205ab5678c
7
- data.tar.gz: fada2ee435950d8521d33a0bbbd1cd08d05e542123c780219f47aba213bed2c238ae6784856c930ab38a8c521da0bb00d0fde13572200fb10e5414762017b127
6
+ metadata.gz: 17718b1dbe7a43fa085fbd87b8f81640eaaae219217d2256bfd6743e61b5b1990fc2a93cb65dc3da007c7970a67e5f17a48f496aeabb9bbf8e5818be284ce6cd
7
+ data.tar.gz: 202af70214fab7c2816f9b45dad1557d1fba71087ab6940e8919c9995fd2312573bbea554473aab429f41ddf68d12cef21f7a49638f7ed873df97e7cd26de65f
data/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ ### Version 0.1.4 (Nov 29, 2017)
2
+
3
+ * Support materialized view
4
+ * Aggregated functions for view
5
+ * Schema dumper with SQL create table
6
+
7
+ ### Version 0.1.2 (Sep 27, 2017)
8
+
9
+ * Fix Big Int type
10
+
11
+ ### Version 0.1.0 (Aug 31, 2017)
12
+
13
+ * Initial release
data/README.md CHANGED
@@ -39,6 +39,14 @@ class Action < ActiveRecord::Base
39
39
  end
40
40
  ```
41
41
 
42
+ For materialized view model add:
43
+ ```ruby
44
+ class ActionView < ActiveRecord::Base
45
+ establish_connection "#{Rails.env}_clickhouse".to_sym
46
+ self.is_view = true
47
+ end
48
+ ```
49
+
42
50
  Or global connection, but schema dump don't works:
43
51
 
44
52
  ```yml
@@ -54,14 +62,22 @@ Schema dump:
54
62
 
55
63
  $ rake clickhouse:schema:dump
56
64
 
65
+ We use schema for emulate development or tests environment on PostgreSQL adapter.
66
+
57
67
  ### Insert and select data
58
68
 
59
69
  ```ruby
60
70
  Action.where(url: 'http://example.com', date: Date.current).where.not(name: nil).order(created_at: :desc).limit(10)
61
- => #<ActiveRecord::Relation [#<Action *** >]>
71
+ # Clickhouse Action Load (10.3ms) SELECT actions.* FROM actions WHERE actions.date = '2017-11-29' AND actions.url = 'http://example.com' AND (actions.name IS NOT NULL) ORDER BY actions.created_at DESC LIMIT 10
72
+ #=> #<ActiveRecord::Relation [#<Action *** >]>
62
73
 
63
74
  Action.create(url: 'http://example.com', date: Date.yesterday)
64
- => true
75
+ # Clickhouse Action Load (10.8ms) INSERT INTO actions (url, date) VALUES ('http://example.com', '2017-11-28')
76
+ #=> true
77
+
78
+ ActionView.maximum(:date)
79
+ # Clickhouse (10.3ms) SELECT maxMerge(actions.date) FROM actions
80
+ #=> 'Wed, 29 Nov 2017'
65
81
  ```
66
82
 
67
83
  NOTE: Creating tables in developing.
@@ -2,10 +2,11 @@
2
2
 
3
3
  lib = File.expand_path('../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require File.expand_path('../lib/clickhouse-activerecord/version', __FILE__)
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = 'clickhouse-activerecord'
8
- spec.version = '0.1.3'
9
+ spec.version = ClickhouseActiverecord::VERSION
9
10
  spec.authors = ['Sergey Odintsov']
10
11
  spec.email = ['nixx.dj@gmail.com']
11
12
 
@@ -21,8 +22,8 @@ Gem::Specification.new do |spec|
21
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
23
  spec.require_paths = ['lib']
23
24
 
24
- spec.add_dependency "bundler", ">= 1.13.4"
25
- spec.add_dependency 'rails', '>= 4.1.8'
25
+ spec.add_runtime_dependency 'bundler', '~> 1.13', '>= 1.13.4'
26
+ spec.add_runtime_dependency 'rails', '>= 4.1.8', '< 5'
26
27
 
27
28
  spec.add_development_dependency 'bundler', '~> 1.15'
28
29
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -1,3 +1,4 @@
1
+ require 'clickhouse-activerecord/arel/visitors/to_sql'
1
2
  require 'active_record/connection_adapters/abstract_adapter'
2
3
  require 'active_record/connection_adapters/clickhouse/oid/date'
3
4
  require 'active_record/connection_adapters/clickhouse/oid/date_time'
@@ -23,6 +24,21 @@ module ActiveRecord
23
24
  end
24
25
  end
25
26
 
27
+ module ModelSchema
28
+
29
+ module ClassMethods
30
+ def is_view
31
+ @is_view || false
32
+ end
33
+
34
+ # @param [Boolean] value
35
+ def is_view=(value)
36
+ @is_view = value
37
+ end
38
+ end
39
+
40
+ end
41
+
26
42
  module ConnectionAdapters
27
43
 
28
44
  class ClickhouseColumn < Column
@@ -89,7 +105,7 @@ module ActiveRecord
89
105
  @connection_parameters = connection_parameters
90
106
  @config = config
91
107
 
92
- @visitor = Arel::Visitors::ToSql.new self
108
+ @visitor = ClickhouseActiverecord::Arel::Visitors::ToSql.new self
93
109
 
94
110
  connect
95
111
  end
@@ -1,6 +1,9 @@
1
1
  require 'active_record/connection_adapters/clickhouse_adapter'
2
2
 
3
- require 'clickhouse/railtie' if defined?(Rails::Railtie)
3
+ if defined?(Rails::Railtie)
4
+ require 'clickhouse-activerecord/railtie'
5
+ require 'clickhouse-activerecord/schema_dumper'
6
+ end
4
7
 
5
8
  module ClickhouseActiverecord
6
9
 
@@ -0,0 +1,20 @@
1
+ require 'arel/visitors/to_sql'
2
+
3
+ module ClickhouseActiverecord
4
+ module Arel
5
+ module Visitors
6
+ class ToSql < ::Arel::Visitors::ToSql
7
+
8
+ def aggregate(name, o, collector)
9
+ # replacing function name for materialized view
10
+ if o.expressions.first.relation.engine.is_view
11
+ super("#{name.downcase}Merge", o, collector)
12
+ else
13
+ super
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,4 +1,4 @@
1
- module Clickhouse
1
+ module ClickhouseActiverecord
2
2
  require 'rails'
3
3
 
4
4
  class Railtie < Rails::Railtie
@@ -0,0 +1,10 @@
1
+ class ClickhouseActiverecord::SchemaDumper < ActiveRecord::SchemaDumper
2
+
3
+ def table(table, stream)
4
+
5
+ stream.puts " # TABLE: #{table}"
6
+ stream.puts " # SQL: #{@connection.query("SHOW CREATE TABLE #{table.gsub(/^\.inner\./, '')}")['data'].try(:first).try(:first)}"
7
+ super(table.gsub(/^\.inner\./, ''), stream)
8
+
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module ClickhouseActiverecord
2
+ VERSION = '0.1.4'
3
+ end
@@ -14,7 +14,7 @@ namespace :clickhouse do
14
14
  filename = "#{Rails.root}/db/clickhouse_schema.rb"
15
15
  File.open(filename, 'w:utf-8') do |file|
16
16
  ActiveRecord::Base.establish_connection(:"#{Rails.env}_clickhouse")
17
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
17
+ ClickhouseActiverecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
18
18
  end
19
19
  end
20
20
 
metadata CHANGED
@@ -1,19 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clickhouse-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Odintsov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-27 00:00:00.000000000 Z
11
+ date: 2017-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 1.13.4
@@ -21,6 +24,9 @@ dependencies:
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.13'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 1.13.4
@@ -31,6 +37,9 @@ dependencies:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
39
  version: 4.1.8
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -38,6 +47,9 @@ dependencies:
38
47
  - - ">="
39
48
  - !ruby/object:Gem::Version
40
49
  version: 4.1.8
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: bundler
43
55
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +86,7 @@ extensions: []
74
86
  extra_rdoc_files: []
75
87
  files:
76
88
  - ".gitignore"
89
+ - CHANGELOG.md
77
90
  - CODE_OF_CONDUCT.md
78
91
  - Gemfile
79
92
  - LICENSE.txt
@@ -87,7 +100,10 @@ files:
87
100
  - lib/active_record/connection_adapters/clickhouse/oid/date_time.rb
88
101
  - lib/active_record/connection_adapters/clickhouse_adapter.rb
89
102
  - lib/clickhouse-activerecord.rb
90
- - lib/clickhouse/railtie.rb
103
+ - lib/clickhouse-activerecord/arel/visitors/to_sql.rb
104
+ - lib/clickhouse-activerecord/railtie.rb
105
+ - lib/clickhouse-activerecord/schema_dumper.rb
106
+ - lib/clickhouse-activerecord/version.rb
91
107
  - lib/tasks/clickhouse.rake
92
108
  homepage: https://github.com/pnixx/clickhouse-activerecord
93
109
  licenses: