ЧатиумРазработчикамСтоимость
Войти

HeapTableRepo.select

Создаёт коструктор сложного запроса 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)