class
PgORM::Collection(T)
- PgORM::Collection(T)
- Reference
- Object
Overview
Build Database Queries.
A Collection is immutable: all methods will return a copy of the previous
Collection with the added constraint(s). For example:
users = User.select(:id, :name).where(group_id: 2)
Termination methods such as #find_by, or #take will explicitly execute
a SQL request against the database and load one record.
first_user = users.order(:name).take
# => SELECT "id", "name"
# FROM "users"
# WHERE "group_id" = 2
# ORDER BY "name" ASC
# LIMIT 1;
Termination methods such as #to_a or #each will execute a SQL request
then cache loaded records into the Collection, so further accesses won't
re-execute the SQL request. Some methods such as #first or #size will
leverage this cache when it's available.
users.to_a
# => SELECT "id", "name" FROM "users" WHERE "group_id" = 2;
When specifying column names you should always use a Symbol, so they'll be properly quoted for the database server. In many cases you can specify raw SQL statements using a String. For example:
users = User.where("LENGTH(name) > $0", 10)
# => SELECT * FROM "users" WHERE LENGTH(name) > 10;
users = User.order("LENGTH(name) DESC")
# => SELECT * FROM "users" ORDER BY LENGTH(name) DESC;
count = User.count("LENGTH(name)", distinct: true)
# => SELECT COUNT(DISTINCT LENGTH(name)) FROM "users";
Included Modules
Defined in:
pg-orm/collection.crInstance Method Summary
-
#explain : String
Returns the query execution plan (useful for optimization) Note: This only works for SELECT queries (Collection is for queries, not mutations)
-
#in_groups_of(size : Int, filled_up_with : U = nil, reuse = false, &) forall U
Yields a block with the chunks in the given size.
-
#search(query : String, columns : Array(String), config : String = "english") : self
Convenience method for full-text search
-
#search(query : String, *columns : Symbol, config : String = "english") : self
Overload: Accepts Symbol columns
-
#search(query : String, *columns : String, config : String = "english") : self
Overload: Accepts String columns
-
#search_phrase(phrase : String, columns : Array(String), config : String = "english") : self
Convenience method for phrase search
-
#search_phrase(phrase : String, *columns : Symbol, config : String = "english") : self
Overload: Accepts Symbol columns
-
#search_phrase(phrase : String, *columns : String, config : String = "english") : self
Overload: Accepts String columns
-
#search_plain(text : String, columns : Array(String), config : String = "english") : self
Convenience method for plain text search
-
#search_plain(text : String, *columns : Symbol, config : String = "english") : self
Overload: Accepts Symbol columns
-
#search_plain(text : String, *columns : String, config : String = "english") : self
Overload: Accepts String columns
-
#search_prefix(prefix : String, columns : Array(String), config : String = "english") : self
Convenience method for prefix search
-
#search_prefix(prefix : String, *columns : Symbol, config : String = "english") : self
Overload: Accepts Symbol columns
-
#search_prefix(prefix : String, *columns : String, config : String = "english") : self
Overload: Accepts String columns
-
#search_proximity(word1 : String, word2 : String, distance : Int32, columns : Array(String), config : String = "english") : self
Convenience method for proximity search
-
#search_proximity(word1 : String, word2 : String, distance : Int32, *columns : Symbol, config : String = "english") : self
Overload: Accepts Symbol columns
-
#search_proximity(word1 : String, word2 : String, distance : Int32, *columns : String, config : String = "english") : self
Overload: Accepts String columns
-
#search_ranked(query : String, columns : Array(String), config : String = "english", rank_normalization : Int32 | Nil = nil, rank_function : FullTextSearch::RankFunction = FullTextSearch::RankFunction::Rank) : self
Convenience method for ranked full-text search
-
#search_ranked(query : String, *columns : Symbol, config : String = "english", rank_normalization : Int32 | Nil = nil, rank_function : FullTextSearch::RankFunction = FullTextSearch::RankFunction::Rank) : self
Overload: Accepts Symbol columns
-
#search_ranked(query : String, *columns : String, config : String = "english", rank_normalization : Int32 | Nil = nil, rank_function : FullTextSearch::RankFunction = FullTextSearch::RankFunction::Rank) : self
Overload: Accepts String columns
-
#search_ranked_weighted(query : String, weighted_columns : Hash(String, FullTextSearch::Weight), config : String = "english", rank_normalization : Int32 | Nil = nil, rank_function : FullTextSearch::RankFunction = FullTextSearch::RankFunction::Rank) : self
Convenience method for ranked weighted search
-
#search_ranked_weighted(query : String, weighted_columns : Hash(Symbol, FullTextSearch::Weight), config : String = "english", rank_normalization : Int32 | Nil = nil, rank_function : FullTextSearch::RankFunction = FullTextSearch::RankFunction::Rank) : self
Overload: Accepts Symbol keys
-
#search_vector(query : String, vector_column : String, config : String = "english") : self
Convenience method for searching pre-computed tsvector column
-
#search_vector(query : String, vector_column : Symbol, config : String = "english") : self
Overload: Accepts Symbol for vector column
-
#search_vector_plain(text : String, vector_column : String, config : String = "english") : self
Convenience method for searching pre-computed tsvector column with plain text
-
#search_vector_plain(text : String, vector_column : Symbol, config : String = "english") : self
Overload: Accepts Symbol for vector column
-
#search_vector_ranked(query : String, vector_column : String, config : String = "english", rank_normalization : Int32 | Nil = nil, rank_function : FullTextSearch::RankFunction = FullTextSearch::RankFunction::Rank) : self
Convenience method for searching pre-computed tsvector column with ranking
-
#search_vector_ranked(query : String, vector_column : Symbol, config : String = "english", rank_normalization : Int32 | Nil = nil, rank_function : FullTextSearch::RankFunction = FullTextSearch::RankFunction::Rank) : self
Overload: Accepts Symbol for vector column
-
#search_weighted(query : String, weighted_columns : Hash(String, FullTextSearch::Weight), config : String = "english") : self
Convenience method for weighted full-text search
-
#search_weighted(query : String, weighted_columns : Hash(Symbol, FullTextSearch::Weight), config : String = "english") : self
Overload: Accepts Symbol keys
Instance methods inherited from module PgORM::Pagination(T)
paginate(page : Int32 = 1, limit : Int32 = 25) : PaginatedResult(T)
paginate,
paginate_by_offset(offset : Int32 = 0, limit : Int32 = 25) : PaginatedResult(T)
paginate_by_offset,
paginate_cursor(after : String | Nil = nil, before : String | Nil = nil, limit : Int32 = 25, cursor_column : Symbol = :id) : CursorPaginatedResult(T)
paginate_cursor
Instance methods inherited from module PgORM::Query::Cache(T)
cached?
cached?,
each(& : T -> ) : Nileach each, reload reload, to_a : Array(T) to_a
Instance methods inherited from module PgORM::Query::Methods(T)
all : self
all,
average(column_name : Symbol | String) : Float64
average,
count(column_name : Symbol | String = "*", distinct = builder.distinct?) : Int64
count,
delete_all : Nil
delete_all,
distinct(value = true) : self
distinct,
dup(builder : Builder)
dup,
exists?(id : T::PrimaryKeyType) : Boolexists? : Bool exists?, find(id : T::PrimaryKeyType) : T find, find?(id : T::PrimaryKeyType) : T | Nil find?, find_by(**args) : T find_by, find_by?(**args) : T | Nil find_by?, first : T first, first? : T | Nil first?, group_by(*columns : Symbol | String) : self group_by, ids : Array(T::PrimaryKeyType) ids, join(type : JoinType, model : Base.class, fk : Symbol, pk : Base.class | Nil = nil) : self
join(type : JoinType, model : Base.class, on : String) : self join, last : T last, last? : T | Nil last?, limit(value : Int32) : self limit, maximum(column_name : Symbol | String) maximum, minimum(column_name : Symbol | String) minimum, none : self none, offset(value : Int32) : self offset, or(other : self) : self or, order(columns : Hash(Symbol, Symbol)) : self
order(*columns : Symbol | String) : self
order(**columns) : self order, pluck(column_name : Symbol | String) : Array(Value) pluck, reorder(columns : Hash(Symbol, Symbol)) : self
reorder(*columns : Symbol | String) : self
reorder(**columns) : self reorder, search(search_query : FullTextSearch::SearchQuery) : self search, search_ranked(search_query : FullTextSearch::SearchQuery) : self search_ranked, select(sql : String) : self
select(*columns : Symbol) : self select, size : Int64 size, sum(column_name : Symbol | String) : Int64 | Float64 sum, take : T take, take? : T | Nil take?, to_sql : String to_sql, unscope(*args) : self unscope, update_all(attributes : Hash | NamedTuple) : Nil
update_all(**attributes) : Nil update_all, where(conditions : Hash(Symbol, Value | Array(Value)) | NamedTuple) : self
where(sql : String, *splat : Value) : self
where(**conditions) : self where, where_between(column : Symbol | String, min : Value, max : Value) : self where_between, where_gt(column : Symbol | String, value : Value) : self where_gt, where_gte(column : Symbol | String, value : Value) : self where_gte, where_ilike(column : Symbol | String, pattern : String) : self where_ilike, where_like(column : Symbol | String, pattern : String) : self where_like, where_lt(column : Symbol | String, value : Value) : self where_lt, where_lte(column : Symbol | String, value : Value) : self where_lte, where_not(conditions : Hash(Symbol, Value | Array(Value)) | NamedTuple) : self
where_not(**conditions) : self where_not, where_not_between(column : Symbol | String, min : Value, max : Value) : self where_not_between, where_not_ilike(column : Symbol | String, pattern : String) : self where_not_ilike, where_not_like(column : Symbol | String, pattern : String) : self where_not_like
Instance Method Detail
Returns the query execution plan (useful for optimization) Note: This only works for SELECT queries (Collection is for queries, not mutations)
Yields a block with the chunks in the given size.
[1, 2, 4].in_groups_of(2, 0) { |e| p e.sum }
# => 3
# => 4
By default, a new array is created and yielded for each group.
- If reuse is given, the array can be reused
- If reuse is an
Array, this array will be reused - If reuse is truthy, the method will create a new array and reuse it.
This can be used to prevent many memory allocations when each slice of interest is to be used in a read-only fashion.
Convenience method for full-text search
Overload: Accepts Symbol columns
Overload: Accepts String columns
Convenience method for phrase search
Overload: Accepts Symbol columns
Overload: Accepts String columns
Convenience method for plain text search
Overload: Accepts Symbol columns
Overload: Accepts String columns
Convenience method for prefix search
Overload: Accepts Symbol columns
Overload: Accepts String columns
Convenience method for proximity search
Overload: Accepts Symbol columns
Overload: Accepts String columns
Convenience method for ranked full-text search
Overload: Accepts Symbol columns
Overload: Accepts String columns
Convenience method for ranked weighted search
Overload: Accepts Symbol keys
Convenience method for searching pre-computed tsvector column
Overload: Accepts Symbol for vector column
Convenience method for searching pre-computed tsvector column with plain text
Overload: Accepts Symbol for vector column
Convenience method for searching pre-computed tsvector column with ranking
Overload: Accepts Symbol for vector column
Convenience method for weighted full-text search
Overload: Accepts Symbol keys