sql. Создание хеша на основе выборки из базы данных

^hash::sql{запрос}  
^hash::sql{запрос}[$.limit(n) $.offset(n) $.distinct(true|false) $.
bind[variables hash] $.type[hash|string|table]]

Конструктор создает хеш, в котором имена ключей совпадают со значениями первого столбца выборки. По умолчанию каждый элемент - тоже хеш, где имена столбцов используются в качестве ключей, а соответствующие им значения - это данные столбцов.
Если же запрос возвращает только один столбец, формируется хеш, где значения столбца формируют ключи хеша, и им ставится в соответствие логическое значение «
истина».

Дополнительные параметры конструктора:
$.limit(n)
получить только n записей
$.offset(n)
отбросить первые n записей выборки
$.bind[hash]
связанные переменные, см. «Работа с IN/OUT-переменными»
$.distinct(true|false)
false или 0 = считать наличие дубликата ошибкой (по умолчанию);
true или 1 = выбрать из таблицы записи с уникальным ключом.
$.type[hash/string/table]  [3.3.0]
hash = значение каждого элемента - хеш (по умолчанию);
string = значение каждого элемента - строка, при этом нужно указать ровно два столбца в SQL-запросе;
table = значение каждого элемента - таблица со всеми колонками результата.


По умолчанию наличие в ключевом столбце одинаковых значений считается ошибкой. Если наличие дубликатов допустимо, следует задать опцию
$.distinct(true). В этом случае в качестве данных для каждого ключа используется первая встреченная строка, последующие строки с тем же ключом игнорируются без ошибки. А если задать $.type[table], для каждого ключа формируется таблица со всеми записями, имеющими этот ключ.

Пример hash of hash
В БД содержится таблица
hash_table:
pet   food   aggressive
cat   milk   very
dog   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){
участвует}{не участвует} в мероприятии


Copyright © 1997–2024 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 19.12.2024