class Lustra::Reflection::Column::Collection

Overview

:doc: Lustra::Model::Collection

This is the object managing a SELECT request. A new collection is created by calling Lustra::Model.query

Collections are mutable: query-refinement methods such as where, select, order_by, limit, and offset mutate the collection. Terminal helpers such as first, last, empty?, pluck, and finder methods should not mutate it. You may want to copy the collection by calling dup.

See Lustra::Model::CollectionBase

Defined in:

lustra/model/reflection/column.cr

Instance Method Summary

Instance methods inherited from class Lustra::Model::CollectionBase(Lustra::Reflection::Column)

<<(item : T) <<, [](range : Range(Number, Number), fetch_columns = false) : Array(T)
[](off, fetch_columns = false) : T
[]
, []?(off, fetch_columns = false) : T | Nil []?, add(item : T) add, any? any?, association_name : String | Nil association_name, association_name=(association_name : String | Nil) association_name=, autosave=(autosave : Bool) autosave=, autosave? : Bool autosave?, build(x : NamedTuple, &block : T -> Nil) : T
build(**tuple, & : T -> Nil) : T
build(x : NamedTuple) : T
build(**tuple) : T
build
, count(type : X.class = Int64) forall X count, create(x : NamedTuple, &block : T -> Nil) : T
create(**tuple, & : T -> Nil) : T
create(x : NamedTuple) : T
create(**tuple) : T
create
, create!(x : NamedTuple, &block : T -> Nil) : T
create!(**tuple, & : T -> Nil) : T
create!(x : NamedTuple) : T
create!(**tuple) : T
create!
, delete_all : self delete_all, destroy_all : self destroy_all, dup dup, each(fetch_columns = false, & : T -> ) : Nil each, each_with_cursor(batch = 1000, fetch_columns = false, &block : T -> ) each_with_cursor, empty? empty?, find(fetch_columns = false, &) : T | Nil
find(tuple : NamedTuple, fetch_columns = false) : T | Nil
find(ids : Array)
find(x)
find(**tuple) : T | Nil
find
, find!(fetch_columns = false, &) : T
find!(tuple : NamedTuple, fetch_columns = false) : T
find!(ids : Array)
find!(x)
find!(**tuple) : T
find!
, find_by(fetch_columns = false, &) : T | Nil
find_by(tuple : NamedTuple, fetch_columns = false) : T | Nil
find_by(**tuple) : T | Nil
find_by
, find_by!(fetch_columns = false, &) : T
find_by!(tuple : NamedTuple, fetch_columns = false) : T
find_by!(**tuple) : T
find_by!
, find_or_build(x : NamedTuple, &block : T -> Nil) : T
find_or_build(**tuple, & : T -> Nil) : T
find_or_build(x : NamedTuple) : T
find_or_build(**tuple) : T
find_or_build
, find_or_create(x : NamedTuple, &block : T -> Nil) : T
find_or_create(**tuple, & : T -> Nil) : T
find_or_create(x : NamedTuple) : T
find_or_create(**tuple) : T
find_or_create
, first(fetch_columns = false) : T | Nil first, first!(fetch_columns = false) : T first!, full_outer_join(association : Lustra::SQL::Symbolic, lateral = false) full_outer_join, ids : Array(Lustra::SQL::Any) ids, inner_join(association : Lustra::SQL::Symbolic, lateral = false) inner_join, item_class item_class, join(association : Lustra::SQL::Symbolic, type = :inner, lateral = false) join, last(fetch_columns = false) : T | Nil last, last!(fetch_columns = false) : T last!, left_join(association : Lustra::SQL::Symbolic, lateral = false) left_join, map(fetch_columns = false, &block : T -> X) : Array(X) forall X map, none none, parent_model : Lustra::Model | Nil parent_model, parent_model=(parent_model : Lustra::Model | Nil) parent_model=, right_join(association : Lustra::SQL::Symbolic, lateral = false) right_join, save!(item : T) save!, tags tags, to_a(fetch_columns = false) : Array(T) to_a, unlink(item : T) unlink, update_all(fields : NamedTuple) : Int64
update_all(fields : Hash(String, Lustra::SQL::Any)) : Int64
update_all(**fields) : Int64
update_all

Instance methods inherited from module Lustra::SQL::SelectBuilder

before_query(&block : -> Nil) before_query, columns : Array(SQL::Column) columns, default_wildcard_table default_wildcard_table, dup : self dup, havings : Array(Lustra::Expression::Node) havings, is_distinct? is_distinct?, joins : Array(SQL::Join) joins, limit : Int64 | Nil limit, lock : String | Nil lock, offset : Int64 | Nil offset, order_bys : Array(Lustra::SQL::Query::OrderBy::Record) order_bys, to_delete to_delete, to_sql : String to_sql, to_update to_update, total_entries : Int64 | Nil total_entries, total_entries=(total_entries : Int64 | Nil) total_entries=, wheres : Array(Lustra::Expression::Node) wheres

Constructor methods inherited from module Lustra::SQL::SelectBuilder

new(distinct_value = nil, cte = {} of String => Lustra::SQL::SelectBuilder | String, columns = [] of SQL::Column, froms = [] of SQL::From, joins = [] of SQL::Join, wheres = [] of Lustra::Expression::Node, havings = [] of Lustra::Expression::Node, windows = [] of ::Tuple(String, String), group_bys = [] of Symbolic, order_bys = [] of Lustra::SQL::Query::OrderBy::Record, limit = nil, offset = nil, lock = nil, before_query_triggers = [] of (-> Nil)) new

Instance methods inherited from module Lustra::SQL::Query::WithPagination

current_page : Int32 | Int64 current_page, first_page? first_page?, last_page? last_page?, next_page next_page, out_of_bounds? out_of_bounds?, paginate(page : Int32 = DEFAULT_PAGE, per_page : Int32 = DEFAULT_LIMIT) paginate, per_page : Int32 | Int64 per_page, previous_page previous_page, total_pages : Int32 | Int64 total_pages

Instance methods inherited from module Lustra::SQL::Query::Change

change! : self change!

Instance methods inherited from module Lustra::SQL::Query::Connection

connection_name : String connection_name, use_connection(connection_name : String) use_connection

Instance methods inherited from module Lustra::SQL::Query::Pluck

pluck(fields : Tuple(*T)) forall T
pluck(*fields) : Array
pluck(**fields : **T) forall T
pluck
, pluck_col(field : Lustra::SQL::Symbolic, type : T.class) : Array(T) forall T
pluck_col(field : Lustra::SQL::Symbolic) : Array(Lustra::SQL::Any)
pluck_col

Instance methods inherited from module Lustra::SQL::Query::Fetch

fetch(fetch_all = false, & : Hash(String, Lustra::SQL::Any) -> Nil) fetch, fetch_first fetch_first, fetch_first! fetch_first!, fetch_with_cursor(count = 1000, & : Hash(String, Lustra::SQL::Any) -> Nil) fetch_with_cursor, first first, first! first!, scalar(type : T.class) forall T scalar, to_a : Array(Hash(String, Lustra::SQL::Any)) to_a

Instance methods inherited from module Lustra::SQL::Query::Execute

execute(connection_name : String | Nil = nil) execute, execute_and_count(connection_name : String | Nil = nil) : Int64 execute_and_count, explain(connection_name : String | Nil = nil) : String explain, explain_analyze(connection_name : String | Nil = nil) : String explain_analyze

Instance methods inherited from module Lustra::SQL::Query::Lock

with_lock(str : String = "FOR UPDATE") with_lock

Instance methods inherited from module Lustra::SQL::Query::Window

clear_windows clear_windows, print_windows print_windows, window(name, value)
window(windows : NamedTuple)
window
, windows : Array(WindowDeclaration) windows

Instance methods inherited from module Lustra::SQL::Query::CTE

cte : Hash(String, CTEAuthorized) cte, with_cte(name, request : CTEAuthorized)
with_cte(tuple : NamedTuple)
with_cte

Instance methods inherited from module Lustra::SQL::Query::Aggregate

agg(field, x : X.class) forall X agg, avg(field, x : X.class) forall X avg, count(type : X.class = Int64) forall X count, exists? : Bool exists?, max(field, x : X.class) forall X max, min(field, x : X.class) forall X min, sum(field) : Float64 sum

Instance methods inherited from module Lustra::SQL::Query::OffsetLimit

clear_limit clear_limit, clear_offset clear_offset, limit(x : Int32 | Int64 | Nil) limit, offset(x : Int32 | Int64 | Nil) offset

Instance methods inherited from module Lustra::SQL::Query::GroupBy

clear_group_bys clear_group_bys, group_by(column : Symbolic) group_by, group_bys : Array(Symbolic) group_bys

Instance methods inherited from module Lustra::SQL::Query::OrderBy

clear_order_bys clear_order_bys, in_order_of(column : Symbol, values : Array(T)) forall T
in_order_of(column : String, values : Array(T)) forall T
in_order_of
, order_by(tuple : NamedTuple)
order_by(expression : Symbol, direction : Symbol = :asc, nulls : Symbol | Nil = nil)
order_by(expression : String, direction : Symbol = :asc, nulls : Symbol | Nil = nil)
order_by(**tuple)
order_by
, reverse_order_by reverse_order_by

Instance methods inherited from module Lustra::SQL::Query::Having

clear_havings clear_havings, having(node : Lustra::Expression::Node)
having(&)
having(conditions : NamedTuple | Hash(String, Lustra::SQL::Any))
having(template : String, *args)
having(template : String, **tuple)
having(**tuple)
having
, or_having(node : Lustra::Expression::Node)
or_having(template : String, *args)
or_having(template : String, **named_tuple)
or_having(&)
or_having

Instance methods inherited from module Lustra::SQL::Query::Where

clear_wheres clear_wheres, not(&)
not(conditions : NamedTuple | Hash(String, Lustra::SQL::Any))
not(template : String)
not(template : String, *args)
not(template : String, **tuple)
not(**tuple)
not
, or(node : Lustra::Expression::Node)
or(&)
or(conditions : NamedTuple | Hash(String, Lustra::SQL::Any))
or(template : String, *args)
or(template : String, **tuple)
or(**tuple)
or
, where(node : Lustra::Expression::Node)
where(&)
where(conditions : NamedTuple | Hash(String, Lustra::SQL::Any))
where(template : String)
where(template : String, *args)
where(template : String, **tuple)
where(**tuple)
where

Instance methods inherited from module Lustra::SQL::Query::Join

cross_join(name : Selectable, lateral = false) cross_join, full_outer_join(name : Selectable, lateral = false, &)
full_outer_join(name : Selectable, condition : String = "true", lateral = false)
full_outer_join
, inner_join(name : Selectable, lateral = false, &)
inner_join(name : Selectable, condition : String = "true", lateral = false)
inner_join
, join(name : Selectable, type = :inner, lateral = false, &)
join(name : Selectable, type = :inner, condition : String = "true", lateral = false)
join(name : Selectable, type = :inner, lateral = false)
join
, left_join(name : Selectable, lateral = false, &)
left_join(name : Selectable, condition : String = "true", lateral = false)
left_join
, right_join(name : Selectable, lateral = false, &)
right_join(name : Selectable, condition : String = "true", lateral = false)
right_join

Instance methods inherited from module Lustra::SQL::Query::From

clear_from clear_from, from(*args)
from(**tuple)
from
, froms : Array(SQL::From) froms

Instance methods inherited from module Lustra::SQL::Query::Select

clear_distinct clear_distinct, clear_select clear_select, default_wildcard_table=(table : String | Nil = nil) default_wildcard_table=, distinct(on : String | Nil = "") distinct, distinct_value : String | Nil distinct_value, select(c : Column)
select(*args)
select

Instance Method Detail

def with_table(fetch_columns = false, &block : Lustra::Reflection::Table::Collection -> ) : self #

def with_table(fetch_columns = false) : self #