vertica 0.9.0.beta1 → 0.9.0.beta2
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 +2 -1
- data/VERSION +1 -1
- data/lib/vertica/column.rb +2 -2
- data/lib/vertica/connection.rb +5 -1
- data/lib/vertica/messages/backend_messages/data_row.rb +1 -0
- data/lib/vertica/result.rb +19 -4
- data/test/functional/query_test.rb +15 -2
- data/test/functional/value_conversion_test.rb +47 -0
- metadata +31 -3
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.0.
|
1
|
+
0.9.0.beta2
|
data/lib/vertica/column.rb
CHANGED
@@ -18,11 +18,11 @@ module Vertica
|
|
18
18
|
[:char, nil],
|
19
19
|
[:varchar, nil],
|
20
20
|
[:date, lambda { |s| Date.new(*s.split("-").map{|x| x.to_i}) }],
|
21
|
-
[:time,
|
21
|
+
[:time, nil],
|
22
22
|
[:timestamp, lambda { |s| DateTime.parse(s, true) }],
|
23
23
|
[:timestamp_tz, lambda { |s| DateTime.parse(s, true) }],
|
24
24
|
[:interval, nil],
|
25
|
-
[:time_tz,
|
25
|
+
[:time_tz, nil],
|
26
26
|
[:numeric, lambda { |s| s.to_d }],
|
27
27
|
[:bytea, nil],
|
28
28
|
[:rle_tuple, nil]
|
data/lib/vertica/connection.rb
CHANGED
@@ -9,6 +9,8 @@ module Vertica
|
|
9
9
|
|
10
10
|
attr_reader :options, :notices, :transaction_status, :backend_pid, :backend_key, :notifications, :parameters
|
11
11
|
|
12
|
+
attr_accessor :row_style
|
13
|
+
|
12
14
|
def self.cancel(existing_conn)
|
13
15
|
conn = self.new(existing_conn.options.merge(:skip_startup => true))
|
14
16
|
conn.write Messages::CancelRequest.new(existing_conn.backend_pid, existing_conn.backend_key)
|
@@ -21,6 +23,8 @@ module Vertica
|
|
21
23
|
|
22
24
|
@options = options
|
23
25
|
@notices = []
|
26
|
+
|
27
|
+
@row_style = @options[:row_style] ? @options[:row_style] : :hash
|
24
28
|
|
25
29
|
unless options[:skip_startup]
|
26
30
|
write Messages::Startup.new(@options[:user], @options[:database])
|
@@ -140,7 +144,7 @@ module Vertica
|
|
140
144
|
|
141
145
|
|
142
146
|
def process(return_result = false)
|
143
|
-
result = return_result ? Result.new : nil
|
147
|
+
result = return_result ? Result.new(row_style) : nil
|
144
148
|
loop do
|
145
149
|
case message = read_message
|
146
150
|
when Messages::Authentication
|
data/lib/vertica/result.rb
CHANGED
@@ -6,7 +6,10 @@ module Vertica
|
|
6
6
|
attr_reader :columns
|
7
7
|
attr_reader :rows
|
8
8
|
|
9
|
-
|
9
|
+
attr_accessor
|
10
|
+
|
11
|
+
def initialize(row_style = :hash)
|
12
|
+
@row_style = row_style
|
10
13
|
@rows = []
|
11
14
|
end
|
12
15
|
|
@@ -14,11 +17,23 @@ module Vertica
|
|
14
17
|
@columns = message.fields.map { |fd| Column.new(fd) }
|
15
18
|
end
|
16
19
|
|
17
|
-
def
|
20
|
+
def format_row_as_hash(row_data)
|
18
21
|
row = {}
|
19
|
-
row_data.values.each_with_index do |
|
22
|
+
row_data.values.each_with_index do |value, idx|
|
20
23
|
col = columns[idx]
|
21
|
-
row[col.name] = col.convert(
|
24
|
+
row[col.name] = col.convert(value)
|
25
|
+
end
|
26
|
+
row
|
27
|
+
end
|
28
|
+
|
29
|
+
def format_row(row_data)
|
30
|
+
send("format_row_as_#{@row_style}", row_data)
|
31
|
+
end
|
32
|
+
|
33
|
+
def format_row_as_array(row_data)
|
34
|
+
row = []
|
35
|
+
row_data.values.each_with_index do |value, idx|
|
36
|
+
row << columns[idx].convert(value)
|
22
37
|
end
|
23
38
|
row
|
24
39
|
end
|
@@ -16,7 +16,7 @@ class QueryTest < Test::Unit::TestCase
|
|
16
16
|
@connection.close
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def test_select_query_with_results_as_hash
|
20
20
|
r = @connection.query("SELECT * FROM test_table")
|
21
21
|
assert_equal 1, r.row_count
|
22
22
|
assert_equal 2, r.columns.length
|
@@ -25,9 +25,22 @@ class QueryTest < Test::Unit::TestCase
|
|
25
25
|
assert_equal :varchar, r.columns[1].data_type
|
26
26
|
assert_equal :name, r.columns[1].name
|
27
27
|
|
28
|
-
# assert_equal [[1, 'matt']], r.rows
|
29
28
|
assert_equal [{:id => 1, :name => "matt"}], r.rows
|
30
29
|
end
|
30
|
+
|
31
|
+
def test_select_query_with_results_as_array
|
32
|
+
@connection.row_style = :array
|
33
|
+
r = @connection.query("SELECT * FROM test_table")
|
34
|
+
assert_equal 1, 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
|
+
|
41
|
+
assert_equal [[1, "matt"]], r.rows
|
42
|
+
end
|
43
|
+
|
31
44
|
|
32
45
|
def test_select_query_with_no_results
|
33
46
|
r = @connection.query("SELECT * FROM test_table WHERE 1 != 1")
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ValueConversionTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@connection = Vertica::Connection.new(TEST_CONNECTION_HASH.merge(:row_style => :array))
|
7
|
+
|
8
|
+
@connection.query <<-SQL
|
9
|
+
CREATE TABLE IF NOT EXISTS conversions_table (
|
10
|
+
"int_field" int,
|
11
|
+
"string_field" varchar(100),
|
12
|
+
"date_field" date,
|
13
|
+
"timestamp_field" timestamp,
|
14
|
+
"time_field" time,
|
15
|
+
"interval_field" interval,
|
16
|
+
"boolean_field" boolean
|
17
|
+
)
|
18
|
+
SQL
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def teardown
|
23
|
+
@connection.query("DROP TABLE IF EXISTS conversions_table CASCADE;")
|
24
|
+
@connection.close
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_value_conversions
|
28
|
+
@connection.query "INSERT INTO conversions_table VALUES (123, 'hello world', '2010-01-01', '2010-01-01 12:00:00', '12:00:00', INTERVAL '1 DAY', TRUE)"
|
29
|
+
result = @connection.query "SELECT * FROM conversions_table LIMIT 1"
|
30
|
+
assert_equal result.rows.length, 1
|
31
|
+
assert_equal [
|
32
|
+
123,
|
33
|
+
'hello world',
|
34
|
+
Date.parse('2010-01-01'),
|
35
|
+
DateTime.parse('2010-01-01 12:00:00'),
|
36
|
+
"12:00:00",
|
37
|
+
"1",
|
38
|
+
true], result.rows.first
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_nil_conversions
|
42
|
+
@connection.query "INSERT INTO conversions_table VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL)"
|
43
|
+
result = @connection.query "SELECT * FROM conversions_table LIMIT 1"
|
44
|
+
assert_equal result.rows.length, 1
|
45
|
+
assert_equal [nil, nil, nil, nil, nil, nil, nil], result.rows.first
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 0
|
7
7
|
- 9
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.9.0.
|
9
|
+
- beta2
|
10
|
+
version: 0.9.0.beta2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jeff Smick
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-09-
|
19
|
+
date: 2011-09-09 00:00:00 -04:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -71,6 +71,32 @@ dependencies:
|
|
71
71
|
type: :development
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: *id004
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: jeweler
|
76
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
type: :development
|
85
|
+
prerelease: false
|
86
|
+
version_requirements: *id005
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: rake
|
89
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
version: "0"
|
97
|
+
type: :development
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: *id006
|
74
100
|
description: Query Vertica with ruby
|
75
101
|
email: sprsquish@gmail.com
|
76
102
|
executables: []
|
@@ -126,6 +152,7 @@ files:
|
|
126
152
|
- lib/vertica/result.rb
|
127
153
|
- test/functional/connection_test.rb
|
128
154
|
- test/functional/query_test.rb
|
155
|
+
- test/functional/value_conversion_test.rb
|
129
156
|
- test/test_helper.rb
|
130
157
|
- test/unit/backend_message_test.rb
|
131
158
|
has_rdoc: true
|
@@ -165,5 +192,6 @@ summary: Pure ruby library for interacting with Vertica
|
|
165
192
|
test_files:
|
166
193
|
- test/functional/connection_test.rb
|
167
194
|
- test/functional/query_test.rb
|
195
|
+
- test/functional/value_conversion_test.rb
|
168
196
|
- test/test_helper.rb
|
169
197
|
- test/unit/backend_message_test.rb
|