Template Version: @(#)sac_nextcase 1.64 07/13/07 SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
1.1. Project/Component Working Name:
SQLite3.x
1.2. Name of Document Author/Supplier:
Author: Nicolas Williams
1.3 Date of This Document:
17 February, 2008
4. Technical Description
I'm sponsoring this case for myself. I've set the timer to expire on
2008-02-27.
--------------------------------------------------------------------------------
PROPOSAL
--------
I propose to integrate SQLite 3.x into Solaris via the SFW
consolidation. If 3.5.7 is released in time then I'll integrate that,
else I'll integrate 3.5.4.
INTRODUCTION
------------
SQLite3 is an open source (public domain) embeddable database that
supports a large subset of SQL92 (and extensions), with a C/C++ API and
a command-line SQL shell. There are many open source projects that
use SQLite, and bindings for a large number of programming languages.
For much more information about SQLite3 see:
http://sqlite.org/
The first consumers of SQLite3 in Solaris will be Fifrefox and
Thunderbird. Python bindings will be provided by PSARC/2008/081. We
expect a number of possible future consumers of SQLite3 in Solaris and
OpenSolaris, such the SMB server (PSARC/2006/715) and the ID mapping
system (PSARC/2006/315), and perhaps even Solaris Kerberos.
DETAILS
-------
The SQLite3 C/C++ API, SQL syntax and pragmas will be available mostly
as Uncommitted, with some parts of it as Obsolete Volatile and other
parts as Volatile, with the accorded stabilities derived from the
SQLite3 API documentation's use of "internal," "obsolete" and
"experimental" adjectives. The stability for some aspects of SQLite3.x
is not obvious, such as the CLI's options, some of the pragmata, and
some of SQLite3's advanced thread features.
A more complete listing of interfaces and stabilities is below.
There is some risk is using Uncommitted for SQLite3 interfaces, but
given the SQLite community's record on compatibility this risk seems
low.
IF the SQLite3 community should make a release which breaks interfaces
whose stability we've marked as Uncommitted, and should we need to ship
such a version of SQLite3 prior to a new minor release of Solaris, then
we may have to spend resources to restore the old interface or else,
most likely, ship multiple versions of SQLite (multiple shared objects,
perhaps multiple CLIs, but only the latest version's header files).
Build configuration options will be:
./configure --enable-threadsafe --enable-cross-thread-connections
--enable-threads-override-locks --enable-debug --enable-shared
Note that one feature will be excluded:
o readline support for the SQLite3 command shell
No features will be omitted through the use of SQLITE_OMIT_* cpp macros.
No compile-time settable parameters will be set (all have reasonable
defaults, and all can be set at run-time).
Also, neither the "icu" nor "fts2" extensions will be included. The
former provides better Unicode support via ICU, while the latter
provides a text indexing tool. A future case may include these, and/or
an extension for use of Solaris' native Unicode APIs.
Note: --enable-threads-override-locks enables a run-time check for
whether a thread can override another's POSIX advisory file lock.
Reading the large block comment in SQLite3's src/os_unix.c leads
me to conclude that a run-time sanity check of this behavior is
best.
The SQLite3 command shell, shared library and header files will be
delivered as follows:
Note that the version number of the libsqlite3 shared object comes from
SQLite3's build system; it is unclear what it ("0.8.6") means.
+-------------------------------------+--------------+
| Filesystem object | Stability |
+-------------------------------------+--------------+
| | |
| /usr/bin/sqlite3 | Committed |
| /usr/lib/libsqlite3.so | Committed |
| /usr/lib/libsqlite3.so.0 | Uncommitted |
| /usr/lib/libsqlite3.so.0.8.6 | Uncommitted |
| /usr/lib/pkgconfig/sqlite3.pc | Volatile |
| /usr/include/sqlite3.h | Committed |
| /usr/include/sqlite3ext.h | Committed |
| /usr/share/man/man1/sqlite3.1 | Committed |
| /usr/share/doc/sqlite3/index.html | Uncommitted |
| /usr/share/doc/sqlite3/* | Volatile |
| SUNWsqlite3 | Uncommitted |
| | |
+-------------------------------------+--------------+
+--------------------------+---------------+
| Interface | Stability |
+--------------------------+---------------+
| | |
| CLI options | Volatile |
| CLI arguments | Uncommitted |
| | |
+--------------------------+---------------+
| C/C++ API | Uncommitted |
| excluding internal, | |
| obsolete and | |
| experimental | |
| portions (see below) | |
+--------------------------+---------------+
| C/C++ API | Obsolete |
| obsolete portions | Volatile |
+--------------------------+---------------+
| C/C++ API | Volatile |
| experimental portions | |
+--------------------------+---------------+
| C/C++ API | Project |
| internal portions | Private |
+--------------------------+---------------+
| PRAGMAs | Volatile |
| excluding obsolete | |
| and experimental | |
| portions | |
+--------------------------+---------------+
| PRAGMAs | Volatile |
| experimental portions | |
+--------------------------+---------------+
| SQL syntax and | Uncommitted |
| features | |
+--------------------------+---------------+
| EXPLAIN QUERY PLAN | Volatile |
| output | |
+--------------------------+---------------+
| EXPLAIN output | Volatile |
+--------------------------+---------------+
+--------------------------------------+
| Uncommitted interfaces |
+--------------------------------------+
| |
| Too many to list -- see notes |
| |
+--------------------------------------+
| Obsolete interfaces |
+--------------------------------------+
| |
| sqlite3_aggregate_count() |
| sqlite3_expired() |
| sqlite3_transfer_bindings() |
| sqlite3_global_recover() |
| sqlite3_thread_cleanup() |
| sqlite3_memory_alarm() |
| |
+--------------------------------------+
| Experimental interfaces |
+--------------------------------------+
| |
| sqlite3_commit_hook() |
| sqlite3_rollback_hook() |
| sqlite3_trace() |
| sqlite3_profile() |
| sqlite3_auto_extension() |
| sqlite3_reset_auto_extension() |
| sqlite3_mutex_held() |
| sqlite3_mutex_notheld() |
| |
| Incremental VACCUM |
| (PRAGMA incremental_vacuum(N)) |
| |
| VM tracing and profiling |
| |
+--------------------------------------+
6. Resources and Schedule
6.4. Steering Committee requested information
6.4.1. Consolidation C-team Name:
SFW
6.5. ARC review type: FastTrack
6.6. ARC Exposure: open