Sql export json
Материал из Eludia.
Содержание |
Описание
Принимает на вход SQL-запрос и поток вывода. Экспортирует результат SQL в формате JSON. Предназначается для (частичного) экспорта данных, предназначенного для дальнейшего импорта при помощи sql_import_json или других инструментов, поддерживающих формат JSON.
Одной записи выборки соответствует 1 строка, записываемая в поток. Формат JSON-записи зависит от последовательности SQL-запросов.
Описание таблицы
Если запрос имеет вид
DESCRIBE $table
, то в ответ будет экспортирована запись, совместимая по структуре с описанием схемы данных, за исключением раздела data:
["keys":[...],"columns":[...],"name":"$table"]
(характерный признак: ассоциативный список).
Оператор DESCRIBE может не поддерживаться используемым диалектом SQL, такие запросы обрабатываются sql_export_json самостоятельно.
Краткая форма строки
Если запрос имеет вид
SELECT * FROM $table ...
и ему предшествовал DESCRIBE на ту же таблицу, то он порождает множество строк вида
["1", "Иванов", "000/1", ...]
(характерный признак: неассоциативный список скаляров).
Где компоненты соответствуют столбцам таблицы в следующем порядке: сначала id, потом все остальные по алфавиту наименований.
Полная форма строки
В остальных случаях генерируются строки вида
["$table", ["id": ..., "fake": ...]]
(характерный признак: список, 2-й элемент которого — список).
Синопсис (Perl5)
# Пример из жизни: экспорт нескольких выборок в один файл
require IO::Compress::Gzip;
my $fn = '/i/upload/images/db';
my $path = $r -> document_root . $fn;
my $out = new IO::Compress::Gzip ($path);
foreach (
'DESCRIBE my_table',
...
'SELECT * FROM my_table WHERE fake = 0',
...
) { sql_export_json ($_ => $out)}
$out -> close;
download_file ({
path => $fn,
file_name => "export.gz",
});
unlink $path;
Категории: API | SQL | Репликация
