tiny_tds 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/result_test.rb CHANGED
@@ -1,43 +1,40 @@
1
- # encoding: utf-8
2
- require 'test_helper'
1
+ require "test_helper"
3
2
 
4
3
  class ResultTest < TinyTds::TestCase
5
-
6
- describe 'Basic query and result' do
7
-
4
+ describe "Basic query and result" do
8
5
  before do
9
6
  @@current_schema_loaded ||= load_current_schema
10
7
  @client = new_connection
11
- @query1 = 'SELECT 1 AS [one]'
8
+ @query1 = "SELECT 1 AS [one]"
12
9
  end
13
10
 
14
- it 'has included Enumerable' do
11
+ it "has included Enumerable" do
15
12
  assert TinyTds::Result.ancestors.include?(Enumerable)
16
13
  end
17
14
 
18
- it 'responds to #each' do
15
+ it "responds to #each" do
19
16
  result = @client.execute(@query1)
20
17
  assert result.respond_to?(:each)
21
18
  end
22
19
 
23
- it 'returns all results for #each with no block' do
20
+ it "returns all results for #each with no block" do
24
21
  result = @client.execute(@query1)
25
22
  data = result.each
26
23
  row = data.first
27
24
  assert_instance_of Array, data
28
25
  assert_equal 1, data.size
29
- assert_instance_of Hash, row, 'hash is the default query option'
26
+ assert_instance_of Hash, row, "hash is the default query option"
30
27
  end
31
28
 
32
- it 'returns all results for #each with a block yielding a row at a time' do
29
+ it "returns all results for #each with a block yielding a row at a time" do
33
30
  result = @client.execute(@query1)
34
31
  data = result.each do |row|
35
- assert_instance_of Hash, row, 'hash is the default query option'
32
+ assert_instance_of Hash, row, "hash is the default query option"
36
33
  end
37
34
  assert_instance_of Array, data
38
35
  end
39
36
 
40
- it 'allows successive calls to each returning the same data' do
37
+ it "allows successive calls to each returning the same data" do
41
38
  result = @client.execute(@query1)
42
39
  data = result.each
43
40
  result.each
@@ -45,150 +42,150 @@ class ResultTest < TinyTds::TestCase
45
42
  assert_equal data.first.object_id, result.each.first.object_id
46
43
  end
47
44
 
48
- it 'returns hashes with string keys' do
45
+ it "returns hashes with string keys" do
49
46
  result = @client.execute(@query1)
50
- row = result.each(:as => :hash, :symbolize_keys => false).first
47
+ row = result.each(as: :hash, symbolize_keys: false).first
51
48
  assert_instance_of Hash, row
52
- assert_equal ['one'], row.keys
53
- assert_equal ['one'], result.fields
49
+ assert_equal ["one"], row.keys
50
+ assert_equal ["one"], result.fields
54
51
  end
55
52
 
56
- it 'returns hashes with symbol keys' do
53
+ it "returns hashes with symbol keys" do
57
54
  result = @client.execute(@query1)
58
- row = result.each(:as => :hash, :symbolize_keys => true).first
55
+ row = result.each(as: :hash, symbolize_keys: true).first
59
56
  assert_instance_of Hash, row
60
57
  assert_equal [:one], row.keys
61
58
  assert_equal [:one], result.fields
62
59
  end
63
60
 
64
- it 'returns arrays with string fields' do
61
+ it "returns arrays with string fields" do
65
62
  result = @client.execute(@query1)
66
- row = result.each(:as => :array, :symbolize_keys => false).first
63
+ row = result.each(as: :array, symbolize_keys: false).first
67
64
  assert_instance_of Array, row
68
- assert_equal ['one'], result.fields
65
+ assert_equal ["one"], result.fields
69
66
  end
70
67
 
71
- it 'returns arrays with symbol fields' do
68
+ it "returns arrays with symbol fields" do
72
69
  result = @client.execute(@query1)
73
- row = result.each(:as => :array, :symbolize_keys => true).first
70
+ row = result.each(as: :array, symbolize_keys: true).first
74
71
  assert_instance_of Array, row
75
72
  assert_equal [:one], result.fields
76
73
  end
77
74
 
78
- it 'allows sql concat + to work' do
75
+ it "allows sql concat + to work" do
79
76
  rollback_transaction(@client) do
80
77
  @client.execute("DELETE FROM [datatypes]").do
81
78
  @client.execute("INSERT INTO [datatypes] ([char_10], [varchar_50]) VALUES ('1', '2')").do
82
- result = @client.execute("SELECT TOP (1) [char_10] + 'test' + [varchar_50] AS [test] FROM [datatypes]").each.first['test']
79
+ result = @client.execute("SELECT TOP (1) [char_10] + 'test' + [varchar_50] AS [test] FROM [datatypes]").each.first["test"]
83
80
  _(result).must_equal "1 test2"
84
81
  end
85
82
  end
86
83
 
87
- it 'must be able to turn :cache_rows option off' do
84
+ it "must be able to turn :cache_rows option off" do
88
85
  result = @client.execute(@query1)
89
86
  local = []
90
- result.each(:cache_rows => false) do |row|
87
+ result.each(cache_rows: false) do |row|
91
88
  local << row
92
89
  end
93
- assert local.first, 'should have iterated over each row'
94
- assert_equal [], result.each, 'should not have been cached'
95
- assert_equal ['one'], result.fields, 'should still cache field names'
90
+ assert local.first, "should have iterated over each row"
91
+ assert_equal [], result.each, "should not have been cached"
92
+ assert_equal ["one"], result.fields, "should still cache field names"
96
93
  end
97
94
 
98
- it 'must be able to get the first result row only' do
95
+ it "must be able to get the first result row only" do
99
96
  load_current_schema
100
97
  big_query = "SELECT [id] FROM [datatypes]"
101
- one = @client.execute(big_query).each(:first => true)
98
+ one = @client.execute(big_query).each(first: true)
102
99
  many = @client.execute(big_query).each
103
100
  assert many.size > 1
104
101
  assert one.size == 1
105
102
  end
106
103
 
107
- it 'copes with no results when using first option' do
108
- data = @client.execute("SELECT [id] FROM [datatypes] WHERE [id] = -1").each(:first => true)
104
+ it "copes with no results when using first option" do
105
+ data = @client.execute("SELECT [id] FROM [datatypes] WHERE [id] = -1").each(first: true)
109
106
  assert_equal [], data
110
107
  end
111
108
 
112
- it 'must delete, insert and find data' do
109
+ it "must delete, insert and find data" do
113
110
  rollback_transaction(@client) do
114
- text = 'test insert and delete'
111
+ text = "test insert and delete"
115
112
  @client.execute("DELETE FROM [datatypes] WHERE [varchar_50] IS NOT NULL").do
116
113
  @client.execute("INSERT INTO [datatypes] ([varchar_50]) VALUES ('#{text}')").do
117
114
  row = @client.execute("SELECT [varchar_50] FROM [datatypes] WHERE [varchar_50] IS NOT NULL").each.first
118
115
  assert row
119
- assert_equal text, row['varchar_50']
116
+ assert_equal text, row["varchar_50"]
120
117
  end
121
118
  end
122
119
 
123
- it 'must insert and find unicode data' do
120
+ it "must insert and find unicode data" do
124
121
  rollback_transaction(@client) do
125
- text = '😍'
122
+ text = "😍"
126
123
  @client.execute("DELETE FROM [datatypes] WHERE [nvarchar_50] IS NOT NULL").do
127
124
  @client.execute("INSERT INTO [datatypes] ([nvarchar_50]) VALUES (N'#{text}')").do
128
125
  row = @client.execute("SELECT [nvarchar_50] FROM [datatypes] WHERE [nvarchar_50] IS NOT NULL").each.first
129
- assert_equal text, row['nvarchar_50']
126
+ assert_equal text, row["nvarchar_50"]
130
127
  end
131
128
  end
132
129
 
133
- it 'must delete and update with affected rows support and insert with identity support in native sql' do
130
+ it "must delete and update with affected rows support and insert with identity support in native sql" do
134
131
  rollback_transaction(@client) do
135
- text = 'test affected rows sql'
132
+ text = "test affected rows sql"
136
133
  @client.execute("DELETE FROM [datatypes]").do
137
- afrows = @client.execute("SELECT @@ROWCOUNT AS AffectedRows").each.first['AffectedRows']
138
- _(['Fixnum', 'Integer']).must_include afrows.class.name
134
+ afrows = @client.execute("SELECT @@ROWCOUNT AS AffectedRows").each.first["AffectedRows"]
135
+ _(["Fixnum", "Integer"]).must_include afrows.class.name
139
136
  @client.execute("INSERT INTO [datatypes] ([varchar_50]) VALUES ('#{text}')").do
140
- pk1 = @client.execute(@client.identity_sql).each.first['Ident']
141
- _(['Fixnum', 'Integer']).must_include pk1.class.name, 'we it be able to CAST to bigint'
137
+ pk1 = @client.execute(@client.identity_sql).each.first["Ident"]
138
+ _(["Fixnum", "Integer"]).must_include pk1.class.name, "we it be able to CAST to bigint"
142
139
  @client.execute("UPDATE [datatypes] SET [varchar_50] = NULL WHERE [varchar_50] = '#{text}'").do
143
- afrows = @client.execute("SELECT @@ROWCOUNT AS AffectedRows").each.first['AffectedRows']
140
+ afrows = @client.execute("SELECT @@ROWCOUNT AS AffectedRows").each.first["AffectedRows"]
144
141
  assert_equal 1, afrows
145
142
  end
146
143
  end
147
144
 
148
- it 'has a #do method that cancels result rows and returns affected rows natively' do
145
+ it "has a #do method that cancels result rows and returns affected rows natively" do
149
146
  rollback_transaction(@client) do
150
- text = 'test affected rows native'
151
- count = @client.execute("SELECT COUNT(*) AS [count] FROM [datatypes]").each.first['count']
147
+ text = "test affected rows native"
148
+ count = @client.execute("SELECT COUNT(*) AS [count] FROM [datatypes]").each.first["count"]
152
149
  deleted_rows = @client.execute("DELETE FROM [datatypes]").do
153
- assert_equal count, deleted_rows, 'should have deleted rows equal to count'
150
+ assert_equal count, deleted_rows, "should have deleted rows equal to count"
154
151
  inserted_rows = @client.execute("INSERT INTO [datatypes] ([varchar_50]) VALUES ('#{text}')").do
155
- assert_equal 1, inserted_rows, 'should have inserted row for one above'
152
+ assert_equal 1, inserted_rows, "should have inserted row for one above"
156
153
  updated_rows = @client.execute("UPDATE [datatypes] SET [varchar_50] = NULL WHERE [varchar_50] = '#{text}'").do
157
- assert_equal 1, updated_rows, 'should have updated row for one above'
154
+ assert_equal 1, updated_rows, "should have updated row for one above"
158
155
  end
159
156
  end
160
157
 
161
- it 'allows native affected rows using #do to work under transaction' do
158
+ it "allows native affected rows using #do to work under transaction" do
162
159
  rollback_transaction(@client) do
163
- text = 'test affected rows native in transaction'
160
+ text = "test affected rows native in transaction"
164
161
  @client.execute("BEGIN TRANSACTION").do
165
162
  @client.execute("DELETE FROM [datatypes]").do
166
163
  inserted_rows = @client.execute("INSERT INTO [datatypes] ([varchar_50]) VALUES ('#{text}')").do
167
- assert_equal 1, inserted_rows, 'should have inserted row for one above'
164
+ assert_equal 1, inserted_rows, "should have inserted row for one above"
168
165
  updated_rows = @client.execute("UPDATE [datatypes] SET [varchar_50] = NULL WHERE [varchar_50] = '#{text}'").do
169
- assert_equal 1, updated_rows, 'should have updated row for one above'
166
+ assert_equal 1, updated_rows, "should have updated row for one above"
170
167
  end
171
168
  end
172
169
 
173
- it 'has an #insert method that cancels result rows and returns IDENTITY natively' do
170
+ it "has an #insert method that cancels result rows and returns IDENTITY natively" do
174
171
  rollback_transaction(@client) do
175
- text = 'test scope identity rows native'
172
+ text = "test scope identity rows native"
176
173
  @client.execute("DELETE FROM [datatypes] WHERE [varchar_50] = '#{text}'").do
177
174
  @client.execute("INSERT INTO [datatypes] ([varchar_50]) VALUES ('#{text}')").do
178
- sql_identity = @client.execute(@client.identity_sql).each.first['Ident']
175
+ sql_identity = @client.execute(@client.identity_sql).each.first["Ident"]
179
176
  native_identity = @client.execute("INSERT INTO [datatypes] ([varchar_50]) VALUES ('#{text}')").insert
180
177
  assert_equal sql_identity + 1, native_identity
181
178
  end
182
179
  end
183
180
 
184
- it 'returns bigint for #insert when needed' do
181
+ it "returns bigint for #insert when needed" do
185
182
  return if sqlserver_azure? # We can not alter clustered index like this test does.
186
183
  # 'CREATE TABLE' command is not allowed within a multi-statement transaction
187
184
  # and and sp_helpindex creates a temporary table #spindtab.
188
185
  rollback_transaction(@client) do
189
186
  seed = 9223372036854775805
190
187
  @client.execute("DELETE FROM [datatypes]").do
191
- id_constraint_name = @client.execute("EXEC sp_helpindex [datatypes]").detect { |row| row['index_keys'] == 'id' }['index_name']
188
+ id_constraint_name = @client.execute("EXEC sp_helpindex [datatypes]").detect { |row| row["index_keys"] == "id" }["index_name"]
192
189
  @client.execute("ALTER TABLE [datatypes] DROP CONSTRAINT [#{id_constraint_name}]").do
193
190
  @client.execute("ALTER TABLE [datatypes] DROP COLUMN [id]").do
194
191
  @client.execute("ALTER TABLE [datatypes] ADD [id] [bigint] NOT NULL IDENTITY(1,1) PRIMARY KEY").do
@@ -198,59 +195,59 @@ class ResultTest < TinyTds::TestCase
198
195
  end
199
196
  end
200
197
 
201
- it 'must be able to begin/commit transactions with raw sql' do
198
+ it "must be able to begin/commit transactions with raw sql" do
202
199
  rollback_transaction(@client) do
203
200
  @client.execute("BEGIN TRANSACTION").do
204
201
  @client.execute("DELETE FROM [datatypes]").do
205
202
  @client.execute("COMMIT TRANSACTION").do
206
- count = @client.execute("SELECT COUNT(*) AS [count] FROM [datatypes]").each.first['count']
203
+ count = @client.execute("SELECT COUNT(*) AS [count] FROM [datatypes]").each.first["count"]
207
204
  assert_equal 0, count
208
205
  end
209
206
  end
210
207
 
211
- it 'must be able to begin/rollback transactions with raw sql' do
208
+ it "must be able to begin/rollback transactions with raw sql" do
212
209
  load_current_schema
213
210
  @client.execute("BEGIN TRANSACTION").do
214
211
  @client.execute("DELETE FROM [datatypes]").do
215
212
  @client.execute("ROLLBACK TRANSACTION").do
216
- count = @client.execute("SELECT COUNT(*) AS [count] FROM [datatypes]").each.first['count']
213
+ count = @client.execute("SELECT COUNT(*) AS [count] FROM [datatypes]").each.first["count"]
217
214
  _(count).wont_equal 0
218
215
  end
219
216
 
220
- it 'has a #fields accessor with logic default and valid outcome' do
217
+ it "has a #fields accessor with logic default and valid outcome" do
221
218
  result = @client.execute(@query1)
222
- _(result.fields).must_equal ['one']
219
+ _(result.fields).must_equal ["one"]
223
220
  result.each
224
- _(result.fields).must_equal ['one']
221
+ _(result.fields).must_equal ["one"]
225
222
  end
226
223
 
227
- it 'always returns an array for fields for all sql' do
224
+ it "always returns an array for fields for all sql" do
228
225
  result = @client.execute("USE [tinytdstest]")
229
226
  _(result.fields).must_equal []
230
227
  result.do
231
228
  _(result.fields).must_equal []
232
229
  end
233
230
 
234
- it 'returns fields even when no results are found' do
231
+ it "returns fields even when no results are found" do
235
232
  no_results_query = "SELECT [id], [varchar_50] FROM [datatypes] WHERE [varchar_50] = 'NOTFOUND'"
236
233
  # Fields before each.
237
234
  result = @client.execute(no_results_query)
238
- _(result.fields).must_equal ['id', 'varchar_50']
235
+ _(result.fields).must_equal ["id", "varchar_50"]
239
236
  result.each
240
- _(result.fields).must_equal ['id', 'varchar_50']
237
+ _(result.fields).must_equal ["id", "varchar_50"]
241
238
  # Each then fields
242
239
  result = @client.execute(no_results_query)
243
240
  result.each
244
- _(result.fields).must_equal ['id', 'varchar_50']
241
+ _(result.fields).must_equal ["id", "varchar_50"]
245
242
  end
246
243
 
247
- it 'allows the result to be canceled before reading' do
244
+ it "allows the result to be canceled before reading" do
248
245
  result = @client.execute(@query1)
249
246
  result.cancel
250
247
  @client.execute(@query1).each
251
248
  end
252
249
 
253
- it 'works in tandem with the client when needing to find out if client has sql sent and result is canceled or not' do
250
+ it "works in tandem with the client when needing to find out if client has sql sent and result is canceled or not" do
254
251
  # Default state.
255
252
  @client = TinyTds::Client.new(connection_options)
256
253
  _(@client.sqlsent?).must_equal false
@@ -262,21 +259,21 @@ class ResultTest < TinyTds::TestCase
262
259
  result.cancel
263
260
  _(@client.sqlsent?).must_equal false
264
261
  _(@client.canceled?).must_equal true
265
- assert result.cancel, 'must be safe to call again'
262
+ assert result.cancel, "must be safe to call again"
266
263
  # With each and no block.
267
264
  @client.execute(@query1).each
268
265
  _(@client.sqlsent?).must_equal false
269
266
  _(@client.canceled?).must_equal false
270
267
  # With each and block.
271
268
  @client.execute(@query1).each do |row|
272
- _(@client.sqlsent?).must_equal true, 'when iterating over each row in a block'
269
+ _(@client.sqlsent?).must_equal true, "when iterating over each row in a block"
273
270
  _(@client.canceled?).must_equal false
274
271
  end
275
272
  _(@client.sqlsent?).must_equal false
276
273
  _(@client.canceled?).must_equal false
277
274
  # With each and block canceled half way thru.
278
- count = @client.execute("SELECT COUNT([id]) AS [count] FROM [datatypes]").each[0]['count']
279
- assert count > 10, 'since we want to cancel early for test'
275
+ count = @client.execute("SELECT COUNT([id]) AS [count] FROM [datatypes]").each[0]["count"]
276
+ assert count > 10, "since we want to cancel early for test"
280
277
  result = @client.execute("SELECT [id] FROM [datatypes]")
281
278
  index = 0
282
279
  result.each do |row|
@@ -299,48 +296,51 @@ class ResultTest < TinyTds::TestCase
299
296
  _(@client.canceled?).must_equal true
300
297
  end
301
298
  # With first
302
- @client.execute("SELECT [id] FROM [datatypes]").each(:first => true)
299
+ @client.execute("SELECT [id] FROM [datatypes]").each(first: true)
303
300
  _(@client.sqlsent?).must_equal false
304
301
  _(@client.canceled?).must_equal true
305
302
  end
306
303
 
307
- it 'use same string object for hash keys' do
304
+ it "use same string object for hash keys" do
308
305
  data = @client.execute("SELECT [id], [bigint] FROM [datatypes]").each
309
306
  assert_equal data.first.keys.map { |r| r.object_id }, data.last.keys.map { |r| r.object_id }
310
307
  end
311
308
 
312
- it 'has properly encoded column names with symbol keys' do
309
+ it "has properly encoded column names with symbol keys" do
313
310
  col_name = "öäüß"
314
- @client.execute("DROP TABLE [test_encoding]").do rescue nil
311
+ begin
312
+ @client.execute("DROP TABLE [test_encoding]").do
313
+ rescue
314
+ nil
315
+ end
315
316
  @client.execute("CREATE TABLE [dbo].[test_encoding] ( [id] int NOT NULL IDENTITY(1,1) PRIMARY KEY, [#{col_name}] [nvarchar](10) NOT NULL )").do
316
317
  @client.execute("INSERT INTO [test_encoding] ([#{col_name}]) VALUES (N'#{col_name}')").do
317
318
  result = @client.execute("SELECT [#{col_name}] FROM [test_encoding]")
318
- row = result.each(:as => :hash, :symbolize_keys => true).first
319
+ row = result.each(as: :hash, symbolize_keys: true).first
319
320
  assert_instance_of Symbol, result.fields.first
320
321
  assert_equal col_name.to_sym, result.fields.first
321
322
  assert_instance_of Symbol, row.keys.first
322
323
  assert_equal col_name.to_sym, row.keys.first
323
324
  end
324
325
 
325
- it 'allows #return_code to work with stored procedures and reset per sql batch' do
326
+ it "allows #return_code to work with stored procedures and reset per sql batch" do
326
327
  assert_nil @client.return_code
327
328
  result = @client.execute("EXEC tinytds_TestReturnCodes")
328
- assert_equal [{ "one" => 1 }], result.each
329
+ assert_equal [{"one" => 1}], result.each
329
330
  assert_equal 420, @client.return_code
330
331
  assert_equal 420, result.return_code
331
- result = @client.execute('SELECT 1 as [one]')
332
+ result = @client.execute("SELECT 1 as [one]")
332
333
  result.each
333
334
  assert_nil @client.return_code
334
335
  assert_nil result.return_code
335
336
  end
336
337
 
337
- it 'with LOGINPROPERTY function' do
338
- v = @client.execute("SELECT LOGINPROPERTY('sa', 'IsLocked') as v").first['v']
338
+ it "with LOGINPROPERTY function" do
339
+ v = @client.execute("SELECT LOGINPROPERTY('sa', 'IsLocked') as v").first["v"]
339
340
  _(v).must_equal 0
340
341
  end
341
342
 
342
- describe 'with multiple result sets' do
343
-
343
+ describe "with multiple result sets" do
344
344
  before do
345
345
  @empty_select = "SELECT 1 AS [rs1] WHERE 1 = 0"
346
346
  @double_select = "SELECT 1 AS [rs1]
@@ -356,42 +356,41 @@ class ResultTest < TinyTds::TestCase
356
356
  SELECT 3 AS [rs3] WHERE 1 = 0"
357
357
  end
358
358
 
359
- it 'handles a command buffer with double selects' do
359
+ it "handles a command buffer with double selects" do
360
360
  result = @client.execute(@double_select)
361
361
  result_sets = result.each
362
362
  assert_equal 2, result_sets.size
363
- assert_equal [{ 'rs1' => 1 }], result_sets.first
364
- assert_equal [{ 'rs2' => 2 }], result_sets.last
365
- assert_equal [['rs1'], ['rs2']], result.fields
366
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
363
+ assert_equal [{"rs1" => 1}], result_sets.first
364
+ assert_equal [{"rs2" => 2}], result_sets.last
365
+ assert_equal [["rs1"], ["rs2"]], result.fields
366
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
367
367
  # As array
368
368
  result = @client.execute(@double_select)
369
- result_sets = result.each(:as => :array)
369
+ result_sets = result.each(as: :array)
370
370
  assert_equal 2, result_sets.size
371
371
  assert_equal [[1]], result_sets.first
372
372
  assert_equal [[2]], result_sets.last
373
- assert_equal [['rs1'], ['rs2']], result.fields
374
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
373
+ assert_equal [["rs1"], ["rs2"]], result.fields
374
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
375
375
  end
376
376
 
377
- it 'yields each row for each result set' do
377
+ it "yields each row for each result set" do
378
378
  data = []
379
379
  result_sets = @client.execute(@double_select).each { |row| data << row }
380
380
  assert_equal data.first, result_sets.first[0]
381
381
  assert_equal data.last, result_sets.last[0]
382
382
  end
383
383
 
384
- it 'works from a stored procedure' do
384
+ it "works from a stored procedure" do
385
385
  results1, results2 = @client.execute("EXEC sp_helpconstraint '[datatypes]'").each
386
- assert_equal [{ "Object Name" => "[datatypes]" }], results1
386
+ assert_equal [{"Object Name" => "[datatypes]"}], results1
387
387
  constraint_info = results2.first
388
388
  assert constraint_info.key?("constraint_keys")
389
389
  assert constraint_info.key?("constraint_type")
390
390
  assert constraint_info.key?("constraint_name")
391
391
  end
392
392
 
393
- describe 'using :empty_sets TRUE' do
394
-
393
+ describe "using :empty_sets TRUE" do
395
394
  before do
396
395
  close_client
397
396
  @old_query_option_value = TinyTds::Client.default_query_options[:empty_sets]
@@ -403,76 +402,74 @@ class ResultTest < TinyTds::TestCase
403
402
  TinyTds::Client.default_query_options[:empty_sets] = @old_query_option_value
404
403
  end
405
404
 
406
- it 'handles a basic empty result set' do
405
+ it "handles a basic empty result set" do
407
406
  result = @client.execute(@empty_select)
408
407
  assert_equal [], result.each
409
- assert_equal ['rs1'], result.fields
408
+ assert_equal ["rs1"], result.fields
410
409
  end
411
410
 
412
- it 'includes empty result sets by default - using 1st empty buffer' do
411
+ it "includes empty result sets by default - using 1st empty buffer" do
413
412
  result = @client.execute(@triple_select_1st_empty)
414
413
  result_sets = result.each
415
414
  assert_equal 3, result_sets.size
416
415
  assert_equal [], result_sets[0]
417
- assert_equal [{ 'rs2' => 2 }], result_sets[1]
418
- assert_equal [{ 'rs3' => 3 }], result_sets[2]
419
- assert_equal [['rs1'], ['rs2'], ['rs3']], result.fields
420
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
416
+ assert_equal [{"rs2" => 2}], result_sets[1]
417
+ assert_equal [{"rs3" => 3}], result_sets[2]
418
+ assert_equal [["rs1"], ["rs2"], ["rs3"]], result.fields
419
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
421
420
  # As array
422
421
  result = @client.execute(@triple_select_1st_empty)
423
- result_sets = result.each(:as => :array)
422
+ result_sets = result.each(as: :array)
424
423
  assert_equal 3, result_sets.size
425
424
  assert_equal [], result_sets[0]
426
425
  assert_equal [[2]], result_sets[1]
427
426
  assert_equal [[3]], result_sets[2]
428
- assert_equal [['rs1'], ['rs2'], ['rs3']], result.fields
429
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
427
+ assert_equal [["rs1"], ["rs2"], ["rs3"]], result.fields
428
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
430
429
  end
431
430
 
432
- it 'includes empty result sets by default - using 2nd empty buffer' do
431
+ it "includes empty result sets by default - using 2nd empty buffer" do
433
432
  result = @client.execute(@triple_select_2nd_empty)
434
433
  result_sets = result.each
435
434
  assert_equal 3, result_sets.size
436
- assert_equal [{ 'rs1' => 1 }], result_sets[0]
435
+ assert_equal [{"rs1" => 1}], result_sets[0]
437
436
  assert_equal [], result_sets[1]
438
- assert_equal [{ 'rs3' => 3 }], result_sets[2]
439
- assert_equal [['rs1'], ['rs2'], ['rs3']], result.fields
440
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
437
+ assert_equal [{"rs3" => 3}], result_sets[2]
438
+ assert_equal [["rs1"], ["rs2"], ["rs3"]], result.fields
439
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
441
440
  # As array
442
441
  result = @client.execute(@triple_select_2nd_empty)
443
- result_sets = result.each(:as => :array)
442
+ result_sets = result.each(as: :array)
444
443
  assert_equal 3, result_sets.size
445
444
  assert_equal [[1]], result_sets[0]
446
445
  assert_equal [], result_sets[1]
447
446
  assert_equal [[3]], result_sets[2]
448
- assert_equal [['rs1'], ['rs2'], ['rs3']], result.fields
449
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
447
+ assert_equal [["rs1"], ["rs2"], ["rs3"]], result.fields
448
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
450
449
  end
451
450
 
452
- it 'includes empty result sets by default - using 3rd empty buffer' do
451
+ it "includes empty result sets by default - using 3rd empty buffer" do
453
452
  result = @client.execute(@triple_select_3rd_empty)
454
453
  result_sets = result.each
455
454
  assert_equal 3, result_sets.size
456
- assert_equal [{ 'rs1' => 1 }], result_sets[0]
457
- assert_equal [{ 'rs2' => 2 }], result_sets[1]
455
+ assert_equal [{"rs1" => 1}], result_sets[0]
456
+ assert_equal [{"rs2" => 2}], result_sets[1]
458
457
  assert_equal [], result_sets[2]
459
- assert_equal [['rs1'], ['rs2'], ['rs3']], result.fields
460
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
458
+ assert_equal [["rs1"], ["rs2"], ["rs3"]], result.fields
459
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
461
460
  # As array
462
461
  result = @client.execute(@triple_select_3rd_empty)
463
- result_sets = result.each(:as => :array)
462
+ result_sets = result.each(as: :array)
464
463
  assert_equal 3, result_sets.size
465
464
  assert_equal [[1]], result_sets[0]
466
465
  assert_equal [[2]], result_sets[1]
467
466
  assert_equal [], result_sets[2]
468
- assert_equal [['rs1'], ['rs2'], ['rs3']], result.fields
469
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
467
+ assert_equal [["rs1"], ["rs2"], ["rs3"]], result.fields
468
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
470
469
  end
471
-
472
470
  end
473
471
 
474
- describe 'using :empty_sets FALSE' do
475
-
472
+ describe "using :empty_sets FALSE" do
476
473
  before do
477
474
  close_client
478
475
  @old_query_option_value = TinyTds::Client.default_query_options[:empty_sets]
@@ -484,169 +481,160 @@ class ResultTest < TinyTds::TestCase
484
481
  TinyTds::Client.default_query_options[:empty_sets] = @old_query_option_value
485
482
  end
486
483
 
487
- it 'handles a basic empty result set' do
484
+ it "handles a basic empty result set" do
488
485
  result = @client.execute(@empty_select)
489
486
  assert_equal [], result.each
490
- assert_equal ['rs1'], result.fields
487
+ assert_equal ["rs1"], result.fields
491
488
  end
492
489
 
493
- it 'must not include empty result sets by default - using 1st empty buffer' do
490
+ it "must not include empty result sets by default - using 1st empty buffer" do
494
491
  result = @client.execute(@triple_select_1st_empty)
495
492
  result_sets = result.each
496
493
  assert_equal 2, result_sets.size
497
- assert_equal [{ 'rs2' => 2 }], result_sets[0]
498
- assert_equal [{ 'rs3' => 3 }], result_sets[1]
499
- assert_equal [['rs2'], ['rs3']], result.fields
500
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
494
+ assert_equal [{"rs2" => 2}], result_sets[0]
495
+ assert_equal [{"rs3" => 3}], result_sets[1]
496
+ assert_equal [["rs2"], ["rs3"]], result.fields
497
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
501
498
  # As array
502
499
  result = @client.execute(@triple_select_1st_empty)
503
- result_sets = result.each(:as => :array)
500
+ result_sets = result.each(as: :array)
504
501
  assert_equal 2, result_sets.size
505
502
  assert_equal [[2]], result_sets[0]
506
503
  assert_equal [[3]], result_sets[1]
507
- assert_equal [['rs2'], ['rs3']], result.fields
508
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
504
+ assert_equal [["rs2"], ["rs3"]], result.fields
505
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
509
506
  end
510
507
 
511
- it 'must not include empty result sets by default - using 2nd empty buffer' do
508
+ it "must not include empty result sets by default - using 2nd empty buffer" do
512
509
  result = @client.execute(@triple_select_2nd_empty)
513
510
  result_sets = result.each
514
511
  assert_equal 2, result_sets.size
515
- assert_equal [{ 'rs1' => 1 }], result_sets[0]
516
- assert_equal [{ 'rs3' => 3 }], result_sets[1]
517
- assert_equal [['rs1'], ['rs3']], result.fields
518
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
512
+ assert_equal [{"rs1" => 1}], result_sets[0]
513
+ assert_equal [{"rs3" => 3}], result_sets[1]
514
+ assert_equal [["rs1"], ["rs3"]], result.fields
515
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
519
516
  # As array
520
517
  result = @client.execute(@triple_select_2nd_empty)
521
- result_sets = result.each(:as => :array)
518
+ result_sets = result.each(as: :array)
522
519
  assert_equal 2, result_sets.size
523
520
  assert_equal [[1]], result_sets[0]
524
521
  assert_equal [[3]], result_sets[1]
525
- assert_equal [['rs1'], ['rs3']], result.fields
526
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
522
+ assert_equal [["rs1"], ["rs3"]], result.fields
523
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
527
524
  end
528
525
 
529
- it 'must not include empty result sets by default - using 3rd empty buffer' do
526
+ it "must not include empty result sets by default - using 3rd empty buffer" do
530
527
  result = @client.execute(@triple_select_3rd_empty)
531
528
  result_sets = result.each
532
529
  assert_equal 2, result_sets.size
533
- assert_equal [{ 'rs1' => 1 }], result_sets[0]
534
- assert_equal [{ 'rs2' => 2 }], result_sets[1]
535
- assert_equal [['rs1'], ['rs2']], result.fields
536
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
530
+ assert_equal [{"rs1" => 1}], result_sets[0]
531
+ assert_equal [{"rs2" => 2}], result_sets[1]
532
+ assert_equal [["rs1"], ["rs2"]], result.fields
533
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
537
534
  # As array
538
535
  result = @client.execute(@triple_select_3rd_empty)
539
- result_sets = result.each(:as => :array)
536
+ result_sets = result.each(as: :array)
540
537
  assert_equal 2, result_sets.size
541
538
  assert_equal [[1]], result_sets[0]
542
539
  assert_equal [[2]], result_sets[1]
543
- assert_equal [['rs1'], ['rs2']], result.fields
544
- assert_equal result.each.object_id, result.each.object_id, 'same cached rows'
540
+ assert_equal [["rs1"], ["rs2"]], result.fields
541
+ assert_equal result.each.object_id, result.each.object_id, "same cached rows"
545
542
  end
546
-
547
543
  end
548
-
549
544
  end
550
545
 
551
- describe 'Complex query with multiple results sets but no actual results' do
546
+ unless sqlserver_azure?
547
+ describe "Complex query with multiple results sets but no actual results" do
548
+ let(:backup_file) { 'C:\\Users\\Public\\tinytdstest.bak' }
552
549
 
553
- let(:backup_file) { 'C:\\Users\\Public\\tinytdstest.bak' }
550
+ after { File.delete(backup_file) if File.exist?(backup_file) }
554
551
 
555
- after { File.delete(backup_file) if File.exist?(backup_file) }
556
-
557
- it 'must not cancel the query until complete' do
558
- @client.execute("BACKUP DATABASE tinytdstest TO DISK = '#{backup_file}'").do
552
+ it "must not cancel the query until complete" do
553
+ @client.execute("BACKUP DATABASE tinytdstest TO DISK = '#{backup_file}'").do
554
+ end
559
555
  end
556
+ end
560
557
 
561
- end unless sqlserver_azure?
562
-
563
- describe 'when casting to native ruby values' do
564
-
565
- it 'returns fixnum for 1' do
566
- value = @client.execute('SELECT 1 AS [fixnum]').each.first['fixnum']
558
+ describe "when casting to native ruby values" do
559
+ it "returns fixnum for 1" do
560
+ value = @client.execute("SELECT 1 AS [fixnum]").each.first["fixnum"]
567
561
  assert_equal 1, value
568
562
  end
569
563
 
570
- it 'returns nil for NULL' do
571
- value = @client.execute('SELECT NULL AS [null]').each.first['null']
564
+ it "returns nil for NULL" do
565
+ value = @client.execute("SELECT NULL AS [null]").each.first["null"]
572
566
  assert_nil value
573
567
  end
574
-
575
568
  end
576
569
 
577
- describe 'with data type' do
578
-
579
- describe 'char max' do
580
-
570
+ describe "with data type" do
571
+ describe "char max" do
581
572
  before do
582
- @big_text = 'x' * 2_000_000
583
- @old_textsize = @client.execute("SELECT @@TEXTSIZE AS [textsize]").each.first['textsize'].inspect
573
+ @big_text = "x" * 2_000_000
574
+ @old_textsize = @client.execute("SELECT @@TEXTSIZE AS [textsize]").each.first["textsize"].inspect
584
575
  @client.execute("SET TEXTSIZE #{(@big_text.length * 2) + 1}").do
585
576
  end
586
577
 
587
- it 'must insert and select large varchar_max' do
578
+ it "must insert and select large varchar_max" do
588
579
  insert_and_select_datatype :varchar_max
589
580
  end
590
581
 
591
- it 'must insert and select large nvarchar_max' do
582
+ it "must insert and select large nvarchar_max" do
592
583
  insert_and_select_datatype :nvarchar_max
593
584
  end
594
-
595
585
  end
596
-
597
586
  end
598
587
 
599
- describe 'when shit happens' do
600
-
601
- it 'copes with nil or empty buffer' do
588
+ describe "when shit happens" do
589
+ it "copes with nil or empty buffer" do
602
590
  assert_raises(TypeError) { @client.execute(nil) }
603
- assert_equal [], @client.execute('').each
591
+ assert_equal [], @client.execute("").each
604
592
  end
605
593
 
606
- describe 'using :message_handler option' do
607
- let(:messages) { Array.new }
594
+ describe "using :message_handler option" do
595
+ let(:messages) { [] }
608
596
 
609
597
  before do
610
598
  close_client
611
- @client = new_connection message_handler: Proc.new { |m| messages << m }
599
+ @client = new_connection message_handler: proc { |m| messages << m }
612
600
  end
613
601
 
614
602
  after do
615
603
  messages.clear
616
604
  end
617
605
 
618
- it 'has a message handler that responds to call' do
606
+ it "has a message handler that responds to call" do
619
607
  assert @client.message_handler.respond_to?(:call)
620
608
  end
621
609
 
622
- it 'calls the provided message handler when severity is 10 or less' do
610
+ it "calls the provided message handler when severity is 10 or less" do
623
611
  (1..10).to_a.each do |severity|
624
612
  messages.clear
625
613
  msg = "Test #{severity} severity"
626
614
  state = rand(1..255)
627
615
  @client.execute("RAISERROR(N'#{msg}', #{severity}, #{state})").do
628
616
  m = messages.first
629
- assert_equal 1, messages.length, 'there should be one message after one raiserror'
630
- assert_equal msg, m.message, 'message text'
631
- assert_equal severity, m.severity, 'message severity' unless severity == 10 && m.severity.to_i == 0
632
- assert_equal state, m.os_error_number, 'message state'
617
+ assert_equal 1, messages.length, "there should be one message after one raiserror"
618
+ assert_equal msg, m.message, "message text"
619
+ assert_equal severity, m.severity, "message severity" unless severity == 10 && m.severity.to_i == 0
620
+ assert_equal state, m.os_error_number, "message state"
633
621
  end
634
622
  end
635
623
 
636
- it 'calls the provided message handler for `print` messages' do
624
+ it "calls the provided message handler for `print` messages" do
637
625
  messages.clear
638
- msg = 'hello'
626
+ msg = "hello"
639
627
  @client.execute("PRINT '#{msg}'").do
640
628
  m = messages.first
641
- assert_equal 1, messages.length, 'there should be one message after one print statement'
642
- assert_equal msg, m.message, 'message text'
629
+ assert_equal 1, messages.length, "there should be one message after one print statement"
630
+ assert_equal msg, m.message, "message text"
643
631
  end
644
632
 
645
- it 'must raise an error preceded by a `print` message' do
633
+ it "must raise an error preceded by a `print` message" do
646
634
  messages.clear
647
635
  action = lambda { @client.execute("EXEC tinytds_TestPrintWithError").do }
648
636
  assert_raise_tinytds_error(action) do |e|
649
- assert_equal 'hello', messages.first.message, 'message text'
637
+ assert_equal "hello", messages.first.message, "message text"
650
638
 
651
639
  assert_equal "Error following print", e.message
652
640
  assert_equal 16, e.severity
@@ -654,44 +642,44 @@ class ResultTest < TinyTds::TestCase
654
642
  end
655
643
  end
656
644
 
657
- it 'calls the provided message handler for each of a series of `print` messages' do
645
+ it "calls the provided message handler for each of a series of `print` messages" do
658
646
  messages.clear
659
647
  @client.execute("EXEC tinytds_TestSeveralPrints").do
660
- assert_equal ['hello 1', 'hello 2', 'hello 3'], messages.map { |e| e.message }, 'message list'
648
+ assert_equal ["hello 1", "hello 2", "hello 3"], messages.map { |e| e.message }, "message list"
661
649
  end
662
650
 
663
- it 'should flush info messages before raising error in cases of timeout' do
664
- @client = new_connection timeout: 1, message_handler: Proc.new { |m| messages << m }
651
+ it "should flush info messages before raising error in cases of timeout" do
652
+ @client = new_connection timeout: 1, message_handler: proc { |m| messages << m }
665
653
  action = lambda { @client.execute("print 'hello'; waitfor delay '00:00:02'").do }
666
654
  messages.clear
667
655
  assert_raise_tinytds_error(action) do |e|
668
- assert_match %r{timed out}i, e.message, 'ignore if non-english test run'
656
+ assert_match %r{timed out}i, e.message, "ignore if non-english test run"
669
657
  assert_equal 6, e.severity
670
658
  assert_equal 20003, e.db_error_number
671
- assert_equal 'hello', messages.first&.message, 'message text'
659
+ assert_equal "hello", messages.first&.message, "message text"
672
660
  end
673
661
  end
674
662
 
675
- it 'should print info messages before raising error in cases of timeout' do
676
- @client = new_connection timeout: 1, message_handler: Proc.new { |m| messages << m }
663
+ it "should print info messages before raising error in cases of timeout" do
664
+ @client = new_connection timeout: 1, message_handler: proc { |m| messages << m }
677
665
  action = lambda { @client.execute("raiserror('hello', 1, 1) with nowait; waitfor delay '00:00:02'").do }
678
666
  messages.clear
679
667
  assert_raise_tinytds_error(action) do |e|
680
- assert_match %r{timed out}i, e.message, 'ignore if non-english test run'
668
+ assert_match %r{timed out}i, e.message, "ignore if non-english test run"
681
669
  assert_equal 6, e.severity
682
670
  assert_equal 20003, e.db_error_number
683
- assert_equal 'hello', messages.first&.message, 'message text'
671
+ assert_equal "hello", messages.first&.message, "message text"
684
672
  end
685
673
  end
686
674
  end
687
675
 
688
- it 'must not raise an error when severity is 10 or less' do
676
+ it "must not raise an error when severity is 10 or less" do
689
677
  (1..10).to_a.each do |severity|
690
678
  @client.execute("RAISERROR(N'Test #{severity} severity', #{severity}, 1)").do
691
679
  end
692
680
  end
693
681
 
694
- it 'raises an error when severity is greater than 10' do
682
+ it "raises an error when severity is greater than 10" do
695
683
  action = lambda { @client.execute("RAISERROR(N'Test 11 severity', 11, 1)").do }
696
684
  assert_raise_tinytds_error(action) do |e|
697
685
  assert_equal "Test 11 severity", e.message
@@ -706,7 +694,7 @@ class ResultTest < TinyTds::TestCase
706
694
 
707
695
  def assert_followup_query
708
696
  result = @client.execute(@query1)
709
- assert_equal 1, result.each.first['one']
697
+ assert_equal 1, result.each.first["one"]
710
698
  end
711
699
 
712
700
  def insert_and_select_datatype(datatype)
@@ -717,5 +705,4 @@ class ResultTest < TinyTds::TestCase
717
705
  flunk "Large #{datatype} data with a length of #{@big_text.length} did not match found text with length of #{found_text.length}" unless @big_text == found_text
718
706
  end
719
707
  end
720
-
721
708
  end