module Clear::SQL::Query::Where
Overview
Feature WHERE clause building.
each call to where method stack where clause.
Theses clauses are then combined together using the AND operator.
Therefore, query.where("a").where("b") will return a AND b
Direct including types
- Clear::SQL::DeleteQuery
- Clear::SQL::Query::OnConflict::OnConflictWhereClause
- Clear::SQL::SelectBuilder
- Clear::SQL::UpdateQuery
Defined in:
clear/sql/query/where.crInstance Method Summary
-
#clear_wheres
Clear all the where clauses and return
self - #or_where(str : String, parameters : Tuple | Enumerable(T)) forall T
- #or_where(str : String, parameters : NamedTuple)
- #or_where(str : String)
-
#where(str : String, parameters : Tuple | Enumerable(T)) forall T
Build SQL
#wherecondition using a template string and interpolating?characters with parameters given in a tuple or array. -
#where(str : String, parameters : NamedTuple)
Build SQL
#whereinterpolating:keywordwith the NamedTuple passed in argument. -
#where(node : Clear::Expression::Node)
Build SQL
#wherecondition using a Clear::Expression::Nodequery.where(Clear::Expression::Node::InArray.new("id", ['1', '2', '3', '4'])) # Note: in this example, InArray node use unsafe stringsIf useful for moving a where clause from a request to another one:query1.where { a == b } # WHERE a = bquery2.where(query1.wheres[0]) # WHERE a = b -
#where(&)
Build SQL
#wherecondition using the Expression engine. -
#where(conditions : NamedTuple | Hash(String, Clear::SQL::Any))
Build SQL
#wherecondition using a NamedTuple. -
#where(str : String)
Build custom SQL
#wherebeware of SQL injections!where("ADD_SOME_DANGEROUS_SQL_HERE") # WHERE ADD_SOME_DANGEROUS_SQL_HERE - #where(**tuple)
Instance Method Detail
Build SQL #where condition using a template string and
interpolating ? characters with parameters given in a tuple or array.
where("x = ? OR y = ?", {1, "l'eau"}) # WHERE x = 1 OR y = 'l''eau'
Raise error if there's not enough parameters to cover all the ? placeholders
Build SQL #where interpolating :keyword with the NamedTuple passed in argument.
where("id = :id OR date >= :start", {id: 1, start: 1.day.ago})
# WHERE id = 1 AND date >= '201x-xx-xx ...'
Build SQL #where condition using a Clear::Expression::Node
query.where(Clear::Expression::Node::InArray.new("id", ['1', '2', '3', '4']))
# Note: in this example, InArray node use unsafe strings
If useful for moving a where clause from a request to another one:
query1.where { a == b } # WHERE a = b
query2.where(query1.wheres[0]) # WHERE a = b
Build SQL #where condition using a NamedTuple.
this will use:
- the
=operator if compared with a literal
query.where({keyword: "hello"}) # WHERE keyword = 'hello'
- the
INoperator if compared with an array:
query.where({x: [1, 2]}) # WHERE x in (1,2)
- the
>=and<=|<if compared with a range:
query.where({x: (1..4)}) # WHERE x >= 1 AND x <= 4
query.where({x: (1...4)}) # WHERE x >= 1 AND x < 4
- You also can put another select query as argument:
query.where({x: another_select}) # WHERE x IN (SELECT ... )