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