Spec-Zone.ru › SQLite

Определить, изменяет ли SQL-запрос базу данных

Интерфейс sqlite3_stmt_readonly(X) возвращает true (ненулевое значение), если и только если подготовленный запрос X не вносит прямых изменений в содержимое файла базы данных.

Обратите внимание, что определенные приложением SQL-функции или виртуальные таблицы могут косвенно изменять базу данных как побочный эффект. Например, если приложение определяет функцию "eval()", которая вызывает sqlite3_exec(), то следующее SQL-утверждение будет изменять файл базы данных через побочные эффекты:

Но так как утверждение SELECT не изменяет файл базы данных напрямую, sqlite3_stmt_readonly() всё равно вернёт true.

Управляющие транзакциями утверждения, такие как BEGIN, COMMIT, ROLLBACK, SAVEPOINT и RELEASE, приводят к возврату true от sqlite3_stmt_readonly(), поскольку сами утверждения фактически не изменяют базу данных, а управляют временем, когда другие утверждения изменяют базу данных. Утверждения ATTACH и DETACH также приводят к возврату true от sqlite3_stmt_readonly(), так как, хотя эти утверждения изменяют конфигурацию подключения к базе данных, они не вносят изменений в содержимое файлов базы данных на диске. Интерфейс sqlite3_stmt_readonly() возвращает true для BEGIN, поскольку BEGIN просто устанавливает внутренние флаги, но команды BEGIN IMMEDIATE и BEGIN EXCLUSIVE действительно взаимодействуют с базой данных, поэтому sqlite3_stmt_readonly() возвращает false для этих команд.

Эта функция возвращает false, если существует возможность того, что утверждение может изменить файл базы данных. Возврат false не гарантирует, что утверждение изменит файл базы данных. Например, утверждение UPDATE может иметь условие WHERE, которое делает его недействующим, но результат sqlite3_stmt_readonly() всё равно будет false. Аналогично, утверждение CREATE TABLE IF NOT EXISTS является чтением без записи и недействующим, если таблица уже существует, но sqlite3_stmt_readonly() всё равно возвращает false для такого утверждения.

Если подготовленное утверждение X — это утверждение EXPLAIN или EXPLAIN QUERY PLAN, то sqlite3_stmt_readonly(X) возвращает то же значение, что и если бы префикс EXPLAIN или EXPLAIN QUERY PLAN отсутствовал.

См. также списки объектов, констант и функций.

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

Spec-Zone.ru

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