activerecord-sqlserver-adapter 3.2.16 → 3.2.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +6 -0
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +46 -46
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 635da017102e0833bf95d12a189ec49b0f33b750
|
4
|
+
data.tar.gz: b2c4a918c2f8f2636416ae78c514599fd34987f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d911a8d3d9fc475a9e323b1955f80f16d436456c60dff4f72c9c46e4ddf32819f07ff875e32c59ac3e6a0ebb7f7a8b5945d2aa5294e4e6a0eee6d667466b091
|
7
|
+
data.tar.gz: f1813fe974324a2879d827e3db53565849a73104e2266541b9a281acbc4eef9da16fe574eb58d29029a83a5492eea1154b587c8f6167a24f0bf19c35dcce4ae1
|
data/CHANGELOG
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.17
|
@@ -2,9 +2,9 @@ module ActiveRecord
|
|
2
2
|
module ConnectionAdapters
|
3
3
|
module Sqlserver
|
4
4
|
module DatabaseStatements
|
5
|
-
|
5
|
+
|
6
6
|
include CoreExt::DatabaseStatements
|
7
|
-
|
7
|
+
|
8
8
|
def select_rows(sql, name = nil)
|
9
9
|
raw_select sql, name, [], :fetch => :rows
|
10
10
|
end
|
@@ -16,7 +16,7 @@ module ActiveRecord
|
|
16
16
|
do_execute(sql,name)
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def exec_query(sql, name = 'SQL', binds = [], sqlserver_options = {})
|
21
21
|
if id_insert_table_name = sqlserver_options[:insert] ? query_requires_identity_insert?(sql) : nil
|
22
22
|
with_identity_insert_enabled(id_insert_table_name) { do_exec_query(sql, name, binds) }
|
@@ -24,11 +24,11 @@ module ActiveRecord
|
|
24
24
|
do_exec_query(sql, name, binds)
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def exec_insert(sql, name, binds)
|
29
29
|
exec_query sql, name, binds, :insert => true
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
def exec_delete(sql, name, binds)
|
33
33
|
sql << "; SELECT @@ROWCOUNT AS AffectedRows"
|
34
34
|
super.rows.first.first
|
@@ -42,7 +42,7 @@ module ActiveRecord
|
|
42
42
|
def outside_transaction?
|
43
43
|
uncached { select_value('SELECT @@TRANCOUNT', 'SCHEMA') == 0 }
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def supports_statement_cache?
|
47
47
|
true
|
48
48
|
end
|
@@ -89,9 +89,9 @@ module ActiveRecord
|
|
89
89
|
def case_sensitive_modifier(node)
|
90
90
|
node.acts_like?(:string) ? Arel::Nodes::Bin.new(node) : node
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
# === SQLServer Specific ======================================== #
|
94
|
-
|
94
|
+
|
95
95
|
def execute_procedure(proc_name, *variables)
|
96
96
|
vars = if variables.any? && variables.first.is_a?(Hash)
|
97
97
|
variables.first.map { |k,v| "@#{k} = #{quote(v)}" }
|
@@ -126,17 +126,17 @@ module ActiveRecord
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
def use_database(database=nil)
|
131
131
|
return if sqlserver_azure?
|
132
132
|
database ||= @connection_options[:database]
|
133
133
|
do_execute "USE #{quote_table_name(database)}" unless database.blank?
|
134
134
|
end
|
135
|
-
|
135
|
+
|
136
136
|
def user_options
|
137
137
|
return {} if sqlserver_azure?
|
138
138
|
# fixes #535
|
139
|
-
rows = select_rows('
|
139
|
+
rows = select_rows('DBCC USEROPTIONS WITH NO_INFOMSGS', 'SCHEMA')
|
140
140
|
rows = rows.first if rows.size == 2 && rows.last.empty?
|
141
141
|
rows.reduce(HashWithIndifferentAccess.new) do |values, row|
|
142
142
|
if row.instance_of? Hash
|
@@ -150,7 +150,7 @@ module ActiveRecord
|
|
150
150
|
values
|
151
151
|
end
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
def user_options_dateformat
|
155
155
|
if sqlserver_azure?
|
156
156
|
select_value 'SELECT [dateformat] FROM [sys].[syslanguages] WHERE [langid] = @@LANGID', 'SCHEMA'
|
@@ -158,24 +158,24 @@ module ActiveRecord
|
|
158
158
|
user_options['dateformat']
|
159
159
|
end
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
162
|
def user_options_isolation_level
|
163
163
|
if sqlserver_azure?
|
164
|
-
sql = %|SELECT CASE [transaction_isolation_level]
|
164
|
+
sql = %|SELECT CASE [transaction_isolation_level]
|
165
165
|
WHEN 0 THEN NULL
|
166
|
-
WHEN 1 THEN 'READ UNCOMITTED'
|
167
|
-
WHEN 2 THEN 'READ COMITTED'
|
168
|
-
WHEN 3 THEN 'REPEATABLE READ'
|
169
|
-
WHEN 4 THEN 'SERIALIZABLE'
|
170
|
-
WHEN 5 THEN 'SNAPSHOT' END AS [isolation_level]
|
171
|
-
FROM [sys].[dm_exec_sessions]
|
166
|
+
WHEN 1 THEN 'READ UNCOMITTED'
|
167
|
+
WHEN 2 THEN 'READ COMITTED'
|
168
|
+
WHEN 3 THEN 'REPEATABLE READ'
|
169
|
+
WHEN 4 THEN 'SERIALIZABLE'
|
170
|
+
WHEN 5 THEN 'SNAPSHOT' END AS [isolation_level]
|
171
|
+
FROM [sys].[dm_exec_sessions]
|
172
172
|
WHERE [session_id] = @@SPID|.squish
|
173
173
|
select_value sql, 'SCHEMA'
|
174
174
|
else
|
175
175
|
user_options['isolation_level']
|
176
176
|
end
|
177
177
|
end
|
178
|
-
|
178
|
+
|
179
179
|
def user_options_language
|
180
180
|
if sqlserver_azure?
|
181
181
|
select_value 'SELECT @@LANGUAGE AS [language]', 'SCHEMA'
|
@@ -189,20 +189,20 @@ module ActiveRecord
|
|
189
189
|
initial_isolation_level = user_options_isolation_level || "READ COMMITTED"
|
190
190
|
do_execute "SET TRANSACTION ISOLATION LEVEL #{isolation_level}"
|
191
191
|
begin
|
192
|
-
yield
|
192
|
+
yield
|
193
193
|
ensure
|
194
194
|
do_execute "SET TRANSACTION ISOLATION LEVEL #{initial_isolation_level}"
|
195
195
|
end if block_given?
|
196
196
|
end
|
197
|
-
|
197
|
+
|
198
198
|
def newid_function
|
199
199
|
select_value "SELECT NEWID()"
|
200
200
|
end
|
201
|
-
|
201
|
+
|
202
202
|
def newsequentialid_function
|
203
203
|
select_value "SELECT NEWSEQUENTIALID()"
|
204
204
|
end
|
205
|
-
|
205
|
+
|
206
206
|
def activity_stats
|
207
207
|
select_all %|
|
208
208
|
SELECT
|
@@ -247,9 +247,9 @@ module ActiveRecord
|
|
247
247
|
WHERE db_name(r.database_id) = '#{current_database}'
|
248
248
|
ORDER BY s.session_id|
|
249
249
|
end
|
250
|
-
|
250
|
+
|
251
251
|
# === SQLServer Specific (Rake/Test Helpers) ==================== #
|
252
|
-
|
252
|
+
|
253
253
|
def recreate_database
|
254
254
|
remove_database_connections_and_rollback do
|
255
255
|
do_execute "EXEC sp_MSforeachtable 'DROP TABLE ?'"
|
@@ -293,18 +293,18 @@ module ActiveRecord
|
|
293
293
|
def current_database
|
294
294
|
select_value 'SELECT DB_NAME()'
|
295
295
|
end
|
296
|
-
|
296
|
+
|
297
297
|
def charset
|
298
298
|
select_value "SELECT SERVERPROPERTY('SqlCharSetName')"
|
299
299
|
end
|
300
|
-
|
301
|
-
|
300
|
+
|
301
|
+
|
302
302
|
protected
|
303
|
-
|
303
|
+
|
304
304
|
def select(sql, name = nil, binds = [])
|
305
305
|
exec_query(sql, name, binds).to_a
|
306
306
|
end
|
307
|
-
|
307
|
+
|
308
308
|
def sql_for_insert(sql, pk, id_value, sequence_name, binds)
|
309
309
|
sql = "#{sql}; SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident"# unless binds.empty?
|
310
310
|
super
|
@@ -313,13 +313,13 @@ module ActiveRecord
|
|
313
313
|
def last_inserted_id(result)
|
314
314
|
super || select_value("SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident")
|
315
315
|
end
|
316
|
-
|
316
|
+
|
317
317
|
# === SQLServer Specific ======================================== #
|
318
|
-
|
318
|
+
|
319
319
|
def valid_isolation_levels
|
320
320
|
["READ COMMITTED", "READ UNCOMMITTED", "REPEATABLE READ", "SERIALIZABLE", "SNAPSHOT"]
|
321
321
|
end
|
322
|
-
|
322
|
+
|
323
323
|
# === SQLServer Specific (Executing) ============================ #
|
324
324
|
|
325
325
|
def do_execute(sql, name = 'SQL')
|
@@ -327,7 +327,7 @@ module ActiveRecord
|
|
327
327
|
with_sqlserver_error_handling { raw_connection_do(sql) }
|
328
328
|
end
|
329
329
|
end
|
330
|
-
|
330
|
+
|
331
331
|
def do_exec_query(sql, name, binds)
|
332
332
|
explaining = name == 'EXPLAIN'
|
333
333
|
names_and_types = []
|
@@ -361,7 +361,7 @@ module ActiveRecord
|
|
361
361
|
end
|
362
362
|
raw_select sql, name, binds, :ar_result => true
|
363
363
|
end
|
364
|
-
|
364
|
+
|
365
365
|
def raw_connection_do(sql)
|
366
366
|
case @connection_options[:mode]
|
367
367
|
when :dblib
|
@@ -372,13 +372,13 @@ module ActiveRecord
|
|
372
372
|
ensure
|
373
373
|
@update_sql = false
|
374
374
|
end
|
375
|
-
|
375
|
+
|
376
376
|
# === SQLServer Specific (Selecting) ============================ #
|
377
377
|
|
378
378
|
def raw_select(sql, name='SQL', binds=[], options={})
|
379
379
|
log(sql,name,binds) { _raw_select(sql, options) }
|
380
380
|
end
|
381
|
-
|
381
|
+
|
382
382
|
def _raw_select(sql, options={})
|
383
383
|
begin
|
384
384
|
handle = raw_connection_run(sql)
|
@@ -387,7 +387,7 @@ module ActiveRecord
|
|
387
387
|
finish_statement_handle(handle)
|
388
388
|
end
|
389
389
|
end
|
390
|
-
|
390
|
+
|
391
391
|
def raw_connection_run(sql)
|
392
392
|
with_sqlserver_error_handling do
|
393
393
|
case @connection_options[:mode]
|
@@ -398,7 +398,7 @@ module ActiveRecord
|
|
398
398
|
end
|
399
399
|
end
|
400
400
|
end
|
401
|
-
|
401
|
+
|
402
402
|
def handle_more_results?(handle)
|
403
403
|
case @connection_options[:mode]
|
404
404
|
when :dblib
|
@@ -406,7 +406,7 @@ module ActiveRecord
|
|
406
406
|
handle.more_results
|
407
407
|
end
|
408
408
|
end
|
409
|
-
|
409
|
+
|
410
410
|
def handle_to_names_and_values(handle, options={})
|
411
411
|
case @connection_options[:mode]
|
412
412
|
when :dblib
|
@@ -415,7 +415,7 @@ module ActiveRecord
|
|
415
415
|
handle_to_names_and_values_odbc(handle, options)
|
416
416
|
end
|
417
417
|
end
|
418
|
-
|
418
|
+
|
419
419
|
def handle_to_names_and_values_dblib(handle, options={})
|
420
420
|
query_options = {}.tap do |qo|
|
421
421
|
qo[:timezone] = ActiveRecord::Base.default_timezone || :utc
|
@@ -425,7 +425,7 @@ module ActiveRecord
|
|
425
425
|
columns = lowercase_schema_reflection ? handle.fields.map { |c| c.downcase } : handle.fields
|
426
426
|
options[:ar_result] ? ActiveRecord::Result.new(columns, results) : results
|
427
427
|
end
|
428
|
-
|
428
|
+
|
429
429
|
def handle_to_names_and_values_odbc(handle, options={})
|
430
430
|
@connection.use_utc = ActiveRecord::Base.default_timezone == :utc
|
431
431
|
if options[:ar_result]
|
@@ -441,7 +441,7 @@ module ActiveRecord
|
|
441
441
|
end
|
442
442
|
end
|
443
443
|
end
|
444
|
-
|
444
|
+
|
445
445
|
def finish_statement_handle(handle)
|
446
446
|
case @connection_options[:mode]
|
447
447
|
when :dblib
|
@@ -451,7 +451,7 @@ module ActiveRecord
|
|
451
451
|
end
|
452
452
|
handle
|
453
453
|
end
|
454
|
-
|
454
|
+
|
455
455
|
end
|
456
456
|
end
|
457
457
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-sqlserver-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken Collins
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2017-
|
15
|
+
date: 2017-03-26 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: activerecord
|
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
75
|
version: '0'
|
76
76
|
requirements: []
|
77
77
|
rubyforge_project: activerecord-sqlserver-adapter
|
78
|
-
rubygems_version: 2.6.
|
78
|
+
rubygems_version: 2.6.8
|
79
79
|
signing_key:
|
80
80
|
specification_version: 4
|
81
81
|
summary: ActiveRecord SQL Server Adapter. For SQL Server 2005 And Higher.
|