L'extension SQL fournit avec les sources des projets Mozilla permet l'accès aux bases de données SQLite3, Mysql ou Postgresql.
Pour l'utiliser vous devez compiler votre projet mozilla avec l'extension SQL.
Avant d'aller plus loin, une version de Xulrunner STABLE 1.8.0.4 compilé avec SVG, l'extension SQL avec SQLITE3 et Mysql, et optimizé, est téléchrgeable à cette adresse :
http://www.adsis.fr/download/setup_xulrunner.exe
La compilation de Xulrunner sous Windows ne pose pas vraiment de problème, alors qu'actuellement, pour les versions CVS et STABLE, l'extension SQL a besoin d'être légerement modifiée.
Avant toute chose, il vous faut quelques prérequis pour construire un projet Mozilla sous Windows, ces prérequis sont décris sur le site de Mozilla :
http://developer.mozilla.org/en/docs/Windows_Build_Prerequisites
Celà dit, quelques remarques importantes pour que la compilation se passe bien. Il faut impérativement utiliser Visual Studio 2003 (VC7), la compilation ne peut pas fonctionner avec VC6 et encore moins Visual Studio 2005 Express Edition, notamment à cause des lib mysql compilées avec VC7. Ou alors vous pouvez très bien compiler Mysql avec votre compilateur.
Installer donc Visual Studio 2003, moztools, les libs glib et libIDL, et bien sûr cygwin.
Récupérer les sources de Mysql :
http://dev.mysql.com/downloads/mysql/5.0.html ( Windows (x86) ) et les installer. Il n'est pas obligatoire d'installer le serveur Mysql.
Récuperer les sources de SQLite :
http://www.sqlite.org/download.html fichier : "sqlite-source-3_3_6.zip"
Il manque le fichier sqlite3.lib, alors soit vous le créez, soit vous pouvez le télécharger là :
http://ftp.emini.dk/pub/php/win32/dev/php_build/lib/sqlite3.lib et le déposer dans le dossier comprenant les sources de sqlite3.
Un script bat va vous permettre de spécifier quelques variables, en voici un qui a fonctionné :
rem --- Set HOME so that cvs and ssh work correctly rem --- cvs uses HOME to locate your .cvspass file, and ssh to locate your .ssh file rem --- if you are using ssh, your HOME should match the home directory specified in /etc/passwd. Seehttp://www.cygwin.com/faq/faq0.html. set HOME=C:\build-mozilla rem --- Set VCVARS to wherever the MSVC vcvars.bat file is found set VCVARS=C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\VCVARS32.BAT rem --- Set MSSDK to wherever the MS SDK is installed rem --- The separate SDK is only required for MSVC6 rem set MSSDK=C:\Program Files\Microsoft SDK rem --- Set MOZ_TOOLS to wherever you have the moztools packaged installed set MOZ_TOOLS=C:\build-mozilla\moztools rem --- Set CYGWINBASE to wherever cygwin is installed set CYGWINBASE=C:\cygwin rem --- If you are using VC7 or VC7.1, you must set GLIB_PREFIX and LIBIDL_PREFIX set GLIB_PREFIX=C:\build-mozilla\moztools-vc71 set LIBIDL_PREFIX=C:\build-mozilla\moztools-vc71 rem --- Prepend Cygwin path rem --- This is necessary so that cygwin find is ahead of windows find.exe in the PATH, but cygwin link is after MSVC link.exe. set PATH=%CYGWINBASE%\bin;%PATH% rem --- Set MSVC environment vars call "%VCVARS%" rem --- Prepend SDK paths rem --- Only required for MSVC6 rem set PATH=%MSSDK%\bin;%PATH% rem set INCLUDE=%MSSDK%\include;%INCLUDE% rem set LIB=%MSDDK%\lib;%LIB% rem --- Add glib/libidl to build environment rem --- Only needed for VC7 or 7.1 set PATH=%PATH%;%GLIB_PREFIX%;%GLIB_PREFIX%\bin set INCLUDE=%GLIB_PREFIX%\include;%INCLUDE% set LIB=%GLIB_PREFIX%\lib;%LIB% rem -- moztools comes last after glib/libIDL set PATH=%PATH%;%MOZ_TOOLS%\bin set MOZ_MYSQL_INCLUDES=/cygdrive/c/build-mozilla/mysql5/include set MOZ_MYSQL_LIBS=/cygdrive/c/build-mozilla/mysql5/lib set JAVA_HOME=/cygdrive/c/build-mozilla/jdk set MOZ_SQLITE_INCLUDES=/cygdrive/c/build-mozilla/sqlite3 set MOZ_SQLITE_LIBS=/cygdrive/c/build-mozilla/sqlite3 set MOZ_ENABLE_MYSQL=1 set MOZ_ENABLE_SQLITE=1 set CVSROOT=:pserver:anonymous:anonymous@cvs-mirror.mozilla.org:/cvsroot rem --- Now the PATH variable contains: rem MS-SDK; MSVC; Cygwin; Windows; glib/libIDL; Moztools rem --- Typically the last thing the script does is launch a cygwin shell rem --- WARNING: This may reset your carefully setup path! Check your /etc/profile and ~/.profile files. bash --login -i
Récupérer les sources :
cvs checkout -r XULRUNNER_1_8_0_4_RELEASE mozilla/client.mk cd mozilla make -f client.mk checkout
Modifier les entêtes de 2 fichiers des sources de l'extension SQL/Mysql : extensions/sql/mysql/src/mozSqlConnectionMysql.h extensions/sql/mysql/src/mozSqlResultMysql.h
et ajouter ces 2 lignes :
#include <windows.h> #include <winsock.h>
juste avant celle ci :
#include "mysql.h"
Ensuite, il faut modifier le Makefile de extensions/sql/build/src : Après ce bloc :
OZ_ENABLE_PGSQL
+= -DMOZ_ENABLE_PGSQL
LIBRARY_LIBS += $(DIST)/lib/$(LIB_PREFIX)sqlpgsql_s.$(LIB_SUFFIX)
SO_LDOPTS += -L$(MOZ_PGSQL_LIBS) -lpq
Modifier le bloc dessous afin qui ressemble à ça :
ifdef MOZ_ENABLE_SQLITE DEFINES += -DMOZ_ENABLE_SQLITE SHARED_LIBRARY_LIBS += $(DIST)/lib/$(LIB_PREFIX)sqlsqlite_s.$(LIB_SUFFIX) EXTRA_DSO_LDOPTS += $(MOZ_SQLITE_LIBS)/sqlite3.lib endif ifdef MOZ_ENABLE_MYSQL DEFINES += -DMOZ_ENABLE_MYSQL SHARED_LIBRARY_LIBS += $(DIST)/lib/$(LIB_PREFIX)sqlmysql_s.$(LIB_SUFFIX) #EXTRA_DSO_LDOPTS += -L$(MOZ_MYSQL_LIBS) -lmysqlclient -lz EXTRA_DSO_LDOPTS += $(MOZ_MYSQL_LIBS)opt/mysqlclient.lib $(MOZ_MYSQL_LIBS)opt/zlib.lib $(MOZ_MYSQL_LIBS)opt/mysys.lib /NODEFAULTLIB:MSVCRT endif
Voilà. Il me semble que toutes les modifications ont été faites. Il reste à faire un bon .mozconfig, qui demande le SVG, l'extension SQL avec SQLite3 et Mysql :
export MOZILLA_OFFICIAL=1 export MOZ_ENABLE_MYSQL=1 export MOZ_ENABLE_SQLITE=1 mk_add_options MOZILLA_OFFICIAL=1 mk_add_options MOZ_ENABLE_MYSQL=1 mk_add_options MOZ_ENABLE_SQLITE=1 mk_add_options MOZ_CO_PROJECT=xulrunner mk_add_options MOZ_MAKE_FLAGS=-j2 ac_add_options --enable-application=xulrunner ac_add_options --enable-extensions=default,sql ac_add_options --disable-debug ac_add_options --disable-tests ac_add_options --enable-optimize ac_add_options --enable-svg
Et à lancer la compilation
make -f client.mk build
puis le packaging :
make -C xpinstall/packager
Si tout se passe bien, vous trouverez votre Xulrunner dans mozilla/dist/xulrunner
A faire ! Ca devrait être moins compliqué comme il n'y aura pas besoin de modifier les entêtes de Mysql ni le Makefile.
Rien de tel qu'un peu de code pour tester votre extension et comprendre le fonctionnement :
Connection directe à une base :
// pour SQLite :
var conn = Components.classes["@mozilla.org/sql/connection;1?type=sqlite"]
.getService(Components.interfaces.mozISqlConnection);
conn.init("", 0, "c:\\test.sdb", "", "");
// ou Mysql :
// var conn = Components.classes["@mozilla.org/sql/connection;1?type=mysql"]
// .getService(Components.interfaces.mozISqlConnection);
// syntax: host, port, database name, username, password
//conn.init("localhost", 3306, "mabase", "monuser", "monmotdepasse");
try {
display_result(conn.executeQuery("select * from matable limit 4"));
} catch(ex) {
alert (e);
}
Connection en utilisant le service SQL (l'identifiant et le mot de passe sont demandés lors de la connexion) :
var sqlService = Components.classes["@mozilla.org/sql/service;1"]
.getService(Components.interfaces.mozISqlService);
var alias = sqlService.getAlias("MYSQL Connection");
if (!alias){
alias = sqlService.addAlias("MYSQL Connection","mysql", "localhost","3306","mabase",0);
}
var connection = sqlService.getConnection(alias);
if (connection){
var result = connection.executeQuery("select * from fiche_client limit 6");
display_result(result);
}
La fonction display_result, pour afficher brièvement le résultat :
function display_result(result) {
var column_count = result.columnCount;
var have_more_data = result.rowCount > 0;
var set = result.enumerate();
var rows = [];
while (have_more_data) {
have_more_data = set.next();
var cols = [];
for (var i = 0; i < column_count; i++) {
cols.push(set.getVariant(i));
}
rows.push(cols.join(", "));
}
alert("" + rows.length + " row(s) in result set:\n"
+ rows.join("\n"));
}
Le contenu de cette page est disponible selon certaines conditions de réutilisation. Lire aussi la page des informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.