class

DBX::QueryBuilder

Inherits Reference / Object

Query builder.

Constants

QUOTE = '"'

Quoting character.

Constructors

new

Creates a new QueryBuilder.

Source

Instance methods

add_arg(value) : String

Adds value to args and returns the placeholder.

Source
add_args_and_fields_from_data(data : NamedTuple | Hash, sep = ", ") : String

Extracts arguments and fields from data, populates args and returns SQL part for a listing statement. Example: field1, field2, field3

Source
add_args_and_fields_from_data(data : Array, sep = ", ") : String

Extracts arguments and fields from data, populates args and returns SQL part for a listing statement. Example: field1, field2, field3

Source
add_args_and_kv_from_data(data : NamedTuple | Hash, sep = ", ") : String

Extracts arguments and fields from data, populates args and returns SQL part for a combined statement. Example: field1 = $1, field2 = $2, field3 = $3

Source
alter(command : String, field : String, data_type = "") : QueryBuilder
Source
alter(table : OneOrMoreFieldsType, command : String, field : String, data_type = "") : QueryBuilder
Source
analyze(table : OneOrMoreFieldsType) : QueryBuilder

Builds the ANALYZE query

Source
analyze

Builds the ANALYZE query

Source
avg(field : FieldType, name = nil) : QueryBuilder

Adds AVG to the current query.

Source
between(field : FieldType, value1, value2, type = "", and_or = "AND") : QueryBuilder
Source
build

Builds the current query and returns SQL (string) and arguments (array).

sql, args = builder.build
Source
check(table : OneOrMoreFieldsType) : QueryBuilder

Builds the CHECK query

Source
check

Builds the CHECK query

Source
checksum(table : OneOrMoreFieldsType) : QueryBuilder

Builds the CHECKSUM query

Source
checksum

Builds the CHECKSUM query

Source
count(field : FieldType, name = nil) : QueryBuilder

Adds COUNT to the current query.

Source
delete(pk_name, pk_value) : QueryBuilder
Source
delete(table : OneOrMoreFieldsType) : QueryBuilder
Source
delete
Source
drop(table : OneOrMoreFieldsType, check_exists = true) : QueryBuilder
Source
drop(check_exists : Bool | NamedTuple(command: String, field: String, data_type: String) | Nil = true) : QueryBuilder
Source
find(pk_name, pk_value) : QueryBuilder

Finds one resource by its primary key.

Same as:

builder.find.where(pk_name, pk_value)
Source
find(table_name : OneOrMoreFieldsType) : QueryBuilder
Source
find
Source
find

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
Source
full_join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil) : QueryBuilder

Adds FULL JOIN to the current query.

Source
full_outer_join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil) : QueryBuilder

Adds FULL OUTER JOIN to the current query.

Source
group_by(field : OneOrMoreFieldsType) : QueryBuilder
Source
having(field : FieldType, op_or_val, value = nil) : QueryBuilder
Source
having

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
Source
in(field : FieldType, values : Array | Tuple, type = "", and_or = "AND") : QueryBuilder
Source
inner_join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil) : QueryBuilder

Adds INNER JOIN to the current query.

Source
insert(table : OneOrMoreFieldsType, data : Hash | NamedTuple) : QueryBuilder
Source
insert(data : Hash | NamedTuple) : QueryBuilder
Source
join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil, type = "") : QueryBuilder
Source
join

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)" }
Source
join

Returns jointure. Returns empty string if no jointure has been defined.

puts builder.join unless builder.join.blank? # or .empty?
Source
last_query

Returns the last query.

Source
last_query_method

Returns the last query method.

Source
left_join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil) : QueryBuilder

Adds LEFT JOIN to the current query.

Source
left_outer_join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil) : QueryBuilder

Adds LEFT OUTER JOIN to the current query.

Source
like(field : FieldType, value, type = "", and_or = "AND") : QueryBuilder
Source
limit(limit, limit_end = nil) : QueryBuilder
Source
limit

Returns limit value. Returns empty string if no limit has been defined.

puts builder.limit unless builder.limit.blank? # or .empty?
Source
max(field : FieldType, name = nil) : QueryBuilder

Adds MAX to the current query.

Source
min(field : FieldType, name = nil) : QueryBuilder

Adds MIN to the current query.

Source
not_between(field : FieldType, value1, value2) : QueryBuilder
Source
not_in(field : FieldType, values : Array | Tuple) : QueryBuilder
Source
not_like(field : FieldType, value) : QueryBuilder
Source
not_where(field : FieldType, op_or_val, value = nil) : QueryBuilder
Source
offset(offset) : QueryBuilder
Source
offset

Returns offset value. Returns empty string if no offset has been defined.

puts builder.offset unless builder.offset.blank? # or .empty?
Source
optimize(table : OneOrMoreFieldsType) : QueryBuilder

Builds the OPTIMIZE query

Source
optimize

Builds the OPTIMIZE query

Source
or_between(field : FieldType, value1, value2) : QueryBuilder
Source
or_in(field : FieldType, values : Array | Tuple) : QueryBuilder
Source
or_like(field : FieldType, value) : QueryBuilder
Source
or_not_between(field : FieldType, value1, value2) : QueryBuilder
Source
or_not_in(field : FieldType, values : Array | Tuple) : QueryBuilder
Source
or_not_like(field : FieldType, value) : QueryBuilder
Source
or_not_where(field : FieldType, op_or_val, value = nil) : QueryBuilder
Source
or_where(field : FieldType, op_or_val, value = nil) : QueryBuilder
Source
order_by(field : FieldType, dir = nil) : QueryBuilder
Source
paginate(per_page, page) : QueryBuilder

Sets offset and limit to get pagination-compatible results.

Source
ph(position : Int) : String

Adds placeholder for a SQL argument.

Source
query

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
Source
query_count

Returns number of queries made by the current instance.

Source
query_method

Returns the query method.

Source
quote(field : FieldType) : String

Wraps field with quotes (QUOTE).

Source
repair(table : OneOrMoreFieldsType) : QueryBuilder

Builds the REPAIR query

Source
repair

Builds the REPAIR query

Source
reset_query

Resets current query.

Source
returning(fields : OneOrMoreFieldsType) : QueryBuilder

SQL field(s) to be returned after an insert statement.

* (wildcard) means all fields.

Source
returning

Returns the SQL field(s) to be returned after an insert statement.

* (wildcard) means all fields.

Source
returning(*name : FieldType) : QueryBuilder

SQL field(s) to be returned after an insert statement.

* (wildcard) means all fields.

Source
right_join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil) : QueryBuilder

Adds RIGHT JOIN to the current query.

Source
right_outer_join(table : FieldType, field1 : FieldType, field2 : FieldType | Nil = nil) : QueryBuilder

Adds RIGHT OUTER JOIN to the current query.

Source
select(fields : OneOrMoreFieldsType) : QueryBuilder

Selects one or more fields.

Source
select

Returns selected field(s). Default is *.

puts builder.select
Source
select(*name : FieldType) : QueryBuilder

Selects one or more fields.

Source
sum(field : FieldType, name = nil) : QueryBuilder

Adds SUM to the current query.

Source
table(name : OneOrMoreFieldsType) : QueryBuilder

Targets one or more tables.

Source
table

Returns table name(s). Returns empty string if no table has been defined.

puts builder.table unless builder.table.blank? # or .empty?
Source
table(*name : FieldType) : QueryBuilder

Targets tables defined by variadic arguments.

builder.table(:table1, :table2)
Source
table

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
Source
to_data_h(data : Hash | NamedTuple) : DataHashType

Converts NamedTuple to DataHashType.

Source
update(pk_name, pk_value, data : Hash | NamedTuple) : QueryBuilder
Source
update(table : OneOrMoreFieldsType, data : Hash | NamedTuple) : QueryBuilder
Source
update(data : Hash | NamedTuple) : QueryBuilder
Source
where(field : FieldType, op_or_val, value = nil, type = "", and_or = "AND") : QueryBuilder

Where clause.

Source
where

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)
Source

Nested types