Функции Bytecode() и Tables_Used() со значениями таблиц
1. Обзор
Функции Bytecode и tables_used — это встроенные в SQLite виртуальные таблицы, которые предоставляют доступ к информации о подготовленных запросах. Обе функции Bytecode и tables_used работают как функции со значениями таблиц. Они принимают один обязательный аргумент, представляющий собой либо текст SQL-запроса, либо указатель на существующий подготовленный запрос. Функция bytecode возвращает одну строку результата для каждой операции байткода в подготовленном запросе. Функция tables_used возвращает одну строку для каждого постоянного b-дерева (таблицы или индекса), к которому обращается подготовленный запрос.
2. Использование
Таблицы bytecode и tables_used доступны только в том случае, если SQLite скомпилирован с параметром времени компиляции -DSQLITE_ENABLE_BYTECODE_VTAB. Клиентская программа (CLI) скомпилирована таким образом, поэтому вы можете использовать стандартную CLI в качестве тестовой платформы для экспериментов.
Обе виртуальные таблицы являются виртуальными таблицами только с собственным именем и для них доступны только для чтения. Вы используете их, упоминая их непосредственно в операторе FROM в запросе SELECT. Обе функции требуют одного аргумента, который представляет собой SQL-запрос, подлежащий анализу. Например:
SELECT * FROM bytecode('SELECT * FROM bytecode(?1)');
Аргументом может быть текст SQL-запроса, в этом случае возвращаются байткод (или tables_used) для этого запроса, или аргументом может быть параметр, такой как ?1 или $stmt, который впоследствии привязывается к объекту подготовленного запроса с помощью интерфейса sqlite3_bind_pointer(). Для интерфейса sqlite3_bind_pointer() используйте тип указателя "stmt-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 );
Первые восемь столбцов содержат адрес, код операции и операнды для одной операции байткода в виртуальной машине, которая реализует запрос. Эти столбцы — те же столбцы, которые выводятся при использовании EXPLAIN. Виртуальные таблицы байткода показывают все операции в подготовленном запросе, как в основном теле подготовленного запроса, так и в подпрограммах, используемых для реализации триггеров или действий с внешними ключами. Поле "subprog" равно NULL для основного тела подготовленного запроса или содержит имя триггера или строку "(FK)" для триггеров и действий с внешними ключами.
Схема таблицы tables_used:
CREATE TABLE tables_used( type TEXT, schema TEXT, name TEXT, wr INT, subprog TEXT, stmt HIDDEN );
Таблица tables_used предназначена для отображения b-деревьев файловой базы данных, которые считываются или записываются подготовленным запросом, как самим основным запросом, так и связанными триггерами и действиями с внешними ключами. Столбцы следующие:
type → либо "table", либо "index", в зависимости от роли b-дерева.
schema → база данных, в которой находится b-дерево. Это будет "main" для основной базы данных (обычный случай), "temp" для временных таблиц и индексов или имя, назначенное прикреплённым базам данных оператором ATTACH.
name → имя таблицы или индекса
wr → 0, если объект читается, 1, если объект записывается
subprog → подпрограмма, в которой осуществляется доступ к объекту. NULL означает основное тело подготовленного запроса. В противном случае это поле содержит имя триггера или "(FK)" для действия с внешним ключом.
Эта страница была в последний раз изменена 08.01.2022 05:02:57 UTC
SQLite is in the Public Domain.
https://sqlite.org/bytecodevtab.html