RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.
Виртуальная таблица UNION
  1. Виртуальная таблица UNION (далее: "union-vtab") это виртуальная таблица, которая заставляет многократные независимые таблицы rowid быть похожими на единственную большую таблицу.

  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. Следовательно, "temp." до tabname обязателен. Только сам 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, должны быть таблицами rowid.

  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 всегда read-only. Поддержка написания может быть добавлена в более позднее время, но запись не часть начального внедрения.

  16. ВАЖНО: sqlite3_blob_open() НЕ работает с union-vtab. Содержимое BLOB должно быть прочитано из union-vtab, используя обычные SQL-операторы.