DbQueryTable - do-/node-doix-db GitHub Wiki
DbQueryTable
is a class representing a part of the DbQuery's FROM
clause.
Although it's called "...Table", as in SQL-92 "table reference" and, in simple case, its instance is related to some regular data table, in general, this data source may be any table like record set: a SQL VIEW, a function call etc. Anyway, in the context of the query it's meant to be a "table" of some kind.
Properties
Name | Type | Description |
---|---|---|
query |
DbQuery | The query this table belongs to |
lang |
DbLang | Copy of query.lang |
sql |
String | The expression to be selected (left to the AS keyword in the FROM clause) |
alias |
String | The name of this table in this query (right to the AS keyword in the FROM clause) |
qName |
String | Copy of alias , safely quoted for interpolation in SQL |
relation |
DbRelation | The relation from the query.model.map which name is equal to sql . May be undefined. |
columns |
[DbQueryColumn] | DbQuery's columns selected from this table. May be undefined. |
isFirst |
Boolean | true for query.tables [0] , false for all other |
join |
String | undefined when isFirst , otherwise one of 'LEFT', 'INNER' or 'CROSS' |
on |
String | logical expression to put after ON , verbatim |
filters |
Array | list of {sql, params} objects, such as DbQueryTableColumnComparison or DbQueryOr instances |
unknownColumnComparisons |
Array | list of [name, op, value] arrays, part of filters option with name not in relation.columns (if defined) |
Constructor
Parameters
Name | Type | Description |
---|---|---|
query |
DbQuery | The query this table belongs to |
sql |
String | The name of a DbRelation from the query.model or an arbitrary expression to be selected |
options |
Object | A bag of options |
Options
Name | Type | Description |
---|---|---|
as |
String |
The name of this table in this query (defaults to sql if it's a relation name) |
columns |
[String] |
The list of column names to select from the relation . If undefined, means all columns (as in SELECT * ). Zero length array means no column must be selected from this table (it's joined only to filter data) |
join |
String |
for tables other than query.tables [0] , 'LEFT' by default |
on |
String |
the JOIN ... ON condition or an argument to derive it with adjustJoinCondition |
filters |
[Array] |
list of lists of arguments for addColumnComparison |
Methods
adjustJoinCondition
This internal method is called from the constructor to calculate the final value of this.on
property in case where join
is LEFT or INNER, but on
is not a string containing the '=' sign (and so, is not believed to be good for interpolation into the ON clause).
If this.on
is a string ${referringTableAlias}.${referringColumnName}
, it is appended to be the equality to the first column of this relation
's primary key.
If this.on
is undefined, there must be exactly one DbReference to the underlying relation
among preceding query.tables
, and it will be used to derive the real joinCondition
.
addColumnComparison
Calls createColumnComparison
with same parameters and then addFilter
with its result.
addFilter
For a null
or undefined
argument, does nothing. Otherwise, pushes the argument into filters
.
createColumnComparison
Given name
, op
and value
, this method returns a new instance of DbQueryTableColumnComparison bound to this
table and carrying incoming parameters.
If the value
is null
or undefined
and isUnaryOperator (op)
is false
, returns null
(that is, fields left empty are ignored, which is a standard practice for search forms).
For a non-empty value
, if the relation
is defined, but the name
corresponds to none of its columns
, the return value, too, is null
, but in this case [name, op, value]
is pushed into unknownColumnComparisons
as a side effect (to implement additional search parameters that cannot be directly bound to individual columns).