Конструктор ::sql
создание массива на основе выборки из базы данных
^array::sql{запрос}
^array::sql{запрос}[
$.sparse(false|true)
$.limit(n)
$.offset(n)
$.distinct(true|false)
$.bind[variables hash]
$.type[hash|string|table]
]
Конструктор на основе результата SQL-запроса создает по умолчанию обычный массив. Если задан параметр $.sparse(true), создается разреженный массив, в котором индексы элементов совпадают со значениями первого столбца выборки. По умолчанию каждый элемент массива — это хеш, где имена столбцов используются в качестве ключей, а соответствующие им значения — это данные столбцов.
Дополнительные параметры конструктора:
По умолчанию наличие в ключевом столбце одинаковых значений считается ошибкой. Если наличие дубликатов допустимо, следует задать опцию $.distinct(true). В этом случае в качестве данных для каждого ключа используется первая встреченная строка, последующие строки с тем же ключом игнорируются без ошибки. А если задать $.type[table], для каждого ключа формируется таблица со всеми записями, имеющими этот ключ.
Пример array of hash
В БД содержится таблица test_table:
Выполнение кода:
^connect[строка подключения]{
$array_of_hash[^array::sql{
select
pet,
food,
aggressive
from
test_table
}]
}
даст массив такой структуры:
$array_of_hash[
$.pet[cat]
$.food[milk]
$.aggressive[very]
;
$.pet[dog]
$.food[bone]
$.aggressive[never]
]
из которого можно извлекать информацию, например, так:
$animal[$array_of_hash.0]
$animal.pet любит $animal.food
Пример array of table
В БД содержится таблица students:
Выполнение кода:
^connect[строка подключения]{
$students[^array::sql{
SELECT
grade, name, subject
FROM
students
}[
$.sparse(1)
$.distinct(true)
$.type[table]
]]
}
даст разреженный массив такой структуры:
$students[^array::create[]]
$students.4[^table::create{grade name subject
4 Alex Math}]
$students.5[^table::create{grade name subject
5 Make Math
5 Ivan History}]
из которого можно извлекать информацию, например, так:
Оценок отлично: ^students.5.count[]