[spip-dev] présentation et proposition: abstraction de base de données

Bonjour à tous,
nouveau sur cette liste, le moins que je puisse faire est de me
présenter, le seul problème c'est qu'on sait jamais trop quoi dire dans
ces moments la !

je suis dans "le sud ouesteu cong" (avec l'accent chantant) et membre de
l'ABUL (pub: www.abul.org)
bref, développeur de logiciels libres, et uniquements libres (au sens
GNU/GPL) avec comme "gros" projet AbulÉdu qui est une solution complète
pour mettre du logiciel libre dans les écoles primaires (pub encore,
www.abuledu.org). Pour mettre du logiciel libre sur le "serveur" de
l'école mais aussi sur les postes clients, et gérer quand même des
postes windows et mac sur le réseau de l'école. En bref, du bonheur.
Dans nos utilisateurs d'AbulEdu, on a des personnes qui nous ont parlées
de spip, et ce depuis longtemps.

Il y a "longtemps" donc, j'ai regardé le code, remarqué que seul mysql
était géré et par manque de temps, laissé tomber. Je suis reviendu à la
charge y a 4 ou 5 mois, idem :cry:

Cette fois c'est décidé, je suis sur la liste et j'ai commencé à faire
ce que je voulais sur le code de spip, donc je vous lance ce mail :o)

Puis-je contribuer rapidement à faire de sorte que spip soit
"indépendant" du moteur de base de données ?

Tous les outils que je développe se basent sur une petite lib
d'abstraction de base de données que j'ai faite, simple et efficace je
vous donne le détail :

- j'ai regardé du côté des api orientées objet de gestion des bases de
   donénes, j'ai trouvé ça lourdingue
-> j'ai fait une lib toute simple qui a les fonctions suivantes (par
   exemple)
   SQL_Connect
   SQL_Exec
   SQL_NumRows
   etc.
   qui ont une syntaxe très proche des fonctions pg_ equivalentes,
   parceque oui je viens de postgresql et non de mysql :o)

Si vous voulez voir du code qui utilise cette lib, AbulBCD qui permet de
gérer la bibliothèque d'une école primaire, en fait un usage assez
intence, et ça marche en mysql et postgresql (et autres, il suffit de
rajouter ce que vous voulez dans la lib) ... http://bcd.abuledu.org pour
une démo en ligne et le code source est ici par exemple
Lib MySQL
http://cvs.rycks.com/cgi-bin/cvsweb/bcd2002/web/libs/mysql.erics.php?rev=1.2&content-type=text/x-cvsweb-markup&cvsroot=AbulBCD
Lib equivalente PgSQL
http://cvs.rycks.com/cgi-bin/cvsweb/bcd2002/web/libs/pgsql.erics.php?rev=1.2&content-type=text/x-cvsweb-markup&cvsroot=AbulBCD

Exemple de code
http://cvs.rycks.com/cgi-bin/cvsweb/bcd2002/web/libs/admin_io.php?rev=1.3&content-type=text/x-cvsweb-markup&cvsroot=AbulBCD

$reqs = "select count(*) from author where firstname='$prenom' and lastname='$nom'";
$ress = SQL_Exec($conn,$reqs);
if(SQL_Result($ress,0,0) == 0){
  $reqi = "insert into author(firstname,lastname) values('$prenom','$nom')";
  $resi = SQL_Exec($conn,$reqi);

Etc.

Pour en revenir à SPIP, l'avantage d'une telle lib, c'est que comme la
syntaxe est très proche, ben j'ai codé un petit script php qui nous
transforme l'actuel CVS de spip en "code utilisant cette lib" ... bien
entendu à quelques exeptions près qu'il faut reprendre à la main.

Ma question est donc la suivante (mes questions plutot)
- es-ce que ça vous intéresse
- es-ce personne n'est déjà en train de faire ce travail
- quel est le moment ou je peux prendre le CVS et ou personne ne
   bossera dessus, j'ai besoin d'une soirée / nuit complète pour faire
   toutes les modifs, tester, valider et vous envoyer le patch ?

Merci d'avance,
Éric

Bonjour,

Tout d'abord bien venu sur la liste spip-dev du développeur
d'AbulEdu. Nous suivons à Soissons cette liste et
ta proposition d'abstraction de la base de données (mysql-postgresql)
répond à une des question que nous avions inscrit à l'ordre
du jour du forum de Soissons des 18 - 19 et 20 juin prochain.
Je transmets ta proposition aux développeurs qui travaillent sur
les projets (mysql-postgresql-xml) et aux stagiaires de l'Ecole Centrale
de Paris.

Bien amicalement

Pierre Jarret

Pierre B. JARRET
SIL (Soissons Informatique Libre)
http://www.soissons-technopole.org
Tél : 03 23 76 21 12
Portable : 06 07 94 83 20

Hello,

Tout d'abord, bienvenue !!!

Puis-je contribuer rapidement à faire de sorte que spip soit
"indépendant" du moteur de base de données ?

Ce serait génial, oui ... :wink:

Tous les outils que je développe se basent sur une petite lib
d'abstraction de base de données que j'ai faite

Est-ce que cette lib peut utiliser PEAR:DB pour simplifier encore plus
le boulot ?

En fait, je m'apprêtais à modifier SPIP la semaine prochaine pour
qu'il utilise PEAR:DB au lieu de MySQL natif, donc peut-être que ce
que tu as fait pourrait accélérer les choses ...

j'ai regardé du côté des api orientées objet de gestion des bases
de donénes, j'ai trouvé ça lourdingue

Franchement ...
http://pear.php.net/manual/fr/core.db.tut_connect.php

- es-ce que ça vous intéresse

Ouiiiiiiiiiiiii !!! :slight_smile:

- es-ce personne n'est déjà en train de faire ce travail

J'allais ...

-Nicolas

Hello,

Pour en revenir à SPIP, l'avantage d'une telle lib, c'est que comme la
syntaxe est très proche, ben j'ai codé un petit script php qui nous
transforme l'actuel CVS de spip en "code utilisant cette lib" ... bien
entendu à quelques exeptions près qu'il faut reprendre à la main.

Dans les versions les plus récentes, tous les appels à la base de données
passent par une fonction appelée spip_query, dans ecrire/inc_version.php3.
L'idée serait donc de remplacer l'appel à mysql_query, dans cette fonction,
par une fonction d'abstraction.

Heu, tu es sûr que tout marche de cette façon :

- LIMIT x,y
- CREATE TABLE et ALTER TABLE
- INSERT DELAYED pour l'indexation
- [...]

J'ai vu que PEAR::DB émulait les séquences pour MySQL, ça pose un gros
problème : si deux exécutions concurrentes essaient d'insérer un nouvel
objet, il pourrait se retrouver avec le même ID (donc échec ou comportement
bizarre, selon la programmation du script). Il serait préférable
d'émuler plutôt le AUTO_INCREMENT côté Postgres.

a+

Antoine.

Heu, tu es sûr que tout marche de cette façon :
- LIMIT x,y
- CREATE TABLE et ALTER TABLE
- INSERT DELAYED pour l'indexation
- [...]

Non, il faut émuler ces fonctionnalités non standards.

J'ai vu que PEAR::DB émulait les séquences pour MySQL

Pour tout type de DB en fait.

ça pose un gros problème : si deux exécutions concurrentes essaient
d'insérer un nouvel objet, il pourrait se retrouver avec le même ID

Non, regarde le code ... :wink:

Il serait préférable d'émuler plutôt le AUTO_INCREMENT côté
Postgres

Pour que selon ta logique il y ait des problèmes avec PostgreSQL mais
pas MySQL ??? Petit voyou, va ... :stuck_out_tongue:

-Nicolas

Salut,

Je crois que le sujet est régulièrement abordé... désolé de rabacher.
J'utilise SPIP sur un site qui va être essentiellement fréquenté par des
anglophones. La partie publique va passer en anglais sans probleme
(et sans vous deranger =).

Pour la partie admin, je pense qu'une partie va devoir être traduite,
pour que tout ce petit monde puisse travailler. De toute manière,
il me faudra passer par la, donc, la méthode la plus simple sera surement le
remplacement pur et simple de la VF par par VA.

Ma question est donc : y a t il des projets démarré sur la localisation
de SPIP (si je me souviens bien, c'est prévu à moyen terme, mais
pas de suite...).
Existe t il des traductions deja faite, et accessibles?

Si je traduit, comme puis je vous fournir ca, pour que vous l'intégriez
dans SPIP le temps venu?

Voila. Rien d'urgent.
HTH

Dams

Hello,

PEAR::db me semble très très intéressante mais attention beaucoup de
code de spip devra être revu ...

Et la compatibilité avec PHP4 sera perdue, mais il me semble qu'il est
bien temps que tous les projets PHP majeurs passent à PHP4 alors que
le 5 ne va plus trop tarder et que 95% des hébergeurs, même gratuits,
disposent de PHP4 ...

il me semble par exemple que les last_insert_id n'existent pas !

En effet, il faut utiliser les séquences. C'est moins spécifique à
MySQL, donc plus portable.

Je lance actuellement un projet basé en partie sur SPIP, et j'ai
besoin (entre autre) d'unifier les accès bdd et la gestion des
utilisateurs/connexions, et de simplifier la saisie d'articles avec
une barre d'icônes à la manière des traitements de texte.

Pour les deux premiers, je vais fortement utiliser les packages DB et
Auth de PEAR, mais si quelqu'un a déjà des choses disponibles, ça
m'intéresse.

-Nicolas