Spec-Zone.ru › SQLite

Функции 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API