2012-01-23 15 views
6

Estoy creando un contenedor de SQLite C API. Y quiero devolver rowid como tipo entero. Para marcar el caso de error, necesito un valor no válido de rowid. ¿Hay valor no válido de SQLite rowid? ¿O todos los valores en enteros de 64 bits con signo son válidos para rowid? (porque si lo es, tengo que elegir otra forma de implementar el caso de error de marcado)¿Rango válido de rowid de SQLite?

+0

Aquí está la especificación sobre rowid: http://www.sqlite.org/autoinc.html – Eonil

Respuesta

13

Los ID de fila son enteros de 64 bits, por lo que el máximo es 0x7FFFFFFFFFFFFFFFLL. Pero a menos que se haya ingresado explícitamente una identificación de fila negativa o cero, las ID de fila generadas automáticamente siempre son mayores que cero. Si puede estar seguro de que las Id. De fila siempre se generarán automáticamente, entonces cero o -1 serían valores seguros para las devoluciones de estado de error.

Pensando además, me doy cuenta de que la llamada sqlite3_last_insert_rowid API devuelve cero si nunca se ha insertado nada en la tabla, por lo que cero es una identificación de fila "no válida" de facto.

+0

Gracias por mencionar que se pueden insertar valores cero y negativos explícitos. Iré por otro mecanismo. :) – Eonil

Cuestiones relacionadas