Patch #28940 » match_adapters.patch
database.rb (working copy) | ||
---|---|---|
21 | 21 |
class << self |
22 | 22 |
# Returns true if the database is PostgreSQL |
23 | 23 |
def postgresql? |
24 |
(ActiveRecord::Base.connection.adapter_name =~ /postgresql/i).present?
|
|
24 |
/postgresql/i.match?(ActiveRecord::Base.connection.connection.adapter_name)
|
|
25 | 25 |
end |
26 | 26 | |
27 | 27 |
# Returns the PostgreSQL version or nil if another DBMS is used |
... | ... | |
46 | 46 | |
47 | 47 |
# Returns true if the database is MySQL |
48 | 48 |
def mysql? |
49 |
(ActiveRecord::Base.connection.adapter_name =~ /mysql/i).present?
|
|
49 |
/mysql/i.match?(ActiveRecord::Base.connection.connection.adapter_name)
|
|
50 | 50 |
end |
51 | 51 | |
52 | 52 |
# Returns a SQL statement for case/accent (if possible) insensitive match |
nested_set/issue_nested_set.rb (working copy) | ||
---|---|---|
84 | 84 |
if parent |
85 | 85 |
previous_root_id = root_id |
86 | 86 |
self.root_id = parent.root_id |
87 |
|
|
87 | ||
88 | 88 |
lft_after_move = target_lft |
89 | 89 |
self.class.where(:root_id => parent.root_id).update_all([ |
90 | 90 |
"lft = CASE WHEN lft >= :lft THEN lft + :shift ELSE lft END, " + |
91 | 91 |
"rgt = CASE WHEN rgt >= :lft THEN rgt + :shift ELSE rgt END", |
92 | 92 |
{:lft => lft_after_move, :shift => (rgt - lft + 1)} |
93 | 93 |
]) |
94 |
|
|
94 | ||
95 | 95 |
self.class.where(:root_id => previous_root_id).update_all([ |
96 | 96 |
"root_id = :root_id, lft = lft + :shift, rgt = rgt + :shift", |
97 | 97 |
{:root_id => parent.root_id, :shift => lft_after_move - lft} |
98 | 98 |
]) |
99 |
|
|
99 | ||
100 | 100 |
self.lft, self.rgt = lft_after_move, (rgt - lft + lft_after_move) |
101 | 101 |
parent.send :reload_nested_set_values |
102 | 102 |
end |
... | ... | |
105 | 105 |
def remove_from_nested_set |
106 | 106 |
self.class.where(:root_id => root_id).where("lft >= ? AND rgt <= ?", lft, rgt). |
107 | 107 |
update_all(["root_id = :id, lft = lft - :shift, rgt = rgt - :shift", {:id => id, :shift => lft - 1}]) |
108 |
|
|
108 | ||
109 | 109 |
self.class.where(:root_id => root_id).update_all([ |
110 | 110 |
"lft = CASE WHEN lft >= :lft THEN lft - :shift ELSE lft END, " + |
111 | 111 |
"rgt = CASE WHEN rgt >= :lft THEN rgt - :shift ELSE rgt END", |
... | ... | |
149 | 149 |
end |
150 | 150 | |
151 | 151 |
def lock_nested_set |
152 |
if self.class.connection.adapter_name =~ /sqlserver/i
|
|
152 |
if /sqlserver/i.match?(self.class.connection.adapter_name)
|
|
153 | 153 |
lock = "WITH (ROWLOCK HOLDLOCK UPDLOCK)" |
154 | 154 |
# Custom lock for SQLServer |
155 | 155 |
# This can be problematic if root_id or parent root_id changes |
nested_set/project_nested_set.rb (working copy) | ||
---|---|---|
119 | 119 | |
120 | 120 |
def lock_nested_set |
121 | 121 |
lock = true |
122 |
if self.class.connection.adapter_name =~ /sqlserver/i
|
|
122 |
if /sqlserver/i.match?(self.class.connection.adapter_name)
|
|
123 | 123 |
lock = "WITH (ROWLOCK HOLDLOCK UPDLOCK)" |
124 | 124 |
end |
125 | 125 |
self.class.order(:id).lock(lock).ids |