vertica 0.9.6 → 0.10.0
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.
- data/Gemfile.lock +4 -4
- data/VERSION +1 -1
- data/lib/vertica/connection.rb +21 -8
- data/lib/vertica/error.rb +1 -0
- data/test/functional/connection_test.rb +39 -2
- data/test/functional/query_test.rb +1 -1
- metadata +20 -7
data/Gemfile.lock
CHANGED
@@ -2,14 +2,14 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
git (1.2.5)
|
5
|
-
jeweler (1.8.
|
5
|
+
jeweler (1.8.4)
|
6
6
|
bundler (~> 1.0)
|
7
7
|
git (>= 1.2.5)
|
8
8
|
rake
|
9
9
|
rdoc
|
10
|
-
json (1.7.
|
11
|
-
rake (0.
|
12
|
-
rdoc (3.12)
|
10
|
+
json (1.7.7)
|
11
|
+
rake (10.0.4)
|
12
|
+
rdoc (3.12.2)
|
13
13
|
json (~> 1.4)
|
14
14
|
|
15
15
|
PLATFORMS
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.10.0
|
data/lib/vertica/connection.rb
CHANGED
@@ -23,10 +23,7 @@ class Vertica::Connection
|
|
23
23
|
@options[:read_timeout] ||= 30
|
24
24
|
|
25
25
|
@row_style = @options[:row_style] ? @options[:row_style] : :hash
|
26
|
-
unless options[:skip_startup]
|
27
|
-
startup_connection
|
28
|
-
initialize_connection
|
29
|
-
end
|
26
|
+
boot_connection unless options[:skip_startup]
|
30
27
|
end
|
31
28
|
|
32
29
|
def on_notice(&block)
|
@@ -76,24 +73,35 @@ class Vertica::Connection
|
|
76
73
|
raise ArgumentError, "invalid message: (#{message.inspect})" unless message.respond_to?(:to_bytes)
|
77
74
|
puts "=> #{message.inspect}" if @debug
|
78
75
|
socket.write message.to_bytes
|
76
|
+
rescue SystemCallError => e
|
77
|
+
close_socket
|
78
|
+
raise Vertica::Error::ConnectionError.new(e.message)
|
79
79
|
end
|
80
80
|
|
81
81
|
def close
|
82
82
|
write Vertica::Messages::Terminate.new
|
83
|
+
ensure
|
84
|
+
close_socket
|
85
|
+
end
|
86
|
+
|
87
|
+
def close_socket
|
83
88
|
socket.close
|
84
89
|
@socket = nil
|
85
|
-
rescue
|
90
|
+
rescue SystemCallError
|
86
91
|
ensure
|
87
92
|
reset_values
|
88
93
|
end
|
89
94
|
|
90
95
|
def reset_connection
|
91
96
|
close
|
92
|
-
|
97
|
+
boot_connection
|
98
|
+
end
|
99
|
+
|
100
|
+
def boot_connection
|
93
101
|
startup_connection
|
94
102
|
initialize_connection
|
95
103
|
end
|
96
|
-
|
104
|
+
|
97
105
|
def cancel
|
98
106
|
conn = self.class.new(options.merge(:skip_startup => true))
|
99
107
|
conn.write Vertica::Messages::CancelRequest.new(backend_pid, backend_key)
|
@@ -123,8 +131,12 @@ class Vertica::Connection
|
|
123
131
|
puts "<= #{message.inspect}" if @debug
|
124
132
|
return message
|
125
133
|
else
|
126
|
-
|
134
|
+
close
|
135
|
+
raise Vertica::Error::TimedOutError.new("Connection timed out.")
|
127
136
|
end
|
137
|
+
rescue SystemCallError => e
|
138
|
+
close_socket
|
139
|
+
raise Vertica::Error::ConnectionError.new(e.message)
|
128
140
|
end
|
129
141
|
|
130
142
|
def process_message(message)
|
@@ -172,6 +184,7 @@ class Vertica::Connection
|
|
172
184
|
protected
|
173
185
|
|
174
186
|
def run_with_job_lock(job)
|
187
|
+
boot_connection if closed?
|
175
188
|
raise Vertica::Error::SynchronizeError.new(@current_job, job) if busy?
|
176
189
|
@current_job = job
|
177
190
|
job.run
|
data/lib/vertica/error.rb
CHANGED
@@ -6,6 +6,7 @@ class Vertica::Error < StandardError
|
|
6
6
|
class InterruptImpossible < Vertica::Error; end
|
7
7
|
class MessageError < Vertica::Error; end
|
8
8
|
class EmptyQueryError < Vertica::Error; end
|
9
|
+
class TimedOutError < ConnectionError; end
|
9
10
|
|
10
11
|
class SynchronizeError < Vertica::Error
|
11
12
|
attr_reader :running_job, :requested_job
|
@@ -74,8 +74,45 @@ class ConnectionTest < Test::Unit::TestCase
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def test_connection_inspect_should_not_print_password
|
77
|
-
|
78
|
-
inspected_string =
|
77
|
+
connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
78
|
+
inspected_string = connection.inspect
|
79
79
|
assert_no_match /:password=>#{TEST_CONNECTION_HASH[:password]}/, inspected_string
|
80
80
|
end
|
81
|
+
|
82
|
+
def test_connection_timed_out_error
|
83
|
+
connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
84
|
+
connection.options[:read_timeout] = 0.01
|
85
|
+
assert_raises(Vertica::Error::TimedOutError) {connection.query("SELECT SLEEP(1)")}
|
86
|
+
assert connection.closed?
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_automatically_reconnects
|
90
|
+
connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
91
|
+
connection.close
|
92
|
+
assert_equal(1, connection.query("SELECT 1").the_value)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_socket_write_error
|
96
|
+
connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
97
|
+
class << connection.socket
|
98
|
+
def write(foo)
|
99
|
+
raise Errno::ETIMEDOUT
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
assert_raises(Vertica::Error::ConnectionError) {connection.query('select 1')}
|
104
|
+
assert connection.closed?
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_socket_read_error
|
108
|
+
connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
109
|
+
class << connection.socket
|
110
|
+
def read(foo)
|
111
|
+
raise Errno::ETIMEDOUT
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
assert_raises(Vertica::Error::ConnectionError) {connection.query('select 1')}
|
116
|
+
assert connection.closed?
|
117
|
+
end
|
81
118
|
end
|
@@ -110,7 +110,7 @@ class QueryTest < Test::Unit::TestCase
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def test_read_timeout
|
113
|
-
assert_raises(
|
113
|
+
assert_raises(Vertica::Error::TimedOutError) do
|
114
114
|
@connection.options[:read_timeout] = 0.0001
|
115
115
|
@connection.query("SELECT * FROM test_ruby_vertica_table")
|
116
116
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vertica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-04-11 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake
|
18
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,15 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements:
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ! '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0'
|
27
32
|
- !ruby/object:Gem::Dependency
|
28
33
|
name: jeweler
|
29
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
30
35
|
none: false
|
31
36
|
requirements:
|
32
37
|
- - ! '>='
|
@@ -34,7 +39,12 @@ dependencies:
|
|
34
39
|
version: '0'
|
35
40
|
type: :runtime
|
36
41
|
prerelease: false
|
37
|
-
version_requirements:
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
38
48
|
description: Query Vertica with ruby
|
39
49
|
email: sprsquish@gmail.com
|
40
50
|
executables: []
|
@@ -109,6 +119,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
119
|
- - ! '>='
|
110
120
|
- !ruby/object:Gem::Version
|
111
121
|
version: '0'
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
hash: 714844317513278375
|
112
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
126
|
none: false
|
114
127
|
requirements:
|
@@ -117,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
130
|
version: '0'
|
118
131
|
requirements: []
|
119
132
|
rubyforge_project:
|
120
|
-
rubygems_version: 1.8.
|
133
|
+
rubygems_version: 1.8.25
|
121
134
|
signing_key:
|
122
135
|
specification_version: 3
|
123
136
|
summary: Pure ruby library for interacting with Vertica
|