Skip to content

Commit ca08bcb

Browse files
committed
since arel visitor instances might get re-used we need to avoid the @instance variable
1 parent 06464ec commit ca08bcb

File tree

1 file changed

+11
-6
lines changed
  • lib/arel/visitors/sql_server

1 file changed

+11
-6
lines changed

lib/arel/visitors/sql_server/ng42.rb

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def visit_Arel_Nodes_Limit o, collector
5858
def visit_Arel_Nodes_SelectStatement o, collector
5959
distinct_One_As_One_Is_So_Not_Fetch o
6060

61-
@select_statement = o
61+
set_select_statement_lock o.lock
6262

6363
if o.with
6464
collector = visit o.with, collector
@@ -106,7 +106,7 @@ def visit_Arel_Nodes_SelectStatement o, collector
106106
end
107107

108108
ensure
109-
@select_statement = nil
109+
set_select_statement_lock nil
110110
end
111111

112112
def visit_Arel_Nodes_JoinSource o, collector
@@ -132,8 +132,8 @@ def visit_Arel_Nodes_OuterJoin o, collector
132132
# SQLServer ToSql/Visitor (Additions)
133133

134134
def visit_Arel_Nodes_SelectStatement_SQLServer_Lock collector, options = {}
135-
if select_statement_lock?
136-
collector = visit @select_statement.lock, collector
135+
if lock = select_statement_lock
136+
collector = visit lock, collector
137137
collector << SPACE if options[:space]
138138
end
139139
collector
@@ -162,8 +162,13 @@ def visit_Make_Fetch_Happen o, collector
162162

163163
# SQLServer Helpers
164164

165-
def select_statement_lock?
166-
@select_statement && @select_statement.lock # AVOID INSTANCE var
165+
# attr_reader :select_statement_lock
166+
def select_statement_lock
167+
Thread.current[:'Arel::Visitors::SQLServerNG.select_statement_lock']
168+
end
169+
170+
def set_select_statement_lock(lock) # @select_statement_lock = lock
171+
Thread.current[:'Arel::Visitors::SQLServerNG.select_statement_lock'] = lock
167172
end
168173

169174
def make_Fetch_Possible_And_Deterministic o

0 commit comments

Comments
 (0)