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 :
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/Win(..)
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(..) ( 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/ph(..) 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. See [[http://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"));
}
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - 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.