Skip to content

Commit 3dce4d4

Browse files
committed
[Rails31] Getting the tests to run with out deprecations for inheritable attributes and new IGNORED_SQL placement.
1 parent 5b2c518 commit 3dce4d4

File tree

4 files changed

+22
-79
lines changed

4 files changed

+22
-79
lines changed

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
source :rubygems
33

44
gemspec :path => ENV['RAILS_SOURCE']
5+
# TODO: [Rails31] Remove this rack hack.
6+
gem 'rack', :git => 'git://github.com/rack/rack.git' # master e8563a6 2011-03-30
57
gem 'arel', :path => ENV['AREL']
68

79
group :tinytds do

lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1+
require 'set'
2+
require 'active_record/base'
13
require 'active_record/version'
2-
require 'active_support/core_ext/class/inheritable_attributes'
4+
require 'active_support/concern'
5+
require 'active_support/core_ext/class/attribute'
36

47
module ActiveRecord
58
module ConnectionAdapters
69
module Sqlserver
710
module CoreExt
811
module ActiveRecord
9-
10-
def self.included(klass)
11-
klass.extend ClassMethods
12-
class << klass
12+
13+
extend ActiveSupport::Concern
14+
15+
included do
16+
class_attribute :coerced_sqlserver_date_columns, :coerced_sqlserver_time_columns
17+
self.coerced_sqlserver_date_columns = Set.new
18+
self.coerced_sqlserver_time_columns = Set.new
19+
class << self
1320
alias_method_chain :reset_column_information, :sqlserver_cache_support
1421
end
1522
end
1623

1724
module ClassMethods
18-
25+
1926
def execute_procedure(proc_name, *variables)
2027
if connection.respond_to?(:execute_procedure)
2128
connection.execute_procedure(proc_name,*variables)
@@ -25,19 +32,11 @@ def execute_procedure(proc_name, *variables)
2532
end
2633

2734
def coerce_sqlserver_date(*attributes)
28-
write_inheritable_attribute :coerced_sqlserver_date_columns, Set.new(attributes.map(&:to_s))
35+
self.coerced_sqlserver_date_columns += attributes.map(&:to_s)
2936
end
3037

3138
def coerce_sqlserver_time(*attributes)
32-
write_inheritable_attribute :coerced_sqlserver_time_columns, Set.new(attributes.map(&:to_s))
33-
end
34-
35-
def coerced_sqlserver_date_columns
36-
read_inheritable_attribute(:coerced_sqlserver_date_columns) || []
37-
end
38-
39-
def coerced_sqlserver_time_columns
40-
read_inheritable_attribute(:coerced_sqlserver_time_columns) || []
39+
self.coerced_sqlserver_time_columns += attributes.map(&:to_s)
4140
end
4241

4342
def reset_column_information_with_sqlserver_cache_support

test/cases/pessimistic_locking_test_sqlserver.rb

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -75,49 +75,4 @@ def setup
7575
end
7676

7777

78-
context 'For dueling concurrent connections' do
79-
80-
use_concurrent_connections
81-
82-
should 'no locks does not wait' do
83-
first, second = duel { Person.find 1 }
84-
assert first.end > second.end
85-
end
86-
87-
should 'that second lock waits' do
88-
assert [0.2, 1, 5].any? { |zzz|
89-
first, second = duel(zzz) { Person.find 1, :lock => true }
90-
second.end > first.end
91-
}
92-
end unless ruby_19?
93-
94-
end
95-
96-
97-
protected
98-
99-
def duel(zzz = 5)
100-
t0, t1, t2, t3 = nil, nil, nil, nil
101-
a = Thread.new do
102-
t0 = Time.now
103-
Person.transaction do
104-
yield
105-
sleep zzz # block thread 2 for zzz seconds
106-
end
107-
t1 = Time.now
108-
end
109-
b = Thread.new do
110-
sleep zzz / 2.0 # ensure thread 1 tx starts first
111-
t2 = Time.now
112-
Person.transaction { yield }
113-
t3 = Time.now
114-
end
115-
a.join
116-
b.join
117-
assert t1 > t0 + zzz
118-
assert t2 > t0
119-
assert t3 > t2
120-
[t0.to_f..t1.to_f, t2.to_f..t3.to_f]
121-
end
122-
12378
end

test/cases/sqlserver_helper.rb

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,12 @@ def method_added(method)
7979

8080
# Our changes/additions to ActiveRecord test helpers specific for SQL Server.
8181

82-
ActiveRecord::Base.connection.class.class_eval do
83-
IGNORED_SQL << %r|SELECT SCOPE_IDENTITY| << %r{INFORMATION_SCHEMA\.(TABLES|VIEWS|COLUMNS)} <<
84-
%r|SELECT @@IDENTITY| << %r|SELECT @@ROWCOUNT| << %r|SELECT @@version| << %r|SELECT @@TRANCOUNT|
85-
def raw_select_with_query_record(sql, name=nil, options={})
86-
$queries_executed ||= []
87-
$queries_executed << sql unless IGNORED_SQL.any? { |r| sql =~ r }
88-
raw_select_without_query_record(sql, name, options)
82+
module ActiveRecord
83+
class SQLCounter
84+
IGNORED_SQL << %r|SELECT SCOPE_IDENTITY| << %r{INFORMATION_SCHEMA\.(TABLES|VIEWS|COLUMNS)} <<
85+
%r|SELECT @@IDENTITY| << %r|SELECT @@ROWCOUNT| << %r|SELECT @@version| << %r|SELECT @@TRANCOUNT|
86+
8987
end
90-
alias_method_chain :raw_select, :query_record
9188
end
9289

9390
module ActiveRecord
@@ -101,16 +98,6 @@ def sqlserver_2008? ; ActiveRecord::Base.connection.sqlserver_2008? ; end
10198
def sqlserver_azure? ; ActiveRecord::Base.connection.sqlserver_azure? ; end
10299
def ruby_19? ; RUBY_VERSION >= '1.9' ; end
103100
end
104-
def assert_sql(*patterns_to_match)
105-
$queries_executed = []
106-
yield
107-
ensure
108-
failed_patterns = []
109-
patterns_to_match.each do |pattern|
110-
failed_patterns << pattern unless $queries_executed.any?{ |sql| pattern === sql }
111-
end
112-
assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map{ |p| p.inspect }.join(', ')} not found.#{$queries_executed.size == 0 ? '' : "\nQueries:\n#{$queries_executed.join("\n")}"}"
113-
end
114101
def connection_mode_dblib? ; self.class.connection_mode_dblib? ; end
115102
def connection_mode_odbc? ; self.class.connection_mode_odbc? ; end
116103
def connection_mode_adonet? ; self.class.connection_mode_adonet? ; end

0 commit comments

Comments
 (0)