1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/lib/arel/nodes.rb
Andrey Novikov a738295805
Arel: Add support for FILTER clause (SQL:2003)
Currently supported by PostgreSQL 9.4+ and SQLite 3.30+

See:

 - http://modern-sql.com/feature/filter
 - https://www.postgresql.org/docs/9.4/static/sql-expressions.html#SYNTAX-AGGREGATES
 - https://sqlite.org/lang_aggfunc.html#aggfilter

Example:

    Model.all.pluck(
      Arel.star.count.as('records_total').to_sql,
      Arel.star.count.filter(Model.arel_table[:some_column].not_eq(nil)).as('records_filtered').to_sql,
    )
2021-07-20 15:17:04 +03:00

71 lines
1.7 KiB
Ruby

# frozen_string_literal: true
# node
require "arel/nodes/node"
require "arel/nodes/node_expression"
require "arel/nodes/select_statement"
require "arel/nodes/select_core"
require "arel/nodes/insert_statement"
require "arel/nodes/update_statement"
require "arel/nodes/bind_param"
# terminal
require "arel/nodes/terminal"
require "arel/nodes/true"
require "arel/nodes/false"
# unary
require "arel/nodes/unary"
require "arel/nodes/grouping"
require "arel/nodes/homogeneous_in"
require "arel/nodes/ordering"
require "arel/nodes/ascending"
require "arel/nodes/descending"
require "arel/nodes/unqualified_column"
require "arel/nodes/with"
# binary
require "arel/nodes/binary"
require "arel/nodes/equality"
require "arel/nodes/filter"
require "arel/nodes/in"
require "arel/nodes/join_source"
require "arel/nodes/delete_statement"
require "arel/nodes/table_alias"
require "arel/nodes/infix_operation"
require "arel/nodes/unary_operation"
require "arel/nodes/over"
require "arel/nodes/matches"
require "arel/nodes/regexp"
# nary
require "arel/nodes/and"
# function
# FIXME: Function + Alias can be rewritten as a Function and Alias node.
# We should make Function a Unary node and deprecate the use of "aliaz"
require "arel/nodes/function"
require "arel/nodes/count"
require "arel/nodes/extract"
require "arel/nodes/values_list"
require "arel/nodes/named_function"
# windows
require "arel/nodes/window"
# conditional expressions
require "arel/nodes/case"
# joins
require "arel/nodes/full_outer_join"
require "arel/nodes/inner_join"
require "arel/nodes/outer_join"
require "arel/nodes/right_outer_join"
require "arel/nodes/string_join"
require "arel/nodes/comment"
require "arel/nodes/sql_literal"
require "arel/nodes/casted"