vertica 0.8.1 → 0.9.0.beta1
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 +2 -0
- data/Gemfile.lock +23 -0
- data/Rakefile +12 -9
- data/VERSION +1 -1
- data/lib/vertica.rb +2 -7
- data/lib/vertica/connection.rb +47 -57
- data/lib/vertica/messages/backend_messages/authentication.rb +6 -7
- data/lib/vertica/messages/backend_messages/backend_key_data.rb +4 -7
- data/lib/vertica/messages/backend_messages/bind_complete.rb +1 -1
- data/lib/vertica/messages/backend_messages/close_complete.rb +1 -1
- data/lib/vertica/messages/backend_messages/command_complete.rb +13 -7
- data/lib/vertica/messages/backend_messages/data_row.rb +10 -10
- data/lib/vertica/messages/backend_messages/empty_query_response.rb +1 -1
- data/lib/vertica/messages/backend_messages/error_response.rb +2 -30
- data/lib/vertica/messages/backend_messages/no_data.rb +1 -1
- data/lib/vertica/messages/backend_messages/notice_response.rb +33 -7
- data/lib/vertica/messages/backend_messages/notification_response.rb +4 -9
- data/lib/vertica/messages/backend_messages/parameter_description.rb +5 -9
- data/lib/vertica/messages/backend_messages/parameter_status.rb +4 -8
- data/lib/vertica/messages/backend_messages/parse_complete.rb +1 -1
- data/lib/vertica/messages/backend_messages/portal_suspended.rb +1 -1
- data/lib/vertica/messages/backend_messages/ready_for_query.rb +3 -4
- data/lib/vertica/messages/backend_messages/row_description.rb +15 -15
- data/lib/vertica/messages/backend_messages/unknown.rb +2 -2
- data/lib/vertica/messages/frontend_messages/bind.rb +3 -12
- data/lib/vertica/messages/frontend_messages/cancel_request.rb +1 -5
- data/lib/vertica/messages/frontend_messages/close.rb +5 -9
- data/lib/vertica/messages/frontend_messages/describe.rb +5 -9
- data/lib/vertica/messages/frontend_messages/execute.rb +2 -6
- data/lib/vertica/messages/frontend_messages/flush.rb +1 -1
- data/lib/vertica/messages/frontend_messages/parse.rb +2 -8
- data/lib/vertica/messages/frontend_messages/password.rb +5 -6
- data/lib/vertica/messages/frontend_messages/query.rb +2 -3
- data/lib/vertica/messages/frontend_messages/ssl_request.rb +1 -2
- data/lib/vertica/messages/frontend_messages/startup.rb +6 -8
- data/lib/vertica/messages/frontend_messages/sync.rb +1 -1
- data/lib/vertica/messages/frontend_messages/terminate.rb +1 -1
- data/lib/vertica/messages/message.rb +9 -18
- data/lib/vertica/result.rb +8 -1
- data/test/functional/connection_test.rb +73 -0
- data/test/functional/query_test.rb +150 -0
- data/test/test_helper.rb +7 -13
- data/test/unit/backend_message_test.rb +106 -0
- metadata +72 -20
- data/lib/vertica/bit_helper.rb +0 -34
- data/lib/vertica/core_ext/numeric.rb +0 -13
- data/lib/vertica/core_ext/string.rb +0 -22
- data/lib/vertica/notice.rb +0 -11
- data/lib/vertica/vertica_socket.rb +0 -19
- data/test/connection_test.rb +0 -191
@@ -11,15 +11,13 @@ module Vertica
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def to_bytes
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
message_string bytes
|
14
|
+
str = [Vertica::PROTOCOL_VERSION].pack('N')
|
15
|
+
str << ["user", @user].pack('Z*Z*') if @user
|
16
|
+
str << ["database", @database].pack('Z*Z*') if @database
|
17
|
+
str << ["options", @options].pack('Z*Z*') if @options
|
18
|
+
str << [].pack('x')
|
19
|
+
message_string str
|
21
20
|
end
|
22
|
-
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
@@ -8,39 +8,30 @@ module Vertica
|
|
8
8
|
|
9
9
|
def message_string(msg)
|
10
10
|
msg = msg.join if msg.is_a?(Array)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
m_id = message_id.chr
|
15
|
-
end
|
16
|
-
"#{m_id}#{size}#{msg}"
|
11
|
+
bytesize = msg.respond_to?(:bytesize) ? 4 + msg.bytesize : 4 + msg.size
|
12
|
+
message_size = [bytesize].pack('N')
|
13
|
+
message_id ? "#{message_id}#{message_size}#{msg}" : "#{message_size}#{msg}"
|
17
14
|
end
|
18
15
|
end
|
19
16
|
|
20
17
|
class BackendMessage < Message
|
21
18
|
MessageIdMap = {}
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
def self.factory(type, stream, size)
|
20
|
+
def self.factory(type, data)
|
26
21
|
#puts "factory reading message #{type} #{size} #{type.class}"
|
27
|
-
if klass = MessageIdMap[type
|
28
|
-
klass.new
|
22
|
+
if klass = MessageIdMap[type] #explicitly use the char value, for 1.9 compat
|
23
|
+
klass.new data
|
29
24
|
else
|
30
|
-
Messages::Unknown.new
|
25
|
+
Messages::Unknown.new type, data
|
31
26
|
end
|
32
27
|
end
|
33
28
|
|
34
29
|
def self.message_id(message_id)
|
35
30
|
super
|
36
|
-
MessageIdMap[message_id
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.read(stream)
|
31
|
+
MessageIdMap[message_id] = self #explicitly use the char value, for 1.9 compat
|
40
32
|
end
|
41
33
|
|
42
|
-
def initialize(
|
43
|
-
@size = size
|
34
|
+
def initialize(data)
|
44
35
|
end
|
45
36
|
end
|
46
37
|
|
data/lib/vertica/result.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
module Vertica
|
2
2
|
class Result
|
3
|
+
|
4
|
+
include Enumerable
|
5
|
+
|
3
6
|
attr_reader :columns
|
4
7
|
attr_reader :rows
|
5
8
|
|
@@ -13,7 +16,7 @@ module Vertica
|
|
13
16
|
|
14
17
|
def format_row(row_data)
|
15
18
|
row = {}
|
16
|
-
row_data.
|
19
|
+
row_data.values.each_with_index do |field, idx|
|
17
20
|
col = columns[idx]
|
18
21
|
row[col.name] = col.convert(field)
|
19
22
|
end
|
@@ -27,10 +30,14 @@ module Vertica
|
|
27
30
|
def each_row(&block)
|
28
31
|
@rows.each(&block)
|
29
32
|
end
|
33
|
+
|
34
|
+
alias_method :each, :each_row
|
30
35
|
|
31
36
|
def row_count
|
32
37
|
@rows.size
|
33
38
|
end
|
34
39
|
|
40
|
+
alias_method :size, :row_count
|
41
|
+
alias_method :length, :row_count
|
35
42
|
end
|
36
43
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConnectionTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def teardown
|
6
|
+
@connection.close if @connection
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_new_connection
|
10
|
+
@connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
11
|
+
|
12
|
+
assert !@connection.parameters.empty?
|
13
|
+
assert @connection.backend_pid
|
14
|
+
assert @connection.backend_key
|
15
|
+
assert @connection.transaction_status
|
16
|
+
assert @connection.opened?
|
17
|
+
assert !@connection.closed?
|
18
|
+
|
19
|
+
# parameters
|
20
|
+
assert @connection.parameters.kind_of?(Hash)
|
21
|
+
assert @connection.parameters.include?('server_version')
|
22
|
+
|
23
|
+
assert_equal [], @connection.notifications
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_close_connection
|
27
|
+
@connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
28
|
+
@connection.close
|
29
|
+
|
30
|
+
assert !@connection.opened?
|
31
|
+
assert @connection.closed?
|
32
|
+
assert_equal({}, @connection.parameters)
|
33
|
+
assert_nil @connection.backend_pid
|
34
|
+
assert_nil @connection.backend_key
|
35
|
+
assert_nil @connection.transaction_status
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_connection_with_ssl
|
39
|
+
@connection = Vertica::Connection.new(TEST_CONNECTION_HASH.merge(:ssl => true))
|
40
|
+
|
41
|
+
assert @connection.ssl?
|
42
|
+
assert !@connection.parameters.empty?
|
43
|
+
assert @connection.backend_pid
|
44
|
+
assert @connection.backend_key
|
45
|
+
assert @connection.transaction_status
|
46
|
+
|
47
|
+
@connection.close
|
48
|
+
|
49
|
+
assert_equal({}, @connection.parameters)
|
50
|
+
assert_nil @connection.backend_pid
|
51
|
+
assert_nil @connection.backend_key
|
52
|
+
assert_nil @connection.transaction_status
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_reset
|
56
|
+
@connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
57
|
+
assert !@connection.parameters.empty?
|
58
|
+
assert @connection.backend_pid
|
59
|
+
assert @connection.backend_key
|
60
|
+
assert @connection.transaction_status
|
61
|
+
@connection.reset
|
62
|
+
assert_equal({}, @connection.parameters)
|
63
|
+
assert_nil @connection.backend_pid
|
64
|
+
assert_nil @connection.backend_key
|
65
|
+
assert_nil @connection.transaction_status
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_new_with_error_response
|
69
|
+
assert_raises Vertica::Error::ConnectionError do
|
70
|
+
Vertica::Connection.new(TEST_CONNECTION_HASH.merge(:database => 'nonexistant_db'))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class QueryTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
7
|
+
@connection.query("CREATE TABLE IF NOT EXISTS test_table (id int, name varchar(100))")
|
8
|
+
@connection.query("CREATE PROJECTION IF NOT EXISTS test_table_p (id, name) AS SELECT * FROM test_table SEGMENTED BY HASH(id) ALL NODES OFFSET 1")
|
9
|
+
@connection.query("INSERT INTO test_table VALUES (1, 'matt')")
|
10
|
+
@connection.query("COMMIT")
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@connection.query("DROP TABLE IF EXISTS test_table CASCADE;")
|
15
|
+
@connection.query("COMMIT")
|
16
|
+
@connection.close
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_select_query_with_results
|
20
|
+
r = @connection.query("SELECT * FROM test_table")
|
21
|
+
assert_equal 1, r.row_count
|
22
|
+
assert_equal 2, r.columns.length
|
23
|
+
assert_equal :in, r.columns[0].data_type
|
24
|
+
assert_equal :id, r.columns[0].name
|
25
|
+
assert_equal :varchar, r.columns[1].data_type
|
26
|
+
assert_equal :name, r.columns[1].name
|
27
|
+
|
28
|
+
# assert_equal [[1, 'matt']], r.rows
|
29
|
+
assert_equal [{:id => 1, :name => "matt"}], r.rows
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_select_query_with_no_results
|
33
|
+
r = @connection.query("SELECT * FROM test_table WHERE 1 != 1")
|
34
|
+
assert_equal 0, r.row_count
|
35
|
+
assert_equal 2, r.columns.length
|
36
|
+
assert_equal :in, r.columns[0].data_type
|
37
|
+
assert_equal :id, r.columns[0].name
|
38
|
+
assert_equal :varchar, r.columns[1].data_type
|
39
|
+
assert_equal :name, r.columns[1].name
|
40
|
+
assert_equal [], r.rows
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_insert
|
44
|
+
r = @connection.query("INSERT INTO test_table VALUES (2, 'stefanie')")
|
45
|
+
assert_equal 1, r.row_count
|
46
|
+
assert_equal 1, r.columns.length
|
47
|
+
assert_equal :in, r.columns[0].data_type
|
48
|
+
assert_equal :OUTPUT, r.columns[0].name
|
49
|
+
assert_equal [{:OUTPUT => 1}], r.rows
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def test_delete_of_no_rows
|
54
|
+
r = @connection.query("DELETE FROM test_table WHERE 1 != 1")
|
55
|
+
assert_equal 1, r.row_count
|
56
|
+
assert_equal 1, r.columns.length
|
57
|
+
assert_equal :in, r.columns[0].data_type
|
58
|
+
assert_equal :OUTPUT, r.columns[0].name
|
59
|
+
assert_equal [{:OUTPUT => 0}], r.rows
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_delete_of_a_row
|
63
|
+
r = @connection.query("DELETE FROM test_table WHERE id = 1")
|
64
|
+
assert_equal 1, r.row_count
|
65
|
+
assert_equal 1, r.columns.length
|
66
|
+
assert_equal :in, r.columns[0].data_type
|
67
|
+
assert_equal :OUTPUT, r.columns[0].name
|
68
|
+
assert_equal [{:OUTPUT => 1}], r.rows
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_empty_query
|
72
|
+
assert_raises ArgumentError do
|
73
|
+
@connection.query("")
|
74
|
+
end
|
75
|
+
assert_raises ArgumentError do
|
76
|
+
@connection.query(nil)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# FIXME: now hangs forever
|
81
|
+
# def test_non_query
|
82
|
+
# @connection.query("--just a comment")
|
83
|
+
# end
|
84
|
+
|
85
|
+
def test_sql_error
|
86
|
+
assert_raises Vertica::Error::QueryError do
|
87
|
+
@connection.query("SELECT * FROM nonexisting")
|
88
|
+
end
|
89
|
+
assert_raises Vertica::Error::QueryError do
|
90
|
+
@connection.query("BLAH")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_cancel
|
95
|
+
Vertica::Connection.cancel(@connection)
|
96
|
+
end
|
97
|
+
|
98
|
+
# def test_prepared_statement_with_no_params
|
99
|
+
# @connection.prepare("my_ps", "SELECT * FROM test_table")
|
100
|
+
# r = @connection.execute_prepared("my_ps")
|
101
|
+
# assert_equal 1, r.row_count
|
102
|
+
# assert_equal 2, r.columns.length
|
103
|
+
# assert_equal :in, r.columns[0].data_type
|
104
|
+
# assert_equal :id, r.columns[0].name
|
105
|
+
# assert_equal :varchar, r.columns[1].data_type
|
106
|
+
# assert_equal :name, r.columns[1].name
|
107
|
+
# assert_equal [{:id => 1, :name => "matt"}], r.rows
|
108
|
+
# end
|
109
|
+
#
|
110
|
+
# def test_prepared_statement_with_one_param
|
111
|
+
# c = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
112
|
+
# c.prepare("my_ps", "SELECT * FROM test_table WHERE id = ?", 1)
|
113
|
+
# r = c.execute_prepared("my_ps", 1)
|
114
|
+
# assert_equal 1, r.row_count
|
115
|
+
# assert_equal 2, r.columns.length
|
116
|
+
# assert_equal :in, r.columns[0].data_type
|
117
|
+
# assert_equal 'id', r.columns[0].name
|
118
|
+
# assert_equal :varchar, r.columns[1].data_type
|
119
|
+
# assert_equal 'name', r.columns[1].name
|
120
|
+
# assert_equal [[1, 'matt']], r.rows
|
121
|
+
# c.close
|
122
|
+
# end
|
123
|
+
#
|
124
|
+
# def test_prepared_statement_with_two_params
|
125
|
+
# c = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
126
|
+
# c.prepare("my_ps", "SELECT * FROM test_table WHERE id = ? OR id = ?", 2)
|
127
|
+
# r = c.execute_prepared("my_ps", 1, 3)
|
128
|
+
# assert_equal 1, r.row_count
|
129
|
+
# assert_equal 2, r.columns.length
|
130
|
+
# assert_equal :in, r.columns[0].data_type
|
131
|
+
# assert_equal 'id', r.columns[0].name
|
132
|
+
# assert_equal :varchar, r.columns[1].data_type
|
133
|
+
# assert_equal 'name', r.columns[1].name
|
134
|
+
# assert_equal [[1, 'matt']], r.rows
|
135
|
+
# c.close
|
136
|
+
# end
|
137
|
+
|
138
|
+
def test_cleanup_after_select
|
139
|
+
5.times do
|
140
|
+
r = @connection.query("SELECT * FROM test_table")
|
141
|
+
assert_equal 1, r.row_count
|
142
|
+
assert_equal 2, r.columns.length
|
143
|
+
assert_equal :in, r.columns[0].data_type
|
144
|
+
assert_equal :id, r.columns[0].name
|
145
|
+
assert_equal :varchar, r.columns[1].data_type
|
146
|
+
assert_equal :name, r.columns[1].name
|
147
|
+
assert_equal [{:id => 1, :name => "matt"}], r.rows
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,16 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
2
3
|
|
3
|
-
|
4
|
-
require
|
4
|
+
require 'yaml'
|
5
|
+
require 'test/unit'
|
5
6
|
|
6
|
-
|
7
|
+
require 'vertica'
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
:password => '',
|
11
|
-
:host => '',
|
12
|
-
:port => '',
|
13
|
-
:database => ''
|
14
|
-
}
|
15
|
-
|
16
|
-
end
|
9
|
+
hash = YAML.load(File.read(File.expand_path("../connection.yml", __FILE__)))
|
10
|
+
TEST_CONNECTION_HASH = hash.inject(Hash.new) { |carry, (k, v)| carry[k.to_sym] = v; carry }
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BackendMessageTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_cleartext_authentication_message
|
6
|
+
msg = Vertica::Messages::Authentication.new("\x00\x00\x00\x03")
|
7
|
+
assert_equal Vertica::Messages::Authentication::CLEARTEXT_PASSWORD , msg.code
|
8
|
+
assert_nil msg.salt
|
9
|
+
assert_nil msg.auth_data
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_parameter_status_message
|
13
|
+
msg = Vertica::Messages::ParameterStatus.new("standard_conforming_strings\x00on\x00")
|
14
|
+
assert_equal "standard_conforming_strings", msg.name
|
15
|
+
assert_equal "on", msg.value
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_backend_key_data_message
|
19
|
+
msg = Vertica::Messages::BackendKeyData.new("\x00\x01\xED\xD8\x02\xC4\"\t")
|
20
|
+
assert_equal 126424, msg.pid
|
21
|
+
assert_equal 46408201, msg.key
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_ready_for_query_message
|
25
|
+
msg = Vertica::Messages::ReadyForQuery.new("I")
|
26
|
+
assert_equal 'I', msg.transaction_status
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_error_response_message
|
30
|
+
data = "SFATAL\x00C3D000\x00Mdatabase \"nonexistant_db\" does not exist\x00F/scratch_a/release/vbuild/vertica/Basics/ClientAuthentication.cpp\x00L1496\x00RClientAuthentication\x00\x00"
|
31
|
+
msg = Vertica::Messages::ErrorResponse.new(data)
|
32
|
+
assert_equal msg.values, {
|
33
|
+
"Severity" => "FATAL",
|
34
|
+
"Sqlstate" => "3D000",
|
35
|
+
"Message" => "database \"nonexistant_db\" does not exist",
|
36
|
+
"File" => "/scratch_a/release/vbuild/vertica/Basics/ClientAuthentication.cpp",
|
37
|
+
"Line" => "1496",
|
38
|
+
"Routine" => "ClientAuthentication"
|
39
|
+
}
|
40
|
+
|
41
|
+
assert_equal "Severity: FATAL, Message: database \"nonexistant_db\" does not exist, Sqlstate: 3D000, Routine: ClientAuthentication, File: /scratch_a/release/vbuild/vertica/Basics/ClientAuthentication.cpp, Line: 1496", msg.error_message
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_notice_response_message
|
45
|
+
data = "SINFO\x00C00000\x00Mcannot commit; no transaction in progress\x00F/scratch_a/release/vbuild/vertica/Commands/PGCall.cpp\x00L3502\x00Rprocess_vertica_transaction\x00\x00"
|
46
|
+
msg = Vertica::Messages::NoticeResponse.new(data)
|
47
|
+
|
48
|
+
assert_equal msg.values, {
|
49
|
+
"Severity" => "INFO",
|
50
|
+
"Sqlstate" => "00000",
|
51
|
+
"Message" => "cannot commit; no transaction in progress",
|
52
|
+
"File" => "/scratch_a/release/vbuild/vertica/Commands/PGCall.cpp",
|
53
|
+
"Line" => "3502",
|
54
|
+
"Routine" => "process_vertica_transaction"
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_row_description_message
|
59
|
+
msg = Vertica::Messages::RowDescription.new("\x00\x01OUTPUT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\b\x00\x00\x00\b\x00\x00")
|
60
|
+
assert_equal 1, msg.fields.size
|
61
|
+
assert_equal msg.fields[0], {
|
62
|
+
:name => "OUTPUT",
|
63
|
+
:table_oid => 0,
|
64
|
+
:attribute_number => 0,
|
65
|
+
:data_type_oid => 6,
|
66
|
+
:data_type_size => 8,
|
67
|
+
:type_modifier => 8,
|
68
|
+
:format_code => 0
|
69
|
+
}
|
70
|
+
|
71
|
+
msg = Vertica::Messages::RowDescription.new("\x00\x02id\x00\x00\np8\x00\x01\x00\x00\x00\x06\x00\b\xFF\xFF\xFF\xFF\x00\x00name\x00\x00\np8\x00\x02\x00\x00\x00\t\xFF\xFF\x00\x00\x00h\x00\x00")
|
72
|
+
assert_equal msg.fields[0], {
|
73
|
+
:name => "id",
|
74
|
+
:table_oid => 684088,
|
75
|
+
:attribute_number => 1,
|
76
|
+
:data_type_oid => 6,
|
77
|
+
:data_type_size => 8,
|
78
|
+
:type_modifier => 4294967295,
|
79
|
+
:format_code => 0
|
80
|
+
}
|
81
|
+
assert_equal msg.fields[1], {
|
82
|
+
:name => "name",
|
83
|
+
:table_oid => 684088,
|
84
|
+
:attribute_number => 2,
|
85
|
+
:data_type_oid => 9,
|
86
|
+
:data_type_size => 65535,
|
87
|
+
:type_modifier => 104,
|
88
|
+
:format_code => 0
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_data_row_message
|
93
|
+
msg = Vertica::Messages::DataRow.new("\x00\x01\x00\x00\x00\x011")
|
94
|
+
assert_equal ['1'], msg.values
|
95
|
+
|
96
|
+
msg = Vertica::Messages::DataRow.new("\x00\x02\x00\x00\x00\x011\x00\x00\x00\x04matt")
|
97
|
+
assert_equal ['1', 'matt'], msg.values
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_command_complete_message
|
101
|
+
msg = Vertica::Messages::CommandComplete.new("CREATE TABLE\x00")
|
102
|
+
assert_equal "CREATE TABLE", msg.tag
|
103
|
+
assert_nil msg.rows
|
104
|
+
assert_nil msg.oid
|
105
|
+
end
|
106
|
+
end
|