click_house 1.3.4 → 1.3.5

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: 55de5fd75c50aca5227537365eca6c1042bdff12833c8803f66b1022b6bbefd4
4
- data.tar.gz: 101d57eeb3a903a9b95a9955a0ac093c80796ef5fc6163837d49fc7fc64464b2
3
+ metadata.gz: fd545a5ce410be500540a02ef1f46e57b9a7a2dfe2df8b5be47022ac2cd1f5b4
4
+ data.tar.gz: 19b872a4901d7543ddf7fbb23ca53ac8f6731023b74ae5af24a52aac4b054fc3
5
5
  SHA512:
6
- metadata.gz: 860b3f17e95893e7cdd0d43c37ca42557492b7e44b8e0c61d326a8d83c9211a942775131d5a4705d53b6cdab3dc8acd716b5c2d629e7f95f9f95c74b9310398f
7
- data.tar.gz: dc0fd575a9b1c22ae571fda8edb639a8d16df3ddb6497b97b63b3886933b8904e9d94a97f0f8b17619b4c4dca987282265a3002833c3318775e74d201c6f23fa
6
+ metadata.gz: 6ad04e10ecb7acce32f3c18225b62aad8b83ef79f46e176678bbaadf0b274e8b0cefbe72c678e7ba9d047a22d98912a4de2e89b73957b721731e3666caf3850c
7
+ data.tar.gz: 0155f69f8faf71b9fbf95a1d32f04dce4c3eb2a9b43752aac786ee29a3f0db882afd85c1e44178e366938a18053f99eead8d247267d53a49f6dffd63ac0223f5
@@ -0,0 +1,68 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ rspec:
7
+ runs-on: ubuntu-latest
8
+
9
+ services:
10
+ clickhouse:
11
+ image: yandex/clickhouse-server:20.11.4.13
12
+ ports:
13
+ - 8123:8123
14
+
15
+ strategy:
16
+ matrix:
17
+ ruby-version: [2.7, 2.6, 2.5]
18
+
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+
22
+ - name: Set up Ruby ${{ matrix.ruby-version }}
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby-version }}
26
+
27
+ - name: Cache gems
28
+ uses: actions/cache@v1
29
+ with:
30
+ path: vendor/bundle
31
+ key: ${{ runner.os }}-${{ matrix.ruby-version }}-bundler-${{ hashFiles('**/Gemfile.lock') }}
32
+ restore-keys: |
33
+ ${{ runner.os }}-${{ matrix.ruby-version }}-bundler-
34
+
35
+ - name: Install gems
36
+ run: |
37
+ bundle config path vendor/bundle
38
+ bundle install --jobs 4 --retry 3
39
+
40
+ - name: Run tests
41
+ run: bundle exec rspec
42
+
43
+ rubocop:
44
+ runs-on: ubuntu-latest
45
+
46
+ steps:
47
+ - uses: actions/checkout@v2
48
+
49
+ - name: Set up Ruby 2.7
50
+ uses: ruby/setup-ruby@v1
51
+ with:
52
+ ruby-version: 2.7
53
+
54
+ - name: Cache gems
55
+ uses: actions/cache@v1
56
+ with:
57
+ path: vendor/bundle
58
+ key: ${{ runner.os }}-bundler-${{ hashFiles('**/Gemfile.lock') }}
59
+ restore-keys: |
60
+ ${{ runner.os }}-bundler-
61
+
62
+ - name: Install gems
63
+ run: |
64
+ bundle config path vendor/bundle
65
+ bundle install --jobs 4 --retry 3
66
+
67
+ - name: Run Rubocop
68
+ run: bundle exec rubocop
@@ -3,13 +3,13 @@ require:
3
3
 
4
4
  AllCops:
5
5
  AutoCorrect: false
6
+ SuggestExtensions: false
6
7
  Exclude:
7
8
  - 'click_house.gemspec'
8
9
  - 'bin/*'
9
10
  - 'spec/**/*'
10
11
  - 'vendor/**/*'
11
12
  TargetRubyVersion: 2.7
12
-
13
13
  Bundler/OrderedGems:
14
14
  Enabled: false
15
15
 
@@ -36,6 +36,16 @@ Performance/StringInclude:
36
36
  Enabled: true
37
37
  Performance/Sum:
38
38
  Enabled: true
39
+ Performance/ArraySemiInfiniteRangeSlice:
40
+ Enabled: true
41
+ Performance/BlockGivenWithExplicitBlock:
42
+ Enabled: true
43
+ Performance/CollectionLiteralInLoop:
44
+ Enabled: true
45
+ Performance/ConstantRegexp:
46
+ Enabled: true
47
+ Performance/MethodObjectAsBlock:
48
+ Enabled: false
39
49
 
40
50
  # ============================== Metrics ============================
41
51
  Metrics/ClassLength:
@@ -193,6 +203,20 @@ Style/RedundantSelfAssignment:
193
203
  Enabled: true
194
204
  Style/SoleNestedConditional:
195
205
  Enabled: true
206
+ Style/ArgumentsForwarding:
207
+ Enabled: true
208
+ Style/CollectionCompact:
209
+ Enabled: true
210
+ Style/DocumentDynamicEvalDefinition:
211
+ Enabled: false
212
+ Style/NegatedIfElseCondition:
213
+ Enabled: true
214
+ Style/NilLambda:
215
+ Enabled: true
216
+ Style/SwapValues:
217
+ Enabled: true
218
+ Style/RedundantArgument:
219
+ Enabled: true
196
220
 
197
221
  # ============================== Lint ==============================
198
222
  Lint/DuplicateMethods:
@@ -247,3 +271,19 @@ Lint/UselessMethodDefinition:
247
271
  Enabled: true
248
272
  Lint/UselessTimes:
249
273
  Enabled: true
274
+ Lint/DuplicateBranch:
275
+ Enabled: true
276
+ Lint/DuplicateRegexpCharacterClassElement:
277
+ Enabled: true
278
+ Lint/EmptyBlock:
279
+ Enabled: true
280
+ Lint/EmptyClass:
281
+ Enabled: true
282
+ Lint/NoReturnInBeginEndBlocks:
283
+ Enabled: true
284
+ Lint/ToEnumArguments:
285
+ Enabled: true
286
+ Lint/UnmodifiedReduceAccumulator:
287
+ Enabled: true
288
+ Lint/UnexpectedBlockArity:
289
+ Enabled: true
@@ -1,6 +1,10 @@
1
+ # 1.3.5
2
+ * added `ClickHouse.connexction.explain("sql")`
3
+
1
4
  # 1.3.4
2
5
  * added `ClickHouse.type_names(nullable: false)`
3
6
  * fixed `connection#create_table` column definitions
7
+ * `ClickHouse.add_type` now handles Nullable types automatically
4
8
 
5
9
  # 1.3.3
6
10
  * fix logger typo
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- click_house (1.3.4)
4
+ click_house (1.3.5)
5
5
  faraday
6
6
  faraday_middleware
7
7
 
@@ -18,7 +18,7 @@ GEM
18
18
  faraday (~> 1.0)
19
19
  method_source (1.0.0)
20
20
  multipart-post (2.1.1)
21
- parallel (1.19.2)
21
+ parallel (1.20.1)
22
22
  parser (2.7.2.0)
23
23
  ast (~> 2.4.1)
24
24
  pry (0.13.1)
@@ -26,34 +26,34 @@ GEM
26
26
  method_source (~> 1.0)
27
27
  rainbow (3.0.0)
28
28
  rake (13.0.1)
29
- regexp_parser (1.8.2)
29
+ regexp_parser (2.0.0)
30
30
  rexml (3.2.4)
31
- rspec (3.9.0)
32
- rspec-core (~> 3.9.0)
33
- rspec-expectations (~> 3.9.0)
34
- rspec-mocks (~> 3.9.0)
35
- rspec-core (3.9.3)
36
- rspec-support (~> 3.9.3)
37
- rspec-expectations (3.9.2)
31
+ rspec (3.10.0)
32
+ rspec-core (~> 3.10.0)
33
+ rspec-expectations (~> 3.10.0)
34
+ rspec-mocks (~> 3.10.0)
35
+ rspec-core (3.10.0)
36
+ rspec-support (~> 3.10.0)
37
+ rspec-expectations (3.10.0)
38
38
  diff-lcs (>= 1.2.0, < 2.0)
39
- rspec-support (~> 3.9.0)
40
- rspec-mocks (3.9.1)
39
+ rspec-support (~> 3.10.0)
40
+ rspec-mocks (3.10.0)
41
41
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.9.0)
43
- rspec-support (3.9.3)
44
- rubocop (0.93.1)
42
+ rspec-support (~> 3.10.0)
43
+ rspec-support (3.10.0)
44
+ rubocop (1.5.2)
45
45
  parallel (~> 1.10)
46
46
  parser (>= 2.7.1.5)
47
47
  rainbow (>= 2.2.2, < 4.0)
48
- regexp_parser (>= 1.8)
48
+ regexp_parser (>= 1.8, < 3.0)
49
49
  rexml
50
- rubocop-ast (>= 0.6.0)
50
+ rubocop-ast (>= 1.2.0, < 2.0)
51
51
  ruby-progressbar (~> 1.7)
52
52
  unicode-display_width (>= 1.4.0, < 2.0)
53
- rubocop-ast (0.8.0)
53
+ rubocop-ast (1.3.0)
54
54
  parser (>= 2.7.1.5)
55
- rubocop-performance (1.8.1)
56
- rubocop (>= 0.87.0)
55
+ rubocop-performance (1.9.1)
56
+ rubocop (>= 0.90.0, < 2.0)
57
57
  rubocop-ast (>= 0.4.0)
58
58
  ruby-progressbar (1.10.1)
59
59
  ruby2_keywords (0.0.2)
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ClickHouse Ruby driver
4
4
 
5
- [![pipeline status](https://travis-ci.com/shlima/click_house.svg?branch=master)](https://travis-ci.com/shlima/click_house)
5
+ ![CI](https://github.com/shlima/click_house/workflows/CI/badge.svg)
6
6
  [![Code Climate](https://codeclimate.com/github/shlima/click_house/badges/gpa.svg)](https://codeclimate.com/github/shlima/click_house)
7
7
  [![Gem Version](https://badge.fury.io/rb/click_house.svg)](https://badge.fury.io/rb/click_house)
8
8
 
@@ -105,6 +105,11 @@ ClickHouse.connection.truncate_tables(['table_1', 'table_2'], if_exists: true, c
105
105
  ClickHouse.connection.truncate_tables # will truncate all tables in database
106
106
  ClickHouse.connection.rename_table('old_name', 'new_name', cluster: nil)
107
107
  ClickHouse.connection.rename_table(%w[table_1 table_2], %w[new_1 new_2], cluster: nil)
108
+
109
+ ClickHouse.connection.select_all('SELECT * FROM visits')
110
+ ClickHouse.connection.select_one('SELECT * FROM visits LIMIT 1')
111
+ ClickHouse.connection.select_value('SELECT ip FROM visits LIMIT 1')
112
+ ClickHouse.connection.explain('SELECT * FROM visits CROSS JOIN visits')
108
113
  ```
109
114
 
110
115
  ## Queries
@@ -399,6 +404,10 @@ development:
399
404
  test:
400
405
  database: ecliptic_test
401
406
  <<: *default
407
+
408
+ production:
409
+ <<: *default
410
+ database: ecliptic_production
402
411
  ```
403
412
 
404
413
  ```ruby
@@ -2,7 +2,7 @@ version: '3.5'
2
2
 
3
3
  services:
4
4
  clickhouse:
5
- image: yandex/clickhouse-server:20.10.3.30
5
+ image: yandex/clickhouse-server:20.11.4.13
6
6
  ports:
7
7
  - "8123:8123"
8
8
  - "9000:9000"
@@ -8,6 +8,7 @@ module ClickHouse
8
8
  include Extend::ConnectionSelective
9
9
  include Extend::ConnectionInserting
10
10
  include Extend::ConnectionAltering
11
+ include Extend::ConnectionExplaining
11
12
 
12
13
  attr_reader :config
13
14
 
@@ -11,5 +11,6 @@ module ClickHouse
11
11
  autoload :ConnectionSelective, 'click_house/extend/connection_selective'
12
12
  autoload :ConnectionInserting, 'click_house/extend/connection_inserting'
13
13
  autoload :ConnectionAltering, 'click_house/extend/connection_altering'
14
+ autoload :ConnectionExplaining, 'click_house/extend/connection_explaining'
14
15
  end
15
16
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ClickHouse
4
+ module Extend
5
+ module ConnectionExplaining
6
+ EXPLAIN = 'EXPLAIN'
7
+ EXPLAIN_RE = /\A(\s*#{EXPLAIN})/io.freeze
8
+
9
+ def explain(sql, io: $stdout)
10
+ res = execute("#{EXPLAIN} #{sql.gsub(EXPLAIN_RE, '')}")
11
+ io << res.body
12
+ end
13
+ end
14
+ end
15
+ end
@@ -4,6 +4,7 @@ module ClickHouse
4
4
  module Extend
5
5
  module TypeDefinition
6
6
  NULLABLE = 'Nullable'
7
+ NULLABLE_RE = /#{NULLABLE}/i.freeze
7
8
 
8
9
  def types
9
10
  @types ||= Hash.new(Type::UndefinedType.new)
@@ -16,7 +17,7 @@ module ClickHouse
16
17
 
17
18
  # @return [Enum<String>]
18
19
  def type_names(nullable:)
19
- nullable ? types.keys : types.keys.grep_v(/#{NULLABLE}/i)
20
+ nullable ? types.keys : types.keys.grep_v(NULLABLE_RE)
20
21
  end
21
22
  end
22
23
  end
@@ -8,6 +8,7 @@ module ClickHouse
8
8
 
9
9
  TYPE_ARGV_DELIM = ','
10
10
  NULLABLE = 'Nullable'
11
+ NULLABLE_TYPE_RE = /#{NULLABLE}\((.+)\)/i.freeze
11
12
 
12
13
  def_delegators :to_a,
13
14
  :each, :fetch, :length, :count, :size, :first, :last, :[], :to_h
@@ -28,7 +29,7 @@ module ClickHouse
28
29
  # @input "Decimal(10, 5)"
29
30
  # @output "Decimal(%s, %s)"
30
31
  def extract_type_info(type)
31
- type = type.gsub(/#{NULLABLE}\((.+)\)/i, '\1')
32
+ type = type.gsub(NULLABLE_TYPE_RE, '\1')
32
33
  nullable = Regexp.last_match(1)
33
34
  argv = []
34
35
 
@@ -4,6 +4,7 @@ module ClickHouse
4
4
  module Util
5
5
  module Statement
6
6
  END_OF_STATEMENT = ';'
7
+ END_OF_STATEMENT_RE = /#{END_OF_STATEMENT}(\s+|\Z)/.freeze
7
8
 
8
9
  module_function
9
10
 
@@ -14,7 +15,7 @@ module ClickHouse
14
15
  def format(sql, format)
15
16
  return sql if sql.match?(/FORMAT/i)
16
17
 
17
- "#{sql.sub(/#{END_OF_STATEMENT}(\s+|\Z)/, '')} FORMAT #{format};"
18
+ "#{sql.sub(END_OF_STATEMENT_RE, '')} FORMAT #{format};"
18
19
  end
19
20
  end
20
21
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ClickHouse
4
- VERSION = '1.3.4'
4
+ VERSION = '1.3.5'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: click_house
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aliaksandr Shylau
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-02 00:00:00.000000000 Z
11
+ date: 2020-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -129,10 +129,10 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
+ - ".github/workflows/main.yml"
132
133
  - ".gitignore"
133
134
  - ".rspec"
134
135
  - ".rubocop.yml"
135
- - ".travis.yml"
136
136
  - CHANGELOG.md
137
137
  - Gemfile
138
138
  - Gemfile.lock
@@ -158,6 +158,7 @@ files:
158
158
  - lib/click_house/extend/connectible.rb
159
159
  - lib/click_house/extend/connection_altering.rb
160
160
  - lib/click_house/extend/connection_database.rb
161
+ - lib/click_house/extend/connection_explaining.rb
161
162
  - lib/click_house/extend/connection_healthy.rb
162
163
  - lib/click_house/extend/connection_inserting.rb
163
164
  - lib/click_house/extend/connection_selective.rb
@@ -1,16 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.6.5
5
-
6
- services:
7
- - docker
8
-
9
- before_install:
10
- - docker pull yandex/clickhouse-server
11
- - docker run -d -p 127.0.0.1:8123:8123 yandex/clickhouse-server
12
- - bundle install
13
-
14
- script:
15
- - bundle exec rubocop
16
- - bundle exec rspec