RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.
Табличные функции Bytecode() и Tables_Used()

1. Обзор

Bytecode и tables_used это виртуальные таблицы, встроенные в SQLite для доступа к информации о подготовленных запросах. bytecode и tables_used работают как табличные функции. Они берут единственный обязательный аргумент, который является или текстом SQL-оператора или указателем на существующий подготовленный запрос. Функция bytecode возвращает одну строку результата для каждой операции bytecode в подготовленном запросе. Функция tables_used возвращает одну строку для каждого постоянного btree (таблица или индекс), к которому обращается запрос.

2. Использование

Таблицы bytecode и tables_used доступны, если SQLite был собран с -DSQLITE_ENABLE_BYTECODE_VTAB. CLI собран именно так и таким образом можно использовать стандартный CLI в качестве испытательной платформы.

Обе виртуальных таблицы только для чтения. Вы используете их, упоминая их непосредственно в пункте FROM оператора SELECT. Они обе требуют отдельного аргумента, который является SQL-оператором, который будет проанализирован. Например:

SELECT * FROM bytecode('SELECT * FROM bytecode(?1)');

Аргумент может быть текстом SQL-оператора, в этом случае bytecode (или tables_used) для него вернется, или аргумент может быть параметром вроде "1" или $stmt, который позже связан с объектом prepared statement через интерфейс sqlite3_bind_pointer(). Используйте тип указателя "stmt-pointer" для интерфейса sqlite3_bind_pointer().

2.1. Схема

Схема таблицы bytecode:

CREATE TABLE bytecode(addr INT, opcode TEXT, p1 INT, p2 INT, p3 INT,
                      p4 TEXT, p5 INT, comment TEXT,
                      subprog TEXT, stmt HIDDEN);

Первые восемь колонок это адрес, код операции и операнды для единственного bytecode в виртуальной машине, которая осуществляет запрос. Эти колонки тот же самый вывод колонок, используя EXPLAIN. Виртуальные таблицы показывают все операции в подготовленном запросе, и основная часть подготовленного запроса и в подпрограммах раньше осуществляла действия внешнего ключа или триггера. Поле "subprog" = NULL для основной части подготовленного запроса или является именем триггера trigger (или строкой "(FK)") для триггеров и действий внешнего ключа.

Схема таблицы tables_used:

CREATE TABLE tables_used(type TEXT, schema TEXT, name TEXT, wr INT,
                         subprog TEXT, stmt HIDDEN);

Таблица tables_used предназначается, чтобы показать, какие btree файла базы данных прочитаны или написаны подготовленным запросом, раздельно самим главным запросом, а также связанными триггерами и действиями внешнего ключа. Колонки следующие:

  • type → "table" или "index", в зависимости от того, какой роли btree служит.

  • schema → Какая база данных регистрирует btree. Это будет "main" для главной базы данных (обычный случай), "temp" таблиц и индексов TEMP или именем, назначенным присоединенным базам данных запросом ATTACH.

  • name → Название таблицы или индекса.

  • wr → 0, если объект прочитан, 1, если объект написан.

  • subprog → Подпрограмма, в которой получают доступ к объекту. NULL означает основную часть подготовленного запроса. Иначе эта область название триггера или "(FK)" для действия внешнего ключа.