activerecord-sqlserver-adapter 4.0.4 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +0 -21
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +13 -9
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +1 -1
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +28 -0
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +9 -3
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +17 -19
- data/lib/active_record/connection_adapters/sqlserver_column.rb +1 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1769be5dc11de446932e700fa5d565eedd0acb13
|
4
|
+
data.tar.gz: a27fc285acdf1b2d18c464effb4251a6a657106d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbb747777f956819b3c0f74e0c50d144462a11736416a66cc09d34214195583c6fb1e1d120599e6d5b7212238a7dc89d7c4f0fcaa456bae7e2b45d924fb90087
|
7
|
+
data.tar.gz: 2520b82a442e5dd2dceb78731a8689251bdcc50bc40c2d58b955330b39a16d98b64b08de54d10afc72292fa36a7ccc5a74092167a9f01fee82ab03b942c068da
|
data/CHANGELOG
CHANGED
@@ -1,25 +1,4 @@
|
|
1
|
-
* 4.0.4 *
|
2
|
-
|
3
|
-
* Add `WITH NO_INFOMSGS` to `user_options` method. Fixes #580
|
4
|
-
|
5
|
-
|
6
|
-
* 4.0.3 *
|
7
|
-
|
8
|
-
* Fix parens around `enable_default_unicode_types`. Fixes #562
|
9
|
-
|
10
|
-
|
11
|
-
* 4.0.2 *
|
12
|
-
|
13
|
-
* Added vNext support.
|
14
|
-
|
15
|
-
|
16
|
-
* 4.0.1 *
|
17
|
-
|
18
|
-
* Added 2014 and 2016 to supported list.
|
19
|
-
|
20
|
-
|
21
1
|
* 4.0.0 *
|
22
|
-
|
23
2
|
* Dropped support for ruby 1.8.7
|
24
3
|
* Removed deadlock victim retry in favor of Isolation Level
|
25
4
|
* Removed auto_explain_threshold_in_seconds (not used in rails 4)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.0
|
1
|
+
4.1.0
|
@@ -18,8 +18,8 @@ module ActiveRecord
|
|
18
18
|
if id_insert_table_name = sqlserver_options[:insert] ? query_requires_identity_insert?(sql) : nil
|
19
19
|
with_identity_insert_enabled(id_insert_table_name) { do_exec_query(sql, name, binds) }
|
20
20
|
elsif update_sql?(sql)
|
21
|
-
|
22
|
-
|
21
|
+
sql = strip_ident_from_update(sql)
|
22
|
+
do_exec_query(sql, name, binds)
|
23
23
|
else
|
24
24
|
do_exec_query(sql, name, binds)
|
25
25
|
end
|
@@ -56,15 +56,15 @@ module ActiveRecord
|
|
56
56
|
do_execute 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION'
|
57
57
|
end
|
58
58
|
|
59
|
-
def create_savepoint
|
60
|
-
disable_auto_reconnect { do_execute "SAVE TRANSACTION #{
|
59
|
+
def create_savepoint(name = current_savepoint_name)
|
60
|
+
disable_auto_reconnect { do_execute "SAVE TRANSACTION #{name}" }
|
61
61
|
end
|
62
62
|
|
63
|
-
def release_savepoint
|
63
|
+
def release_savepoint(name = current_savepoint_name)
|
64
64
|
end
|
65
65
|
|
66
|
-
def rollback_to_savepoint
|
67
|
-
disable_auto_reconnect { do_execute "ROLLBACK TRANSACTION #{
|
66
|
+
def rollback_to_savepoint(name = current_savepoint_name)
|
67
|
+
disable_auto_reconnect { do_execute "ROLLBACK TRANSACTION #{name}" }
|
68
68
|
end
|
69
69
|
|
70
70
|
def add_limit_offset!(_sql, _options)
|
@@ -122,7 +122,7 @@ module ActiveRecord
|
|
122
122
|
|
123
123
|
def user_options
|
124
124
|
return {} if sqlserver_azure?
|
125
|
-
select_rows('
|
125
|
+
select_rows('dbcc useroptions', 'SCHEMA').reduce(HashWithIndifferentAccess.new) do |values, row|
|
126
126
|
if row.instance_of? Hash
|
127
127
|
set_option = row.values[0].gsub(/\s+/, '_')
|
128
128
|
user_value = row.values[1]
|
@@ -334,7 +334,11 @@ module ActiveRecord
|
|
334
334
|
next if ar_column && column.sql_type == 'timestamp'
|
335
335
|
v = value
|
336
336
|
names_and_types << if ar_column
|
337
|
-
|
337
|
+
if column.is_integer? && value.present?
|
338
|
+
v = value.to_i
|
339
|
+
# Reset the casted value to the bind as required by Rails 4.1
|
340
|
+
binds[index] = [column, v]
|
341
|
+
end
|
338
342
|
"@#{index} #{column.sql_type_for_statement}"
|
339
343
|
elsif column.acts_like?(:string)
|
340
344
|
"@#{index} nvarchar(max)"
|
@@ -22,6 +22,34 @@ module ActiveRecord
|
|
22
22
|
super
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
def visit_TableDefinition(o)
|
27
|
+
quoted_name = "#{quote_table_name((o.temporary ? '#' : '') + o.name.to_s)} "
|
28
|
+
|
29
|
+
if o.as
|
30
|
+
if o.as.is_a?(ActiveRecord::Relation)
|
31
|
+
select = o.as.to_sql
|
32
|
+
elsif o.as.is_a?(String)
|
33
|
+
select = o.as
|
34
|
+
else
|
35
|
+
raise 'Only able to generate a table from a SELECT statement passed as a String or ActiveRecord::Relation'
|
36
|
+
end
|
37
|
+
|
38
|
+
create_sql = 'SELECT * INTO '
|
39
|
+
create_sql << quoted_name
|
40
|
+
create_sql << 'FROM ('
|
41
|
+
create_sql << select
|
42
|
+
create_sql << ') AS __sq'
|
43
|
+
|
44
|
+
else
|
45
|
+
create_sql = "CREATE TABLE "
|
46
|
+
create_sql << quoted_name
|
47
|
+
create_sql << "(#{o.columns.map { |c| accept c }.join(', ')}) "
|
48
|
+
create_sql << "#{o.options}"
|
49
|
+
end
|
50
|
+
|
51
|
+
create_sql
|
52
|
+
end
|
25
53
|
end
|
26
54
|
end
|
27
55
|
end
|
@@ -16,6 +16,12 @@ module ActiveRecord
|
|
16
16
|
super || tables.include?(unquoted_table_name) || views.include?(unquoted_table_name)
|
17
17
|
end
|
18
18
|
|
19
|
+
def create_table(table_name, options = {})
|
20
|
+
res = super
|
21
|
+
schema_cache.clear_table_cache!(table_name)
|
22
|
+
res
|
23
|
+
end
|
24
|
+
|
19
25
|
def indexes(table_name, name = nil)
|
20
26
|
data = select("EXEC sp_helpindex #{quote(table_name)}", name) rescue []
|
21
27
|
data.reduce([]) do |indexes, index|
|
@@ -256,7 +262,7 @@ module ActiveRecord
|
|
256
262
|
nil
|
257
263
|
else
|
258
264
|
match_data = ci[:default_value].match(/\A\(+N?'?(.*?)'?\)+\Z/m)
|
259
|
-
match_data ? match_data[1] : nil
|
265
|
+
match_data ? match_data[1].gsub("''", "'") : nil
|
260
266
|
end
|
261
267
|
ci[:null] = ci[:is_nullable].to_i == 1
|
262
268
|
ci.delete(:is_nullable)
|
@@ -408,8 +414,8 @@ module ActiveRecord
|
|
408
414
|
|
409
415
|
private
|
410
416
|
|
411
|
-
def create_table_definition(name, temporary, options)
|
412
|
-
TableDefinition.new native_database_types, name, temporary, options
|
417
|
+
def create_table_definition(name, temporary, options, as = nil)
|
418
|
+
TableDefinition.new native_database_types, name, temporary, options, as
|
413
419
|
end
|
414
420
|
end
|
415
421
|
end
|
@@ -37,7 +37,7 @@ module ActiveRecord
|
|
37
37
|
VERSION = File.read(File.expand_path('../../../../VERSION', __FILE__)).strip
|
38
38
|
ADAPTER_NAME = 'SQLServer'.freeze
|
39
39
|
DATABASE_VERSION_REGEXP = /Microsoft SQL Server\s+"?(\d{4}|\w+)"?/
|
40
|
-
SUPPORTED_VERSIONS = [2005, 2008, 2010, 2011, 2012
|
40
|
+
SUPPORTED_VERSIONS = [2005, 2008, 2010, 2011, 2012]
|
41
41
|
|
42
42
|
attr_reader :database_version, :database_year, :spid, :product_level, :product_version, :edition
|
43
43
|
|
@@ -65,9 +65,7 @@ module ActiveRecord
|
|
65
65
|
if @database_version =~ /Azure/i
|
66
66
|
@sqlserver_azure = true
|
67
67
|
@database_version.match(/\s-\s([0-9.]+)/)[1]
|
68
|
-
year =
|
69
|
-
elsif @database_version =~ /vNext/i
|
70
|
-
year = 2016
|
68
|
+
year = 2012
|
71
69
|
else
|
72
70
|
year = DATABASE_VERSION_REGEXP.match(@database_version)[1]
|
73
71
|
year == 'Denali' ? 2011 : year.to_i
|
@@ -231,7 +229,7 @@ module ActiveRecord
|
|
231
229
|
end
|
232
230
|
|
233
231
|
def native_text_database_type
|
234
|
-
@@native_text_database_type ||
|
232
|
+
@@native_text_database_type || enable_default_unicode_types ? 'nvarchar(max)' : 'varchar(max)'
|
235
233
|
end
|
236
234
|
|
237
235
|
def native_time_database_type
|
@@ -300,26 +298,26 @@ module ActiveRecord
|
|
300
298
|
encoding: encoding(config),
|
301
299
|
azure: config[:azure]
|
302
300
|
).tap do |client|
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
301
|
+
if config[:azure]
|
302
|
+
client.execute('SET ANSI_NULLS ON').do
|
303
|
+
client.execute('SET CURSOR_CLOSE_ON_COMMIT OFF').do
|
304
|
+
client.execute('SET ANSI_NULL_DFLT_ON ON').do
|
305
|
+
client.execute('SET IMPLICIT_TRANSACTIONS OFF').do
|
306
|
+
client.execute('SET ANSI_PADDING ON').do
|
307
|
+
client.execute('SET QUOTED_IDENTIFIER ON')
|
308
|
+
client.execute('SET ANSI_WARNINGS ON').do
|
309
|
+
else
|
310
|
+
client.execute('SET ANSI_DEFAULTS ON').do
|
311
|
+
client.execute('SET CURSOR_CLOSE_ON_COMMIT OFF').do
|
312
|
+
client.execute('SET IMPLICIT_TRANSACTIONS OFF').do
|
313
|
+
end
|
316
314
|
client.execute('SET TEXTSIZE 2147483647').do
|
317
315
|
client.execute('SET CONCAT_NULL_YIELDS_NULL ON').do
|
318
316
|
end
|
319
317
|
end
|
320
318
|
|
321
319
|
def appname(config)
|
322
|
-
|
320
|
+
config[:appname] || configure_application_name || Rails.application.class.name.split('::').first rescue nil
|
323
321
|
end
|
324
322
|
|
325
323
|
def login_timeout(config)
|
metadata
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-sqlserver-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken Collins
|
8
8
|
- Anna Carey
|
9
|
+
- Will Bond
|
9
10
|
- Murray Steele
|
10
11
|
- Shawn Balestracci
|
11
12
|
- Joe Rafaniello
|
@@ -13,7 +14,7 @@ authors:
|
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
|
-
date:
|
17
|
+
date: 2014-05-23 00:00:00.000000000 Z
|
17
18
|
dependencies:
|
18
19
|
- !ruby/object:Gem::Dependency
|
19
20
|
name: activerecord
|
@@ -21,28 +22,28 @@ dependencies:
|
|
21
22
|
requirements:
|
22
23
|
- - "~>"
|
23
24
|
- !ruby/object:Gem::Version
|
24
|
-
version: 4.
|
25
|
+
version: 4.1.0
|
25
26
|
type: :runtime
|
26
27
|
prerelease: false
|
27
28
|
version_requirements: !ruby/object:Gem::Requirement
|
28
29
|
requirements:
|
29
30
|
- - "~>"
|
30
31
|
- !ruby/object:Gem::Version
|
31
|
-
version: 4.
|
32
|
+
version: 4.1.0
|
32
33
|
- !ruby/object:Gem::Dependency
|
33
34
|
name: arel
|
34
35
|
requirement: !ruby/object:Gem::Requirement
|
35
36
|
requirements:
|
36
|
-
- - "
|
37
|
+
- - ">="
|
37
38
|
- !ruby/object:Gem::Version
|
38
|
-
version:
|
39
|
+
version: '0'
|
39
40
|
type: :runtime
|
40
41
|
prerelease: false
|
41
42
|
version_requirements: !ruby/object:Gem::Requirement
|
42
43
|
requirements:
|
43
|
-
- - "
|
44
|
+
- - ">="
|
44
45
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
+
version: '0'
|
46
47
|
description: ActiveRecord SQL Server Adapter. For SQL Server 2005 And Higher.
|
47
48
|
email: ken@metaskills.net
|
48
49
|
executables: []
|
@@ -97,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
98
|
version: '0'
|
98
99
|
requirements: []
|
99
100
|
rubyforge_project: activerecord-sqlserver-adapter
|
100
|
-
rubygems_version: 2.
|
101
|
+
rubygems_version: 2.2.2
|
101
102
|
signing_key:
|
102
103
|
specification_version: 4
|
103
104
|
summary: ActiveRecord SQL Server Adapter. For SQL Server 2005 And Higher.
|