sql. Создание хеша на основе выборки из базы данных
^hash::sql{запрос}
^hash::sql{запрос}[$.limit(n) $.offset(o) $.distinct(true/false) $.bind[variables hash] $.type[hash|string|table]]
Конструктор создает хеш, в котором имена ключей совпадают со значениями первого столбца выборки. Имена столбцов формируют ключи хеша, а значения столбцов - соответствующие этим ключам значения.
Если же запрос возвращает только один столбец, формируется хеш, где значения столбца формируют ключи хеша, и им ставится в соответствие логическое значение истина. [3.1.2]
Дополнительные параметры конструктора:
$.limit(n)
|
получить только n записей
|
$.offset(o)
|
отбросить первые o записей выборки
|
$.bind[hash]
[3.1.4] |
связанные переменные, см. «Работа с IN/OUT переменными»
|
$.distinct(true/false)
|
false или 0=считать наличие дубликата ошибкой (по-умолчанию);
true или 1=выбрать из таблицы записи с уникальным ключом. |
$.type[hash/string/table] [3.3.0]
|
hash=значение каждого элемента - хеш (по умолчанию);
string=значение каждого элемента - строка, при этом вы должны указать ровно два столбеца в SQL запросе; table=значение каждого элемента - таблица. |
По-умолчанию, наличие в ключевом столбце одинаковых значений считается ошибкой, если вам необходимо именно отобрать из результата записи с уникальным ключом, задайте опцию $.distinct(true).
Примечание: имейте в виду, что так между клиентом и сервером передаются лишние данные, и, скорее всего, запрос можно изменить, чтобы необходимая уникальность ключа обеспечивалась SQL-сервером. Если вам необходимы данные и в виде таблицы и в виде хеша, подумайте над использованием table::sql в паре с table.hash.
Пример hash of hash
В БД содержится таблица hash_table:
pet food aggressivecat milk verydog bone never
Выполнение кода…
^connect[строка подключения]{
$hash_of_hash[^hash::sql{
select
pet,
food,
aggressive
from
hash_table
}]
}
…даст хеш такой структуры…
$hash_of_hash[
$.cat[
$.food[milk]
$.aggressive[very]
]
$.dog[
$.food[bone]
$.aggressive[never]
]
]
…из которого можно эффективно извлекать информацию, например, так:
$animal[cat]
$animal любит $hash_of_hash.$animal.food
Пример hash of bool В БД содержится таблица participants:
name
Константин
Александр
Выполнение кода…
^connect[строка подключения]{
$participants[^hash::sql{select name from participants}]
}
…даст хеш такой структуры…
$participants[
$.Константин(true)
$.Александр(true)
]
…из которого можно эффективно извлекать информацию, например, так:
$name[Иван]
$name ^if($participants.$name){участвует}{не участвует} в мероприятии