vertica 0.8.1 → 0.9.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/Gemfile +2 -0
  2. data/Gemfile.lock +23 -0
  3. data/Rakefile +12 -9
  4. data/VERSION +1 -1
  5. data/lib/vertica.rb +2 -7
  6. data/lib/vertica/connection.rb +47 -57
  7. data/lib/vertica/messages/backend_messages/authentication.rb +6 -7
  8. data/lib/vertica/messages/backend_messages/backend_key_data.rb +4 -7
  9. data/lib/vertica/messages/backend_messages/bind_complete.rb +1 -1
  10. data/lib/vertica/messages/backend_messages/close_complete.rb +1 -1
  11. data/lib/vertica/messages/backend_messages/command_complete.rb +13 -7
  12. data/lib/vertica/messages/backend_messages/data_row.rb +10 -10
  13. data/lib/vertica/messages/backend_messages/empty_query_response.rb +1 -1
  14. data/lib/vertica/messages/backend_messages/error_response.rb +2 -30
  15. data/lib/vertica/messages/backend_messages/no_data.rb +1 -1
  16. data/lib/vertica/messages/backend_messages/notice_response.rb +33 -7
  17. data/lib/vertica/messages/backend_messages/notification_response.rb +4 -9
  18. data/lib/vertica/messages/backend_messages/parameter_description.rb +5 -9
  19. data/lib/vertica/messages/backend_messages/parameter_status.rb +4 -8
  20. data/lib/vertica/messages/backend_messages/parse_complete.rb +1 -1
  21. data/lib/vertica/messages/backend_messages/portal_suspended.rb +1 -1
  22. data/lib/vertica/messages/backend_messages/ready_for_query.rb +3 -4
  23. data/lib/vertica/messages/backend_messages/row_description.rb +15 -15
  24. data/lib/vertica/messages/backend_messages/unknown.rb +2 -2
  25. data/lib/vertica/messages/frontend_messages/bind.rb +3 -12
  26. data/lib/vertica/messages/frontend_messages/cancel_request.rb +1 -5
  27. data/lib/vertica/messages/frontend_messages/close.rb +5 -9
  28. data/lib/vertica/messages/frontend_messages/describe.rb +5 -9
  29. data/lib/vertica/messages/frontend_messages/execute.rb +2 -6
  30. data/lib/vertica/messages/frontend_messages/flush.rb +1 -1
  31. data/lib/vertica/messages/frontend_messages/parse.rb +2 -8
  32. data/lib/vertica/messages/frontend_messages/password.rb +5 -6
  33. data/lib/vertica/messages/frontend_messages/query.rb +2 -3
  34. data/lib/vertica/messages/frontend_messages/ssl_request.rb +1 -2
  35. data/lib/vertica/messages/frontend_messages/startup.rb +6 -8
  36. data/lib/vertica/messages/frontend_messages/sync.rb +1 -1
  37. data/lib/vertica/messages/frontend_messages/terminate.rb +1 -1
  38. data/lib/vertica/messages/message.rb +9 -18
  39. data/lib/vertica/result.rb +8 -1
  40. data/test/functional/connection_test.rb +73 -0
  41. data/test/functional/query_test.rb +150 -0
  42. data/test/test_helper.rb +7 -13
  43. data/test/unit/backend_message_test.rb +106 -0
  44. metadata +72 -20
  45. data/lib/vertica/bit_helper.rb +0 -34
  46. data/lib/vertica/core_ext/numeric.rb +0 -13
  47. data/lib/vertica/core_ext/string.rb +0 -22
  48. data/lib/vertica/notice.rb +0 -11
  49. data/lib/vertica/vertica_socket.rb +0 -19
  50. data/test/connection_test.rb +0 -191
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vertica
3
3
  version: !ruby/object:Gem::Version
4
- hash: 61
5
- prerelease: false
4
+ prerelease: true
6
5
  segments:
7
6
  - 0
8
- - 8
9
- - 1
10
- version: 0.8.1
7
+ - 9
8
+ - 0
9
+ - beta1
10
+ version: 0.9.0.beta1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jeff Smick
@@ -16,10 +16,61 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-03-07 00:00:00 -08:00
19
+ date: 2011-09-02 00:00:00 -04:00
20
20
  default_executable:
21
- dependencies: []
22
-
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: vertica
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ prerelease: false
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: jeweler
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: jeweler
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: *id004
23
74
  description: Query Vertica with ruby
24
75
  email: sprsquish@gmail.com
25
76
  executables: []
@@ -30,16 +81,15 @@ extra_rdoc_files:
30
81
  - LICENSE
31
82
  - README.md
32
83
  files:
84
+ - Gemfile
85
+ - Gemfile.lock
33
86
  - LICENSE
34
87
  - README.md
35
88
  - Rakefile
36
89
  - VERSION
37
90
  - lib/vertica.rb
38
- - lib/vertica/bit_helper.rb
39
91
  - lib/vertica/column.rb
40
92
  - lib/vertica/connection.rb
41
- - lib/vertica/core_ext/numeric.rb
42
- - lib/vertica/core_ext/string.rb
43
93
  - lib/vertica/messages/backend_messages/authentication.rb
44
94
  - lib/vertica/messages/backend_messages/backend_key_data.rb
45
95
  - lib/vertica/messages/backend_messages/bind_complete.rb
@@ -72,12 +122,12 @@ files:
72
122
  - lib/vertica/messages/frontend_messages/sync.rb
73
123
  - lib/vertica/messages/frontend_messages/terminate.rb
74
124
  - lib/vertica/messages/message.rb
75
- - lib/vertica/notice.rb
76
125
  - lib/vertica/notification.rb
77
126
  - lib/vertica/result.rb
78
- - lib/vertica/vertica_socket.rb
79
- - test/connection_test.rb
127
+ - test/functional/connection_test.rb
128
+ - test/functional/query_test.rb
80
129
  - test/test_helper.rb
130
+ - test/unit/backend_message_test.rb
81
131
  has_rdoc: true
82
132
  homepage: http://github.com/sprsquish/vertica
83
133
  licenses: []
@@ -92,19 +142,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
142
  requirements:
93
143
  - - ">="
94
144
  - !ruby/object:Gem::Version
95
- hash: 3
96
145
  segments:
97
146
  - 0
98
147
  version: "0"
99
148
  required_rubygems_version: !ruby/object:Gem::Requirement
100
149
  none: false
101
150
  requirements:
102
- - - ">="
151
+ - - ">"
103
152
  - !ruby/object:Gem::Version
104
- hash: 3
105
153
  segments:
106
- - 0
107
- version: "0"
154
+ - 1
155
+ - 3
156
+ - 1
157
+ version: 1.3.1
108
158
  requirements: []
109
159
 
110
160
  rubyforge_project:
@@ -113,5 +163,7 @@ signing_key:
113
163
  specification_version: 3
114
164
  summary: Pure ruby library for interacting with Vertica
115
165
  test_files:
116
- - test/connection_test.rb
166
+ - test/functional/connection_test.rb
167
+ - test/functional/query_test.rb
117
168
  - test/test_helper.rb
169
+ - test/unit/backend_message_test.rb
@@ -1,34 +0,0 @@
1
- module Vertica
2
- module BitHelper
3
-
4
- def readn(n)
5
- s = read(n)
6
- raise "couldn't read #{n} characters" if s.nil? or s.size != n # TODO make into a Vertica Exception
7
- s
8
- end
9
-
10
- def read_byte
11
- readn(1).to_byte
12
- end
13
-
14
- def read_network_int16
15
- readn(2).to_network_int16
16
- end
17
-
18
- def read_network_int32
19
- handle_endian_flavor(readn(4)).to_network_int32
20
- end
21
-
22
- def read_cstring
23
- readline("\000").from_cstring
24
- end
25
-
26
- def handle_endian_flavor(s)
27
- little_endian? ? s.reverse : s
28
- end
29
-
30
- def little_endian?
31
- @little_endian ||= ([0x12345678].pack("L") == "\x12\x34\x56\x78" ? false : true)
32
- end
33
- end
34
- end
@@ -1,13 +0,0 @@
1
- class Numeric
2
- def to_network_int16
3
- [self].pack('n')
4
- end
5
-
6
- def to_network_int32
7
- [self].pack('N')
8
- end
9
-
10
- def to_byte
11
- [self].pack('C')
12
- end
13
- end
@@ -1,22 +0,0 @@
1
- class String
2
- def to_cstring
3
- raise ArgumentError, "Invalid cstring" if self.include?("\000")
4
- "#{self}\000"
5
- end
6
-
7
- def from_cstring
8
- self[0..-2]
9
- end
10
-
11
- def to_byte
12
- unpack('C').first
13
- end
14
-
15
- def to_network_int16
16
- unpack('n').first
17
- end
18
-
19
- def to_network_int32
20
- unpack('l').first
21
- end
22
- end
@@ -1,11 +0,0 @@
1
- module Vertica
2
- class Notice
3
- attr_reader :field_type
4
- attr_reader :field_value
5
-
6
- def initialize(field_type, field_value)
7
- @field_type = field_type
8
- @field_value = field_value
9
- end
10
- end
11
- end
@@ -1,19 +0,0 @@
1
- module Vertica
2
- class VerticaSocket < TCPSocket
3
- include BitHelper
4
-
5
- def read_message
6
- type = read_byte
7
- size = read_network_int32
8
-
9
- raise Vertica::Error::MessageError.new("Bad message size: #{size}") unless size >= 4
10
- Messages::BackendMessage.factory type, self, size
11
- end
12
-
13
- def write_message(message)
14
- raise ArgumentError, "invalid message: (#{message.inspect})" unless message.respond_to?(:to_bytes)
15
- write message.to_bytes
16
- end
17
-
18
- end
19
- end
@@ -1,191 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
2
-
3
- class ConnectionTest < Test::Unit::TestCase
4
-
5
- def test_new
6
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
7
- assert !c.parameters.empty?
8
- assert c.backend_pid
9
- assert c.backend_key
10
- assert c.transaction_status
11
- assert c.opened?
12
- assert !c.closed?
13
- assert_equal({"server_version" => "8.0"}, c.parameters)
14
- assert_equal([], c.notifications)
15
- c.close
16
- assert_equal({}, c.parameters)
17
- assert_nil c.backend_pid
18
- assert_nil c.backend_key
19
- assert_nil c.transaction_status
20
- end
21
-
22
- def test_new_with_ssl
23
- c = Vertica::Connection.new(TEST_CONNECTION_HASH.merge(:ssl => true))
24
- assert !c.parameters.empty?
25
- assert c.backend_pid
26
- assert c.backend_key
27
- assert c.transaction_status
28
- c.close
29
- assert_equal({}, c.parameters)
30
- assert_nil c.backend_pid
31
- assert_nil c.backend_key
32
- assert_nil c.transaction_status
33
- end
34
-
35
- def test_reset
36
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
37
- assert !c.parameters.empty?
38
- assert c.backend_pid
39
- assert c.backend_key
40
- assert c.transaction_status
41
- c.reset
42
- assert_equal({}, c.parameters)
43
- assert_nil c.backend_pid
44
- assert_nil c.backend_key
45
- assert_nil c.transaction_status
46
- c.close
47
- end
48
-
49
- def test_new_with_error_response
50
- assert_raises Vertica::Error::MessageError do
51
- Vertica::Connection.new(TEST_CONNECTION_HASH.merge(:database => 'nonexistant_db'))
52
- end
53
- end
54
-
55
- def test_select_query_with_results
56
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
57
- r = c.query("SELECT * FROM test_table")
58
- assert_equal 1, r.row_count
59
- assert_equal 2, r.columns.length
60
- assert_equal :in, r.columns[0].data_type
61
- assert_equal 'id', r.columns[0].name
62
- assert_equal :varchar, r.columns[1].data_type
63
- assert_equal 'name', r.columns[1].name
64
- assert_equal [[1, 'matt']], r.rows
65
- c.close
66
- end
67
-
68
- def test_select_query_with_no_results
69
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
70
- r = c.query("SELECT * FROM test_table WHERE 1 != 1")
71
- assert_equal 0, r.row_count
72
- assert_equal 2, r.columns.length
73
- assert_equal :in, r.columns[0].data_type
74
- assert_equal 'id', r.columns[0].name
75
- assert_equal :varchar, r.columns[1].data_type
76
- assert_equal 'name', r.columns[1].name
77
- assert_equal [], r.rows
78
- c.close
79
- end
80
-
81
- def test_delete_of_no_rows
82
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
83
- r = c.query("DELETE FROM test_table WHERE 1 != 1")
84
- assert_equal 1, r.row_count
85
- assert_equal 1, r.columns.length
86
- assert_equal :in, r.columns[0].data_type
87
- assert_equal 'OUTPUT', r.columns[0].name
88
- assert_equal [[0]], r.rows
89
- c.close
90
- end
91
-
92
- def test_insert
93
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
94
- r = c.query("INSERT INTO test_table VALUES (2, 'stefanie')")
95
- assert_equal 1, r.row_count
96
- assert_equal 1, r.columns.length
97
- assert_equal :in, r.columns[0].data_type
98
- assert_equal 'OUTPUT', r.columns[0].name
99
- assert_equal [[1]], r.rows
100
- c.close
101
- end
102
-
103
- def test_delete_of_a_row
104
- test_insert
105
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
106
- r = c.query("DELETE FROM test_table WHERE id = 2")
107
- assert_equal 1, r.row_count
108
- assert_equal 1, r.columns.length
109
- assert_equal :in, r.columns[0].data_type
110
- assert_equal 'OUTPUT', r.columns[0].name
111
- assert_equal [[0]], r.rows
112
- c.close
113
- end
114
-
115
- def test_empty_query
116
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
117
- assert_raises ArgumentError do
118
- r = c.query("")
119
- end
120
- assert_raises ArgumentError do
121
- r = c.query(nil)
122
- end
123
- c.close
124
- end
125
-
126
- def test_cancel
127
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
128
- Vertica::Connection.cancel(c)
129
- c.close
130
- end
131
-
132
- def test_prepared_statement_with_no_params
133
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
134
- c.prepare("my_ps", "SELECT * FROM test_table")
135
- r = c.execute_prepared("my_ps")
136
- assert_equal 1, r.row_count
137
- assert_equal 2, r.columns.length
138
- assert_equal :in, r.columns[0].data_type
139
- assert_equal 'id', r.columns[0].name
140
- assert_equal :varchar, r.columns[1].data_type
141
- assert_equal 'name', r.columns[1].name
142
- assert_equal [[1, 'matt']], r.rows
143
- c.close
144
- end
145
-
146
- def test_prepared_statement_with_one_param
147
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
148
- c.prepare("my_ps", "SELECT * FROM test_table WHERE id = ?", 1)
149
- r = c.execute_prepared("my_ps", 1)
150
- assert_equal 1, r.row_count
151
- assert_equal 2, r.columns.length
152
- assert_equal :in, r.columns[0].data_type
153
- assert_equal 'id', r.columns[0].name
154
- assert_equal :varchar, r.columns[1].data_type
155
- assert_equal 'name', r.columns[1].name
156
- assert_equal [[1, 'matt']], r.rows
157
- c.close
158
- end
159
-
160
- def test_prepared_statement_with_two_params
161
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
162
- c.prepare("my_ps", "SELECT * FROM test_table WHERE id = ? OR id = ?", 2)
163
- r = c.execute_prepared("my_ps", 1, 3)
164
- assert_equal 1, r.row_count
165
- assert_equal 2, r.columns.length
166
- assert_equal :in, r.columns[0].data_type
167
- assert_equal 'id', r.columns[0].name
168
- assert_equal :varchar, r.columns[1].data_type
169
- assert_equal 'name', r.columns[1].name
170
- assert_equal [[1, 'matt']], r.rows
171
- c.close
172
- end
173
-
174
- def test_double_select
175
- c = Vertica::Connection.new(TEST_CONNECTION_HASH)
176
- 5.times do
177
- r = c.query("SELECT * FROM test_table")
178
- assert_equal 1, r.row_count
179
- assert_equal 2, r.columns.length
180
- assert_equal :in, r.columns[0].data_type
181
- assert_equal 'id', r.columns[0].name
182
- assert_equal :varchar, r.columns[1].data_type
183
- assert_equal 'name', r.columns[1].name
184
- assert_equal [[1, 'matt']], r.rows
185
- end
186
- c.close
187
- end
188
-
189
- # test parameters
190
-
191
- end