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

Small. Fast. Reliable.
Choose any three.
Виртуальная таблица SQLITE_DBPAGE

1. Обзор

Расширение SQLITE_DBPAGE осуществляет виртуальную таблицу, которая обеспечивает прямой доступ к основному файлу базы данных. SQLITE_DBPAGE способно к чтению и написанию любой страницы базы данных. Поскольку взаимодействие идет через слой пейджера, все изменения транзакционные.

Предупреждение: запись в SQLITE_DBPAGE может очень легко вызвать невосстанавливаемое повреждение базы данных. Не позволяйте компонентам, которым не доверяют, получать доступ к таблице SQLITE_DBPAGE. Записи в SQLITE_DBPAGE отключены, когда флаг SQLITE_DBCONFIG_DEFENSIVE установлен.

Расширение SQLITE_DBPAGE включено в объединение, хотя это отключено по умолчанию. Используйте выбор времени компиляции SQLITE_ENABLE_DBPAGE_VTAB, чтобы позволить расширение SQLITE_DBPAGE. Расширение SQLITE_DBPAGE использует неопубликованные внутренние интерфейсы и не является загружаемым во время выполнения. Единственный способ добавить SQLITE_DBPAGE к применению состоит в том, чтобы собрать его с применением опции времени компиляции SQLITE_ENABLE_DBPAGE_VTAB.

Расширение SQLITE_DBPAGE включено по умолчанию в сборках оболочки командной строки.

2. Использование

Виртуальная таблица SQLITE_DBPAGE обеспечивает прямой доступ к файлу на диске на постраничной основе. У виртуальной таблицы есть схема:

CREATE TABLE sqlite_dbpage(pgno INTEGER PRIMARY KEY, data BLOB);

Файл базы данных SQLite разделен на страницы. Первая страница 1, вторая 2 и т.д. Нет никакой страницы 0. Каждая страница имеет тот же самый размер. Размер каждой страницы это степень 2 между 512 и 65536. См. подробности.

Таблица SQLITE_DBPAGE позволяет смотреть или заменить сырое двоичное содержание каждой страницы файла базы данных. Никакая попытка не предпринята, чтобы интерпретировать содержание страницы. Содержание показано так, как это появляется на диске.

Таблица SQLITE_DBPAGE имеет одну строку для каждой страницы в файле базы данных. SQLITE_DBPAGE позволяет страницам быть прочитанными или переписанными. Однако, размер файла базы данных не может быть изменен. Невозможно изменить количество строк в таблице SQLITE_DBPAGE через DELETE или INSERT.

2.1. SQLITE_DBPAGE и ATTACH-БД

Схема таблицы SQLITE_DBPAGE, показанная выше, неполная. Есть третий скрытый столбец с именем "schema", который определяет, какая ATTACH-БД должна быть прочитана или написана. Поскольку колонка "schema" скрыта, она может использоваться в качестве параметра, когда SQLITE_DBPAGE вызван как табличная функция.

Например, предположите, что дополнительная база данных присоединена к соединению с базой данных, используя:

ATTACH 'auxdata1.db' AS aux1;

Затем, чтобы прочитать первую страницу того файла базы данных:

SELECT data FROM sqlite_dbpage('aux1') WHERE pgno=1;

Если "schema" опущена, она по умолчанию установлена к основной базе данных (обычно 'main', если не переименовано использованием SQLITE_DBCONFIG_MAINDBNAME). Следовательно, следующие два запроса обычно эквивалентны:

SELECT data FROM sqlite_dbpage('main') WHERE pgno=1;
SELECT data FROM sqlite_dbpage WHERE pgno=1;

Таблица SQLITE_DBPAGE может участвовать в соединении точно так же, как любая другая. Следовательно, чтобы видеть содержание первой страницы всех связанных файлах базы данных, можно было бы:

SELECT dbpage.data, dblist.name FROM pragma_database_list AS dblist
       JOIN sqlite_dbpage(dblist.name) AS dbpage WHERE dbpage.pgno=1;