tiny_tds 2.1.6-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +407 -0
  3. data/.codeclimate.yml +20 -0
  4. data/.gitattributes +1 -0
  5. data/.gitignore +22 -0
  6. data/.rubocop.yml +31 -0
  7. data/CHANGELOG.md +280 -0
  8. data/CODE_OF_CONDUCT.md +31 -0
  9. data/Gemfile +2 -0
  10. data/ISSUE_TEMPLATE.md +38 -0
  11. data/MIT-LICENSE +23 -0
  12. data/README.md +504 -0
  13. data/Rakefile +62 -0
  14. data/VERSION +1 -0
  15. data/bin/defncopy-ttds +3 -0
  16. data/bin/tsql-ttds +3 -0
  17. data/docker-compose.yml +34 -0
  18. data/exe/.keep +0 -0
  19. data/ext/tiny_tds/client.c +499 -0
  20. data/ext/tiny_tds/client.h +53 -0
  21. data/ext/tiny_tds/extconf.rb +92 -0
  22. data/ext/tiny_tds/extconsts.rb +15 -0
  23. data/ext/tiny_tds/result.c +634 -0
  24. data/ext/tiny_tds/result.h +32 -0
  25. data/ext/tiny_tds/tiny_tds_ext.c +12 -0
  26. data/ext/tiny_tds/tiny_tds_ext.h +17 -0
  27. data/lib/tiny_tds/3.1/tiny_tds.so +0 -0
  28. data/lib/tiny_tds/3.2/tiny_tds.so +0 -0
  29. data/lib/tiny_tds/bin.rb +104 -0
  30. data/lib/tiny_tds/client.rb +136 -0
  31. data/lib/tiny_tds/error.rb +14 -0
  32. data/lib/tiny_tds/gem.rb +27 -0
  33. data/lib/tiny_tds/result.rb +7 -0
  34. data/lib/tiny_tds/version.rb +3 -0
  35. data/lib/tiny_tds.rb +61 -0
  36. data/patches/freetds/1.00.27/0001-mingw_missing_inet_pton.diff +34 -0
  37. data/patches/freetds/1.00.27/0002-Don-t-use-MSYS2-file-libws2_32.diff +28 -0
  38. data/patches/libiconv/1.14/1-avoid-gets-error.patch +17 -0
  39. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/bsqldb.exe +0 -0
  40. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/datacopy.exe +0 -0
  41. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/defncopy.exe +0 -0
  42. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/freebcp.exe +0 -0
  43. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/libct-4.dll +0 -0
  44. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/libsybdb-5.dll +0 -0
  45. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/osql +388 -0
  46. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/tdspool.exe +0 -0
  47. data/ports/x64-mingw-ucrt/freetds/1.1.24/bin/tsql.exe +0 -0
  48. data/ports/x64-mingw-ucrt/freetds/1.1.24/lib/libct.dll.a +0 -0
  49. data/ports/x64-mingw-ucrt/freetds/1.1.24/lib/libct.la +41 -0
  50. data/ports/x64-mingw-ucrt/freetds/1.1.24/lib/libsybdb.dll.a +0 -0
  51. data/ports/x64-mingw-ucrt/freetds/1.1.24/lib/libsybdb.la +41 -0
  52. data/ports/x64-mingw-ucrt/libiconv/1.15/bin/iconv.exe +0 -0
  53. data/ports/x64-mingw-ucrt/libiconv/1.15/bin/libcharset-1.dll +0 -0
  54. data/ports/x64-mingw-ucrt/libiconv/1.15/bin/libiconv-2.dll +0 -0
  55. data/ports/x64-mingw-ucrt/libiconv/1.15/lib/charset.alias +4 -0
  56. data/ports/x64-mingw-ucrt/libiconv/1.15/lib/libcharset.dll.a +0 -0
  57. data/ports/x64-mingw-ucrt/libiconv/1.15/lib/libcharset.la +41 -0
  58. data/ports/x64-mingw-ucrt/libiconv/1.15/lib/libiconv.dll.a +0 -0
  59. data/ports/x64-mingw-ucrt/libiconv/1.15/lib/libiconv.la +41 -0
  60. data/ports/x64-mingw-ucrt/openssl/1.1.1s/bin/c_rehash +251 -0
  61. data/ports/x64-mingw-ucrt/openssl/1.1.1s/bin/libcrypto-1_1-x64.dll +0 -0
  62. data/ports/x64-mingw-ucrt/openssl/1.1.1s/bin/libssl-1_1-x64.dll +0 -0
  63. data/ports/x64-mingw-ucrt/openssl/1.1.1s/bin/openssl.exe +0 -0
  64. data/ports/x64-mingw-ucrt/openssl/1.1.1s/lib/libcrypto.a +0 -0
  65. data/ports/x64-mingw-ucrt/openssl/1.1.1s/lib/libcrypto.dll.a +0 -0
  66. data/ports/x64-mingw-ucrt/openssl/1.1.1s/lib/libssl.a +0 -0
  67. data/ports/x64-mingw-ucrt/openssl/1.1.1s/lib/libssl.dll.a +0 -0
  68. data/setup_cimgruby_dev.sh +25 -0
  69. data/start_dev.sh +21 -0
  70. data/tasks/native_gem.rake +23 -0
  71. data/tasks/package.rake +8 -0
  72. data/tasks/ports/freetds.rb +37 -0
  73. data/tasks/ports/libiconv.rb +26 -0
  74. data/tasks/ports/openssl.rb +62 -0
  75. data/tasks/ports/recipe.rb +64 -0
  76. data/tasks/ports.rake +108 -0
  77. data/tasks/test.rake +9 -0
  78. data/test/benchmark/query.rb +77 -0
  79. data/test/benchmark/query_odbc.rb +106 -0
  80. data/test/benchmark/query_tinytds.rb +126 -0
  81. data/test/bin/install-freetds.sh +20 -0
  82. data/test/bin/install-mssql.ps1 +31 -0
  83. data/test/bin/install-mssqltools.sh +9 -0
  84. data/test/bin/install-openssl.sh +18 -0
  85. data/test/bin/setup_tinytds_db.sh +7 -0
  86. data/test/bin/setup_volume_permissions.sh +10 -0
  87. data/test/client_test.rb +275 -0
  88. data/test/gem_test.rb +177 -0
  89. data/test/result_test.rb +814 -0
  90. data/test/schema/1px.gif +0 -0
  91. data/test/schema/sqlserver_2000.sql +140 -0
  92. data/test/schema/sqlserver_2005.sql +140 -0
  93. data/test/schema/sqlserver_2008.sql +140 -0
  94. data/test/schema/sqlserver_2014.sql +140 -0
  95. data/test/schema/sqlserver_2016.sql +140 -0
  96. data/test/schema/sqlserver_azure.sql +140 -0
  97. data/test/schema/sybase_ase.sql +138 -0
  98. data/test/schema_test.rb +443 -0
  99. data/test/sql/db-create.sql +18 -0
  100. data/test/sql/db-login.sql +38 -0
  101. data/test/test_helper.rb +280 -0
  102. data/test/thread_test.rb +98 -0
  103. data/tiny_tds.gemspec +31 -0
  104. metadata +267 -0
@@ -0,0 +1,443 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ class SchemaTest < TinyTds::TestCase
5
+
6
+ describe 'Casting SQL Server schema' do
7
+
8
+ before do
9
+ @@current_schema_loaded ||= load_current_schema
10
+ @client = new_connection
11
+ @gif1px = File.read('test/schema/1px.gif',:mode=>"rb:BINARY")
12
+ end
13
+
14
+ describe 'for shared types' do
15
+
16
+ it 'casts bigint' do
17
+ assert_equal (-9223372036854775807), find_value(11, :bigint)
18
+ assert_equal 9223372036854775806, find_value(12, :bigint)
19
+ end
20
+
21
+ it 'casts binary' do
22
+ value = find_value(21, :binary_50)
23
+ assert_equal @gif1px + "\000", value
24
+ assert_binary_encoding(value)
25
+ end
26
+
27
+ it 'casts bit' do
28
+ assert_equal true, find_value(31, :bit)
29
+ assert_equal false, find_value(32, :bit)
30
+ assert_nil find_value(21, :bit)
31
+ end
32
+
33
+ it 'casts char' do
34
+ partial_char = '12345678 '
35
+ assert_equal '1234567890', find_value(41, :char_10)
36
+ assert_equal partial_char, find_value(42, :char_10)
37
+ assert_utf8_encoding find_value(42, :char_10)
38
+ end
39
+
40
+ it 'casts datetime' do
41
+ # 1753-01-01T00:00:00.000
42
+ v = find_value 61, :datetime
43
+ assert_instance_of Time, v, 'not in range of Time class'
44
+ assert_equal 1753, v.year
45
+ assert_equal 01, v.month
46
+ assert_equal 01, v.day
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
76
+
77
+ it 'casts decimal' do
78
+ assert_instance_of BigDecimal, find_value(91, :decimal_9_2)
79
+ assert_equal BigDecimal('12345.01'), find_value(91, :decimal_9_2)
80
+ assert_equal BigDecimal('1234567.89'), find_value(92, :decimal_9_2)
81
+ assert_equal BigDecimal('0.0'), find_value(93, :decimal_16_4)
82
+ assert_equal BigDecimal('123456789012.3456'), find_value(94, :decimal_16_4)
83
+ end
84
+
85
+ it 'casts float' do
86
+ assert_equal 123.00000001, find_value(101,:float)
87
+ assert_equal 0.0, find_value(102,:float)
88
+ assert_equal find_value(102,:float).object_id, find_value(102,:float).object_id, 'use global zero float'
89
+ assert_equal 123.45, find_value(103,:float)
90
+ end
91
+
92
+ it 'casts image' do
93
+ value = find_value(141,:image)
94
+ assert_equal @gif1px, value
95
+ assert_binary_encoding(value)
96
+ end
97
+
98
+ it 'casts int' do
99
+ assert_equal (-2147483647), find_value(151, :int)
100
+ assert_equal 2147483646, find_value(152, :int)
101
+ end
102
+
103
+ it 'casts money' do
104
+ assert_instance_of BigDecimal, find_value(161, :money)
105
+ assert_equal BigDecimal('4.20'), find_value(161, :money)
106
+ assert_equal BigDecimal('922337203685477.5806'), find_value(163 ,:money)
107
+ assert_equal BigDecimal('-922337203685477.5807'), find_value(162 ,:money)
108
+ end
109
+
110
+ it 'casts nchar' do
111
+ assert_equal '1234567890', find_value(171, :nchar_10)
112
+ assert_equal '123456åå ', find_value(172, :nchar_10)
113
+ assert_equal 'abc123 ', find_value(173, :nchar_10)
114
+ end
115
+
116
+ it 'casts ntext' do
117
+ assert_equal 'test ntext', find_value(181, :ntext)
118
+ assert_equal 'test ntext åå', find_value(182, :ntext)
119
+ assert_utf8_encoding find_value(182, :ntext)
120
+ # If this test fails, try setting the "text size" in your freetds.conf. See: http://www.freetds.org/faq.html#textdata
121
+ large_value = "x" * 5000
122
+ large_value_id = @client.execute("INSERT INTO [datatypes] ([ntext]) VALUES (N'#{large_value}')").insert
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
133
+
134
+ it 'casts nvarchar' do
135
+ assert_equal 'test nvarchar_50', find_value(201, :nvarchar_50)
136
+ assert_equal 'test nvarchar_50 åå', find_value(202, :nvarchar_50)
137
+ assert_utf8_encoding find_value(202, :nvarchar_50)
138
+ end
139
+
140
+ it 'casts real' do
141
+ assert_in_delta 123.45, find_value(221, :real), 0.01
142
+ assert_equal 0.0, find_value(222, :real)
143
+ assert_equal find_value(222, :real).object_id, find_value(222, :real).object_id, 'use global zero float'
144
+ assert_in_delta 0.00001, find_value(223, :real), 0.000001
145
+ end
146
+
147
+ it 'casts smalldatetime' do
148
+ # 1901-01-01 15:45:00
149
+ v = find_value 231, :smalldatetime
150
+ assert_instance_of Time, v
151
+ assert_equal 1901, v.year
152
+ assert_equal 01, v.month
153
+ assert_equal 01, v.day
154
+ assert_equal 15, v.hour
155
+ assert_equal 45, v.min
156
+ assert_equal 00, v.sec
157
+ assert_equal Time.local(1901).utc_offset, find_value(231, :smalldatetime, :timezone => :local).utc_offset
158
+ assert_equal 0, find_value(231, :smalldatetime, :timezone => :utc).utc_offset
159
+ # 2078-06-05 04:20:00
160
+ v = find_value 232, :smalldatetime
161
+ assert_instance_of Time, v
162
+ assert_equal 2078, v.year
163
+ assert_equal 06, v.month
164
+ assert_equal 05, v.day
165
+ assert_equal 04, v.hour
166
+ assert_equal 20, v.min
167
+ assert_equal 00, v.sec
168
+ assert_equal Time.local(2078,6).utc_offset, find_value(232, :smalldatetime, :timezone => :local).utc_offset
169
+ assert_equal 0, find_value(232, :smalldatetime, :timezone => :utc).utc_offset
170
+ end
171
+
172
+ it 'casts smallint' do
173
+ assert_equal (-32767), find_value(241, :smallint)
174
+ assert_equal 32766, find_value(242, :smallint)
175
+ end
176
+
177
+ it 'casts smallmoney' do
178
+ assert_instance_of BigDecimal, find_value(251, :smallmoney)
179
+ assert_equal BigDecimal("4.20"), find_value(251, :smallmoney)
180
+ assert_equal BigDecimal("-214748.3647"), find_value(252, :smallmoney)
181
+ assert_equal BigDecimal("214748.3646"), find_value(253, :smallmoney)
182
+ end
183
+
184
+ it 'casts text' do
185
+ assert_equal 'test text', find_value(271, :text)
186
+ assert_utf8_encoding find_value(271, :text)
187
+ end
188
+
189
+ it 'casts tinyint' do
190
+ assert_equal 0, find_value(301, :tinyint)
191
+ assert_equal 255, find_value(302, :tinyint)
192
+ end
193
+
194
+ it 'casts uniqueidentifier' do
195
+ assert_match %r|\w{8}-\w{4}-\w{4}-\w{4}-\w{12}|, find_value(311, :uniqueidentifier)
196
+ assert_utf8_encoding find_value(311, :uniqueidentifier)
197
+ end unless sybase_ase?
198
+
199
+ it 'casts varbinary' do
200
+ value = find_value(321, :varbinary_50)
201
+ assert_equal @gif1px, value
202
+ assert_binary_encoding(value)
203
+ end
204
+
205
+ it 'casts varchar' do
206
+ assert_equal 'test varchar_50', find_value(341, :varchar_50)
207
+ assert_utf8_encoding find_value(341, :varchar_50)
208
+ end
209
+
210
+ end
211
+
212
+
213
+ describe 'for 2005 and up' do
214
+
215
+ it 'casts nvarchar(max)' do
216
+ assert_equal 'test nvarchar_max', find_value(211, :nvarchar_max)
217
+ assert_equal 'test nvarchar_max åå', find_value(212, :nvarchar_max)
218
+ assert_utf8_encoding find_value(212, :nvarchar_max)
219
+ end
220
+
221
+ it 'casts varbinary(max)' do
222
+ value = find_value(331, :varbinary_max)
223
+ assert_equal @gif1px, value
224
+ assert_binary_encoding(value)
225
+ end
226
+
227
+ it 'casts varchar(max)' do
228
+ value = find_value(351, :varchar_max)
229
+ assert_equal 'test varchar_max', value
230
+ assert_utf8_encoding(value)
231
+ end
232
+
233
+ it 'casts xml' do
234
+ value = find_value(361, :xml)
235
+ assert_equal '<foo><bar>batz</bar></foo>', value
236
+ assert_utf8_encoding(value)
237
+ end
238
+
239
+ end if sqlserver_2005? || sqlserver_2008? || sqlserver_2014? || sqlserver_azure?
240
+
241
+
242
+ describe 'for 2008 and up' do
243
+
244
+ it 'casts date' do
245
+ # 0001-01-01
246
+ v = find_value 51, :date
247
+ if @client.tds_73?
248
+ assert_instance_of Date, v
249
+ assert_equal 1, v.year, 'Year'
250
+ assert_equal 1, v.month, 'Month'
251
+ assert_equal 1, v.day, 'Day'
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
265
+ end
266
+
267
+ it 'casts time' do
268
+ # 15:45:00.709714966
269
+ v = find_value 281, :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 15, v.hour, 'Hour'
276
+ assert_equal 45, v.min, 'Minute'
277
+ assert_equal 0, v.sec, 'Second'
278
+ assert_equal 710000, v.usec, 'Microseconds'
279
+ assert_equal 710000000, v.nsec, 'Nanoseconds'
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
328
+ end
329
+
330
+ it 'casts datetime2' do
331
+ # 0001-01-01 00:00:00.0000000
332
+ v = find_value 71, :datetime2_7
333
+ if @client.tds_73?
334
+ assert_instance_of Time, v
335
+ assert_equal 1, v.year, 'Year'
336
+ assert_equal 1, v.month, 'Month'
337
+ assert_equal 1, v.day, 'Day'
338
+ assert_equal 0, v.hour, 'Hour'
339
+ assert_equal 0, 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 '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
391
+ end
392
+
393
+ it 'casts datetimeoffset' do
394
+ # 1984-01-24T04:20:00.1234567-08:00
395
+ v = find_value 84, :datetimeoffset_7
396
+ if @client.tds_73?
397
+ assertions = lambda {
398
+ assert_instance_of Time, v
399
+ assert_equal 1984, v.year, 'Year'
400
+ assert_equal 1, v.month, 'Month'
401
+ assert_equal 24, v.day, 'Day'
402
+ assert_equal 4, v.hour, 'Hour'
403
+ assert_equal 20, v.min, 'Minute'
404
+ assert_equal 59, v.sec, 'Second'
405
+ assert_equal 123456, v.usec, 'Microseconds'
406
+ assert_equal 123456700, v.nsec, 'Nanoseconds'
407
+ assert_equal (-28800), v.utc_offset, 'Offset'
408
+ }
409
+ assertions.call
410
+ v = find_value 84, :datetimeoffset_7, timezone: :local
411
+ assertions.call # Ignores timezone query option.
412
+ else
413
+ assert_equal '1984-01-24 04:20:59.1234567 -08:00', v
414
+ end
415
+ end
416
+
417
+ # it 'casts geography' do
418
+ # value = find_value 111, :geography
419
+ # assert_equal '', value
420
+ # end
421
+ #
422
+ # it 'casts geometry' do
423
+ # value = find_value 121, :geometry
424
+ # assert_equal '', value
425
+ # end
426
+ #
427
+ # it 'casts hierarchyid' do
428
+ # value = find_value 131, :hierarchyid
429
+ # assert_equal '', value
430
+ # end
431
+
432
+ end if sqlserver_2008? || sqlserver_2014? || sqlserver_azure?
433
+
434
+ end
435
+
436
+
437
+
438
+ end
439
+
440
+
441
+
442
+
443
+
@@ -0,0 +1,18 @@
1
+ :ON ERROR EXIT
2
+
3
+ PRINT 'RUNNING DB-CREATE.SQL, CREATING TINYTDS TEST DATABASE';
4
+ IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = 'tinytdstest')
5
+ BEGIN
6
+ CREATE DATABASE [tinytdstest];
7
+ END
8
+ GO
9
+
10
+ IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name LIKE 'tinytdstest')
11
+ BEGIN
12
+ PRINT 'TINY TDS TEST DB SUCCESSFULY CREATED';
13
+ END
14
+ ELSE
15
+ BEGIN
16
+ THROW 51000, 'TINY TDS TEST DB CREATION FAILED', 1;
17
+ END
18
+ GO
@@ -0,0 +1,38 @@
1
+ :ON ERROR EXIT
2
+
3
+ PRINT 'RUNNING DB-LOGIN.SQL';
4
+
5
+ PRINT 'CREATING TINYTDS TEST LOGIN';
6
+ IF NOT EXISTS (select name from sys.server_principals where name like 'tinytds')
7
+ BEGIN
8
+ CREATE LOGIN [tinytds] WITH PASSWORD = '', CHECK_POLICY = OFF, DEFAULT_DATABASE = [tinytdstest];
9
+ END
10
+ GO
11
+
12
+ IF EXISTS (select name from sys.server_principals where name like 'tinytds')
13
+ BEGIN
14
+ PRINT 'TINY TDS TEST LOGIN SUCCESSFULY CREATED';
15
+ END
16
+ ELSE
17
+ BEGIN
18
+ THROW 51000, 'TINY TDS TEST LOGIN CREATION FAILED', 1;
19
+ END
20
+ GO
21
+
22
+ USE [tinytdstest];
23
+ IF NOT EXISTS (select name from sys.database_principals where name LIKE 'tinytds')
24
+ BEGIN
25
+ CREATE USER [tinytds] FOR LOGIN [tinytds];
26
+ EXEC sp_addrolemember N'db_owner', N'tinytds';
27
+ END
28
+ GO
29
+
30
+ IF EXISTS (select name from sys.database_principals where name LIKE 'tinytds')
31
+ BEGIN
32
+ PRINT 'TINY TDS TEST USER SUCCESSFULY CREATED';
33
+ END
34
+ ELSE
35
+ BEGIN
36
+ THROW 51000, 'TINY TDS TEST USER CREATION FAILED', 1;
37
+ END
38
+ GO