vertica 0.9.0.beta2 → 0.9.0.beta3
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 +3 -1
- data/Gemfile.lock +1 -1
- data/Rakefile +1 -19
- data/VERSION +1 -1
- data/lib/vertica/column.rb +2 -2
- data/lib/vertica/connection.rb +22 -11
- data/lib/vertica/messages/message.rb +33 -1
- data/lib/vertica.rb +25 -47
- data/test/functional/query_test.rb +10 -10
- data/test/test_helper.rb +1 -2
- data/test/unit/backend_message_test.rb +3 -0
- data/test/unit/quoting_test.rb +31 -0
- metadata +9 -73
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/Rakefile
CHANGED
|
@@ -10,15 +10,12 @@ begin
|
|
|
10
10
|
|
|
11
11
|
gem.email = 'sprsquish@gmail.com'
|
|
12
12
|
gem.homepage = 'http://github.com/sprsquish/vertica'
|
|
13
|
-
gem.authors = ['Jeff Smick', 'Matt Bauer']
|
|
13
|
+
gem.authors = ['Jeff Smick', 'Matt Bauer', 'Willem van Bergen']
|
|
14
14
|
|
|
15
15
|
gem.files = FileList["[A-Z]*", 'lib/**/*.rb'].to_a
|
|
16
16
|
|
|
17
17
|
gem.test_files = FileList['test/**/*.rb']
|
|
18
18
|
|
|
19
|
-
gem.add_development_dependency 'jeweler'
|
|
20
|
-
gem.add_development_dependency 'rake'
|
|
21
|
-
|
|
22
19
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
|
23
20
|
end
|
|
24
21
|
|
|
@@ -34,21 +31,6 @@ Rake::TestTask.new(:test) do |test|
|
|
|
34
31
|
test.verbose = true
|
|
35
32
|
end
|
|
36
33
|
|
|
37
|
-
# begin
|
|
38
|
-
# require 'rcov/rcovtask'
|
|
39
|
-
# Rcov::RcovTask.new do |test|
|
|
40
|
-
# test.libs << 'spec'
|
|
41
|
-
# test.pattern = 'spec/**/*_spec.rb'
|
|
42
|
-
# test.rcov_opts += ['--exclude \/Library\/Ruby,spec\/', '--xrefs']
|
|
43
|
-
# test.verbose = true
|
|
44
|
-
# end
|
|
45
|
-
# rescue LoadError
|
|
46
|
-
# task :rcov do
|
|
47
|
-
# abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
|
48
|
-
# end
|
|
49
|
-
# end
|
|
50
|
-
|
|
51
|
-
|
|
52
34
|
begin
|
|
53
35
|
require 'yard'
|
|
54
36
|
YARD::Rake::YardocTask.new do |t|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.9.0.
|
|
1
|
+
0.9.0.beta3
|
data/lib/vertica/column.rb
CHANGED
|
@@ -13,7 +13,7 @@ module Vertica
|
|
|
13
13
|
[:record, nil],
|
|
14
14
|
[:unknown, nil],
|
|
15
15
|
[:bool, lambda { |s| s == 't' }],
|
|
16
|
-
[:
|
|
16
|
+
[:integer, lambda { |s| s.to_i }],
|
|
17
17
|
[:float, lambda { |s| s.to_f }],
|
|
18
18
|
[:char, nil],
|
|
19
19
|
[:varchar, nil],
|
|
@@ -23,7 +23,7 @@ module Vertica
|
|
|
23
23
|
[:timestamp_tz, lambda { |s| DateTime.parse(s, true) }],
|
|
24
24
|
[:interval, nil],
|
|
25
25
|
[:time_tz, nil],
|
|
26
|
-
[:numeric, lambda { |s| s
|
|
26
|
+
[:numeric, lambda { |s| BigDecimal.new(s) }],
|
|
27
27
|
[:bytea, nil],
|
|
28
28
|
[:rle_tuple, nil]
|
|
29
29
|
]
|
data/lib/vertica/connection.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'socket'
|
|
2
|
+
|
|
1
3
|
module Vertica
|
|
2
4
|
class Connection
|
|
3
5
|
|
|
@@ -9,7 +11,7 @@ module Vertica
|
|
|
9
11
|
|
|
10
12
|
attr_reader :options, :notices, :transaction_status, :backend_pid, :backend_key, :notifications, :parameters
|
|
11
13
|
|
|
12
|
-
attr_accessor :row_style
|
|
14
|
+
attr_accessor :row_style, :debug
|
|
13
15
|
|
|
14
16
|
def self.cancel(existing_conn)
|
|
15
17
|
conn = self.new(existing_conn.options.merge(:skip_startup => true))
|
|
@@ -21,7 +23,9 @@ module Vertica
|
|
|
21
23
|
def initialize(options = {})
|
|
22
24
|
reset_values
|
|
23
25
|
|
|
24
|
-
@options =
|
|
26
|
+
@options = {}
|
|
27
|
+
options.each { |key, value| @options[key.to_s.to_sym] = value }
|
|
28
|
+
|
|
25
29
|
@notices = []
|
|
26
30
|
|
|
27
31
|
@row_style = @options[:row_style] ? @options[:row_style] : :hash
|
|
@@ -37,19 +41,20 @@ module Vertica
|
|
|
37
41
|
|
|
38
42
|
def socket
|
|
39
43
|
@socket ||= begin
|
|
40
|
-
|
|
44
|
+
raw_socket = TCPSocket.new(@options[:host], @options[:port].to_s)
|
|
41
45
|
if @options[:ssl]
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
require 'openssl/ssl'
|
|
47
|
+
raw_socket.write Messages::SslRequest.new.to_bytes
|
|
48
|
+
if raw_socket.read(1) == 'S'
|
|
49
|
+
raw_socket = OpenSSL::SSL::SSLSocket.new(raw_socket, OpenSSL::SSL::SSLContext.new)
|
|
50
|
+
raw_socket.sync = true
|
|
51
|
+
raw_socket.connect
|
|
47
52
|
else
|
|
48
53
|
raise Error::ConnectionError.new("SSL requested but server doesn't support it.")
|
|
49
54
|
end
|
|
50
55
|
end
|
|
51
56
|
|
|
52
|
-
|
|
57
|
+
raw_socket
|
|
53
58
|
end
|
|
54
59
|
end
|
|
55
60
|
|
|
@@ -67,6 +72,7 @@ module Vertica
|
|
|
67
72
|
|
|
68
73
|
def write(message)
|
|
69
74
|
raise ArgumentError, "invalid message: (#{message.inspect})" unless message.respond_to?(:to_bytes)
|
|
75
|
+
puts "=> #{message.inspect}" if @debug
|
|
70
76
|
socket.write message.to_bytes
|
|
71
77
|
end
|
|
72
78
|
|
|
@@ -139,7 +145,9 @@ module Vertica
|
|
|
139
145
|
type = read_bytes(1)
|
|
140
146
|
size = read_bytes(4).unpack('N').first
|
|
141
147
|
raise Vertica::Error::MessageError.new("Bad message size: #{size}.") unless size >= 4
|
|
142
|
-
Messages::BackendMessage.factory type, read_bytes(size - 4)
|
|
148
|
+
msg = Messages::BackendMessage.factory type, read_bytes(size - 4)
|
|
149
|
+
puts "<= #{msg.inspect}" if @debug
|
|
150
|
+
return msg
|
|
143
151
|
end
|
|
144
152
|
|
|
145
153
|
|
|
@@ -220,6 +228,9 @@ module Vertica
|
|
|
220
228
|
@field_descriptions = []
|
|
221
229
|
@field_values = []
|
|
222
230
|
end
|
|
223
|
-
|
|
224
231
|
end
|
|
225
232
|
end
|
|
233
|
+
|
|
234
|
+
require 'vertica/column'
|
|
235
|
+
require 'vertica/result'
|
|
236
|
+
require 'vertica/messages/message'
|
|
@@ -40,6 +40,38 @@ module Vertica
|
|
|
40
40
|
message_string ''
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
|
-
|
|
44
43
|
end
|
|
45
44
|
end
|
|
45
|
+
|
|
46
|
+
require 'vertica/messages/backend_messages/authentication'
|
|
47
|
+
require 'vertica/messages/backend_messages/backend_key_data'
|
|
48
|
+
require 'vertica/messages/backend_messages/bind_complete'
|
|
49
|
+
require 'vertica/messages/backend_messages/close_complete'
|
|
50
|
+
require 'vertica/messages/backend_messages/command_complete'
|
|
51
|
+
require 'vertica/messages/backend_messages/data_row'
|
|
52
|
+
require 'vertica/messages/backend_messages/empty_query_response'
|
|
53
|
+
require 'vertica/messages/backend_messages/notice_response'
|
|
54
|
+
require 'vertica/messages/backend_messages/error_response'
|
|
55
|
+
require 'vertica/messages/backend_messages/no_data'
|
|
56
|
+
require 'vertica/messages/backend_messages/notification_response'
|
|
57
|
+
require 'vertica/messages/backend_messages/parameter_description'
|
|
58
|
+
require 'vertica/messages/backend_messages/parameter_status'
|
|
59
|
+
require 'vertica/messages/backend_messages/parse_complete'
|
|
60
|
+
require 'vertica/messages/backend_messages/portal_suspended'
|
|
61
|
+
require 'vertica/messages/backend_messages/ready_for_query'
|
|
62
|
+
require 'vertica/messages/backend_messages/row_description'
|
|
63
|
+
require 'vertica/messages/backend_messages/unknown'
|
|
64
|
+
|
|
65
|
+
require 'vertica/messages/frontend_messages/bind'
|
|
66
|
+
require 'vertica/messages/frontend_messages/cancel_request'
|
|
67
|
+
require 'vertica/messages/frontend_messages/close'
|
|
68
|
+
require 'vertica/messages/frontend_messages/describe'
|
|
69
|
+
require 'vertica/messages/frontend_messages/execute'
|
|
70
|
+
require 'vertica/messages/frontend_messages/flush'
|
|
71
|
+
require 'vertica/messages/frontend_messages/parse'
|
|
72
|
+
require 'vertica/messages/frontend_messages/password'
|
|
73
|
+
require 'vertica/messages/frontend_messages/query'
|
|
74
|
+
require 'vertica/messages/frontend_messages/ssl_request'
|
|
75
|
+
require 'vertica/messages/frontend_messages/startup'
|
|
76
|
+
require 'vertica/messages/frontend_messages/sync'
|
|
77
|
+
require 'vertica/messages/frontend_messages/terminate'
|
data/lib/vertica.rb
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require 'bigdecimal'
|
|
3
|
+
|
|
1
4
|
module Vertica
|
|
5
|
+
|
|
2
6
|
class Error < StandardError
|
|
3
7
|
class ConnectionError < Error; end
|
|
4
8
|
class MessageError < Error; end
|
|
@@ -11,52 +15,26 @@ module Vertica
|
|
|
11
15
|
def self.connect(*args)
|
|
12
16
|
Connection.new(*args)
|
|
13
17
|
end
|
|
18
|
+
|
|
19
|
+
def self.quote(value)
|
|
20
|
+
case value
|
|
21
|
+
when nil then 'NULL'
|
|
22
|
+
when false then 'FALSE'
|
|
23
|
+
when true then 'TRUE'
|
|
24
|
+
when DateTime then value.strftime("'%Y-%m-%d %H:%M:%S'::timestamp")
|
|
25
|
+
when Time then value.strftime("'%Y-%m-%d %H:%M:%S'::timestamp")
|
|
26
|
+
when Date then value.strftime("'%Y-%m-%d'::date")
|
|
27
|
+
when String then "'#{value.gsub(/'/, "''")}'"
|
|
28
|
+
when BigDecimal then value.to_s('F')
|
|
29
|
+
when Numeric then value.to_s
|
|
30
|
+
when Array then value.map { |v| self.quote(v) }.join(', ')
|
|
31
|
+
else self.quote(value.to_s)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.quote_identifier(identifier)
|
|
36
|
+
"\"#{identifier.to_s.gsub(/"/, '""')}\""
|
|
37
|
+
end
|
|
14
38
|
end
|
|
15
39
|
|
|
16
|
-
|
|
17
|
-
socket
|
|
18
|
-
uri
|
|
19
|
-
openssl/ssl
|
|
20
|
-
bigdecimal
|
|
21
|
-
bigdecimal/util
|
|
22
|
-
date
|
|
23
|
-
|
|
24
|
-
vertica/column
|
|
25
|
-
vertica/result
|
|
26
|
-
vertica/connection
|
|
27
|
-
|
|
28
|
-
vertica/messages/message
|
|
29
|
-
|
|
30
|
-
vertica/messages/backend_messages/authentication
|
|
31
|
-
vertica/messages/backend_messages/backend_key_data
|
|
32
|
-
vertica/messages/backend_messages/bind_complete
|
|
33
|
-
vertica/messages/backend_messages/close_complete
|
|
34
|
-
vertica/messages/backend_messages/command_complete
|
|
35
|
-
vertica/messages/backend_messages/data_row
|
|
36
|
-
vertica/messages/backend_messages/empty_query_response
|
|
37
|
-
vertica/messages/backend_messages/notice_response
|
|
38
|
-
vertica/messages/backend_messages/error_response
|
|
39
|
-
vertica/messages/backend_messages/no_data
|
|
40
|
-
vertica/messages/backend_messages/notification_response
|
|
41
|
-
vertica/messages/backend_messages/parameter_description
|
|
42
|
-
vertica/messages/backend_messages/parameter_status
|
|
43
|
-
vertica/messages/backend_messages/parse_complete
|
|
44
|
-
vertica/messages/backend_messages/portal_suspended
|
|
45
|
-
vertica/messages/backend_messages/ready_for_query
|
|
46
|
-
vertica/messages/backend_messages/row_description
|
|
47
|
-
vertica/messages/backend_messages/unknown
|
|
48
|
-
|
|
49
|
-
vertica/messages/frontend_messages/bind
|
|
50
|
-
vertica/messages/frontend_messages/cancel_request
|
|
51
|
-
vertica/messages/frontend_messages/close
|
|
52
|
-
vertica/messages/frontend_messages/describe
|
|
53
|
-
vertica/messages/frontend_messages/execute
|
|
54
|
-
vertica/messages/frontend_messages/flush
|
|
55
|
-
vertica/messages/frontend_messages/parse
|
|
56
|
-
vertica/messages/frontend_messages/password
|
|
57
|
-
vertica/messages/frontend_messages/query
|
|
58
|
-
vertica/messages/frontend_messages/ssl_request
|
|
59
|
-
vertica/messages/frontend_messages/startup
|
|
60
|
-
vertica/messages/frontend_messages/sync
|
|
61
|
-
vertica/messages/frontend_messages/terminate
|
|
62
|
-
].each { |r| require r }
|
|
40
|
+
require 'vertica/connection'
|
|
@@ -20,7 +20,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
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
|
|
23
|
-
assert_equal :
|
|
23
|
+
assert_equal :integer, r.columns[0].data_type
|
|
24
24
|
assert_equal :id, r.columns[0].name
|
|
25
25
|
assert_equal :varchar, r.columns[1].data_type
|
|
26
26
|
assert_equal :name, r.columns[1].name
|
|
@@ -33,7 +33,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
33
33
|
r = @connection.query("SELECT * FROM test_table")
|
|
34
34
|
assert_equal 1, r.row_count
|
|
35
35
|
assert_equal 2, r.columns.length
|
|
36
|
-
assert_equal :
|
|
36
|
+
assert_equal :integer, r.columns[0].data_type
|
|
37
37
|
assert_equal :id, r.columns[0].name
|
|
38
38
|
assert_equal :varchar, r.columns[1].data_type
|
|
39
39
|
assert_equal :name, r.columns[1].name
|
|
@@ -46,7 +46,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
46
46
|
r = @connection.query("SELECT * FROM test_table WHERE 1 != 1")
|
|
47
47
|
assert_equal 0, r.row_count
|
|
48
48
|
assert_equal 2, r.columns.length
|
|
49
|
-
assert_equal :
|
|
49
|
+
assert_equal :integer, r.columns[0].data_type
|
|
50
50
|
assert_equal :id, r.columns[0].name
|
|
51
51
|
assert_equal :varchar, r.columns[1].data_type
|
|
52
52
|
assert_equal :name, r.columns[1].name
|
|
@@ -57,7 +57,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
57
57
|
r = @connection.query("INSERT INTO test_table VALUES (2, 'stefanie')")
|
|
58
58
|
assert_equal 1, r.row_count
|
|
59
59
|
assert_equal 1, r.columns.length
|
|
60
|
-
assert_equal :
|
|
60
|
+
assert_equal :integer, r.columns[0].data_type
|
|
61
61
|
assert_equal :OUTPUT, r.columns[0].name
|
|
62
62
|
assert_equal [{:OUTPUT => 1}], r.rows
|
|
63
63
|
end
|
|
@@ -67,7 +67,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
67
67
|
r = @connection.query("DELETE FROM test_table WHERE 1 != 1")
|
|
68
68
|
assert_equal 1, r.row_count
|
|
69
69
|
assert_equal 1, r.columns.length
|
|
70
|
-
assert_equal :
|
|
70
|
+
assert_equal :integer, r.columns[0].data_type
|
|
71
71
|
assert_equal :OUTPUT, r.columns[0].name
|
|
72
72
|
assert_equal [{:OUTPUT => 0}], r.rows
|
|
73
73
|
end
|
|
@@ -76,7 +76,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
76
76
|
r = @connection.query("DELETE FROM test_table WHERE id = 1")
|
|
77
77
|
assert_equal 1, r.row_count
|
|
78
78
|
assert_equal 1, r.columns.length
|
|
79
|
-
assert_equal :
|
|
79
|
+
assert_equal :integer, r.columns[0].data_type
|
|
80
80
|
assert_equal :OUTPUT, r.columns[0].name
|
|
81
81
|
assert_equal [{:OUTPUT => 1}], r.rows
|
|
82
82
|
end
|
|
@@ -113,7 +113,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
113
113
|
# r = @connection.execute_prepared("my_ps")
|
|
114
114
|
# assert_equal 1, r.row_count
|
|
115
115
|
# assert_equal 2, r.columns.length
|
|
116
|
-
# assert_equal :
|
|
116
|
+
# assert_equal :integer, r.columns[0].data_type
|
|
117
117
|
# assert_equal :id, r.columns[0].name
|
|
118
118
|
# assert_equal :varchar, r.columns[1].data_type
|
|
119
119
|
# assert_equal :name, r.columns[1].name
|
|
@@ -126,7 +126,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
126
126
|
# r = c.execute_prepared("my_ps", 1)
|
|
127
127
|
# assert_equal 1, r.row_count
|
|
128
128
|
# assert_equal 2, r.columns.length
|
|
129
|
-
# assert_equal :
|
|
129
|
+
# assert_equal :integer, r.columns[0].data_type
|
|
130
130
|
# assert_equal 'id', r.columns[0].name
|
|
131
131
|
# assert_equal :varchar, r.columns[1].data_type
|
|
132
132
|
# assert_equal 'name', r.columns[1].name
|
|
@@ -140,7 +140,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
140
140
|
# r = c.execute_prepared("my_ps", 1, 3)
|
|
141
141
|
# assert_equal 1, r.row_count
|
|
142
142
|
# assert_equal 2, r.columns.length
|
|
143
|
-
# assert_equal :
|
|
143
|
+
# assert_equal :integer, r.columns[0].data_type
|
|
144
144
|
# assert_equal 'id', r.columns[0].name
|
|
145
145
|
# assert_equal :varchar, r.columns[1].data_type
|
|
146
146
|
# assert_equal 'name', r.columns[1].name
|
|
@@ -153,7 +153,7 @@ class QueryTest < Test::Unit::TestCase
|
|
|
153
153
|
r = @connection.query("SELECT * FROM test_table")
|
|
154
154
|
assert_equal 1, r.row_count
|
|
155
155
|
assert_equal 2, r.columns.length
|
|
156
|
-
assert_equal :
|
|
156
|
+
assert_equal :integer, r.columns[0].data_type
|
|
157
157
|
assert_equal :id, r.columns[0].name
|
|
158
158
|
assert_equal :varchar, r.columns[1].data_type
|
|
159
159
|
assert_equal :name, r.columns[1].name
|
data/test/test_helper.rb
CHANGED
|
@@ -6,5 +6,4 @@ require 'test/unit'
|
|
|
6
6
|
|
|
7
7
|
require 'vertica'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
TEST_CONNECTION_HASH = hash.inject(Hash.new) { |carry, (k, v)| carry[k.to_sym] = v; carry }
|
|
9
|
+
TEST_CONNECTION_HASH = YAML.load(File.read(File.expand_path("../connection.yml", __FILE__)))
|
|
@@ -95,6 +95,9 @@ class BackendMessageTest < Test::Unit::TestCase
|
|
|
95
95
|
|
|
96
96
|
msg = Vertica::Messages::DataRow.new("\x00\x02\x00\x00\x00\x011\x00\x00\x00\x04matt")
|
|
97
97
|
assert_equal ['1', 'matt'], msg.values
|
|
98
|
+
|
|
99
|
+
msg = Vertica::Messages::DataRow.new("\x00\a\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF")
|
|
100
|
+
assert_equal [nil,nil,nil,nil,nil,nil,nil], msg.values
|
|
98
101
|
end
|
|
99
102
|
|
|
100
103
|
def test_command_complete_message
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class QuotingTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_quote_identifier
|
|
6
|
+
assert_equal '"test"', Vertica.quote_identifier(:test)
|
|
7
|
+
assert_equal '"te""st"', Vertica.quote_identifier('te"st')
|
|
8
|
+
assert_equal '"te""""st"', Vertica.quote_identifier('te""st')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_quote
|
|
12
|
+
assert_equal "'test'", Vertica.quote('test')
|
|
13
|
+
assert_equal "'te''st'", Vertica.quote("te'st")
|
|
14
|
+
assert_equal "'te''''st'", Vertica.quote("te''st")
|
|
15
|
+
assert_equal "'test'", Vertica.quote(:test)
|
|
16
|
+
|
|
17
|
+
assert_equal 'NULL', Vertica.quote(nil)
|
|
18
|
+
assert_equal 'TRUE', Vertica.quote(true)
|
|
19
|
+
assert_equal 'FALSE', Vertica.quote(false)
|
|
20
|
+
|
|
21
|
+
assert_equal '1', Vertica.quote(1)
|
|
22
|
+
assert_equal '1.1', Vertica.quote(1.1)
|
|
23
|
+
assert_equal '1.1', Vertica.quote(BigDecimal.new('1.1'))
|
|
24
|
+
|
|
25
|
+
assert_equal "'2010-02-27'::date", Vertica.quote(Date.parse('2010-02-27'))
|
|
26
|
+
assert_equal "'2010-02-27 12:44:25'::timestamp", Vertica.quote(DateTime.parse('2010-02-27 12:44:25'))
|
|
27
|
+
assert_equal "'2010-02-27 12:44:25'::timestamp", Vertica.quote(Time.parse('2010-02-27 12:44:25'))
|
|
28
|
+
|
|
29
|
+
assert_equal "NULL, 1, TRUE, 'test'", Vertica.quote([nil, 1, true, 'test'])
|
|
30
|
+
end
|
|
31
|
+
end
|
metadata
CHANGED
|
@@ -1,33 +1,27 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vertica
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
prerelease:
|
|
5
|
-
|
|
6
|
-
- 0
|
|
7
|
-
- 9
|
|
8
|
-
- 0
|
|
9
|
-
- beta2
|
|
10
|
-
version: 0.9.0.beta2
|
|
4
|
+
prerelease: 6
|
|
5
|
+
version: 0.9.0.beta3
|
|
11
6
|
platform: ruby
|
|
12
7
|
authors:
|
|
13
8
|
- Jeff Smick
|
|
14
9
|
- Matt Bauer
|
|
10
|
+
- Willem van Bergen
|
|
15
11
|
autorequire:
|
|
16
12
|
bindir: bin
|
|
17
13
|
cert_chain: []
|
|
18
14
|
|
|
19
|
-
date: 2011-09-
|
|
15
|
+
date: 2011-09-12 00:00:00 -04:00
|
|
20
16
|
default_executable:
|
|
21
17
|
dependencies:
|
|
22
18
|
- !ruby/object:Gem::Dependency
|
|
23
|
-
name:
|
|
19
|
+
name: rake
|
|
24
20
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
25
21
|
none: false
|
|
26
22
|
requirements:
|
|
27
23
|
- - ">="
|
|
28
24
|
- !ruby/object:Gem::Version
|
|
29
|
-
segments:
|
|
30
|
-
- 0
|
|
31
25
|
version: "0"
|
|
32
26
|
type: :runtime
|
|
33
27
|
prerelease: false
|
|
@@ -39,64 +33,10 @@ dependencies:
|
|
|
39
33
|
requirements:
|
|
40
34
|
- - ">="
|
|
41
35
|
- !ruby/object:Gem::Version
|
|
42
|
-
segments:
|
|
43
|
-
- 0
|
|
44
36
|
version: "0"
|
|
45
|
-
type: :
|
|
37
|
+
type: :runtime
|
|
46
38
|
prerelease: false
|
|
47
39
|
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
|
|
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
|
|
100
40
|
description: Query Vertica with ruby
|
|
101
41
|
email: sprsquish@gmail.com
|
|
102
42
|
executables: []
|
|
@@ -155,6 +95,7 @@ files:
|
|
|
155
95
|
- test/functional/value_conversion_test.rb
|
|
156
96
|
- test/test_helper.rb
|
|
157
97
|
- test/unit/backend_message_test.rb
|
|
98
|
+
- test/unit/quoting_test.rb
|
|
158
99
|
has_rdoc: true
|
|
159
100
|
homepage: http://github.com/sprsquish/vertica
|
|
160
101
|
licenses: []
|
|
@@ -169,23 +110,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
169
110
|
requirements:
|
|
170
111
|
- - ">="
|
|
171
112
|
- !ruby/object:Gem::Version
|
|
172
|
-
segments:
|
|
173
|
-
- 0
|
|
174
113
|
version: "0"
|
|
175
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
115
|
none: false
|
|
177
116
|
requirements:
|
|
178
117
|
- - ">"
|
|
179
118
|
- !ruby/object:Gem::Version
|
|
180
|
-
segments:
|
|
181
|
-
- 1
|
|
182
|
-
- 3
|
|
183
|
-
- 1
|
|
184
119
|
version: 1.3.1
|
|
185
120
|
requirements: []
|
|
186
121
|
|
|
187
122
|
rubyforge_project:
|
|
188
|
-
rubygems_version: 1.
|
|
123
|
+
rubygems_version: 1.6.2
|
|
189
124
|
signing_key:
|
|
190
125
|
specification_version: 3
|
|
191
126
|
summary: Pure ruby library for interacting with Vertica
|
|
@@ -195,3 +130,4 @@ test_files:
|
|
|
195
130
|
- test/functional/value_conversion_test.rb
|
|
196
131
|
- test/test_helper.rb
|
|
197
132
|
- test/unit/backend_message_test.rb
|
|
133
|
+
- test/unit/quoting_test.rb
|