simple_nested_set 0.0.30 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
|