Управление строками SQLite в режиме транзакций - PullRequest
0 голосов
/ 21 сентября 2010

Я использую sqlite3_bind_text для привязки текстовых параметров к моим запросам с флагом SQLITE_STATIC, поскольку я знаю, что текстовый указатель остается действительным по крайней мере до тех пор, пока запрос не будет выполнен.

Недавно я внес изменения, чтобы запросы выполнялись в режиме транзакции (много таких запросов в одной транзакции). Должен ли текстовый буфер оставаться действительным до завершения транзакции?

Я имею в виду, что мои текстовые буферы действительны в течение одного запроса, но не для всей транзакции. Должен ли я указать флаг SQLITE_TRANSIENT?

1 Ответ

0 голосов
/ 24 сентября 2010

Да, если вы используете SQLITE_STATIC, вы должны оставить содержимое в покое до завершения транзакции. Более того, вы должны оставлять содержимое в покое, пока вы не отменит параметр к чему-либо другому или пока не освободите оператор.

SQLITE_TRANSIENT запрашивает, чтобы Sqlite сделал внутреннюю копию строки, которой он будет управлять надлежащим образом. Учитывая ваше описание, это, вероятно, то, что вы должны использовать. В противном случае вам придется управлять своей собственной копией каждой строки для каждого оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...