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){
участвует}{не участвует} в мероприятии

    Поддержать сайт на родительском проекте КГБ