Introduction
SQLite 3 est un moteur de base de données relationnelles accessible par le langage SQL et qui s’interface très simplement avec des langages comme C++, PHP, Tcl/Tk ou encore Python. L’intégralité d’une base de données SQLite est sockée dans un fichier unique indépendant de la plateforme, mais elle peut être également uniquement en mémoire (In Memory Database).
Même si les transactions sont par exemple supportées et que le verrouillage et la journalisation ont été améliorés avec la version 3.0, il faut toutefois bien garder à l’esprit qu’il ne s’agit pas pas d’une base de données client serveur pouvant supporter une concurrence de transactions élevées.
Pour leurs fonctionnements internes, aujourd’hui SQLite 3 est embarqué dans de nombreux produits : Google Chrome, Smartphones, Apache Subversion…
Nécessaire pour le fonctionnement interne d’Apache Subversion, cet article présente la compilation de SQLite 3 sur une plateforme Sun Solaris 10 X86 64 bits avec SunStudio 12.1. Pour plus d’informations sur l’installation des compilateurs SunStudio 12.1 : Installation de Sun Studio 12 sur Sun Solaris 10 X86 pour les compilations.
2 particularités lors de la construction :
- La librairie readline 6.2 64 bits est activée pour bénéficier du rappel des commandes SQL. Pour plus d’informations sur la compilation de GNU Readline sur Sun Solaris 10 X86 : Compilation de GNU Readline sur Sun Solaris 10 X86 .
- Les extensions optionnelles des indexes R*Tree et FTS (Full Text Search) sont ajoutées à la compilation.
Téléchargement
SQLite 3 est disponible en téléchargement sous la forme d’une archive
compressée (sqlite-autoconf-3.x.y.z.tar.gz
) à cette adresse : SQLite Download. C’est la version
amalgame (amalgamation) avec autoconf
qu’il faut choisir : la version amalgame
regroupe tout le code C de SQLite 3 en un seul fichier sqlite3.c
, il est
fortement déconseillé de choisir les sources contenant les fichiers source
individuels.
Ici c’est la version 3.7.7.1 de SQLite 3 qui est téléchargée. L’archive
compressée sqlite-autoconf-3070701.tar.gz
est transférée avec ftp
sur la
machine cible dans le répertoire /Software/tools/temp
puis décompressée et
désarchivée avec les utilitaires gunzip
et tar
:
% cd /Software/tools/temp
% gunzip -c sqlite-autoconf-3070701.tar.gz | tar xvf -
Le code source est alors désarchivé avec la commande tar
dans le sous
répertoire ./sqlite-autoconf-3070701
.
Préparation de l’environnement pour la compilation de SQLite 3 avec SunStudio 64 bits
Environnement pour les compilateurs
La variable $PATH
est mise à jour avant la compilation pour référencer
/usr/ccs/bin
, répertoire qui contient les binaires ld
et ar
, indispensables
pour la génération des liens et les création des librairies *.a
.
% PATH=/usr/ccs/bin:$PATH
% export PATH
Si les liens de SunStudio n’ont pas été installés dans /usr/bin
lors de
l’installation, la variable $PATH
doit référencer également le répertoire
<répertoire de sunstudio 12.1>/bin
pour trouver les compilateurs.
% PATH=/opt/sunstudio12.1/bin:$PATH
% export PATH
Comme il s’agit d’une compilation en 64 bits, la variable d’environnement
$CFLAGS
est créée et mise à jour à -m64
:
% CFLAGS=-m64
% export CFLAGS
Environnement pour la librairie Readline 6.2
La librairie Readline 6.2 64 bits est installée dans le répertoire non
standard /Software/tools/misc/lib
. La variable $LDFLAGS
est modifiée pour
référencer ce répertoire :
% LDFLAGS="-L/Software/tools/misc/lib $LDFLAGS"
% export LDFLAGS
Lorsque la librairie Readline n’est pas détectée, le script de configuration renvoie le message suivant :
checking for library containing readline... no
checking for readline... no
La variable $CFLAGS
doit également être modifiée pour inclure le répertoire
/Software/tools/misc/include
qui contient les fichiers entête readline.h
et
history.h
pour la librairie Readline 6.2 :
% CFLAGS="-I/Software/tools/misc/include $CFLAGS"
% export CFLAGS
Dans le cas contraire, la compilation avec make
tombe en échec :
"shell.c", line 45: cannot find include file: <readline/readline.h>
"shell.c", line 46: cannot find include file: <readline/history.h>
Environnement pour l’activation des extensions R*Tree et FTS3/FTS4 (Full Text Search)
L’extension des indexes R*Tree est activée avec l’option de compilation
-DSQLITE_ENABLE_RTREE=1
dans la variable $CPPFLAGS
:
% CPPFLAGS="-DSQLITE_ENABLE_RTREE=1 $CPPFLAGS"
% export CPPFLAGS
L’extension des indexes FTS3/FTS4 (Full Text Search) est activée avec les
options de compilation -DSQLITE_ENABLE_FTS3
et -DSQLITE_ENABLE_FTS3_PARENTHESIS
dans la variable $CPPFLAGS
:
% CPPFLAGS="-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS $CPPFLAGS"
% export CPPFLAGS
Configuration et compilation
Une fois l’environnement préparé (variables $PATH, $CFLAGS, $CPPFLAGS,
$LDFLAGS, $LD_LIBRARY_PATH
), la configuration de la compilation peut être
déclenchée avec le script configure
.
L’option --help
renvoie les options de configuration (la sortie de l’option
--help
est allégée pour la lisibilité, seules les options qui nous intéressent
sont consignées).
% cd /Software/tools/temp/sqlite-autoconf-3070701 % ./configure --help
`configure' configures sqlite 3.7.7.1 to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... ... Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/bin', `/usr/local/lib' etc. You can specify an installation prefix other than `/usr/local' using `--prefix', for instance `--prefix=$HOME'. ... --enable-readline use readline in shell tool (yes, no) [default=yes] ...
L’option --prefix
est spécifiée ici afin de délocaliser l’installation de
sqlite 3.7.7.1 en dehors des répertoires systèmes /usr
. L’installation est
réalisée dans le répertoire /Software/tools/sqlite/sqlite-3
:
--prefix=/Software/tools/sqlite/sqlite-3
(DIR).
L’historique des commandes avec la librairie readline 6.2 est activée avec
l’option --enable-readline
La ligne de configuration de la compilation est donc la suivante dans cet exemple pratique :
% cd /Software/tools/temp/sqlite-autoconf-3070701
% ./configure --prefix=/Software/tools/sqlite/sqlite-3
--enable-readline
L’environnement étant bien préparé (variables $PATH, $CFLAGS, $CPPFLAGS,
$LDFLAGS, $LD_LIBRARY_PATH
), la configuration se déroule sans problème.
La compilation et l’installation de SQLite 3.7.7.1 sont réalisées avec les
commandesmake
et make install
qui s’exécutent également sans problème :
% cd /Software/tools/temp/sqlite-autoconf-3070701
% make
% make install
Architecture de SQLite
Dans la suite de cet article, DIR
correspond au répertoire d’installation de
SQLite 3 (/Software/tools/sqlite/sqlite-3
). À la fin de la compilation,
l’arborescence créée pour SQLite 3 est la suivante :
DIR/bin
DIR/include
DIR/lib
DIR/share
Le répertoire DIR/include
contient tous les fichiers d’entête *.h
(headers)
pour SQLite 3 : sqlite3.h, sqlite3ext.h
, etc. Ce répertoire doit être inclus
dans les options de compilation des programmes développés avec la couche SQLite
3.
Le répertoire DIR/bin
contient l’utilitaire de requêtes sqlite3.
Les librairies dynamiques et statiques SQLite 3 sont classiquement
installées dans le répertoire DIR/lib
(libsqlite3.so, libsqlite3.a
…).
Tests
Les librairies clientes SQLite3 peuvent dès lors être utilisées après avoir
référencé DIR/bin
(/Software/tools/sqlite/sqlite-3/bin
) dans la variable $PATH
et DIR/lib
(/Software/tools/sqlite/sqlite-3/lib
) dans la variable
$LD_LIBRARY_PATH
:
% export PATH=/Software/tools/sqlite/sqlite-3/bin:$PATH
% export LD_LIBRARY_PATH=/Software/tools/sqlite/sqlite-3/lib:$LD_LIBRARY_PATH
Si la couche SQLite 3 (binaire et librairies) a été compilée avec Oracle
Berkeley DB 5.x (--enable-sql_compat
), le binaire sqlite3
et la librairie
libsqlite3.so
existent également dans la distribution Berkeley DB : vérifier
lors de cette étape la précédence dans les variables $PATH
et
$LD_LIBRARY_PATH
.
Une base de données SQLite physique est créée ou ouverte simplement en
donnant à sqlite3
le nom du fichier
% sqlite3 test.db
SQLite version 3.7.7.1 2011-06-28 17:39:05 Enter ".help" for instructions Enter SQL statements terminated with a ";"
sqlite> create table spa (id int not null); sqlite> insert into spa values (1); sqlite> select * from spa;
1
sqlite> .quit
La création d’une base SQLite3 en mémoire avec sqlite3
est réalisée avec la
commande ATTACH DATABASE
et le mot clé ':memory:
' :
% sqlite3
SQLite version 3.7.7.1 2011-06-28 17:39:05 Enter ".help" for instructions Enter SQL statements terminated with a ";"
sqlite> ATTACH DATABASE ':memory:' AS aux1; sqlite> create table spa (id int not null); sqlite> insert into spa values (1); sqlite> select * from spa;
1
sqlite> .quit
La base de données en mémoire n’existe que pour la connexion courante et est détruite à la déconnexion.