Конструктор ::sql
Создание хеша на основе выборки из базы данных.
^hash::sql{запрос}
^hash::sql{запрос}[
$.limit(n)
$.offset(n)
$.distinct(true|false)
$.bind[variables_hash]
$.type[hash|string|table]
]
Конструктор создает хеш, в котором имена ключей совпадают со значениями первого столбца выборки. По умолчанию каждый элемент — тоже хеш, где имена столбцов используются в качестве ключей, а соответствующие им значения — это данные столбцов.
Если же запрос возвращает только один столбец, формируется хеш, где значения столбца формируют ключи хеша, и им ставится в соответствие логическое значение «истина».
Дополнительные параметры конструктора:
По умолчанию наличие в ключевом столбце одинаковых значений считается ошибкой. Если наличие дубликатов допустимо, следует задать опцию $.distinct(true). В этом случае в качестве данных для каждого ключа используется первая встреченная строка, последующие строки с тем же ключом игнорируются без ошибки. А если задать $.type[table], для каждого ключа формируется таблица со всеми записями, имеющими этот ключ.
Пример hash of hash
В БД содержится таблица hash_table:
Выполнение кода:
^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:
Выполнение кода:
^connect[строка подключения]{
$participants[^hash::sql{
SELECT
name
FROM
participants
}]
}
даст хеш такой структуры:
$participants[
$.Константин(true)
$.Александр(true)
]
из которого можно эффективно извлекать информацию, например, так:
$name[Иван]
$name ^if(!$participants.$name){не }участвует в мероприятии