Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Extension sql

L'extension SQL

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.

Télécharger Xulrunner avec l'extension SQL pour Windows

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_xulru(..)

Compilation pour Xulrunner sous Windows

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

Compilation pour Xulrunner sous Linux

A faire ! Ca devrait être moins compliqué comme il n'y aura pas besoin de modifier les entêtes de Mysql ni le Makefile.

Tests et code

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.