Создаёт коструктор сложного запроса HeapSelectQueryBuilder к heap-таблице, задавая набор полей/выражений, которые мы хотим увидеть в результате выполнения этого запроса.
const query = table.select(...fieldNames)
const query = table.select(aliasesObject)
fieldNames Array<keyof HsProperties>
Простой список названий полей исходной heap-таблицы или сохранённого запроса (HeapView), который мы хотим увидеть
в результате запроса. Такой формат можно использовать только если нужно запросить поля "как есть" и без изменения их
названия. Список названий перечисляется именно в виде аргументов функции, а не массива названий в первом агрументе.
aliasesObject: Record<string, HqExpr>
Объект, ключи которого являются названиями (алиасами) полей итогового результата запроса, а значения - выражения,
которые определяют - что именно будет запрошено в качестве значения этого поля.
Выражения (HqExpr
) могут быть одного из нескольких видов:
HqExprColumn: string
(keyof HsProperties
)
Простое название одного из полей исходной таблицы или представления (подзапроса).
Пример: { aliasName: 'realFieldName' }
.
HqExprPath: Array<string | number>
Путь к вложенному сложному полю в виде массива с цепочкой названий вложенных полей или индексов массива,
которые формируют путь от корневого поля таблицы к конечному глубокому полю, которое нужно вывести в результате.
Пример: { deepField: ['deep', 'array', 0, 'name'] }
.
HqExprFn: { [$fnName: string]: HqExpr[] }
Обычная функция, представленная в виде объекта с единственным ключом (всегда начинающимся с $
) - названием функции, и значением этого ключа - массивом агрументов функции, которые также являются выражениями HqExpr
.
Пример: { upperCaseName: { $upper: ['firstName'] } }
.
HqExprAgg: { [$aggFnName: string]: HqExpr[], $distinct?: boolean }
Аггрегирующая функция, представленная в виде объекта с ключом (всегда начинающимся с $
) - названием функции, и значением этого ключа - массивом агрументов функции, которые также являются выражениями HqExpr
. Может иметь
в описании дополнительное поле $distinct
, которое позволяет считать аггрегаты только по уникальным значениям
(SELECT COUNT(DISTINCT name)
).
Примеры: { cnt: { $count: ['*'] } }
или { uniqCnt: { $count: [['deep', 'field']], $distinct: true }
.
HqExprDyn: { $dyn: number | string | boolean | Date }
Динамическое значение (переменная), которая подставляется в запрос в качестве параметра
(с защитой от SQL injection). Пример: { constantValue: { $dyn: 15 }}
.
HeapSelectQueryBuilder
Экземпляр конструктора запросов, который можно "достроить" с помощью его же методов where
, group
, having
,
order
, limit
, offset
и прочих, а затем выполнить с помощью одного из нескольких runXXX
методов.
const Tasks = Heap.Table('tasks', {
title: Heap.String(),
responsible: Heap.RefLink('employees'),
priority: Heap.Integer(),
client: Heap.Object({
firstName: Heap.String(),
lastName: Heap.String(),
age: Heap.Integer(),
})
})
const allTitles = await Tasks.select('title').runFlatten(ctx)
const clientsInfo: Array<{ name: string, age: number }> = await Tasks
.select({
name: {
$concat: [
['client', 'firstName'],
{ $dyn: ' ' },
['client', 'lastName'],
]
},
age: ['client', 'age']
})
.where({ age: { $gt: 40 } })
.order('age')
.run(ctx)