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 CHANGED
@@ -1,2 +1,4 @@
1
1
  source :rubygems
2
- gemspec
2
+
3
+ gem 'rake'
4
+ gem 'jeweler'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vertica (0.9.0.beta1)
4
+ vertica (0.9.0.beta2)
5
5
  vertica
6
6
 
7
7
  GEM
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.beta2
1
+ 0.9.0.beta3
@@ -13,7 +13,7 @@ module Vertica
13
13
  [:record, nil],
14
14
  [:unknown, nil],
15
15
  [:bool, lambda { |s| s == 't' }],
16
- [:in, lambda { |s| s.to_i }],
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.to_d }],
26
+ [:numeric, lambda { |s| BigDecimal.new(s) }],
27
27
  [:bytea, nil],
28
28
  [:rle_tuple, nil]
29
29
  ]
@@ -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 = 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
- conn = TCPSocket.new(@options[:host], @options[:port].to_s)
44
+ raw_socket = TCPSocket.new(@options[:host], @options[:port].to_s)
41
45
  if @options[:ssl]
42
- conn.write Messages::SslRequest.new.to_bytes
43
- if conn.read(1) == 'S'
44
- conn = OpenSSL::SSL::SSLSocket.new(conn, OpenSSL::SSL::SSLContext.new)
45
- conn.sync = true
46
- conn.connect
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
- conn
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
- %w[
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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 :in, r.columns[0].data_type
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
- 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 }
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: true
5
- segments:
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-09 00:00:00 -04:00
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: vertica
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: :development
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.3.7
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