click_house 1.3.0 → 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: 73a7b3a1d277214b437bf34712185e436d372a6396d0e388a446e3f29c61ac0e
4
- data.tar.gz: 42869ca836d053d80299126149dc88266da4a0b31ce96837fc02348d60dc0394
3
+ metadata.gz: fd545a5ce410be500540a02ef1f46e57b9a7a2dfe2df8b5be47022ac2cd1f5b4
4
+ data.tar.gz: 19b872a4901d7543ddf7fbb23ca53ac8f6731023b74ae5af24a52aac4b054fc3
5
5
  SHA512:
6
- metadata.gz: 5e308c6f52fc984e3532453a869603d727620d3db61533ff80307caa06c481a5dec29685c38fb46527dea94e9d3577ee5c8918af79aa85bd8697ae7a22063b26
7
- data.tar.gz: 9dc3e6b31f65c6b3cee80aaa657fe924face07474d256714da34d4287128a26563a463e7b14019564895d4d6821b5b2aaf7324418530fd8c548d629522f15008
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
 
@@ -34,6 +34,18 @@ Performance/Squeeze:
34
34
  Enabled: true
35
35
  Performance/StringInclude:
36
36
  Enabled: true
37
+ Performance/Sum:
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
37
49
 
38
50
  # ============================== Metrics ============================
39
51
  Metrics/ClassLength:
@@ -181,6 +193,30 @@ Style/SingleArgumentDig:
181
193
  Enabled: true
182
194
  Style/StringConcatenation:
183
195
  Enabled: true
196
+ Style/ClassEqualityComparison:
197
+ Enabled: true
198
+ Style/CombinableLoops:
199
+ Enabled: true
200
+ Style/KeywordParametersOrder:
201
+ Enabled: false
202
+ Style/RedundantSelfAssignment:
203
+ Enabled: true
204
+ Style/SoleNestedConditional:
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
184
220
 
185
221
  # ============================== Lint ==============================
186
222
  Lint/DuplicateMethods:
@@ -215,3 +251,39 @@ Lint/TopLevelReturnWithArgument:
215
251
  Enabled: true
216
252
  Lint/UnreachableLoop:
217
253
  Enabled: true
254
+ Layout/BeginEndAlignment:
255
+ Enabled: true
256
+ Lint/ConstantDefinitionInBlock:
257
+ Enabled: true
258
+ Lint/DuplicateRequire:
259
+ Enabled: true
260
+ Lint/EmptyFile:
261
+ Enabled: true
262
+ Lint/HashCompareByIdentity:
263
+ Enabled: true
264
+ Lint/IdentityComparison:
265
+ Enabled: true
266
+ Lint/RedundantSafeNavigation:
267
+ Enabled: true
268
+ Lint/TrailingCommaInAttributeDeclaration:
269
+ Enabled: true
270
+ Lint/UselessMethodDefinition:
271
+ Enabled: true
272
+ Lint/UselessTimes:
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,3 +1,20 @@
1
+ # 1.3.5
2
+ * added `ClickHouse.connexction.explain("sql")`
3
+
4
+ # 1.3.4
5
+ * added `ClickHouse.type_names(nullable: false)`
6
+ * fixed `connection#create_table` column definitions
7
+ * `ClickHouse.add_type` now handles Nullable types automatically
8
+
9
+ # 1.3.3
10
+ * fix logger typo
11
+
12
+ # 1.3.2
13
+ * fix null logger for windows users
14
+
15
+ # 1.3.1
16
+ * added request [headers](https://github.com/shlima/click_house/pull/8) support
17
+
1
18
  # 1.3.0
2
19
  * added support for IPv4/IPv6 types
3
20
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- click_house (1.3.0)
4
+ click_house (1.3.5)
5
5
  faraday
6
6
  faraday_middleware
7
7
 
@@ -11,49 +11,52 @@ GEM
11
11
  ast (2.4.1)
12
12
  coderay (1.1.3)
13
13
  diff-lcs (1.4.4)
14
- faraday (1.0.1)
14
+ faraday (1.1.0)
15
15
  multipart-post (>= 1.2, < 3)
16
+ ruby2_keywords
16
17
  faraday_middleware (1.0.0)
17
18
  faraday (~> 1.0)
18
19
  method_source (1.0.0)
19
20
  multipart-post (2.1.1)
20
- parallel (1.19.2)
21
- parser (2.7.1.4)
21
+ parallel (1.20.1)
22
+ parser (2.7.2.0)
22
23
  ast (~> 2.4.1)
23
24
  pry (0.13.1)
24
25
  coderay (~> 1.1)
25
26
  method_source (~> 1.0)
26
27
  rainbow (3.0.0)
27
28
  rake (13.0.1)
28
- regexp_parser (1.7.1)
29
+ regexp_parser (2.0.0)
29
30
  rexml (3.2.4)
30
- rspec (3.9.0)
31
- rspec-core (~> 3.9.0)
32
- rspec-expectations (~> 3.9.0)
33
- rspec-mocks (~> 3.9.0)
34
- rspec-core (3.9.2)
35
- rspec-support (~> 3.9.3)
36
- 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)
37
38
  diff-lcs (>= 1.2.0, < 2.0)
38
- rspec-support (~> 3.9.0)
39
- rspec-mocks (3.9.1)
39
+ rspec-support (~> 3.10.0)
40
+ rspec-mocks (3.10.0)
40
41
  diff-lcs (>= 1.2.0, < 2.0)
41
- rspec-support (~> 3.9.0)
42
- rspec-support (3.9.3)
43
- rubocop (0.89.1)
42
+ rspec-support (~> 3.10.0)
43
+ rspec-support (3.10.0)
44
+ rubocop (1.5.2)
44
45
  parallel (~> 1.10)
45
- parser (>= 2.7.1.1)
46
+ parser (>= 2.7.1.5)
46
47
  rainbow (>= 2.2.2, < 4.0)
47
- regexp_parser (>= 1.7)
48
+ regexp_parser (>= 1.8, < 3.0)
48
49
  rexml
49
- rubocop-ast (>= 0.3.0, < 1.0)
50
+ rubocop-ast (>= 1.2.0, < 2.0)
50
51
  ruby-progressbar (~> 1.7)
51
52
  unicode-display_width (>= 1.4.0, < 2.0)
52
- rubocop-ast (0.3.0)
53
- parser (>= 2.7.1.4)
54
- rubocop-performance (1.7.1)
55
- rubocop (>= 0.82.0)
53
+ rubocop-ast (1.3.0)
54
+ parser (>= 2.7.1.5)
55
+ rubocop-performance (1.9.1)
56
+ rubocop (>= 0.90.0, < 2.0)
57
+ rubocop-ast (>= 0.4.0)
56
58
  ruby-progressbar (1.10.1)
59
+ ruby2_keywords (0.0.2)
57
60
  unicode-display_width (1.7.0)
58
61
 
59
62
  PLATFORMS
data/README.md CHANGED
@@ -2,12 +2,12 @@
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
 
9
9
  ```bash
10
- # Requires modern Ruby (>= 2.5), tested with Yandex.Clickhouse v 20.9.2.20
10
+ # Requires Ruby >= 2.5
11
11
  gem install click_house
12
12
  ```
13
13
 
@@ -53,6 +53,7 @@ ClickHouse.config do |config|
53
53
  config.timeout = 60
54
54
  config.open_timeout = 3
55
55
  config.ssl_verify = false
56
+ config.headers = {}
56
57
 
57
58
  # or provide connection options separately
58
59
  config.scheme = 'http'
@@ -104,6 +105,11 @@ ClickHouse.connection.truncate_tables(['table_1', 'table_2'], if_exists: true, c
104
105
  ClickHouse.connection.truncate_tables # will truncate all tables in database
105
106
  ClickHouse.connection.rename_table('old_name', 'new_name', cluster: nil)
106
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')
107
113
  ```
108
114
 
109
115
  ## Queries
@@ -216,7 +222,8 @@ ClickHouse.connection.create_table('visits', if_not_exists: true, engine: 'Merge
216
222
  t.Decimal :money, 5, 4
217
223
  t.String :event
218
224
  t.UInt32 :user_id
219
- t.UInt32 :Float32
225
+ t.IPv4 :ipv4
226
+ t.IPv6 :ipv6
220
227
  end
221
228
  ```
222
229
 
@@ -328,11 +335,11 @@ ClickHouse.add_type('Date', DateType.new)
328
335
  Actually `serialize` function is not used for now, but you may use it manually:
329
336
 
330
337
  ```ruby
331
- time_type = DateTimeType.new
332
- string_type = FixedStringType.new
338
+ time_type = ClickHouse::Type::DateTimeType.new
339
+ string_type = ClickHouse::Type::FixedStringType.new
333
340
 
334
341
  ClickHouse.connection.insert('table', columns: %i[name time]) do |buffer|
335
- buffer << [string_type.serialize('a' * 1000, 20), time.serialize(Time.current, 'Europe/Moscow')]
342
+ buffer << [string_type.serialize('a' * 1000, 20), time_type.serialize(Time.current, 'Europe/Moscow')]
336
343
  end
337
344
 
338
345
  ## alternatively
@@ -344,7 +351,8 @@ data = @records.map do |record|
344
351
  end
345
352
  ```
346
353
 
347
- If native type supports arguments, define type with `%s` argument:
354
+ If native type supports arguments, define *String* type with `%s`
355
+ argument and *Numeric* type with `%d` argument:
348
356
 
349
357
  ```ruby
350
358
  class DateTimeType
@@ -396,6 +404,10 @@ development:
396
404
  test:
397
405
  database: ecliptic_test
398
406
  <<: *default
407
+
408
+ production:
409
+ <<: *default
410
+ database: ecliptic_production
399
411
  ```
400
412
 
401
413
  ```ruby
@@ -448,11 +460,6 @@ class CreateAdvertVisits < ActiveRecord::Migration[6.0]
448
460
  t.UInt16 :account_id
449
461
  t.UInt16 :user_id
450
462
  t.Date :date
451
- t.DateTime :time, 'UTC'
452
- t.IPv4 :ipv4
453
- t.IPv6 :ipv6
454
- t.UInt32 :device_type_id
455
- t.UInt32 :os_family_id
456
463
  end
457
464
  end
458
465
 
@@ -2,7 +2,7 @@ version: '3.5'
2
2
 
3
3
  services:
4
4
  clickhouse:
5
- image: yandex/clickhouse-server:20.9.2.20
5
+ image: yandex/clickhouse-server:20.11.4.13
6
6
  ports:
7
7
  - "8123:8123"
8
8
  - "9000:9000"
@@ -28,41 +28,33 @@ module ClickHouse
28
28
 
29
29
  %w[Date].each do |column|
30
30
  add_type column, Type::DateType.new
31
- add_type "Nullable(#{column})", Type::NullableType.new(Type::DateType.new)
32
31
  end
33
32
 
34
- %w[String].each do |column|
33
+ %w[String FixedString(%d) UUID].each do |column|
35
34
  add_type column, Type::StringType.new
36
- add_type "Nullable(#{column})", Type::NullableType.new(Type::StringType.new)
37
35
  end
38
36
 
39
37
  ['DateTime(%s)'].each do |column|
40
38
  add_type column, Type::DateTimeType.new
41
- add_type "Nullable(#{column})", Type::NullableType.new(Type::DateTimeType.new)
42
39
  end
43
40
 
44
41
  ['DateTime64(%d, %s)'].each do |column|
45
42
  add_type column, Type::DateTime64Type.new
46
- add_type "Nullable(#{column})", Type::NullableType.new(Type::DateTime64Type.new)
47
43
  end
48
44
 
49
- ['Decimal(%s, %s)', 'Decimal32(%s)', 'Decimal64(%s)', 'Decimal128(%s)'].each do |column|
45
+ ['Decimal(%d, %d)', 'Decimal32(%d)', 'Decimal64(%d)', 'Decimal128(%d)'].each do |column|
50
46
  add_type column, Type::DecimalType.new
51
- add_type "Nullable(#{column})", Type::NullableType.new(Type::DecimalType.new)
52
47
  end
53
48
 
54
49
  %w[UInt8 UInt16 UInt32 UInt64 Int8 Int16 Int32 Int64].each do |column|
55
50
  add_type column, Type::IntegerType.new
56
- add_type "Nullable(#{column})", Type::NullableType.new(Type::IntegerType.new)
57
51
  end
58
52
 
59
53
  %w[Float32 Float64].each do |column|
60
54
  add_type column, Type::FloatType.new
61
- add_type "Nullable(#{column})", Type::NullableType.new(Type::IntegerType.new)
62
55
  end
63
56
 
64
57
  %w[IPv4 IPv6].each do |column|
65
58
  add_type column, Type::IPType.new
66
- add_type "Nullable(#{column})", Type::NullableType.new(Type::IPType.new)
67
59
  end
68
60
  end
@@ -18,7 +18,8 @@ module ClickHouse
18
18
  password: nil,
19
19
  timeout: nil,
20
20
  open_timeout: nil,
21
- ssl_verify: false
21
+ ssl_verify: false,
22
+ headers: {}
22
23
  }.freeze
23
24
 
24
25
  attr_accessor :adapter
@@ -33,6 +34,7 @@ module ClickHouse
33
34
  attr_accessor :timeout
34
35
  attr_accessor :open_timeout
35
36
  attr_accessor :ssl_verify
37
+ attr_accessor :headers
36
38
 
37
39
  def initialize(params = {})
38
40
  assign(DEFAULTS.merge(params))
@@ -51,7 +53,7 @@ module ClickHouse
51
53
  end
52
54
 
53
55
  def logger!
54
- @logger || Logger.new('/dev/null')
56
+ @logger || Logger.new(IO::NULL)
55
57
  end
56
58
 
57
59
  def url!
@@ -8,9 +8,11 @@ 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
 
15
+ # @param [Config]
14
16
  def initialize(config)
15
17
  @config = config
16
18
  end
@@ -31,6 +33,7 @@ module ClickHouse
31
33
  @transport ||= Faraday.new(config.url!) do |conn|
32
34
  conn.options.timeout = config.timeout
33
35
  conn.options.open_timeout = config.open_timeout
36
+ conn.headers = config.headers
34
37
  conn.ssl.verify = config.ssl_verify
35
38
  conn.basic_auth(config.username, config.password) if config.auth?
36
39
  conn.response Middleware::Logging, logger: config.logger!
@@ -3,17 +3,7 @@
3
3
  module ClickHouse
4
4
  module Definition
5
5
  class ColumnSet
6
- TYPES = [
7
- 'UInt8', 'UInt16', 'UInt32', 'UInt64', 'Int8', 'Int16', 'Int32', 'Int64',
8
- 'Float32', 'Float64',
9
- 'Decimal(%d, %d)', 'Decimal32(%d)', 'Decimal64(%d)', 'Decimal128(%d)',
10
- 'String',
11
- 'FixedString(%d)',
12
- 'UUID',
13
- 'Date',
14
- 'IPv4', 'IPv6',
15
- "DateTime('%s')", "DateTime64(%d, '%s')"
16
- ].freeze
6
+ TYPES = ClickHouse.type_names(nullable: false).map { |s| s.sub('%s', "'%s'") }.freeze
17
7
 
18
8
  class << self
19
9
  # @input "DateTime('%s')"
@@ -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
@@ -3,12 +3,21 @@
3
3
  module ClickHouse
4
4
  module Extend
5
5
  module TypeDefinition
6
+ NULLABLE = 'Nullable'
7
+ NULLABLE_RE = /#{NULLABLE}/i.freeze
8
+
6
9
  def types
7
10
  @types ||= Hash.new(Type::UndefinedType.new)
8
11
  end
9
12
 
10
- def add_type(type, klass)
13
+ def add_type(type, klass, nullable: true)
11
14
  types[type] = klass
15
+ types["#{NULLABLE}(#{type})"] = Type::NullableType.new(klass) if nullable
16
+ end
17
+
18
+ # @return [Enum<String>]
19
+ def type_names(nullable:)
20
+ nullable ? types.keys : types.keys.grep_v(NULLABLE_RE)
12
21
  end
13
22
  end
14
23
  end
@@ -34,7 +34,7 @@ module ClickHouse
34
34
 
35
35
  logger.info("\e[1mSQL (#{Util::Pretty.measure(elapsed)})\e[0m #{query};")
36
36
  logger.debug(body) if body
37
- logger.info("\e[1mRead: #{summary.fetch(:read_rows)} rows, #{summary.fetch(:read_bytes)}. Written: #{summary.fetch(:written_rows)}, rows #{summary.fetch(:written_bytes)}\e[0m")
37
+ logger.info("\e[1mRead: #{summary.fetch(:read_rows)} rows, #{summary.fetch(:read_bytes)}. Written: #{summary.fetch(:written_rows)} rows, #{summary.fetch(:written_bytes)}\e[0m")
38
38
  end
39
39
  # rubocop:enable Layout/LineLength
40
40
 
@@ -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.0'
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.0
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-09-23 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