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