Виртуальная таблица UNION (далее: "union-vtab") это виртуальная таблица, которая заставляет многократные независимые таблицы rowid быть похожими на единственную большую таблицу.
Таблицы, которые участвуют в union-vtab, могут быть в том же самом файле базы данных, или они могут быть в отдельных файлах баз данных, которые являются ATTACH к тому же самому соединению с базой данных.
union-vtab не встроен в SQLite. Union-vtab это загружаемое расширение. Исходный код для union-vtab содержится в единственном файле, расположенном в ext/misc/unionvtab.c в исходном дереве SQLite.
Новый экземпляр union-vtab создается следующим образом:
CREATE VIRTUAL TABLE temp.tabname USING unionvtab(query);
Каждый union-vtab должен быть в пространстве имен TEMP. Следовательно, "temp." до tabname обязателен. Только сам union-vtab обязан быть в пространстве имен TEMP: отдельные таблицы в нем могут быть где угодно через ATTACH.
query в CREATE VIRTUAL TABLE для union-vtab должно быть правильно построенным SQL-запросом, который возвращает четыре колонки и произвольное число строк. Каждая строка в результате query представляет единственную таблицу, которая должна участвовать в союзе.
query в CREATE VIRTUAL TABLE для union-vtab может быть SELECT или выражением VALUES.
query управляют однажды, когда сталкиваются с CREATE VIRTUAL TABLE, и результаты этого используются для всего последующего доступа к union-vtab. Если результаты query изменились, union-vtab должен быть DROP и пересоздан, чтобы заставить query выполниться снова.
Не должно быть никакого наложения в группах rowid для различных таблиц в union-vtab.
У всех таблиц в union-vtab должны быть идентичные определения CREATE TABLE, за исключением того, что названия таблиц могут отличаться.
Все таблицы, которые участвуют в union-vtab, должны быть таблицами rowid.
Имена столбцов и определения для tabname совпадут с базовыми таблицами. Применение может получить доступ к tabname точно так же, как если бы это была одна из реальных базовых таблиц.
Никакая таблица в union-vtab не может содержать записи, которые находятся за пределами границ rowid, установленных query в CREATE VIRTUAL TABLE.
union-vtab должен оптимизировать доступ к основным реальным таблицам, когда ограничения на запрос будут среди форм, показанных ниже. Другие виды ограничений могут быть оптимизированы в будущем, но только эти ограничения оптимизированы в начальном внедрении.
Другие виды ограничений могут использоваться и будут работать, но другие ограничения будут проверены индивидуально на каждой строке и не будут оптимизированы (по крайней мере, не первоначально). Вся ограничительная проверка абсолютно автоматическая независимо от того, происходит ли оптимизация. Оптимизация, упомянутая в этом пункте маркированного списка, является только исполнительным соображением. Тот же самый результат получен независимо от того, оптимизирован ли запрос.
union-vtab всегда read-only. Поддержка написания может быть добавлена в более позднее время, но запись не часть начального внедрения.
ВАЖНО: sqlite3_blob_open() НЕ работает с union-vtab. Содержимое BLOB должно быть прочитано из union-vtab, используя обычные SQL-операторы.