![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Виртуальная таблица UNION (далее: "union-vtab") это
виртуальная таблица,
которая заставляет многократные независимые таблицы
rowid быть похожими на
единственную большую таблицу. Таблицы, которые участвуют в union-vtab,
могут быть в том же самом файле базы данных, или они могут быть в отдельных
файлах баз данных, которые являются
ATTACH
к тому же самому соединению с базой данных. union-vtab не встроен в SQLite.
Union-vtab это загружаемое расширение.
Исходный код для union-vtab содержится в единственном файле, расположенном в
ext/misc/unionvtab.c в исходном дереве SQLite. Новый экземпляр union-vtab создается следующим образом: Каждый 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-операторы.
Choose any three.
CREATE VIRTUAL TABLE temp.tabname USING unionvtab(query);