array Alt ←

Конструктор ::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), создается разреженный массив, в котором индексы элементов совпадают со значениями первого столбца выборки. По умолчанию каждый элемент массива — это хеш, где имена столбцов используются в качестве ключей, а соответствующие им значения — это данные столбцов.

Дополнительные параметры конструктора:

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

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

Пример array of hash

В БД содержится таблица test_table:

pet food aggressive
cat milk very
dog bone never

Выполнение кода:

^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:

name subject grade
Mike Math 5
Alex Math 4
Ivan History 5

Выполнение кода:

^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[]