tiny_tds 2.1.2 → 3.2.0
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 +5 -5
- data/.github/workflows/ci.yml +590 -0
- data/.gitignore +2 -0
- data/CHANGELOG.md +51 -1
- data/Gemfile +1 -8
- data/ISSUE_TEMPLATE.md +1 -1
- data/README.md +89 -89
- data/Rakefile +44 -30
- data/VERSION +1 -1
- data/docker-compose.yml +34 -0
- data/ext/tiny_tds/client.c +100 -59
- data/ext/tiny_tds/client.h +5 -3
- data/ext/tiny_tds/extconf.rb +173 -52
- data/ext/tiny_tds/extconsts.rb +4 -11
- data/ext/tiny_tds/result.c +52 -45
- data/ext/tiny_tds/tiny_tds_ext.c +4 -1
- data/lib/tiny_tds/bin.rb +12 -26
- data/lib/tiny_tds/client.rb +38 -42
- data/lib/tiny_tds/error.rb +0 -2
- data/lib/tiny_tds/gem.rb +5 -14
- data/lib/tiny_tds/result.rb +0 -2
- data/lib/tiny_tds/version.rb +1 -1
- data/lib/tiny_tds.rb +28 -47
- data/setup_cimgruby_dev.sh +25 -0
- data/start_dev.sh +21 -0
- data/tasks/native_gem.rake +12 -10
- data/tasks/package.rake +1 -3
- data/tasks/ports.rake +14 -77
- data/tasks/test.rake +3 -5
- data/test/bin/install-freetds.sh +2 -4
- data/test/bin/install-mssql.ps1 +42 -0
- data/test/bin/install-mssqltools.sh +9 -0
- data/test/bin/restore-from-native-gem.ps1 +10 -0
- data/test/bin/setup_tinytds_db.sh +7 -0
- data/test/bin/setup_volume_permissions.sh +10 -0
- data/test/client_test.rb +152 -116
- data/test/gem_test.rb +39 -118
- data/test/result_test.rb +285 -350
- data/test/schema_test.rb +369 -395
- data/test/sql/db-create.sql +18 -0
- data/test/sql/db-login.sql +38 -0
- data/test/test_helper.rb +112 -85
- data/test/thread_test.rb +22 -31
- data/tiny_tds.gemspec +28 -26
- metadata +85 -59
- data/.travis.yml +0 -24
- data/BACKERS.md +0 -32
- data/appveyor.yml +0 -51
- data/tasks/ports/freetds.rb +0 -37
- data/tasks/ports/libiconv.rb +0 -43
- data/tasks/ports/openssl.rb +0 -78
- data/tasks/ports/recipe.rb +0 -52
- data/test/appveyor/dbsetup.ps1 +0 -27
- data/test/appveyor/dbsetup.sql +0 -9
- data/test/benchmark/query.rb +0 -77
- data/test/benchmark/query_odbc.rb +0 -106
- data/test/benchmark/query_tinytds.rb +0 -126
- data/test/bin/setup.sh +0 -19
- data/test/schema/sqlserver_2000.sql +0 -140
- data/test/schema/sqlserver_2005.sql +0 -140
- data/test/schema/sqlserver_2014.sql +0 -140
- data/test/schema/sqlserver_2016.sql +0 -140
- data/test/schema/sybase_ase.sql +0 -138
- /data/test/schema/{sqlserver_2008.sql → sqlserver_2017.sql} +0 -0
data/test/schema_test.rb
CHANGED
@@ -1,443 +1,417 @@
|
|
1
|
-
|
2
|
-
require 'test_helper'
|
1
|
+
require "test_helper"
|
3
2
|
|
4
3
|
class SchemaTest < TinyTds::TestCase
|
5
|
-
|
6
|
-
describe 'Casting SQL Server schema' do
|
7
|
-
|
4
|
+
describe "Casting SQL Server schema" do
|
8
5
|
before do
|
9
6
|
@@current_schema_loaded ||= load_current_schema
|
10
7
|
@client = new_connection
|
11
|
-
@gif1px = File.read(
|
8
|
+
@gif1px = File.read("test/schema/1px.gif", mode: "rb:BINARY")
|
12
9
|
end
|
13
10
|
|
14
|
-
|
11
|
+
it "casts bigint" do
|
12
|
+
assert_equal(-9223372036854775807, find_value(11, :bigint))
|
13
|
+
assert_equal 9223372036854775806, find_value(12, :bigint)
|
14
|
+
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
it "casts binary" do
|
17
|
+
value = find_value(21, :binary_50)
|
18
|
+
assert_equal @gif1px + "\000", value
|
19
|
+
assert_binary_encoding(value)
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
it "casts bit" do
|
23
|
+
assert_equal true, find_value(31, :bit)
|
24
|
+
assert_equal false, find_value(32, :bit)
|
25
|
+
assert_nil find_value(21, :bit)
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
it "casts char" do
|
29
|
+
partial_char = "12345678 "
|
30
|
+
assert_equal "1234567890", find_value(41, :char_10)
|
31
|
+
assert_equal partial_char, find_value(42, :char_10)
|
32
|
+
assert_utf8_encoding find_value(42, :char_10)
|
33
|
+
end
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
it "casts datetime" do
|
36
|
+
# 1753-01-01T00:00:00.000
|
37
|
+
v = find_value 61, :datetime
|
38
|
+
assert_instance_of Time, v, "not in range of Time class"
|
39
|
+
assert_equal 1753, v.year
|
40
|
+
assert_equal 0o1, v.month
|
41
|
+
assert_equal 0o1, v.day
|
42
|
+
assert_equal 0, v.hour
|
43
|
+
assert_equal 0, v.min
|
44
|
+
assert_equal 0, v.sec
|
45
|
+
assert_equal 0, v.usec
|
46
|
+
# 9999-12-31T23:59:59.997
|
47
|
+
v = find_value 62, :datetime
|
48
|
+
assert_instance_of Time, v, "not in range of Time class"
|
49
|
+
assert_equal 9999, v.year
|
50
|
+
assert_equal 12, v.month
|
51
|
+
assert_equal 31, v.day
|
52
|
+
assert_equal 23, v.hour
|
53
|
+
assert_equal 59, v.min
|
54
|
+
assert_equal 59, v.sec
|
55
|
+
assert_equal 997000, v.usec
|
56
|
+
assert_equal utc_offset, find_value(62, :datetime, timezone: :local).utc_offset
|
57
|
+
assert_equal 0, find_value(62, :datetime, timezone: :utc).utc_offset
|
58
|
+
# 2010-01-01T12:34:56.123
|
59
|
+
v = find_value 63, :datetime
|
60
|
+
assert_instance_of Time, v, "in range of Time class"
|
61
|
+
assert_equal 2010, v.year
|
62
|
+
assert_equal 0o1, v.month
|
63
|
+
assert_equal 0o1, v.day
|
64
|
+
assert_equal 12, v.hour
|
65
|
+
assert_equal 34, v.min
|
66
|
+
assert_equal 56, v.sec
|
67
|
+
assert_equal 123000, v.usec
|
68
|
+
assert_equal utc_offset, find_value(63, :datetime, timezone: :local).utc_offset
|
69
|
+
assert_equal 0, find_value(63, :datetime, timezone: :utc).utc_offset
|
70
|
+
end
|
39
71
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
assert_equal 0, v.hour
|
48
|
-
assert_equal 0, v.min
|
49
|
-
assert_equal 0, v.sec
|
50
|
-
assert_equal 0, v.usec
|
51
|
-
# 9999-12-31T23:59:59.997
|
52
|
-
v = find_value 62, :datetime
|
53
|
-
assert_instance_of Time, v, 'not in range of Time class'
|
54
|
-
assert_equal 9999, v.year
|
55
|
-
assert_equal 12, v.month
|
56
|
-
assert_equal 31, v.day
|
57
|
-
assert_equal 23, v.hour
|
58
|
-
assert_equal 59, v.min
|
59
|
-
assert_equal 59, v.sec
|
60
|
-
assert_equal 997000, v.usec
|
61
|
-
assert_equal utc_offset, find_value(62, :datetime, :timezone => :local).utc_offset
|
62
|
-
assert_equal 0, find_value(62, :datetime, :timezone => :utc).utc_offset
|
63
|
-
# 2010-01-01T12:34:56.123
|
64
|
-
v = find_value 63, :datetime
|
65
|
-
assert_instance_of Time, v, 'in range of Time class'
|
66
|
-
assert_equal 2010, v.year
|
67
|
-
assert_equal 01, v.month
|
68
|
-
assert_equal 01, v.day
|
69
|
-
assert_equal 12, v.hour
|
70
|
-
assert_equal 34, v.min
|
71
|
-
assert_equal 56, v.sec
|
72
|
-
assert_equal 123000, v.usec
|
73
|
-
assert_equal utc_offset, find_value(63, :datetime, :timezone => :local).utc_offset
|
74
|
-
assert_equal 0, find_value(63, :datetime, :timezone => :utc).utc_offset
|
75
|
-
end
|
72
|
+
it "casts decimal" do
|
73
|
+
assert_instance_of BigDecimal, find_value(91, :decimal_9_2)
|
74
|
+
assert_equal BigDecimal("12345.01"), find_value(91, :decimal_9_2)
|
75
|
+
assert_equal BigDecimal("1234567.89"), find_value(92, :decimal_9_2)
|
76
|
+
assert_equal BigDecimal("0.0"), find_value(93, :decimal_16_4)
|
77
|
+
assert_equal BigDecimal("123456789012.3456"), find_value(94, :decimal_16_4)
|
78
|
+
end
|
76
79
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
end
|
80
|
+
it "casts float" do
|
81
|
+
assert_equal 123.00000001, find_value(101, :float)
|
82
|
+
assert_equal 0.0, find_value(102, :float)
|
83
|
+
assert_equal find_value(102, :float).object_id, find_value(102, :float).object_id, "use global zero float"
|
84
|
+
assert_equal 123.45, find_value(103, :float)
|
85
|
+
end
|
84
86
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
end
|
87
|
+
it "casts image" do
|
88
|
+
value = find_value(141, :image)
|
89
|
+
assert_equal @gif1px, value
|
90
|
+
assert_binary_encoding(value)
|
91
|
+
end
|
91
92
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
end
|
93
|
+
it "casts int" do
|
94
|
+
assert_equal(-2147483647, find_value(151, :int))
|
95
|
+
assert_equal 2147483646, find_value(152, :int)
|
96
|
+
end
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
98
|
+
it "casts money" do
|
99
|
+
assert_instance_of BigDecimal, find_value(161, :money)
|
100
|
+
assert_equal BigDecimal("4.20"), find_value(161, :money)
|
101
|
+
assert_equal BigDecimal("922337203685477.5806"), find_value(163, :money)
|
102
|
+
assert_equal BigDecimal("-922337203685477.5807"), find_value(162, :money)
|
103
|
+
end
|
102
104
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
105
|
+
it "casts nchar" do
|
106
|
+
assert_equal "1234567890", find_value(171, :nchar_10)
|
107
|
+
assert_equal "123456åå ", find_value(172, :nchar_10)
|
108
|
+
assert_equal "abc123 ", find_value(173, :nchar_10)
|
109
|
+
end
|
109
110
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
111
|
+
it "casts ntext" do
|
112
|
+
assert_equal "test ntext", find_value(181, :ntext)
|
113
|
+
assert_equal "test ntext åå", find_value(182, :ntext)
|
114
|
+
assert_utf8_encoding find_value(182, :ntext)
|
115
|
+
# If this test fails, try setting the "text size" in your freetds.conf. See: http://www.freetds.org/faq.html#textdata
|
116
|
+
large_value = "x" * 5000
|
117
|
+
large_value_id = @client.execute("INSERT INTO [datatypes] ([ntext]) VALUES (N'#{large_value}')").insert
|
118
|
+
assert_equal large_value, find_value(large_value_id, :ntext)
|
119
|
+
end
|
115
120
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
assert_equal large_value, find_value(large_value_id, :ntext)
|
124
|
-
end unless sybase_ase?
|
125
|
-
|
126
|
-
it 'casts numeric' do
|
127
|
-
assert_instance_of BigDecimal, find_value(191, :numeric_18_0)
|
128
|
-
assert_equal BigDecimal('191'), find_value(191, :numeric_18_0)
|
129
|
-
assert_equal BigDecimal('123456789012345678'), find_value(192, :numeric_18_0)
|
130
|
-
assert_equal BigDecimal('12345678901234567890.01'), find_value(193, :numeric_36_2)
|
131
|
-
assert_equal BigDecimal('123.46'), find_value(194, :numeric_36_2)
|
132
|
-
end
|
121
|
+
it "casts numeric" do
|
122
|
+
assert_instance_of BigDecimal, find_value(191, :numeric_18_0)
|
123
|
+
assert_equal BigDecimal("191"), find_value(191, :numeric_18_0)
|
124
|
+
assert_equal BigDecimal("123456789012345678"), find_value(192, :numeric_18_0)
|
125
|
+
assert_equal BigDecimal("12345678901234567890.01"), find_value(193, :numeric_36_2)
|
126
|
+
assert_equal BigDecimal("123.46"), find_value(194, :numeric_36_2)
|
127
|
+
end
|
133
128
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
129
|
+
it "casts nvarchar" do
|
130
|
+
assert_equal "test nvarchar_50", find_value(201, :nvarchar_50)
|
131
|
+
assert_equal "test nvarchar_50 åå", find_value(202, :nvarchar_50)
|
132
|
+
assert_utf8_encoding find_value(202, :nvarchar_50)
|
133
|
+
end
|
139
134
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
135
|
+
it "casts real" do
|
136
|
+
assert_in_delta 123.45, find_value(221, :real), 0.01
|
137
|
+
assert_equal 0.0, find_value(222, :real)
|
138
|
+
assert_equal find_value(222, :real).object_id, find_value(222, :real).object_id, "use global zero float"
|
139
|
+
assert_in_delta 0.00001, find_value(223, :real), 0.000001
|
140
|
+
end
|
146
141
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
142
|
+
it "casts smalldatetime" do
|
143
|
+
# 1901-01-01 15:45:00
|
144
|
+
v = find_value 231, :smalldatetime
|
145
|
+
assert_instance_of Time, v
|
146
|
+
assert_equal 1901, v.year
|
147
|
+
assert_equal 0o1, v.month
|
148
|
+
assert_equal 0o1, v.day
|
149
|
+
assert_equal 15, v.hour
|
150
|
+
assert_equal 45, v.min
|
151
|
+
assert_equal 0o0, v.sec
|
152
|
+
assert_equal Time.local(1901).utc_offset, find_value(231, :smalldatetime, timezone: :local).utc_offset
|
153
|
+
assert_equal 0, find_value(231, :smalldatetime, timezone: :utc).utc_offset
|
154
|
+
# 2078-06-05 04:20:00
|
155
|
+
v = find_value 232, :smalldatetime
|
156
|
+
assert_instance_of Time, v
|
157
|
+
assert_equal 2078, v.year
|
158
|
+
assert_equal 0o6, v.month
|
159
|
+
assert_equal 0o5, v.day
|
160
|
+
assert_equal 0o4, v.hour
|
161
|
+
assert_equal 20, v.min
|
162
|
+
assert_equal 0o0, v.sec
|
163
|
+
assert_equal Time.local(2078, 6).utc_offset, find_value(232, :smalldatetime, timezone: :local).utc_offset
|
164
|
+
assert_equal 0, find_value(232, :smalldatetime, timezone: :utc).utc_offset
|
165
|
+
end
|
171
166
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
167
|
+
it "casts smallint" do
|
168
|
+
assert_equal(-32767, find_value(241, :smallint))
|
169
|
+
assert_equal 32766, find_value(242, :smallint)
|
170
|
+
end
|
176
171
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
172
|
+
it "casts smallmoney" do
|
173
|
+
assert_instance_of BigDecimal, find_value(251, :smallmoney)
|
174
|
+
assert_equal BigDecimal("4.20"), find_value(251, :smallmoney)
|
175
|
+
assert_equal BigDecimal("-214748.3647"), find_value(252, :smallmoney)
|
176
|
+
assert_equal BigDecimal("214748.3646"), find_value(253, :smallmoney)
|
177
|
+
end
|
183
178
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
179
|
+
it "casts text" do
|
180
|
+
assert_equal "test text", find_value(271, :text)
|
181
|
+
assert_utf8_encoding find_value(271, :text)
|
182
|
+
end
|
188
183
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
184
|
+
it "casts tinyint" do
|
185
|
+
assert_equal 0, find_value(301, :tinyint)
|
186
|
+
assert_equal 255, find_value(302, :tinyint)
|
187
|
+
end
|
193
188
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
189
|
+
it "casts uniqueidentifier" do
|
190
|
+
assert_match %r|\w{8}-\w{4}-\w{4}-\w{4}-\w{12}|, find_value(311, :uniqueidentifier)
|
191
|
+
assert_utf8_encoding find_value(311, :uniqueidentifier)
|
192
|
+
end
|
198
193
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
194
|
+
it "casts varbinary" do
|
195
|
+
value = find_value(321, :varbinary_50)
|
196
|
+
assert_equal @gif1px, value
|
197
|
+
assert_binary_encoding(value)
|
198
|
+
end
|
204
199
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
200
|
+
it "casts varchar" do
|
201
|
+
assert_equal "test varchar_50", find_value(341, :varchar_50)
|
202
|
+
assert_utf8_encoding find_value(341, :varchar_50)
|
203
|
+
end
|
209
204
|
|
205
|
+
it "casts nvarchar(max)" do
|
206
|
+
assert_equal "test nvarchar_max", find_value(211, :nvarchar_max)
|
207
|
+
assert_equal "test nvarchar_max åå", find_value(212, :nvarchar_max)
|
208
|
+
assert_utf8_encoding find_value(212, :nvarchar_max)
|
210
209
|
end
|
211
210
|
|
211
|
+
it "casts varbinary(max)" do
|
212
|
+
value = find_value(331, :varbinary_max)
|
213
|
+
assert_equal @gif1px, value
|
214
|
+
assert_binary_encoding(value)
|
215
|
+
end
|
212
216
|
|
213
|
-
|
217
|
+
it "casts varchar(max)" do
|
218
|
+
value = find_value(351, :varchar_max)
|
219
|
+
assert_equal "test varchar_max", value
|
220
|
+
assert_utf8_encoding(value)
|
221
|
+
end
|
214
222
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
223
|
+
it "casts xml" do
|
224
|
+
value = find_value(361, :xml)
|
225
|
+
assert_equal "<foo><bar>batz</bar></foo>", value
|
226
|
+
assert_utf8_encoding(value)
|
227
|
+
end
|
220
228
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
229
|
+
it "casts date" do
|
230
|
+
# 0001-01-01
|
231
|
+
v = find_value 51, :date
|
232
|
+
if @client.tds_73?
|
233
|
+
assert_instance_of Date, v
|
234
|
+
assert_equal 1, v.year, "Year"
|
235
|
+
assert_equal 1, v.month, "Month"
|
236
|
+
assert_equal 1, v.day, "Day"
|
237
|
+
else
|
238
|
+
assert_equal "0001-01-01", v
|
225
239
|
end
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
240
|
+
# 9999-12-31
|
241
|
+
v = find_value 52, :date
|
242
|
+
if @client.tds_73?
|
243
|
+
assert_instance_of Date, v
|
244
|
+
assert_equal 9999, v.year, "Year"
|
245
|
+
assert_equal 12, v.month, "Month"
|
246
|
+
assert_equal 31, v.day, "Day"
|
247
|
+
else
|
248
|
+
assert_equal "9999-12-31", v
|
231
249
|
end
|
250
|
+
end
|
232
251
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
252
|
+
it "casts time" do
|
253
|
+
# 15:45:00.709714966
|
254
|
+
v = find_value 281, :time_2
|
255
|
+
if @client.tds_73?
|
256
|
+
assert_instance_of Time, v
|
257
|
+
assert_equal 1900, v.year, "Year"
|
258
|
+
assert_equal 1, v.month, "Month"
|
259
|
+
assert_equal 1, v.day, "Day"
|
260
|
+
assert_equal 15, v.hour, "Hour"
|
261
|
+
assert_equal 45, v.min, "Minute"
|
262
|
+
assert_equal 0, v.sec, "Second"
|
263
|
+
assert_equal 710000, v.usec, "Microseconds"
|
264
|
+
assert_equal 710000000, v.nsec, "Nanoseconds"
|
265
|
+
else
|
266
|
+
assert_equal "15:45:00.71", v
|
237
267
|
end
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
else
|
253
|
-
assert_equal '0001-01-01', v
|
254
|
-
end
|
255
|
-
# 9999-12-31
|
256
|
-
v = find_value 52, :date
|
257
|
-
if @client.tds_73?
|
258
|
-
assert_instance_of Date, v
|
259
|
-
assert_equal 9999, v.year, 'Year'
|
260
|
-
assert_equal 12, v.month, 'Month'
|
261
|
-
assert_equal 31, v.day, 'Day'
|
262
|
-
else
|
263
|
-
assert_equal '9999-12-31', v
|
264
|
-
end
|
268
|
+
# 04:20:00.288321545
|
269
|
+
v = find_value 282, :time_2
|
270
|
+
if @client.tds_73?
|
271
|
+
assert_instance_of Time, v
|
272
|
+
assert_equal 1900, v.year, "Year"
|
273
|
+
assert_equal 1, v.month, "Month"
|
274
|
+
assert_equal 1, v.day, "Day"
|
275
|
+
assert_equal 4, v.hour, "Hour"
|
276
|
+
assert_equal 20, v.min, "Minute"
|
277
|
+
assert_equal 0, v.sec, "Second"
|
278
|
+
assert_equal 290000, v.usec, "Microseconds"
|
279
|
+
assert_equal 290000000, v.nsec, "Nanoseconds"
|
280
|
+
else
|
281
|
+
assert_equal "04:20:00.29", v
|
265
282
|
end
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
else
|
281
|
-
assert_equal '15:45:00.71', v
|
282
|
-
end
|
283
|
-
# 04:20:00.288321545
|
284
|
-
v = find_value 282, :time_2
|
285
|
-
if @client.tds_73?
|
286
|
-
assert_instance_of Time, v
|
287
|
-
assert_equal 1900, v.year, 'Year'
|
288
|
-
assert_equal 1, v.month, 'Month'
|
289
|
-
assert_equal 1, v.day, 'Day'
|
290
|
-
assert_equal 4, v.hour, 'Hour'
|
291
|
-
assert_equal 20, v.min, 'Minute'
|
292
|
-
assert_equal 0, v.sec, 'Second'
|
293
|
-
assert_equal 290000, v.usec, 'Microseconds'
|
294
|
-
assert_equal 290000000, v.nsec, 'Nanoseconds'
|
295
|
-
else
|
296
|
-
assert_equal '04:20:00.29', v
|
297
|
-
end
|
298
|
-
# 15:45:00.709714966
|
299
|
-
v = find_value 283, :time_7
|
300
|
-
if @client.tds_73?
|
301
|
-
assert_instance_of Time, v
|
302
|
-
assert_equal 1900, v.year, 'Year'
|
303
|
-
assert_equal 1, v.month, 'Month'
|
304
|
-
assert_equal 1, v.day, 'Day'
|
305
|
-
assert_equal 15, v.hour, 'Hour'
|
306
|
-
assert_equal 45, v.min, 'Minute'
|
307
|
-
assert_equal 0, v.sec, 'Second'
|
308
|
-
assert_equal 709715, v.usec, 'Microseconds'
|
309
|
-
assert_equal 709715000, v.nsec, 'Nanoseconds'
|
310
|
-
else
|
311
|
-
assert_equal '15:45:00.7097150', v
|
312
|
-
end
|
313
|
-
# 04:20:00.288321545
|
314
|
-
v = find_value 284, :time_7
|
315
|
-
if @client.tds_73?
|
316
|
-
assert_instance_of Time, v
|
317
|
-
assert_equal 1900, v.year, 'Year'
|
318
|
-
assert_equal 1, v.month, 'Month'
|
319
|
-
assert_equal 1, v.day, 'Day'
|
320
|
-
assert_equal 4, v.hour, 'Hour'
|
321
|
-
assert_equal 20, v.min, 'Minute'
|
322
|
-
assert_equal 0, v.sec, 'Second'
|
323
|
-
assert_equal 288321, v.usec, 'Microseconds'
|
324
|
-
assert_equal 288321500, v.nsec, 'Nanoseconds'
|
325
|
-
else
|
326
|
-
assert_equal '04:20:00.2883215', v
|
327
|
-
end
|
283
|
+
# 15:45:00.709714966
|
284
|
+
v = find_value 283, :time_7
|
285
|
+
if @client.tds_73?
|
286
|
+
assert_instance_of Time, v
|
287
|
+
assert_equal 1900, v.year, "Year"
|
288
|
+
assert_equal 1, v.month, "Month"
|
289
|
+
assert_equal 1, v.day, "Day"
|
290
|
+
assert_equal 15, v.hour, "Hour"
|
291
|
+
assert_equal 45, v.min, "Minute"
|
292
|
+
assert_equal 0, v.sec, "Second"
|
293
|
+
assert_equal 709715, v.usec, "Microseconds"
|
294
|
+
assert_equal 709715000, v.nsec, "Nanoseconds"
|
295
|
+
else
|
296
|
+
assert_equal "15:45:00.7097150", v
|
328
297
|
end
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
else
|
344
|
-
assert_equal '0001-01-01 00:00:00.0000000', v
|
345
|
-
end
|
346
|
-
# 1984-01-24 04:20:00.0000000
|
347
|
-
v = find_value 72, :datetime2_7
|
348
|
-
if @client.tds_73?
|
349
|
-
assert_instance_of Time, v
|
350
|
-
assert_equal 1984, v.year, 'Year'
|
351
|
-
assert_equal 1, v.month, 'Month'
|
352
|
-
assert_equal 24, v.day, 'Day'
|
353
|
-
assert_equal 4, v.hour, 'Hour'
|
354
|
-
assert_equal 20, v.min, 'Minute'
|
355
|
-
assert_equal 0, v.sec, 'Second'
|
356
|
-
assert_equal 0, v.usec, 'Microseconds'
|
357
|
-
assert_equal 0, v.nsec, 'Nanoseconds'
|
358
|
-
else
|
359
|
-
assert_equal '1984-01-24 04:20:00.0000000', v
|
360
|
-
end
|
361
|
-
# 9999-12-31 23:59:59.9999999
|
362
|
-
v = find_value 73, :datetime2_7
|
363
|
-
if @client.tds_73?
|
364
|
-
assert_instance_of Time, v
|
365
|
-
assert_equal 9999, v.year, 'Year'
|
366
|
-
assert_equal 12, v.month, 'Month'
|
367
|
-
assert_equal 31, v.day, 'Day'
|
368
|
-
assert_equal 23, v.hour, 'Hour'
|
369
|
-
assert_equal 59, v.min, 'Minute'
|
370
|
-
assert_equal 59, v.sec, 'Second'
|
371
|
-
assert_equal 999999, v.usec, 'Microseconds'
|
372
|
-
assert_equal 999999900, v.nsec, 'Nanoseconds'
|
373
|
-
else
|
374
|
-
assert_equal '9999-12-31 23:59:59.9999999', v
|
375
|
-
end
|
376
|
-
# 9999-12-31 23:59:59.123456789
|
377
|
-
v = find_value 74, :datetime2_2
|
378
|
-
if @client.tds_73?
|
379
|
-
assert_instance_of Time, v
|
380
|
-
assert_equal 9999, v.year, 'Year'
|
381
|
-
assert_equal 12, v.month, 'Month'
|
382
|
-
assert_equal 31, v.day, 'Day'
|
383
|
-
assert_equal 23, v.hour, 'Hour'
|
384
|
-
assert_equal 59, v.min, 'Minute'
|
385
|
-
assert_equal 59, v.sec, 'Second'
|
386
|
-
assert_equal 120000, v.usec, 'Microseconds'
|
387
|
-
assert_equal 120000000, v.nsec, 'Nanoseconds'
|
388
|
-
else
|
389
|
-
assert_equal '9999-12-31 23:59:59.12', v
|
390
|
-
end
|
298
|
+
# 04:20:00.288321545
|
299
|
+
v = find_value 284, :time_7
|
300
|
+
if @client.tds_73?
|
301
|
+
assert_instance_of Time, v
|
302
|
+
assert_equal 1900, v.year, "Year"
|
303
|
+
assert_equal 1, v.month, "Month"
|
304
|
+
assert_equal 1, v.day, "Day"
|
305
|
+
assert_equal 4, v.hour, "Hour"
|
306
|
+
assert_equal 20, v.min, "Minute"
|
307
|
+
assert_equal 0, v.sec, "Second"
|
308
|
+
assert_equal 288321, v.usec, "Microseconds"
|
309
|
+
assert_equal 288321500, v.nsec, "Nanoseconds"
|
310
|
+
else
|
311
|
+
assert_equal "04:20:00.2883215", v
|
391
312
|
end
|
313
|
+
end
|
392
314
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
315
|
+
it "casts datetime2" do
|
316
|
+
# 0001-01-01 00:00:00.0000000
|
317
|
+
v = find_value 71, :datetime2_7
|
318
|
+
if @client.tds_73?
|
319
|
+
assert_instance_of Time, v
|
320
|
+
assert_equal 1, v.year, "Year"
|
321
|
+
assert_equal 1, v.month, "Month"
|
322
|
+
assert_equal 1, v.day, "Day"
|
323
|
+
assert_equal 0, v.hour, "Hour"
|
324
|
+
assert_equal 0, v.min, "Minute"
|
325
|
+
assert_equal 0, v.sec, "Second"
|
326
|
+
assert_equal 0, v.usec, "Microseconds"
|
327
|
+
assert_equal 0, v.nsec, "Nanoseconds"
|
328
|
+
else
|
329
|
+
assert_equal "0001-01-01 00:00:00.0000000", v
|
330
|
+
end
|
331
|
+
# 1984-01-24 04:20:00.0000000
|
332
|
+
v = find_value 72, :datetime2_7
|
333
|
+
if @client.tds_73?
|
334
|
+
assert_instance_of Time, v
|
335
|
+
assert_equal 1984, v.year, "Year"
|
336
|
+
assert_equal 1, v.month, "Month"
|
337
|
+
assert_equal 24, v.day, "Day"
|
338
|
+
assert_equal 4, v.hour, "Hour"
|
339
|
+
assert_equal 20, v.min, "Minute"
|
340
|
+
assert_equal 0, v.sec, "Second"
|
341
|
+
assert_equal 0, v.usec, "Microseconds"
|
342
|
+
assert_equal 0, v.nsec, "Nanoseconds"
|
343
|
+
else
|
344
|
+
assert_equal "1984-01-24 04:20:00.0000000", v
|
415
345
|
end
|
346
|
+
# 9999-12-31 23:59:59.9999999
|
347
|
+
v = find_value 73, :datetime2_7
|
348
|
+
if @client.tds_73?
|
349
|
+
assert_instance_of Time, v
|
350
|
+
assert_equal 9999, v.year, "Year"
|
351
|
+
assert_equal 12, v.month, "Month"
|
352
|
+
assert_equal 31, v.day, "Day"
|
353
|
+
assert_equal 23, v.hour, "Hour"
|
354
|
+
assert_equal 59, v.min, "Minute"
|
355
|
+
assert_equal 59, v.sec, "Second"
|
356
|
+
assert_equal 999999, v.usec, "Microseconds"
|
357
|
+
assert_equal 999999900, v.nsec, "Nanoseconds"
|
358
|
+
else
|
359
|
+
assert_equal "9999-12-31 23:59:59.9999999", v
|
360
|
+
end
|
361
|
+
# 9999-12-31 23:59:59.123456789
|
362
|
+
v = find_value 74, :datetime2_2
|
363
|
+
if @client.tds_73?
|
364
|
+
assert_instance_of Time, v
|
365
|
+
assert_equal 9999, v.year, "Year"
|
366
|
+
assert_equal 12, v.month, "Month"
|
367
|
+
assert_equal 31, v.day, "Day"
|
368
|
+
assert_equal 23, v.hour, "Hour"
|
369
|
+
assert_equal 59, v.min, "Minute"
|
370
|
+
assert_equal 59, v.sec, "Second"
|
371
|
+
assert_equal 120000, v.usec, "Microseconds"
|
372
|
+
assert_equal 120000000, v.nsec, "Nanoseconds"
|
373
|
+
else
|
374
|
+
assert_equal "9999-12-31 23:59:59.12", v
|
375
|
+
end
|
376
|
+
end
|
416
377
|
|
417
|
-
|
418
|
-
#
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
378
|
+
it "casts datetimeoffset" do
|
379
|
+
# 1984-01-24T04:20:00.1234567-08:00
|
380
|
+
v = find_value 84, :datetimeoffset_7
|
381
|
+
if @client.tds_73?
|
382
|
+
assertions = lambda {
|
383
|
+
assert_instance_of Time, v
|
384
|
+
assert_equal 1984, v.year, "Year"
|
385
|
+
assert_equal 1, v.month, "Month"
|
386
|
+
assert_equal 24, v.day, "Day"
|
387
|
+
assert_equal 4, v.hour, "Hour"
|
388
|
+
assert_equal 20, v.min, "Minute"
|
389
|
+
assert_equal 59, v.sec, "Second"
|
390
|
+
assert_equal 123456, v.usec, "Microseconds"
|
391
|
+
assert_equal 123456700, v.nsec, "Nanoseconds"
|
392
|
+
assert_equal(-28800, v.utc_offset, "Offset")
|
393
|
+
}
|
394
|
+
assertions.call
|
395
|
+
v = find_value 84, :datetimeoffset_7, timezone: :local
|
396
|
+
assertions.call # Ignores timezone query option.
|
397
|
+
else
|
398
|
+
assert_equal "1984-01-24 04:20:59.1234567 -08:00", v
|
399
|
+
end
|
400
|
+
end
|
433
401
|
|
402
|
+
# it 'casts geography' do
|
403
|
+
# value = find_value 111, :geography
|
404
|
+
# assert_equal '', value
|
405
|
+
# end
|
406
|
+
#
|
407
|
+
# it 'casts geometry' do
|
408
|
+
# value = find_value 121, :geometry
|
409
|
+
# assert_equal '', value
|
410
|
+
# end
|
411
|
+
#
|
412
|
+
# it 'casts hierarchyid' do
|
413
|
+
# value = find_value 131, :hierarchyid
|
414
|
+
# assert_equal '', value
|
415
|
+
# end
|
434
416
|
end
|
435
|
-
|
436
|
-
|
437
|
-
|
438
417
|
end
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|