activerecord-sqlserver-adapter 3.1.0.rc5 → 3.1.0.rc6
Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
|
2
2
|
* 3.1.0 *
|
3
3
|
|
4
|
+
* Make auto reconnect duration configurable. Fixes #109 [David Chelimsky]
|
5
|
+
|
4
6
|
* Quote most time objects to use ISO8601 format to be multi-language dateformat compatible. The [datetime] data type is
|
5
7
|
automatically limited to milliseconds while [time] & [datetimeoffset] have full support. Even included a Date/Time
|
6
8
|
ActiveSupport formatter that is used per the language settings of the connection.
|
@@ -38,7 +38,7 @@ module ActiveRecord
|
|
38
38
|
|
39
39
|
def quote_column_name(name)
|
40
40
|
@sqlserver_quoted_column_and_table_names[name] ||=
|
41
|
-
name.to_s.split('.').map{ |n| n =~ /^\[.*\]$/ ? n : "[#{n}]" }.join('.')
|
41
|
+
name.to_s.split('.').map{ |n| n =~ /^\[.*\]$/ ? n : "[#{n.to_s.gsub(']', ']]')}]" }.join('.')
|
42
42
|
end
|
43
43
|
|
44
44
|
def quote_table_name(name)
|
@@ -159,7 +159,7 @@ module ActiveRecord
|
|
159
159
|
include Sqlserver::Errors
|
160
160
|
|
161
161
|
ADAPTER_NAME = 'SQLServer'.freeze
|
162
|
-
VERSION = '3.1.0.
|
162
|
+
VERSION = '3.1.0.rc6'.freeze
|
163
163
|
DATABASE_VERSION_REGEXP = /Microsoft SQL Server\s+"?(\d{4}|\w+)"?/
|
164
164
|
SUPPORTED_VERSIONS = [2005,2008,2010,2011].freeze
|
165
165
|
|
@@ -167,10 +167,17 @@ module ActiveRecord
|
|
167
167
|
|
168
168
|
cattr_accessor :native_text_database_type, :native_binary_database_type, :native_string_database_type,
|
169
169
|
:log_info_schema_queries, :enable_default_unicode_types, :auto_connect,
|
170
|
-
:cs_equality_operator, :lowercase_schema_reflection
|
170
|
+
:cs_equality_operator, :lowercase_schema_reflection, :auto_connect_duration
|
171
171
|
|
172
172
|
self.enable_default_unicode_types = true
|
173
173
|
|
174
|
+
class << self
|
175
|
+
|
176
|
+
def visitor_for(pool)
|
177
|
+
Arel::Visitors::SQLServer.new(pool)
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
174
181
|
|
175
182
|
def initialize(logger,config)
|
176
183
|
@connection_options = config
|
@@ -310,6 +317,10 @@ module ActiveRecord
|
|
310
317
|
@@auto_connect.is_a?(FalseClass) ? false : true
|
311
318
|
end
|
312
319
|
|
320
|
+
def auto_connect_duration
|
321
|
+
@@auto_connect_duration ||= 10
|
322
|
+
end
|
323
|
+
|
313
324
|
def native_string_database_type
|
314
325
|
@@native_string_database_type || (enable_default_unicode_types ? 'nvarchar' : 'varchar')
|
315
326
|
end
|
@@ -443,7 +454,7 @@ module ActiveRecord
|
|
443
454
|
return false unless auto_connect
|
444
455
|
@auto_connecting = true
|
445
456
|
count = 0
|
446
|
-
while count <=
|
457
|
+
while count <= (auto_connect_duration / 2)
|
447
458
|
sleep 2** count
|
448
459
|
ActiveRecord::Base.did_retry_sqlserver_connection(self,count)
|
449
460
|
return true if reconnect!
|
@@ -21,14 +21,16 @@ module Arel
|
|
21
21
|
end
|
22
22
|
|
23
23
|
class SelectManager < Arel::TreeManager
|
24
|
-
|
24
|
+
|
25
|
+
AR_CA_SQLSA_NAME = 'ActiveRecord::ConnectionAdapters::SQLServerAdapter'.freeze
|
26
|
+
|
25
27
|
# Getting real Ordering objects is very important for us. We need to be able to call #uniq on
|
26
28
|
# a colleciton of them reliably as well as using their true object attributes to mutate them
|
27
29
|
# to grouping objects for the inner sql during a select statment with an offset/rownumber. So this
|
28
30
|
# is here till ActiveRecord & ARel does this for us instead of using SqlLiteral objects.
|
29
31
|
alias :order_without_sqlserver :order
|
30
32
|
def order(*expr)
|
31
|
-
return order_without_sqlserver(*expr) unless
|
33
|
+
return order_without_sqlserver(*expr) unless engine_activerecord_sqlserver_adapter?
|
32
34
|
@ast.orders.concat(expr.map{ |x|
|
33
35
|
case x
|
34
36
|
when Arel::Attributes::Attribute
|
@@ -55,7 +57,7 @@ module Arel
|
|
55
57
|
# custom string hints down. See the visit_Arel_Nodes_LockWithSQLServer delegation method.
|
56
58
|
alias :lock_without_sqlserver :lock
|
57
59
|
def lock(locking=true)
|
58
|
-
if
|
60
|
+
if engine_activerecord_sqlserver_adapter?
|
59
61
|
case locking
|
60
62
|
when true
|
61
63
|
locking = Arel.sql('WITH(HOLDLOCK, ROWLOCK)')
|
@@ -69,7 +71,13 @@ module Arel
|
|
69
71
|
lock_without_sqlserver(locking)
|
70
72
|
end
|
71
73
|
end
|
72
|
-
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def engine_activerecord_sqlserver_adapter?
|
78
|
+
@engine.connection && @engine.connection.class.name == AR_CA_SQLSA_NAME
|
79
|
+
end
|
80
|
+
|
73
81
|
end
|
74
82
|
|
75
83
|
module Visitors
|
@@ -117,7 +125,7 @@ module Arel
|
|
117
125
|
end
|
118
126
|
|
119
127
|
def visit_Arel_Nodes_Bin(o)
|
120
|
-
"#{visit o.expr} #{@
|
128
|
+
"#{visit o.expr} #{@connection.cs_equality_operator}"
|
121
129
|
end
|
122
130
|
|
123
131
|
# SQLServer ToSql/Visitor (Additions)
|
@@ -189,7 +197,7 @@ module Arel
|
|
189
197
|
|
190
198
|
def source_with_lock_for_select_statement(o)
|
191
199
|
core = o.cores.first
|
192
|
-
source = visit(core.source).strip if core.source
|
200
|
+
source = "FROM #{visit(core.source).strip}" if core.source
|
193
201
|
if source && o.lock
|
194
202
|
lock = visit o.lock
|
195
203
|
index = source.match(/FROM [\w\[\]\.]+/)[0].length
|
@@ -272,6 +280,14 @@ module Arel
|
|
272
280
|
o.limit &&
|
273
281
|
!join_in_select_statement?(o)
|
274
282
|
end
|
283
|
+
|
284
|
+
def select_primary_key_sql?(o)
|
285
|
+
core = o.cores.first
|
286
|
+
return false if core.projections.size != 1
|
287
|
+
p = core.projections.first
|
288
|
+
t = table_from_select_statement(o)
|
289
|
+
Arel::Attributes::Attribute === p && t.primary_key && t.primary_key.name == p.name
|
290
|
+
end
|
275
291
|
|
276
292
|
def find_and_fix_uncorrelated_joins_in_select_statement(o)
|
277
293
|
core = o.cores.first
|
@@ -315,6 +331,8 @@ module Arel
|
|
315
331
|
end
|
316
332
|
elsif function_select_statement?(o)
|
317
333
|
[Arel.star]
|
334
|
+
elsif select_primary_key_sql?(o)
|
335
|
+
[Arel.sql("[__rnt].#{quote_column_name(core.projections.first.name)}")]
|
318
336
|
else
|
319
337
|
core.projections.map do |x|
|
320
338
|
if x.respond_to?(:relation)
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-sqlserver-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15424105
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 1
|
9
9
|
- 0
|
10
10
|
- rc
|
11
|
-
-
|
12
|
-
version: 3.1.0.
|
11
|
+
- 6
|
12
|
+
version: 3.1.0.rc6
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Ken Collins
|
@@ -21,7 +21,7 @@ autorequire:
|
|
21
21
|
bindir: bin
|
22
22
|
cert_chain: []
|
23
23
|
|
24
|
-
date: 2011-
|
24
|
+
date: 2011-08-17 00:00:00 -04:00
|
25
25
|
default_executable:
|
26
26
|
dependencies:
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -32,14 +32,14 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
hash:
|
35
|
+
hash: 15424105
|
36
36
|
segments:
|
37
37
|
- 3
|
38
38
|
- 1
|
39
39
|
- 0
|
40
40
|
- rc
|
41
|
-
-
|
42
|
-
version: 3.1.0.
|
41
|
+
- 6
|
42
|
+
version: 3.1.0.rc6
|
43
43
|
type: :runtime
|
44
44
|
version_requirements: *id001
|
45
45
|
description: SQL Server 2005 and 2008 Adapter For ActiveRecord
|