Spec-Zone.ru › SQLite

Виртуальная таблица UNION

  1. Виртуальная таблица UNION (в дальнейшем: «union-vtab») — это виртуальная таблица, которая позволяет нескольким независимым таблицам с первичным ключом выглядеть как одна большая таблица.

  2. Таблицы, участвующие в union-vtab, могут находиться в одном файле базы данных или в отдельных файлах баз данных, которые подключены к одному соединению базы данных с помощью ATTACH.

  3. union-vtab не является частью SQLite. union-vtab — это загружаемый модуль расширения. Исходный код union-vtab находится в одном файле по адресу ext/misc/unionvtab.c в дереве исходного кода SQLite.

  4. Новый экземпляр union-vtab создается следующим образом:

     CREATE VIRTUAL TABLE temp.tabname USING unionvtab(query); 
  5. Каждая union-vtab должна быть в пространстве имен TEMP. Поэтому перед именем таблицы tabname требуется «temp.». Только сама union-vtab должна находиться в пространстве имен TEMP — отдельные таблицы, которые объединяются, могут быть из любой базы данных, подключенной с помощью ATTACH.

  6. Запрос query в операторе CREATE VIRTUAL TABLE для union-vtab должен быть корректным SQL-запросом, возвращающим четыре столбца и произвольное количество строк. Каждая строка в результате выполнения запроса query представляет собой отдельную таблицу, которая должна участвовать в объединении.

    1. Первый столбец — имя схемы базы данных, содержащей таблицы. Например: «main», «zone512».
    2. Второй столбец — имя таблицы.
    3. Третий столбец — минимальное значение первичного ключа (rowid) в таблице.
    4. Четвертый столбец — максимальное значение первичного ключа (rowid) в таблице.
  7. Запрос query для оператора CREATE VIRTUAL TABLE union-vtab может быть оператором SELECT или операторным клаузой VALUES.

  8. Запрос query выполняется один раз при первом столкновении с оператором CREATE VIRTUAL TABLE, и результаты этого выполнения используются при всех последующих обращениях к union-vtab. Если результаты query изменяются, то union-vtab следует удалить с помощью DROP и создать заново, чтобы запрос query был выполнен снова.

  9. Диапазоны первичных ключей (rowid) различных таблиц в union-vtab не должны перекрываться.

  10. Все таблицы, участвующие в union-vtab, должны иметь одинаковые определения CREATE TABLE, за исключением имен таблиц.

  11. Все таблицы, участвующие в union-vtab, должны быть таблицами с первичным ключом.

  12. Имена и определения столбцов для tabname будут такими же, как и в базовых таблицах. Приложение может обращаться к tabname так же, как к одной из реальных базовых таблиц.

  13. Ни одна таблица в union-vtab не может содержать записи, которые находятся вне границ первичных ключей (rowid), установленных запросом query в операторе CREATE VIRTUAL TABLE.

  14. union-vtab должен оптимизировать доступ к базовым реальным таблицам, когда ограничения запроса относятся к формам, представленным ниже. Другие типы ограничений могут быть оптимизированы в будущем, но только эти ограничения оптимизированы в исходной реализации.

    • rowid=$id
    • rowid IN query-or-list
    • rowid BETWEEN $lwr AND $upr

    Другие типы ограничений могут использоваться и будут работать, но другие ограничения будут проверяться индивидуально для каждой строки и не будут оптимизироваться (по крайней мере, не изначально). Все проверки ограничений полностью автоматические независимо от того, происходит ли оптимизация. Оптимизация, о которой говорится в этом пункте, является только соображением производительности. Тот же результат получается независимо от того, оптимизируется ли запрос.

  15. union-vtab является только для чтения. Поддержка записи может быть добавлена впоследствии, но запись не является частью исходной реализации.

  16. Примечание: интерфейс sqlite3_blob_open() не работает для union-vtab. Содержимое BLOB необходимо читать из union-vtab с помощью обычных SQL-запросов.

Эта страница была последняя изменена 08.01.2022 05:02:57 UTC

SQLite is in the Public Domain.
https://sqlite.org/unionvtab.html

Spec-Zone.ru

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