clickhouse 0.1.4 → 0.1.8

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +22 -0
  3. data/.travis.yml +0 -2
  4. data/CHANGELOG.md +21 -0
  5. data/README.md +28 -1
  6. data/VERSION +1 -1
  7. data/bin/clickhouse +9 -0
  8. data/clickhouse.gemspec +7 -2
  9. data/lib/clickhouse.rb +7 -2
  10. data/lib/clickhouse/cli.rb +55 -0
  11. data/lib/clickhouse/cli/client.rb +149 -0
  12. data/lib/clickhouse/cli/console.rb +73 -0
  13. data/lib/clickhouse/cli/server.rb +36 -0
  14. data/lib/clickhouse/cli/server/assets/css/clickhouse.css +177 -0
  15. data/lib/clickhouse/cli/server/assets/css/codemirror.css +341 -0
  16. data/lib/clickhouse/cli/server/assets/css/datatables.css +1 -0
  17. data/lib/clickhouse/cli/server/assets/css/normalize.css +427 -0
  18. data/lib/clickhouse/cli/server/assets/css/skeleton.css +418 -0
  19. data/lib/clickhouse/cli/server/assets/js/clickhouse.js +188 -0
  20. data/lib/clickhouse/cli/server/assets/js/codemirror.js +9096 -0
  21. data/lib/clickhouse/cli/server/assets/js/datatables.js +166 -0
  22. data/lib/clickhouse/cli/server/assets/js/disableswipeback.js +97 -0
  23. data/lib/clickhouse/cli/server/assets/js/jquery.js +11015 -0
  24. data/lib/clickhouse/cli/server/assets/js/sql.js +232 -0
  25. data/lib/clickhouse/cli/server/views/index.erb +46 -0
  26. data/lib/clickhouse/cluster.rb +2 -1
  27. data/lib/clickhouse/connection.rb +2 -2
  28. data/lib/clickhouse/connection/client.rb +79 -10
  29. data/lib/clickhouse/connection/query.rb +7 -8
  30. data/lib/clickhouse/connection/query/result_set.rb +2 -0
  31. data/lib/clickhouse/utils.rb +23 -0
  32. data/lib/clickhouse/version.rb +1 -1
  33. data/test/unit/connection/test_client.rb +75 -10
  34. data/test/unit/connection/test_cluster.rb +1 -1
  35. data/test/unit/connection/test_logger.rb +3 -3
  36. data/test/unit/connection/test_query.rb +25 -23
  37. data/test/unit/test_utils.rb +39 -0
  38. metadata +86 -6
@@ -8,6 +8,8 @@ module Clickhouse
8
8
  def_delegators :@rows, :size, :empty?
9
9
  def_delegators :to_a, :first, :last, :flatten
10
10
 
11
+ attr_reader :names, :types
12
+
11
13
  def initialize(rows = [], names = nil, types = nil)
12
14
  @rows = rows
13
15
  @names = names
@@ -0,0 +1,23 @@
1
+ module Clickhouse
2
+ module Utils
3
+ extend self
4
+
5
+ def normalize_url(url)
6
+ if url.match(/^\w+:\/\//)
7
+ url
8
+ else
9
+ "#{Clickhouse::Connection::DEFAULT_CONFIG[:scheme]}://#{url}"
10
+ end
11
+ end
12
+
13
+ def extract_format(query)
14
+ format = nil
15
+ query = query.gsub(/ FORMAT (\w+)/i) do
16
+ format = $1
17
+ ""
18
+ end
19
+ [query.strip, format]
20
+ end
21
+
22
+ end
23
+ end
@@ -1,7 +1,7 @@
1
1
  module Clickhouse
2
2
  MAJOR = 0
3
3
  MINOR = 1
4
- TINY = 4
4
+ TINY = 8
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].join(".")
7
7
  end
@@ -11,6 +11,8 @@ module Unit
11
11
  describe Clickhouse::Connection::Client do
12
12
  before do
13
13
  @connection = Connection.new
14
+ @connection.stubs(:parse_stats)
15
+ @connection.stubs(:write_log)
14
16
  end
15
17
 
16
18
  describe "#connect!" do
@@ -60,18 +62,18 @@ module Unit
60
62
  describe "#get" do
61
63
  it "sends a GET request the server" do
62
64
  @connection.instance_variable_set :@client, (client = mock)
63
- client.expects(:get).with("/?query=foo", nil).returns(stub(:status => 200, :body => ""))
65
+ client.expects(:get).with("/?query=foo&output_format_write_statistics=1", nil).returns(stub(:status => 200, :body => ""))
64
66
  @connection.stubs(:log)
65
- @connection.get(:foo)
67
+ @connection.get("foo")
66
68
  end
67
69
  end
68
70
 
69
71
  describe "#post" do
70
72
  it "sends a POST request the server" do
71
73
  @connection.instance_variable_set :@client, (client = mock)
72
- client.expects(:post).with("/?query=foo", "body").returns(stub(:status => 200, :body => ""))
74
+ client.expects(:post).with("/?query=foo&output_format_write_statistics=1", "body").returns(stub(:status => 200, :body => ""))
73
75
  @connection.stubs(:log)
74
- @connection.post(:foo, "body")
76
+ @connection.post("foo", "body")
75
77
  end
76
78
  end
77
79
 
@@ -89,14 +91,15 @@ module Unit
89
91
 
90
92
  it "queries the server returning the response" do
91
93
  @connection.instance_variable_set :@client, (client = mock)
92
- client.expects(:get).with("/?query=SELECT+1", nil).returns(response = stub(:status => 200, :body => ""))
93
- assert_equal response, @connection.send(:request, :get, "SELECT 1")
94
+ client.expects(:get).with("/?query=SELECT+1&output_format_write_statistics=1", nil).returns(stub(:status => 200, :body => ""))
95
+ @connection.expects(:parse_body).returns(data = mock)
96
+ assert_equal data, @connection.send(:request, :get, "SELECT 1")
94
97
  end
95
98
 
96
99
  describe "when not receiving status 200" do
97
100
  it "raises a Clickhouse::QueryError" do
98
101
  @connection.instance_variable_set :@client, (client = mock)
99
- client.expects(:get).with("/?query=SELECT+1", nil).returns(stub(:status => 500, :body => ""))
102
+ client.expects(:get).with("/?query=SELECT+1&output_format_write_statistics=1", nil).returns(stub(:status => 500, :body => ""))
100
103
  assert_raises Clickhouse::QueryError do
101
104
  @connection.send(:request, :get, "SELECT 1")
102
105
  end
@@ -112,16 +115,25 @@ module Unit
112
115
  end
113
116
  end
114
117
  end
118
+
119
+ it "parses the body" do
120
+ json = <<-JSON
121
+ {"meta": []}
122
+ JSON
123
+ @connection.instance_variable_set :@client, (client = mock)
124
+ client.expects(:get).with("/?query=SELECT+1+FORMAT+JSONCompact&output_format_write_statistics=1", nil).returns(stub(:status => 200, :body => json))
125
+ assert_equal({"meta" => []}, @connection.send(:request, :get, "SELECT 1 FORMAT JSONCompact"))
126
+ end
115
127
  end
116
128
 
117
129
  describe "configuration" do
118
130
  describe "database" do
119
131
  it "includes the database in the querystring" do
120
- @connection.expects(:log)
121
132
  @connection.instance_variable_get(:@config)[:database] = "system"
122
133
  @connection.instance_variable_set(:@client, (client = mock))
123
- client.expects(:get).with("/?database=system&query=SELECT+1", nil).returns(response = stub(:status => 200, :body => ""))
124
- assert_equal response, @connection.send(:request, :get, "SELECT 1")
134
+ client.expects(:get).with("/?database=system&query=SELECT+1&output_format_write_statistics=1", nil).returns(stub(:status => 200, :body => ""))
135
+ @connection.expects(:parse_body).returns(data = mock)
136
+ assert_equal data, @connection.send(:request, :get, "SELECT 1")
125
137
  end
126
138
  end
127
139
 
@@ -134,6 +146,59 @@ module Unit
134
146
  end
135
147
  end
136
148
  end
149
+
150
+ describe "statistics" do
151
+ before do
152
+ @connection = Connection.new
153
+ @json = <<-JSON
154
+ {
155
+ "rows": 1947,
156
+ "statistics": {
157
+ "elapsed": 0.1882,
158
+ "rows_read": 1982,
159
+ "bytes_read": 2003
160
+ }
161
+ }
162
+ JSON
163
+ end
164
+
165
+ it "parses the statistics" do
166
+ @connection.stubs(:log)
167
+ @connection.instance_variable_set :@client, (client = mock)
168
+ Time.expects(:now).returns(1882).twice
169
+
170
+ client.expects(:get).with("/?query=SELECT+1+FORMAT+JSONCompact&output_format_write_statistics=1", nil).returns(stub(:status => 200, :body => @json))
171
+ @connection.expects(:write_log).with(
172
+ 0, "SELECT 1", {
173
+ "elapsed" => "188.2ms",
174
+ "rows_read" => "1.98 thousand",
175
+ "bytes_read" => 2003,
176
+ "rows" => 1947,
177
+ "rows_per_second" => "10.53 thousand",
178
+ "data_per_second" => "10.39 KB",
179
+ "data_read" => "1.96 KB"
180
+ }
181
+ )
182
+ @connection.send(:request, :get, "SELECT 1 FORMAT JSONCompact")
183
+ end
184
+
185
+ it "write the expected logs" do
186
+ @connection.instance_variable_set :@client, (client = mock)
187
+ Time.expects(:now).returns(1882).twice
188
+
189
+ client.expects(:get).with("/?query=SELECT+1+FORMAT+JSONCompact&output_format_write_statistics=1", nil).returns(stub(:status => 200, :body => @json))
190
+ log = "\n \e[1m\e[35mSQL (0.0ms)\e\e[0m SELECT 1;\e\n \e[1m\e[36m1947 rows in set. Elapsed: 188.2ms. Processed: 1.98 thousand rows, 1.96 KB (10.53 thousand rows/s, 10.39 KB/s)\e[0m "
191
+
192
+ @connection.expects(:log).with(:debug, log)
193
+ @connection.send(:request, :get, "SELECT 1 FORMAT JSONCompact")
194
+ end
195
+
196
+ describe "#number_to_human_duration" do
197
+ it "returns in seconds when more than 1 seconds" do
198
+ assert_equal "2.0s", @connection.send(:number_to_human_duration, 2)
199
+ end
200
+ end
201
+ end
137
202
  end
138
203
 
139
204
  end
@@ -13,7 +13,7 @@ module Unit
13
13
  it "does not modify the passed config" do
14
14
  config = {:urls => %w(localhost:1234 localhost:1235 localhost:1236)}
15
15
  Clickhouse::Cluster.new config
16
- assert_equal({:urls => %w(localhost:1234 localhost:1235 localhost:1236)}, config)
16
+ assert_equal({:urls => %w(http://localhost:1234 http://localhost:1235 http://localhost:1236)}, config)
17
17
  end
18
18
 
19
19
  describe "when connection succeeds" do
@@ -16,15 +16,15 @@ module Unit
16
16
  describe "#log" do
17
17
  describe "when having specified a logger" do
18
18
  it "delegates to logger" do
19
- (logger = mock).expects(:info, "Hello world!")
19
+ (logger = mock).expects(:debug, "Hello world!")
20
20
  Clickhouse.expects(:logger).returns(logger).twice
21
- @connection.send(:log, :info, "Hello world!")
21
+ @connection.send(:log, :debug, "Hello world!")
22
22
  end
23
23
  end
24
24
 
25
25
  describe "when not having specified a logger" do
26
26
  it "does nothing" do
27
- assert_nil @connection.send(:log, :info, "Boo!")
27
+ assert_nil @connection.send(:log, :debug, "Boo!")
28
28
  end
29
29
  end
30
30
  end
@@ -12,17 +12,19 @@ module Unit
12
12
  describe Clickhouse::Connection::Query do
13
13
  before do
14
14
  @connection = Connection.new
15
+ @connection.stubs(:parse_stats)
16
+ @connection.stubs(:write_log)
15
17
  end
16
18
 
17
19
  describe "#execute" do
18
20
  it "sends a POST request" do
19
- @connection.expects(:post).with("sql", nil).returns(stub(:status => 200, :body => ""))
21
+ @connection.expects(:post).with("sql", nil).returns("")
20
22
  assert_equal true, @connection.execute("sql")
21
23
  end
22
24
 
23
25
  describe "when server returns a non-empty body" do
24
26
  it "returns the body of the response" do
25
- @connection.expects(:post).with("sql", "body").returns(stub(:status => 200, :body => "Ok."))
27
+ @connection.expects(:post).with("sql", "body").returns("Ok.")
26
28
  assert_equal "Ok.", @connection.execute("sql", "body")
27
29
  end
28
30
  end
@@ -30,24 +32,24 @@ module Unit
30
32
 
31
33
  describe "#query" do
32
34
  it "sends a GET request requesting a TSV response including names and types" do
33
- @connection.expects(:get).with("sql FORMAT JSONCompact").returns(stub(:status => 200, :body => ""))
34
- @connection.stubs(:parse_response)
35
+ @connection.expects(:get).with("sql FORMAT JSONCompact")
36
+ @connection.stubs(:parse_data)
35
37
  assert_equal [], @connection.query("sql").to_a
36
38
  end
37
39
  end
38
40
 
39
41
  describe "#databases" do
40
42
  it "sends a 'SHOW DATABASES' query" do
41
- @connection.expects(:get).with("SHOW DATABASES FORMAT JSONCompact").returns(stub(:status => 200, :body => "{}"))
42
- @connection.stubs(:parse_response).returns([])
43
- @connection.databases
43
+ @connection.expects(:get).with("SHOW DATABASES FORMAT JSONCompact")
44
+ @connection.stubs(:parse_data).returns([])
45
+ assert_equal [], @connection.databases
44
46
  end
45
47
  end
46
48
 
47
49
  describe "#tables" do
48
50
  it "sends a 'SHOW TABLES' query" do
49
- @connection.expects(:get).with("SHOW TABLES FORMAT JSONCompact").returns(stub(:status => 200, :body => "{}"))
50
- @connection.stubs(:parse_response).returns([])
51
+ @connection.expects(:get).with("SHOW TABLES FORMAT JSONCompact")
52
+ @connection.stubs(:parse_data).returns([])
51
53
  @connection.tables
52
54
  end
53
55
  end
@@ -65,7 +67,7 @@ CREATE TABLE logs_test (
65
67
  )
66
68
  ENGINE = MergeTree(date, 8192)
67
69
  SQL
68
- @connection.expects(:post).with(sql.strip, nil).returns(stub(:status => 200, :body => ""))
70
+ @connection.expects(:post).with(sql.strip, nil).returns("")
69
71
  @connection.create_table("logs_test") do |t|
70
72
  t.uint8 :id
71
73
  t.float32 :price
@@ -80,8 +82,8 @@ ENGINE = MergeTree(date, 8192)
80
82
 
81
83
  describe "#describe_table" do
82
84
  it "sends a 'DESCRIBE TABLE <name>' query" do
83
- @connection.expects(:get).with("DESCRIBE TABLE logs FORMAT JSONCompact").returns(stub(:status => 200, :body => ""))
84
- @connection.stubs(:parse_response)
85
+ @connection.expects(:get).with("DESCRIBE TABLE logs FORMAT JSONCompact")
86
+ @connection.stubs(:parse_data)
85
87
  @connection.describe_table("logs")
86
88
  end
87
89
  end
@@ -89,7 +91,7 @@ ENGINE = MergeTree(date, 8192)
89
91
  describe "#rename_table" do
90
92
  describe "when passing an array with an even number of names" do
91
93
  it "sends a POST request containing a RENAME TABLE statement" do
92
- @connection.expects(:post).with("RENAME TABLE foo TO bar, baz TO qux", nil).returns(stub(:status => 200, :body => "")).twice
94
+ @connection.expects(:post).with("RENAME TABLE foo TO bar, baz TO qux", nil).returns("").twice
93
95
  assert_equal true, @connection.rename_table("foo", "bar", "baz", "qux")
94
96
  assert_equal true, @connection.rename_table(["foo", "bar"], ["baz", "qux"])
95
97
  end
@@ -108,7 +110,7 @@ ENGINE = MergeTree(date, 8192)
108
110
 
109
111
  describe "when passing a hash" do
110
112
  it "sends a POST request containing a RENAME TABLE statement" do
111
- @connection.expects(:post).with("RENAME TABLE foo TO bar, baz TO qux", nil).returns(stub(:status => 200, :body => ""))
113
+ @connection.expects(:post).with("RENAME TABLE foo TO bar, baz TO qux", nil).returns("")
112
114
  assert_equal true, @connection.rename_table(:foo => "bar", :baz => "qux")
113
115
  end
114
116
  end
@@ -116,7 +118,7 @@ ENGINE = MergeTree(date, 8192)
116
118
 
117
119
  describe "#drop_table" do
118
120
  it "sends a POST request containing a 'DROP TABLE' statement" do
119
- @connection.expects(:post).with("DROP TABLE logs", nil).returns(stub(:status => 200, :body => ""))
121
+ @connection.expects(:post).with("DROP TABLE logs", nil).returns("")
120
122
  assert_equal true, @connection.drop_table("logs")
121
123
  end
122
124
  end
@@ -133,7 +135,7 @@ ENGINE = MergeTree(date, 8192)
133
135
 
134
136
  describe "when using hashes" do
135
137
  it "sends a POST request containing a 'INSERT INTO' statement using CSV" do
136
- @connection.expects(:post).with("INSERT INTO logs FORMAT CSVWithNames", @csv).returns(stub(:status => 200, :body => ""))
138
+ @connection.expects(:post).with("INSERT INTO logs FORMAT CSVWithNames", @csv).returns("")
137
139
  assert_equal true, @connection.insert_rows("logs") { |rows|
138
140
  rows << {:id => 12345, :first_name => "Paul", :last_name => "Engel"}
139
141
  rows << {:id => 67890, :first_name => "Bruce", :last_name => "Wayne"}
@@ -143,7 +145,7 @@ ENGINE = MergeTree(date, 8192)
143
145
 
144
146
  describe "when using arrays" do
145
147
  it "sends a POST request containing a 'INSERT INTO' statement using CSV" do
146
- @connection.expects(:post).with("INSERT INTO logs FORMAT CSVWithNames", @csv).returns(stub(:status => 200, :body => ""))
148
+ @connection.expects(:post).with("INSERT INTO logs FORMAT CSVWithNames", @csv).returns("")
147
149
  assert_equal true, @connection.insert_rows("logs", :names => %w(id first_name last_name)) { |rows|
148
150
  rows << [12345, "Paul", "Engel"]
149
151
  rows << [67890, "Bruce", "Wayne"]
@@ -167,8 +169,8 @@ ENGINE = MergeTree(date, 8192)
167
169
  }
168
170
  JAVASCRIPT
169
171
 
170
- @connection.expects(:to_select_query).with(options = {:from => "logs"})
171
- @connection.expects(:get).returns(stub(:body => body))
172
+ @connection.expects(:to_select_query).with(options = {:from => "logs"}).returns("")
173
+ @connection.expects(:get).returns(JSON.parse(body))
172
174
 
173
175
  assert_equal [
174
176
  [1982, "Paul"],
@@ -187,9 +189,9 @@ ENGINE = MergeTree(date, 8192)
187
189
  describe "#select_values" do
188
190
  describe "when empty result set" do
189
191
  it "returns an empty array" do
190
- @connection.expects(:to_select_query)
192
+ @connection.expects(:to_select_query).returns("")
191
193
  @connection.expects(:get).returns(stub(:body => ""))
192
- @connection.stubs(:parse_response).returns([])
194
+ @connection.stubs(:parse_data).returns([])
193
195
  assert_equal [], @connection.select_values({})
194
196
  end
195
197
  end
@@ -209,8 +211,8 @@ ENGINE = MergeTree(date, 8192)
209
211
  }
210
212
  JAVASCRIPT
211
213
 
212
- @connection.expects(:to_select_query)
213
- @connection.expects(:get).returns(stub(:body => body))
214
+ @connection.expects(:to_select_query).returns("")
215
+ @connection.expects(:get).returns(JSON.parse(body))
214
216
  assert_equal [
215
217
  1982,
216
218
  1947
@@ -0,0 +1,39 @@
1
+ require_relative "../test_helper"
2
+
3
+ module Unit
4
+ class TestUtils < MiniTest::Test
5
+
6
+ describe Clickhouse::Utils do
7
+ describe ".normalize_url" do
8
+ describe "when passing scheme" do
9
+ it "returns the passed url" do
10
+ assert_equal "paul://engel", Clickhouse::Utils.normalize_url("paul://engel")
11
+ end
12
+ end
13
+
14
+ describe "when not passing scheme" do
15
+ it "prepends the default scheme" do
16
+ assert_equal "http://engel", Clickhouse::Utils.normalize_url("engel")
17
+ end
18
+ end
19
+ end
20
+
21
+ describe ".extract_format" do
22
+ describe "when not having a format" do
23
+ it "returns the query and nil as format" do
24
+ assert_equal ["SELECT 1", nil], Clickhouse::Utils.extract_format("SELECT 1")
25
+ end
26
+ end
27
+
28
+ it "strips the query" do
29
+ assert_equal ["SELECT 1", nil], Clickhouse::Utils.extract_format("SELECT 1 ")
30
+ end
31
+
32
+ it "extracts the format from the query" do
33
+ assert_equal ["SELECT 1", "SomeFormat"], Clickhouse::Utils.extract_format("SELECT 1 FORMAT SomeFormat")
34
+ end
35
+ end
36
+ end
37
+
38
+ end
39
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clickhouse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Engel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-25 00:00:00.000000000 Z
11
+ date: 2016-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.13.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.13.4
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: faraday
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,48 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 4.1.8
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 4.1.8
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: launchy
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
41
97
  - !ruby/object:Gem::Dependency
42
98
  name: rake
43
99
  requirement: !ruby/object:Gem::Requirement
@@ -136,13 +192,16 @@ dependencies:
136
192
  - - ">="
137
193
  - !ruby/object:Gem::Version
138
194
  version: '0'
139
- description: A Ruby database driver for ClickHouse
195
+ description: A Ruby database driver for ClickHouse (also Clickhouse CLI and web GUI
196
+ included)
140
197
  email:
141
198
  - pm_engel@icloud.com
142
- executables: []
199
+ executables:
200
+ - clickhouse
143
201
  extensions: []
144
202
  extra_rdoc_files: []
145
203
  files:
204
+ - ".codeclimate.yml"
146
205
  - ".gitignore"
147
206
  - ".travis.yml"
148
207
  - CHANGELOG.md
@@ -151,8 +210,25 @@ files:
151
210
  - README.md
152
211
  - Rakefile
153
212
  - VERSION
213
+ - bin/clickhouse
154
214
  - clickhouse.gemspec
155
215
  - lib/clickhouse.rb
216
+ - lib/clickhouse/cli.rb
217
+ - lib/clickhouse/cli/client.rb
218
+ - lib/clickhouse/cli/console.rb
219
+ - lib/clickhouse/cli/server.rb
220
+ - lib/clickhouse/cli/server/assets/css/clickhouse.css
221
+ - lib/clickhouse/cli/server/assets/css/codemirror.css
222
+ - lib/clickhouse/cli/server/assets/css/datatables.css
223
+ - lib/clickhouse/cli/server/assets/css/normalize.css
224
+ - lib/clickhouse/cli/server/assets/css/skeleton.css
225
+ - lib/clickhouse/cli/server/assets/js/clickhouse.js
226
+ - lib/clickhouse/cli/server/assets/js/codemirror.js
227
+ - lib/clickhouse/cli/server/assets/js/datatables.js
228
+ - lib/clickhouse/cli/server/assets/js/disableswipeback.js
229
+ - lib/clickhouse/cli/server/assets/js/jquery.js
230
+ - lib/clickhouse/cli/server/assets/js/sql.js
231
+ - lib/clickhouse/cli/server/views/index.erb
156
232
  - lib/clickhouse/cluster.rb
157
233
  - lib/clickhouse/connection.rb
158
234
  - lib/clickhouse/connection/client.rb
@@ -162,6 +238,7 @@ files:
162
238
  - lib/clickhouse/connection/query/result_set.rb
163
239
  - lib/clickhouse/connection/query/table.rb
164
240
  - lib/clickhouse/error.rb
241
+ - lib/clickhouse/utils.rb
165
242
  - lib/clickhouse/version.rb
166
243
  - script/console
167
244
  - test/test_helper.rb
@@ -177,8 +254,10 @@ files:
177
254
  - test/unit/connection/test_query.rb
178
255
  - test/unit/test_clickhouse.rb
179
256
  - test/unit/test_connection.rb
257
+ - test/unit/test_utils.rb
180
258
  homepage: https://github.com/archan937/clickhouse
181
- licenses: []
259
+ licenses:
260
+ - MIT
182
261
  metadata: {}
183
262
  post_install_message:
184
263
  rdoc_options: []
@@ -199,7 +278,7 @@ rubyforge_project:
199
278
  rubygems_version: 2.4.5.1
200
279
  signing_key:
201
280
  specification_version: 4
202
- summary: A Ruby database driver for ClickHouse
281
+ summary: A Ruby database driver for ClickHouse (also Clickhouse CLI and web GUI included)
203
282
  test_files:
204
283
  - test/test_helper.rb
205
284
  - test/test_helper/coverage.rb
@@ -214,3 +293,4 @@ test_files:
214
293
  - test/unit/connection/test_query.rb
215
294
  - test/unit/test_clickhouse.rb
216
295
  - test/unit/test_connection.rb
296
+ - test/unit/test_utils.rb