class DBX::QueryBuilder
- DBX::QueryBuilder
- Reference
- Object
Overview
Query builder.
Direct Known Subclasses
Defined in:
query_builder/builder.crquery_builder/builder_criteria.cr
query_builder/builder_support.cr
Constant Summary
-
QUOTE =
'"' -
Quoting character.
Constructors
-
.new
Creates a new
QueryBuilder.
Instance Method Summary
-
#add_arg(value) : String
Adds value to args and returns the
placeholder. -
#add_args_and_fields_from_data(data : NamedTuple | Hash, sep = ", ") : String
Extracts arguments and fields from data, populates
argsand returns SQL part for a listing statement. -
#add_args_and_fields_from_data(data : Array, sep = ", ") : String
Extracts arguments and fields from data, populates
argsand returns SQL part for a listing statement. -
#add_args_and_kv_from_data(data : NamedTuple | Hash, sep = ", ") : String
Extracts arguments and fields from data, populates
argsand returns SQL part for a combined statement. - #alter(table : OneOrMoreFieldsType, command : String, field : String, data_type = "") : QueryBuilder
- #alter(command : String, field : String, data_type = "") : QueryBuilder
-
#analyze(table : OneOrMoreFieldsType) : QueryBuilder
Builds the
ANALYZEquery -
#analyze : QueryBuilder
Builds the
ANALYZEquery -
#avg(field : FieldType, name = nil) : QueryBuilder
Adds
AVGto the current query. - #between(field : FieldType, value1, value2, type = "", and_or = "AND") : QueryBuilder
-
#build : SQLandArgsType
Builds the current query and returns SQL (string) and arguments (array).
-
#check : QueryBuilder
Builds the
CHECKquery -
#check(table : OneOrMoreFieldsType) : QueryBuilder
Builds the
CHECKquery -
#checksum : QueryBuilder
Builds the
CHECKSUMquery -
#checksum(table : OneOrMoreFieldsType) : QueryBuilder
Builds the
CHECKSUMquery -
#count(field : FieldType, name = nil) : QueryBuilder
Adds
COUNTto the current query. - #delete : QueryBuilder
- #delete(table : OneOrMoreFieldsType) : QueryBuilder
- #delete(pk_name, pk_value) : QueryBuilder
- #drop(table : OneOrMoreFieldsType, check_exists = true) : QueryBuilder
- #drop(check_exists = true) : QueryBuilder
-
#find(pk_name, pk_value) : QueryBuilder
Finds one resource by its primary key.
- #find : QueryBuilder
-
#find(&) : QueryBuilder
Adds
#findto current query and defines in raw form the SQL statement of the table(s). - #find(table_name : OneOrMoreFieldsType) : QueryBuilder
-
#full_join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil) : QueryBuilder
Adds
FULL JOINto the current query. -
#full_outer_join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil) : QueryBuilder
Adds
FULL OUTER JOINto the current query. - #group_by(field : OneOrMoreFieldsType) : QueryBuilder
-
#having(&) : QueryBuilder
Defines in raw form the SQL statement of
HAVING. - #having(field : FieldType, op_or_val, value = nil) : QueryBuilder
- #in(field : FieldType, values : Array | Tuple, type = "", and_or = "AND") : QueryBuilder
-
#inner_join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil) : QueryBuilder
Adds
INNER JOINto the current query. - #insert(data : Hash | NamedTuple) : QueryBuilder
- #insert(table : OneOrMoreFieldsType, data : Hash | NamedTuple) : QueryBuilder
- #join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil, type = "") : QueryBuilder
-
#join(&) : QueryBuilder
Adds a raw
#jointo current query. -
#join : String
Returns jointure.
-
#last_query : String
Returns the last query.
-
#last_query_method : Symbol?
Returns the last query method.
-
#left_join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil) : QueryBuilder
Adds
LEFT JOINto the current query. -
#left_outer_join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil) : QueryBuilder
Adds
LEFT OUTER JOINto the current query. - #like(field : FieldType, value, type = "", and_or = "AND") : QueryBuilder
-
#limit : String
Returns
#limitvalue. - #limit(limit, limit_end = nil) : QueryBuilder
-
#max(field : FieldType, name = nil) : QueryBuilder
Adds
MAXto the current query. -
#min(field : FieldType, name = nil) : QueryBuilder
Adds
MINto the current query. - #not_between(field : FieldType, value1, value2) : QueryBuilder
- #not_in(field : FieldType, values : Array | Tuple) : QueryBuilder
- #not_like(field : FieldType, value) : QueryBuilder
- #not_where(field : FieldType, op_or_val, value = nil) : QueryBuilder
- #offset(offset) : QueryBuilder
-
#offset : String
Returns
#offsetvalue. -
#optimize(table : OneOrMoreFieldsType) : QueryBuilder
Builds the
OPTIMIZEquery -
#optimize : QueryBuilder
Builds the
OPTIMIZEquery - #or_between(field : FieldType, value1, value2) : QueryBuilder
- #or_in(field : FieldType, values : Array | Tuple) : QueryBuilder
- #or_like(field : FieldType, value) : QueryBuilder
- #or_not_between(field : FieldType, value1, value2) : QueryBuilder
- #or_not_in(field : FieldType, values : Array | Tuple) : QueryBuilder
- #or_not_like(field : FieldType, value) : QueryBuilder
- #or_not_where(field : FieldType, op_or_val, value = nil) : QueryBuilder
- #or_where(field : FieldType, op_or_val, value = nil) : QueryBuilder
- #order_by(field : FieldType, dir = nil) : QueryBuilder
- #paginate(per_page, page) : QueryBuilder
-
#ph(position : Int) : String
Adds placeholder for a SQL argument.
-
#query(&) : QueryBuilder
Generates a raw query.
-
#query_count : Int
Returns number of queries made by the current instance.
-
#query_method : Symbol?
Returns the query method.
-
#quote(field : FieldType) : String
Wraps field with quotes (
QUOTE). -
#repair : QueryBuilder
Builds the
REPAIRquery -
#repair(table : OneOrMoreFieldsType) : QueryBuilder
Builds the
REPAIRquery -
#reset_query
Resets current query.
-
#returning(*name : FieldType) : QueryBuilder
SQL field(s) to be returned after an
#insertstatement. -
#returning : String?
Returns the SQL field(s) to be returned after an
#insertstatement. -
#returning(fields : OneOrMoreFieldsType) : QueryBuilder
SQL field(s) to be returned after an
#insertstatement. -
#right_join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil) : QueryBuilder
Adds
RIGHT JOINto the current query. -
#right_outer_join(table : FieldType, field1 : FieldType, field2 : FieldType? = nil) : QueryBuilder
Adds
RIGHT OUTER JOINto the current query. -
#select(fields : OneOrMoreFieldsType) : QueryBuilder
Selects one or more fields.
-
#select : String
Returns selected field(s).
-
#select(*name : FieldType) : QueryBuilder
Selects one or more fields.
-
#sum(field : FieldType, name = nil) : QueryBuilder
Adds
SUMto the current query. -
#table(&) : QueryBuilder
Defines in raw form the SQL statement of the table(s).
-
#table(*name : FieldType) : QueryBuilder
Targets tables defined by variadic arguments.
-
#table : String
Returns table name(s).
-
#table(name : OneOrMoreFieldsType) : QueryBuilder
Targets one or more tables.
-
#to_data_h(data : Hash | NamedTuple) : DataHashType
Converts
NamedTupletoDataHashType. - #update(data : Hash | NamedTuple) : QueryBuilder
- #update(table : OneOrMoreFieldsType, data : Hash | NamedTuple) : QueryBuilder
- #update(pk_name, pk_value, data : Hash | NamedTuple) : QueryBuilder
-
#where(field : FieldType, op_or_val, value = nil, type = "", and_or = "AND") : QueryBuilder
Where clause.
-
#where(&) : QueryBuilder
Adds a raw
#whereto current query.
Constructor Detail
Instance Method Detail
Extracts arguments and fields from data, populates args
and returns SQL part for a listing statement.
Example: field1, field2, field3
Extracts arguments and fields from data, populates args
and returns SQL part for a listing statement.
Example: field1, field2, field3
Extracts arguments and fields from data, populates args
and returns SQL part for a combined statement.
Example: field1 = $1, field2 = $2, field3 = $3
Builds the current query and returns SQL (string) and arguments (array).
sql, args = builder.build
Finds one resource by its primary key.
Same as:
builder.find.where(pk_name, pk_value)
Adds #find to current query
and defines in raw form the SQL statement of the table(s).
Be careful, you have to manage arguments (arg) and quotes (q).
Example:
builder.find { "#{q("posts") AS p, articles a" }"
Generates:
SELECT * FROM "posts" AS p, articles a
Adds FULL JOIN to the current query.
Adds FULL OUTER JOIN to the current query.
Defines in raw form the SQL statement of HAVING.
Be careful, you have to manage arguments (arg) and quotes (q).
Example:
builder.find(:tests).group_by(:payment).having { "SUM(price) > 40" }
Generates:
SELECT * FROM tests GROUP_BY payment HAVING SUM(person) > 40
Adds INNER JOIN to the current query.
Adds a raw #join to current query.
Be careful, you have to manage arguments (arg) and quotes (q).
Example:
builder.find("tests").join { "
INNER JOIN T2 ON T1.a = T2.a
AND T1.b = T2.b
OR T1.b = #{q(some_value_to_quote)}
" }
.join { "LEFT JOIN payments p USING (product_id)" }
Returns jointure. Returns empty string if no jointure has been defined.
puts builder.join unless builder.join.blank? # or .empty?
Adds LEFT JOIN to the current query.
Adds LEFT OUTER JOIN to the current query.
Returns #limit value. Returns empty string if no limit has been defined.
puts builder.limit unless builder.limit.blank? # or .empty?
Returns #offset value. Returns empty string if no offset has been defined.
puts builder.offset unless builder.offset.blank? # or .empty?
Generates a raw query.
Be careful, you have to manage arguments and quotes.
Example:
puts builder.query { "
SELECT * FROM tests
status = #{arg(true)}
AND (
#{q(:date)} <= #{arg(Time.utc - 1.day)}
OR role = #{arg(:admin)}
)
LIMIT 1
" }
Generates:
SELECT *
FROM tests
WHERE status = $1
AND ("date" <= $2 OR role = $3)
LIMIT 1
Returns the SQL field(s) to be returned after an #insert statement.
* (wildcard) means all fields.
Adds RIGHT JOIN to the current query.
Adds RIGHT OUTER JOIN to the current query.
Defines in raw form the SQL statement of the table(s).
Be careful, you have to manage arguments (arg) and quotes (q).
Example:
builder.find { "#{q("posts") AS p, articles a" }"
Generates:
SELECT * FROM "posts" AS p, articles a
Targets tables defined by variadic arguments.
builder.table(:table1, :table2)
Returns table name(s). Returns empty string if no table has been defined.
puts builder.table unless builder.table.blank? # or .empty?
Where clause.
Adds a raw #where to current query.
Be careful, you have to manage arguments (arg) and quotes (q).
Example:
builder.find("tests").where { "
status = #{arg(true)}
AND (
#{q(:date)} <= #{arg(Time.utc - 1.day)}
OR role = #{arg(:admin)}
)
" }
Generates:
SELECT *
FROM tests
WHERE status = $1
AND ("date" <= $2 OR role = $3)