DbQuery - do-/node-doix-db GitHub Wiki
DbQuery is a class representing a query to a database which structure is described by DbModel.
It uses some basic SQL concepts, but corresponds to its very limited subset.
The purpose of DbQuery objects is to facilitate the SQL generation in simple cases like backing Web search forms with multiple mostly independent filters on scalar fields.
Properties
| Name | Type | Description |
|---|---|---|
model |
DbModel | The model this query belongs to |
lang |
DbLang | Copy of model.lang |
columns |
Map String => DbQueryColumn | all data columns processed by this query (the SELECT clause) |
tables |
[DbQueryTable] | the sequence of tables or similar objects for the FROM clause |
order |
[DbQueryColumn] | the sequence of columns constituting the ORDER BY clause |
options |
Object | copy of the options argument to constructor |
root |
DbQueryTable | tables[0] (computed property) |
Constructor
Not to be invoked directly. Call DbModel#createQuery instead:
const myQuery = myModel.createQuery (
[
['users', {
filters: [
['login', '=', login],
['hash', 'IN', {sql: 'SELECT compute_hash (?)', params: [password]}],
['id_role', 'IN',
myModel.createQuery ([
['roles', {
columns: ['id'],
filters: ['label', '=', 'admin'](/do-/node-doix-db/wiki/'label',-'=',-'admin')
}]
])
],
],
}],
['roles', {columns: ['label']}]
],
{
order: [
'label',
['roles.label', true]
]
}
)
Parameters
| Name | Type | Description |
|---|---|---|
model |
DbModel | The model this query belongs to |
from |
[String, Object](/do-/node-doix-db/wiki/String,-Object) |
List of arguments for addTable calls |
options |
Options |
Bag of options |
Parameters
| Name | Type | Description |
|---|---|---|
order |
[Array] | Array of argument lists for orderBy. [name, false] may be replaced by scalar name string. |
limit |
int > 0 | NOT SUPPORTED BY default DbLang. Reserved for generating 'LIMIT', 'TOP' and similar SQL clauses. |
offset |
int >= 0 | NOT SUPPORTED BY default DbLang. Reserved for generating 'OFFSET' and similar SQL clauses along with limit. |
Methods
addTable
Creates a new DbQueryTable and adds it to the tables list.
myQuery.addTable ('users', {alias: 'userz', columns: ['id_role', 'label']})
myQuery.addTable ('generate_series (1::int, 10)', {alias: 'ten')
myQuery.addTable ('roles') // alias by name, all columns from the model
orderBy
Adds an existing DbQueryColumn to the order list setting the desc property.
myQuery.orderBy ('id_role', true) // DESC
myQuery.orderBy ('label')
toParamsSql ()
Returns an Array of parameters with the SQL text appended to the end of it.
const params = myQuery.toParamsSql (), sql = params.pop ()
const records = myDb.getArray (sql, params)
toCountingQuery
Returns a copy of this query where:
- the only column is
{sql: 'COUNT(*)', alias: 'cnt'}; - all tables with LEFT join are removed;
- the
orderlist is empty.