Допустимый диапазон строк SQLite? - PullRequest
6 голосов
/ 23 января 2012

Я делаю оболочку SQLite C API.И я хочу вернуть rowid как целочисленный тип.Чтобы отметить ошибку, мне нужно неверное значение rowid.Есть ли недопустимое значение строки SQLite?Или все значения в 64-битных целых числах со знаком действительны для rowid?(потому что, если это так, я должен выбрать другой способ реализации маркировки ошибок)

1 Ответ

14 голосов
/ 23 января 2012

Идентификаторы строки представляют собой 64-разрядные целые числа со знаком, поэтому максимум равен 0x7FFFFFFFFFFFFFFFLL. Но если отрицательный или нулевой идентификатор строки не был введен явно, автоматически сгенерированные идентификаторы строки всегда больше нуля. Если вы можете быть уверены, что идентификаторы строк всегда будут генерироваться автоматически, тогда ноль или -1 будут безопасными значениями для возврата статуса ошибки.

Если подумать дальше, я понимаю, что вызов API sqlite3_last_insert_rowid возвращает ноль, если ничего не было вставлено в таблицу, что делает ноль де-факто "недействительным" идентификатором строки.

...