Initialize The SQLite Library
int sqlite3_initialize(void); int sqlite3_shutdown(void); int sqlite3_os_init(void); int sqlite3_os_end(void);
La función sqlite3_initialize() inicializa la librería SQLite. La función sqlite3_shutdown() libera cualquier recurso reservado por sqlite3_initialize(). Estas funciones fueron diseñadas para ayudar en el proceso de inicialización y cierre de sistemas embebidos. Las aplicaciones de estación de trabajo que usan SQLite normalmente no necesitan invocar ninguna de estas funciones.
Una llamada a sqlite3_initialize() es una llamada "efectiva" si es la primera vez que es invocada durante la vida del proceso, o si es la primera vez que es invocada después de una llamada a sqlite3_shutdown(). Sólo una llamada efectiva a sqlite3_initialize() realiza una inicialización. El resto de las llamadas son inofensivas, no hacen nada.
Una llamada a sqlite3_shutdown() es una llamada "efectiva" si es la primera llamada desde la última sqlite3_initialize(). Sólo una llamada efectiva a sqlite3_shutdown() realiza una desinstalación. Todas las otras llamadas a sqlite3_shutdown() son inofensivas, no hacen nada.
La función sqlite3_initialize() es multihilo, pero sqlite3_shutdown() no. La función sqlite3_shutdown() debe ser llamada sólo desde un único hilo. Todas las conexiones de base de datos abiertas deben ser cerradas y todos los otros recursos SQLite deben ser liberados antes de invocar a sqlite3_shutdown().
Entre otras cosas, sqlite3_initialize() invocará a sqlite3_os_init(). De forma similar, sqlite3_shutdown invocaría a sqlite3_os_end().
La función sqlite3_initialize() retornará SQLITE_OK si tiene éxito. Si por alguna razón, sqlite3_initialize() es incapaz de inicializar la librería (tal vez porque no le sea posible asignar un recurso necesario, como un mutex) retornará un código de error distinto de SQLITE_OK.
La función sqlite3_initialize() es invocada internamente por muchas otras funciones SQLite de modo que una aplicación generalmente no necesite invocar sqlite3_initialize() directamente. Por ejemplo, sqlite3_open() llama a sqlite3_initialize() así que la librería SQLite será inicializada automáticamente cuando sqlite3_open() sea llamada si no fue inicializada ya. Sin embargo, si SQLite es compilado con la opción de compilación SQLITE_OMIT_AUTOINIT, entonces las llamadas automáticas a sqlite3_initialize() se omiten y la aplicación deberá llamar directamente a sqlite3_initialize() antes de usar ninguna otra función de SQLite. Para una portabilidad máxima, se recomienda que las aplicaciones siembre invoquen sqlite3_initialize() directamente antes de usar cualquier otra función del API. Futuras versiones de SQLite pueden requerir esto. En otras palabras, el comportamiento cuando SQLite es compilado con SQLITE_OMIT_AUTOINIT puede ser el comportamiento por defecto en futuras versiones de SQLite.
La función sqlite3_os_init() hace una inicialización de la librería SQLite específica para el sistema operativo. la función sqlite3_os_end() deshace el efecto de sqlite3_os_init(). Las tareas típicas realizadas por estas funcione son la asignación o cancelación de recursos estáticos, inicialización de variables globales, la creación de un módulo por defecto sqlite3_vfs, o la creación de una configuración por defecto usando sqlite3_config().
la aplicación nunca debe invocar directamente sqlite3_os_init() o sqlite3_os_end(). La aplicación sólo debe invocar sqlite3_initialize() y sqlite3_shutdown(). La función sqlite3_os_init() es llamada automáticamente por sqlite3_initialize() y sqlite3_os_end() es invocada por sqlite3_shutdown(). Las implementaciones apropiadas de sqlite3_os_init() y sqlite3_os_end() están construidas dento de SQLite cuando es compilado para Unix, Windows, o OS/2. Cuando se construye para otras plataformas (usando la opción de compilación SQLITE_OS_OTHER=1) la aplicación debe suministrar la implementación adecuada para sqlite3_os_init() y sqlite3_os_end(). Una implementación suministrada por la aplicación de sqlite3_os_init() o sqlite3_os_end() debe retornar SQLITE_OK si tiene éxito y algún otro código de error en caso de fallo.