vertica 1.0.0.rc1 → 1.0.0.rc2
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.
- checksums.yaml +4 -4
- data/.yardopts +4 -0
- data/README.md +97 -62
- data/lib/vertica.rb +3 -2
- data/lib/vertica/column.rb +50 -84
- data/lib/vertica/connection.rb +173 -18
- data/lib/vertica/data_type.rb +146 -0
- data/lib/vertica/error.rb +1 -0
- data/lib/vertica/protocol/backend/command_complete.rb +2 -11
- data/lib/vertica/protocol/backend/row_description.rb +1 -1
- data/lib/vertica/query.rb +36 -18
- data/lib/vertica/result.rb +69 -5
- data/lib/vertica/row.rb +57 -6
- data/lib/vertica/row_description.rb +56 -3
- data/lib/vertica/version.rb +3 -1
- data/test/functional/functional_connection_test.rb +2 -2
- data/test/functional/functional_query_test.rb +14 -11
- data/test/functional/functional_type_deserialization_test.rb +179 -0
- data/test/unit/backend_message_test.rb +3 -5
- data/test/unit/column_test.rb +21 -31
- data/test/unit/data_type_test.rb +72 -0
- data/test/unit/result_test.rb +2 -2
- data/test/unit/row_description_test.rb +31 -2
- data/test/unit/row_test.rb +26 -2
- metadata +8 -4
- data/test/functional/functional_value_conversion_test.rb +0 -117
data/test/unit/column_test.rb
CHANGED
@@ -1,51 +1,41 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class ColumnTest < Minitest::Test
|
4
|
-
|
5
|
-
|
6
|
-
field_description = {
|
4
|
+
def setup
|
5
|
+
@field_description = {
|
7
6
|
:name => "OUTPUT",
|
8
7
|
:table_oid => 0,
|
9
8
|
:attribute_number => 0,
|
10
9
|
:data_type_oid => 6,
|
11
10
|
:data_type_size => 8,
|
12
11
|
:data_type_modifier => 8,
|
13
|
-
:
|
12
|
+
:data_format => 0
|
14
13
|
}
|
14
|
+
end
|
15
15
|
|
16
|
-
|
16
|
+
def test_initialize_from_row_description
|
17
|
+
column = Vertica::Column.build(@field_description)
|
17
18
|
assert_equal 'OUTPUT', column.name
|
18
|
-
assert_equal
|
19
|
-
assert_equal 8, column.
|
19
|
+
assert_equal 'integer', column.data_type.name
|
20
|
+
assert_equal 8, column.data_type.modifier
|
21
|
+
assert_equal 8, column.data_type.size
|
20
22
|
end
|
21
23
|
|
22
24
|
def test_unknown_type_oid
|
23
|
-
field_description =
|
24
|
-
|
25
|
-
:table_oid => 0,
|
26
|
-
:attribute_number => 0,
|
27
|
-
:data_type_oid => 123456,
|
28
|
-
:data_type_size => 8,
|
29
|
-
:data_type_modifier => 8,
|
30
|
-
:format_code => 0
|
31
|
-
}
|
32
|
-
|
33
|
-
assert_raises(Vertica::Error::UnknownTypeError) { Vertica::Column.new(field_description) }
|
25
|
+
field_description = @field_description.merge(data_type_oid: 123456)
|
26
|
+
assert_raises(Vertica::Error::UnknownTypeError) { Vertica::Column.build(field_description) }
|
34
27
|
end
|
35
28
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
:data_type_modifier => 8,
|
44
|
-
:format_code => 0
|
45
|
-
}
|
29
|
+
def test_equality
|
30
|
+
column = Vertica::Column.build(@field_description)
|
31
|
+
|
32
|
+
assert_equal column, Vertica::Column.build(@field_description)
|
33
|
+
refute_equal column, Vertica::Column.build(@field_description.merge(name: 'other'))
|
34
|
+
refute_equal column, Vertica::Column.build(@field_description.merge(data_format: 1))
|
35
|
+
end
|
46
36
|
|
47
|
-
|
48
|
-
|
49
|
-
assert_equal
|
37
|
+
def test_inspect
|
38
|
+
column = Vertica::Column.build(@field_description)
|
39
|
+
assert_equal '#<Vertica::Column name="OUTPUT" data_type=#<Vertica::DataType:6 "integer">>', column.inspect
|
50
40
|
end
|
51
41
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DataTypeTest < Minitest::Test
|
4
|
+
def test_equality
|
5
|
+
type = Vertica::DataType.new(oid: 6, size: 4)
|
6
|
+
|
7
|
+
assert_equal type, Vertica::DataType.new(oid: 6, size: 4)
|
8
|
+
assert_equal type, Vertica::DataType.new(oid: 6, size: 4, modifier: nil)
|
9
|
+
|
10
|
+
refute_equal type, Vertica::DataType.new(oid: 6, size: 10)
|
11
|
+
refute_equal type, Vertica::DataType.new(oid: 6, size: 4, modifier: 'unsigned')
|
12
|
+
refute_equal type, Vertica::DataType.new(oid: 6, size: 1)
|
13
|
+
refute_equal type, Vertica::DataType.new(oid: 7, size: 4)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_inspect
|
17
|
+
type = Vertica::DataType.new(oid: 6, name: "integer", size: 4)
|
18
|
+
assert_equal '#<Vertica::DataType:6 "integer">', type.inspect
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_deserialize_bool
|
22
|
+
type = Vertica::DataType.build(oid: 5)
|
23
|
+
|
24
|
+
assert_nil type.deserialize(nil)
|
25
|
+
assert_equal true, type.deserialize('t')
|
26
|
+
assert_equal false, type.deserialize('f')
|
27
|
+
assert_raises(ArgumentError) { type.deserialize('foo') }
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_deserialize_integer
|
31
|
+
type = Vertica::DataType.build(oid: 6)
|
32
|
+
|
33
|
+
assert_nil type.deserialize(nil)
|
34
|
+
assert_equal 0, type.deserialize('0')
|
35
|
+
assert_equal -123, type.deserialize('-123')
|
36
|
+
assert_raises(ArgumentError) { type.deserialize('foo') }
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_deserialize_float
|
40
|
+
type = Vertica::DataType.build(oid: 7)
|
41
|
+
|
42
|
+
assert_nil type.deserialize(nil)
|
43
|
+
assert_equal Float::INFINITY, type.deserialize('Infinity')
|
44
|
+
assert_equal -Float::INFINITY, type.deserialize('-Infinity')
|
45
|
+
assert type.deserialize('NaN').equal?(Float::NAN)
|
46
|
+
assert_equal 1.1, type.deserialize('1.1')
|
47
|
+
assert_equal -1.1, type.deserialize('-1.1')
|
48
|
+
assert_raises(ArgumentError) { type.deserialize('foo') }
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_deserialize_unicode_string
|
52
|
+
type = Vertica::DataType.build(oid: 115)
|
53
|
+
|
54
|
+
assert_nil type.deserialize(nil)
|
55
|
+
converted = type.deserialize("foo\x00".force_encoding(Encoding::BINARY))
|
56
|
+
assert_equal "foo\x00".force_encoding(Encoding::UTF_8), converted
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_dersialize_binary_string
|
60
|
+
type = Vertica::DataType.build(oid: 17)
|
61
|
+
|
62
|
+
assert_nil type.deserialize(nil)
|
63
|
+
converted = type.deserialize("\\231\\237".force_encoding(Encoding::BINARY))
|
64
|
+
assert_equal "\x99\x9F".force_encoding(Encoding::BINARY), converted
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_deserialize_bigdecimal
|
68
|
+
type = Vertica::DataType.build(oid: 16)
|
69
|
+
assert_nil type.deserialize(nil)
|
70
|
+
assert_equal BigDecimal('1.1'), type.deserialize('1.1')
|
71
|
+
end
|
72
|
+
end
|
data/test/unit/result_test.rb
CHANGED
@@ -4,8 +4,8 @@ class ResultTest < Minitest::Test
|
|
4
4
|
def setup
|
5
5
|
@result = Vertica::Result.build(
|
6
6
|
row_description: [
|
7
|
-
Vertica::Column.
|
8
|
-
Vertica::Column.
|
7
|
+
Vertica::Column.build(name: 'a', data_type_oid: 6),
|
8
|
+
Vertica::Column.build(name: 'b', data_type_oid: 6),
|
9
9
|
],
|
10
10
|
rows: [
|
11
11
|
[1, 2],
|
@@ -4,8 +4,8 @@ class RowDescriptionTest < Minitest::Test
|
|
4
4
|
def setup
|
5
5
|
@message = Vertica::Protocol::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")
|
6
6
|
|
7
|
-
@column1 = Vertica::Column.
|
8
|
-
@column2 = Vertica::Column.
|
7
|
+
@column1 = Vertica::Column.build(@message.fields[0])
|
8
|
+
@column2 = Vertica::Column.build(@message.fields[1])
|
9
9
|
|
10
10
|
@row_description = Vertica::RowDescription.build([@column1, @column2])
|
11
11
|
end
|
@@ -53,4 +53,33 @@ class RowDescriptionTest < Minitest::Test
|
|
53
53
|
hash = { 'id' => @column1, 'name' => @column2}
|
54
54
|
assert_equal hash, @row_description.to_h
|
55
55
|
end
|
56
|
+
|
57
|
+
def test_to_h_with_duplicate_column_name_raises
|
58
|
+
row_description = Vertica::RowDescription.build([@column1, @column1])
|
59
|
+
assert_raises(Vertica::Error::DuplicateColumnName) { row_description.to_h }
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_eql?
|
63
|
+
rd1 = Vertica::RowDescription.build([@column1, @column2])
|
64
|
+
rd1_copy = Vertica::RowDescription.build([@column1, @column2])
|
65
|
+
rd2 = Vertica::RowDescription.build([@column1])
|
66
|
+
|
67
|
+
assert_equal rd1, rd1_copy
|
68
|
+
refute_equal rd1, rd2
|
69
|
+
|
70
|
+
refute_equal rd1, nil
|
71
|
+
refute_equal rd1, Vertica::RowDescription
|
72
|
+
refute_equal rd1, rd2.build_row([1])
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_inspect
|
76
|
+
assert_equal "#<Vertica::RowDescription[id, name]>", @row_description.inspect
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_build_row
|
80
|
+
row1 = @row_description.build_row([1, 'name'])
|
81
|
+
row2 = @row_description.build_row(id: 1, name: 'name')
|
82
|
+
|
83
|
+
assert_equal row1, row2
|
84
|
+
end
|
56
85
|
end
|
data/test/unit/row_test.rb
CHANGED
@@ -4,8 +4,8 @@ class RowTest < Minitest::Test
|
|
4
4
|
def setup
|
5
5
|
@message = Vertica::Protocol::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")
|
6
6
|
|
7
|
-
@column1 = Vertica::Column.
|
8
|
-
@column2 = Vertica::Column.
|
7
|
+
@column1 = Vertica::Column.build(@message.fields[0])
|
8
|
+
@column2 = Vertica::Column.build(@message.fields[1])
|
9
9
|
|
10
10
|
@row_description = Vertica::RowDescription.build([@column1, @column2])
|
11
11
|
end
|
@@ -28,4 +28,28 @@ class RowTest < Minitest::Test
|
|
28
28
|
hash = { 'id' => 123, 'name' => 'test' }
|
29
29
|
assert_equal hash, row.to_h
|
30
30
|
end
|
31
|
+
|
32
|
+
def test_to_h_with_duplicate_column_name_raises
|
33
|
+
row_description = Vertica::RowDescription.build([@column1, @column1])
|
34
|
+
row = Vertica::Row.new(row_description, [123, 456])
|
35
|
+
|
36
|
+
assert_raises(Vertica::Error::DuplicateColumnName) { row.to_h }
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_eql?
|
40
|
+
rd1 = Vertica::RowDescription.build([@column1, @column2])
|
41
|
+
rd2 = Vertica::RowDescription.build([@column1, @column1])
|
42
|
+
|
43
|
+
row = Vertica::Row.new(rd1, [123, 'test'])
|
44
|
+
|
45
|
+
assert_equal row, Vertica::Row.new(rd1, [123, 'test'])
|
46
|
+
refute_equal rd1, Vertica::Row.new(rd1, [124, 'test'])
|
47
|
+
refute_equal rd1, Vertica::Row.new(rd2, [123, 'test'])
|
48
|
+
refute_equal rd1, nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_inspect
|
52
|
+
row = Vertica::Row.new(@row_description, [123, 'test'])
|
53
|
+
assert_equal "#<Vertica::Row[123, \"test\"]>", row.inspect
|
54
|
+
end
|
31
55
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vertica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Smick
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-07-
|
13
|
+
date: 2016-07-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -80,6 +80,7 @@ extra_rdoc_files:
|
|
80
80
|
files:
|
81
81
|
- .gitignore
|
82
82
|
- .travis.yml
|
83
|
+
- .yardopts
|
83
84
|
- Gemfile
|
84
85
|
- LICENSE
|
85
86
|
- README.md
|
@@ -87,6 +88,7 @@ files:
|
|
87
88
|
- lib/vertica.rb
|
88
89
|
- lib/vertica/column.rb
|
89
90
|
- lib/vertica/connection.rb
|
91
|
+
- lib/vertica/data_type.rb
|
90
92
|
- lib/vertica/error.rb
|
91
93
|
- lib/vertica/protocol/backend/authentication.rb
|
92
94
|
- lib/vertica/protocol/backend/backend_key_data.rb
|
@@ -131,11 +133,12 @@ files:
|
|
131
133
|
- test/connection.yml.example
|
132
134
|
- test/functional/functional_connection_test.rb
|
133
135
|
- test/functional/functional_query_test.rb
|
134
|
-
- test/functional/
|
136
|
+
- test/functional/functional_type_deserialization_test.rb
|
135
137
|
- test/resources/test_ruby_vertica_table.csv
|
136
138
|
- test/test_helper.rb
|
137
139
|
- test/unit/backend_message_test.rb
|
138
140
|
- test/unit/column_test.rb
|
141
|
+
- test/unit/data_type_test.rb
|
139
142
|
- test/unit/frontend_message_test.rb
|
140
143
|
- test/unit/quoting_test.rb
|
141
144
|
- test/unit/result_test.rb
|
@@ -172,11 +175,12 @@ test_files:
|
|
172
175
|
- test/connection.yml.example
|
173
176
|
- test/functional/functional_connection_test.rb
|
174
177
|
- test/functional/functional_query_test.rb
|
175
|
-
- test/functional/
|
178
|
+
- test/functional/functional_type_deserialization_test.rb
|
176
179
|
- test/resources/test_ruby_vertica_table.csv
|
177
180
|
- test/test_helper.rb
|
178
181
|
- test/unit/backend_message_test.rb
|
179
182
|
- test/unit/column_test.rb
|
183
|
+
- test/unit/data_type_test.rb
|
180
184
|
- test/unit/frontend_message_test.rb
|
181
185
|
- test/unit/quoting_test.rb
|
182
186
|
- test/unit/result_test.rb
|
@@ -1,117 +0,0 @@
|
|
1
|
-
# encoding : UTF-8
|
2
|
-
require 'test_helper'
|
3
|
-
|
4
|
-
class FunctionalValueConversionTest < Minitest::Test
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@connection = Vertica::Connection.new(TEST_CONNECTION_HASH)
|
8
|
-
|
9
|
-
@connection.query <<-SQL
|
10
|
-
CREATE TABLE IF NOT EXISTS conversions_table (
|
11
|
-
"int_field" int,
|
12
|
-
"string_field" varchar(100),
|
13
|
-
"date_field" date,
|
14
|
-
"timestamp_field" timestamp,
|
15
|
-
"timestamptz_field" timestamptz,
|
16
|
-
"time_field" time,
|
17
|
-
"interval_field" interval,
|
18
|
-
"boolean_field" boolean,
|
19
|
-
"float_field" float,
|
20
|
-
"float_zero" float,
|
21
|
-
"binary_field" varbinary,
|
22
|
-
"long_varchar_field" long varchar
|
23
|
-
)
|
24
|
-
SQL
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
def teardown
|
29
|
-
@connection.query("DROP TABLE IF EXISTS conversions_table CASCADE;")
|
30
|
-
@connection.close
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_value_conversions
|
34
|
-
@connection.query <<-SQL
|
35
|
-
INSERT INTO conversions_table VALUES (
|
36
|
-
123,
|
37
|
-
'hello world',
|
38
|
-
'2010-01-01',
|
39
|
-
'2010-01-01 12:00:00.123456',
|
40
|
-
'2010-01-01 12:00:00 +0930',
|
41
|
-
'12:00:00',
|
42
|
-
INTERVAL '1 DAY',
|
43
|
-
TRUE,
|
44
|
-
1.0,
|
45
|
-
0.0,
|
46
|
-
HEX_TO_BINARY('d09fd180d0b8d0b2d0b5d1822c2068656c6c6f21'),
|
47
|
-
'hello world'
|
48
|
-
)
|
49
|
-
SQL
|
50
|
-
|
51
|
-
result = @connection.query <<-SQL
|
52
|
-
SELECT *,
|
53
|
-
float_field / float_zero as infinity,
|
54
|
-
float_field / float_zero - float_field / float_zero as nan
|
55
|
-
FROM conversions_table LIMIT 1
|
56
|
-
SQL
|
57
|
-
|
58
|
-
assert_equal result.rows.length, 1
|
59
|
-
assert_equal [
|
60
|
-
123,
|
61
|
-
'hello world',
|
62
|
-
Date.parse('2010-01-01'),
|
63
|
-
Time.new(2010, 1, 1, 12, 0, BigDecimal.new("0.123456")),
|
64
|
-
Time.new(2010, 1, 1, 12, 0, 0, '+09:30'),
|
65
|
-
"12:00:00",
|
66
|
-
"1",
|
67
|
-
true,
|
68
|
-
1.0,
|
69
|
-
0.0,
|
70
|
-
['d09fd180d0b8d0b2d0b5d1822c2068656c6c6f21'].pack('H*'),
|
71
|
-
'hello world',
|
72
|
-
Float::INFINITY,
|
73
|
-
Float::NAN
|
74
|
-
], result[0].to_a
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_nil_conversions
|
78
|
-
@connection.query "INSERT INTO conversions_table VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)"
|
79
|
-
result = @connection.query "SELECT * FROM conversions_table LIMIT 1"
|
80
|
-
assert_equal result.rows.length, 1
|
81
|
-
assert_equal [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil], result[0].to_a
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_string_decoding
|
85
|
-
assert_equal 'åßç∂ë', @connection.query("SELECT 'åßç∂ë'").the_value
|
86
|
-
assert_equal Encoding::UTF_8, @connection.query("SELECT 'åßç∂ë'").the_value.encoding
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_binary_decoding
|
90
|
-
assert_equal ['d09fd180d0b8d0b2d0b5d1822c2068656c6c6f21'].pack('H*'), @connection.query("SELECT HEX_TO_BINARY('d09fd180d0b8d0b2d0b5d1822c2068656c6c6f21')").the_value
|
91
|
-
assert_equal Encoding::BINARY, @connection.query("SELECT HEX_TO_BINARY('d09fd180d0b8d0b2d0b5d1822c2068656c6c6f21')").the_value.encoding
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_timestamp_decoding_with_utc_timezone_connection
|
95
|
-
@connection.query("SET TIMEZONE TO 'UTC'")
|
96
|
-
|
97
|
-
assert_equal Time.new(2013, 1, 2, 14, 15, 16), @connection.query("SELECT '2013-01-02 14:15:16'::timestamp").the_value
|
98
|
-
assert_equal Time.new(2013, 1, 2, 19, 15, 16), @connection.query("SELECT '2013-01-02 14:15:16 America/Toronto'::timestamp").the_value
|
99
|
-
assert_equal Time.new(2013, 1, 2, 4, 45, 16), @connection.query("SELECT '2013-01-02 14:15:16 +9:30'::timestamp").the_value
|
100
|
-
|
101
|
-
assert_equal Time.new(2013, 1, 2, 14, 15, 16, '+00:00'), @connection.query("SELECT '2013-01-02 14:15:16'::timestamptz").the_value
|
102
|
-
assert_equal Time.new(2013, 1, 2, 19, 15, 16, '+00:00'), @connection.query("SELECT '2013-01-02 14:15:16 America/Toronto'::timestamptz").the_value
|
103
|
-
assert_equal Time.new(2013, 1, 2, 4, 45, 16, '+00:00'), @connection.query("SELECT '2013-01-02 14:15:16 +09:30'::timestamptz").the_value
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_timestamp_decoding_with_toronto_timezone_connection
|
107
|
-
@connection.query("SET TIMEZONE TO 'America/Toronto'")
|
108
|
-
|
109
|
-
assert_equal Time.new(2013, 1, 2, 14, 15, 16), @connection.query("SELECT '2013-01-02 14:15:16'::timestamp").the_value
|
110
|
-
assert_equal Time.new(2013, 1, 2, 14, 15, 16), @connection.query("SELECT '2013-01-02 14:15:16 America/Toronto'::timestamp").the_value
|
111
|
-
assert_equal Time.new(2013, 1, 1, 23, 45, 16), @connection.query("SELECT '2013-01-02 14:15:16 +9:30'::timestamp").the_value
|
112
|
-
|
113
|
-
assert_equal Time.new(2013, 1, 2, 14, 15, 16, '-05:00'), @connection.query("SELECT '2013-01-02 14:15:16'::timestamptz").the_value
|
114
|
-
assert_equal Time.new(2013, 1, 2, 14, 15, 16, '-05:00'), @connection.query("SELECT '2013-01-02 14:15:16 America/Toronto'::timestamptz").the_value
|
115
|
-
assert_equal Time.new(2013, 1, 1, 23, 45, 16, '-05:00'), @connection.query("SELECT '2013-01-02 14:15:16 +09:30'::timestamptz").the_value
|
116
|
-
end
|
117
|
-
end
|