24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/prioritize.rb', line 24
def priority_after before_id, moved_id
connection.exec_query(
<<-SQL,
UPDATE #{table_name} o
SET #{priority_column} = ordered.rn
FROM (
SELECT *, ROW_NUMBER() OVER() AS rn
FROM (
(
SELECT o.*
FROM #{table_name} o
LEFT JOIN #{table_name} ai ON ai.id = $1
WHERE
(o.#{priority_column} < ai.#{priority_column} OR ai.#{priority_column} IS NULL) AND
o.id <> $2
ORDER BY o.#{priority_column} ASC
)
UNION ALL
(
SELECT o.*
FROM #{table_name} o
WHERE o.id = $2
)
UNION ALL
(
SELECT o.*
FROM #{table_name} o
LEFT JOIN #{table_name} ai ON ai.id = $1
WHERE
o.#{priority_column} >= ai.#{priority_column} AND
o.id <> $2
ORDER BY o.#{priority_column} ASC
)
) numbered
) ordered
WHERE o.id = ordered.id
SQL
'priority_after',
[[nil,before_id], [nil,moved_id]]
)
end
|