simple_nested_set 0.0.30 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
@@ -62,19 +62,49 @@ module SimpleNestedSet
|
|
62
62
|
|
63
63
|
case db_adapter
|
64
64
|
when :mysql, :mysql2
|
65
|
-
sql <<
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
65
|
+
sql << <<-sql if node.has_attribute?(:level)
|
66
|
+
`level` = (
|
67
|
+
SELECT tmp.lev
|
68
|
+
FROM (
|
69
|
+
SELECT n0.id, count(*) AS lev
|
70
|
+
FROM #{arel_table.name} AS n0
|
71
|
+
CROSS JOIN #{arel_table.name} AS n1
|
72
|
+
WHERE n1.lft < n0.lft AND n1.rgt > n0.rgt
|
73
|
+
GROUP BY n0.id
|
74
|
+
) AS tmp
|
75
|
+
WHERE ( #{arel_table.name}.id = tmp.id )
|
76
|
+
)
|
77
|
+
sql
|
78
|
+
|
79
|
+
scoping = [
|
80
|
+
'n1.lft <= n0.lft AND n1.rgt >= n0.rgt',
|
81
|
+
where_clauses.map { |clause| clause.gsub(arel_table.name, 'n1') }
|
82
|
+
].flatten.compact.join(' AND ')
|
83
|
+
|
84
|
+
sql << <<-sql if node.has_attribute?(:path)
|
85
|
+
`path` = (
|
86
|
+
SELECT tmp.pat
|
87
|
+
FROM (
|
88
|
+
SELECT n0.id, #{group_concat(db_adapter, "n1`.`slug" )} AS pat
|
89
|
+
FROM #{arel_table.name} AS n0
|
90
|
+
CROSS JOIN #{arel_table.name} AS n1
|
91
|
+
WHERE #{scoping}
|
92
|
+
GROUP BY n0.id
|
93
|
+
) AS tmp
|
94
|
+
WHERE ( #{arel_table.name}.id = tmp.id )
|
95
|
+
)
|
96
|
+
sql
|
72
97
|
else
|
73
98
|
sql << denormalize_level_query if node.has_attribute?(:level)
|
74
99
|
sql << denormalize_path_query if node.has_attribute?(:path)
|
75
100
|
end
|
76
101
|
|
77
102
|
update_all(sql.join(',')) unless sql.blank?
|
103
|
+
|
104
|
+
if [:mysql, :mysql2].include?(db_adapter)
|
105
|
+
update_all("`level` = 0", "`level` IS NULL")
|
106
|
+
update_all("`path` = `slug`", "`path` IS NULL")
|
107
|
+
end
|
78
108
|
end
|
79
109
|
|
80
110
|
# Returns true if the node has the same scope as the given node
|
@@ -167,27 +197,27 @@ module SimpleNestedSet
|
|
167
197
|
"path = (#{query.join(' AND ')})"
|
168
198
|
end
|
169
199
|
|
170
|
-
def denormalize_query_mysql(field)
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
end
|
200
|
+
# def denormalize_query_mysql(field)
|
201
|
+
# synonym = field.to_s.reverse.to_sym
|
202
|
+
# aliaz = arel_table.as("table_#{synonym}")
|
203
|
+
#
|
204
|
+
# field_sql = yield aliaz
|
205
|
+
#
|
206
|
+
# query = [
|
207
|
+
# aliaz.project("#{field_sql} AS field_#{synonym}", aliaz[:lft], aliaz[:rgt]).to_sql,
|
208
|
+
# ' WHERE ',
|
209
|
+
# where_clauses.map { |clause| clause.gsub(arel_table.name, aliaz.table_alias.to_s) }.join(' AND ')
|
210
|
+
# ].join
|
211
|
+
#
|
212
|
+
# <<-sql
|
213
|
+
# #{field} = (
|
214
|
+
# SELECT #{aliaz.table_alias.to_s}.field_#{synonym}
|
215
|
+
# FROM (#{query}) AS #{aliaz.table_alias.to_s}
|
216
|
+
# WHERE #{aliaz[:lft].lt(arel_table[:lft]).to_sql}
|
217
|
+
# AND #{aliaz[:rgt].gt(arel_table[:rgt]).to_sql}
|
218
|
+
# )
|
219
|
+
# sql
|
220
|
+
# end
|
191
221
|
|
192
222
|
def db_adapter
|
193
223
|
node.class.connection.instance_variable_get('@config')[:adapter].to_sym
|
@@ -7,7 +7,7 @@ module SimpleNestedSet
|
|
7
7
|
when :sqlite, :sqlite3
|
8
8
|
"GROUP_CONCAT(#{field}, '#{separator}')"
|
9
9
|
when :mysql, :mysql2
|
10
|
-
"GROUP_CONCAT(`#{field}
|
10
|
+
"GROUP_CONCAT(`#{field}` SEPARATOR '#{separator}')"
|
11
11
|
when :postgresql
|
12
12
|
"array_to_string(array_agg(\"#{field}\"), '#{separator}')"
|
13
13
|
else
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_nested_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.30
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sven Fuchs
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-03-09 00:00:00 +01:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|