forked from fixin.me/fixin.me
Re-format query
This commit is contained in:
parent
23e2f6a062
commit
c7f16514d2
@ -13,38 +13,32 @@ class Quantity < ApplicationRecord
|
|||||||
scope :defaults, ->{ where(user: nil) }
|
scope :defaults, ->{ where(user: nil) }
|
||||||
scope :ordered, ->{
|
scope :ordered, ->{
|
||||||
numbered = Arel::Table.new('numbered')
|
numbered = Arel::Table.new('numbered')
|
||||||
Quantity.with(numbered: numbered(:parent_id, :name)).with_recursive(
|
Quantity.with(numbered: numbered(:parent_id, :name)).with_recursive(quantities: [
|
||||||
quantities:
|
Arel::SelectManager.new.project(
|
||||||
[
|
numbered[Arel.star],
|
||||||
Arel::SelectManager.new.project(
|
numbered.cast(numbered[:child_number], 'BINARY').as('path'),
|
||||||
numbered[Arel.star],
|
Arel::Nodes.build_quoted(0).as('depth')
|
||||||
numbered.cast(numbered[:child_number], 'BINARY').as('path'),
|
).from(numbered).where(numbered[:parent_id].eq(nil)),
|
||||||
Arel::Nodes.build_quoted(0).as('depth')
|
Arel::SelectManager.new.project(
|
||||||
).from(numbered).where(numbered[:parent_id].eq(nil)),
|
numbered[Arel.star],
|
||||||
Arel::SelectManager.new.project(
|
arel_table[:path].concat(numbered[:child_number]),
|
||||||
numbered[Arel.star],
|
arel_table[:depth] + 1
|
||||||
arel_table[:path].concat(numbered[:child_number]),
|
).from(numbered).join(arel_table).on(numbered[:parent_id].eq(arel_table[:id]))
|
||||||
arel_table[:depth] + 1
|
]).select(arel_table[Arel.star]).from(arel_table).order(arel_table[:path])
|
||||||
).from(numbered).join(arel_table).on(numbered[:parent_id].eq(arel_table[:id]))
|
|
||||||
]
|
|
||||||
).select(arel_table[Arel.star]).from(arel_table).order(arel_table[:path])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# TODO: extract named functions to custom Arel extension
|
||||||
|
# https://gist.github.com/ProGM/c6df08da14708dcc28b5ca325df37ceb#extending-arel
|
||||||
scope :numbered, ->(parent_column, order_column){
|
scope :numbered, ->(parent_column, order_column){
|
||||||
select(
|
select(
|
||||||
arel_table[Arel.star],
|
arel_table[Arel.star],
|
||||||
Arel::Nodes::NamedFunction.new(
|
Arel::Nodes::NamedFunction.new(
|
||||||
'LPAD',
|
'LPAD',
|
||||||
[
|
[
|
||||||
Arel::Nodes::NamedFunction.new(
|
Arel::Nodes::NamedFunction.new('ROW_NUMBER', [])
|
||||||
'ROW_NUMBER', []
|
.over(Arel::Nodes::Window.new.partition(parent_column).order(order_column)),
|
||||||
).over(
|
|
||||||
Arel::Nodes::Window.new.partition(parent_column).order(order_column)
|
|
||||||
),
|
|
||||||
Arel::SelectManager.new.project(
|
Arel::SelectManager.new.project(
|
||||||
Arel::Nodes::NamedFunction.new(
|
Arel::Nodes::NamedFunction.new('LENGTH', [Arel.star.count])])
|
||||||
'LENGTH', [Arel::Nodes::NamedFunction.new('COUNT', [Arel.star])]
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
Arel::Nodes.build_quoted('0')
|
Arel::Nodes.build_quoted('0')
|
||||||
],
|
],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user