Abstration base de données MySQL/PostgreSQL

Bonjour à tous,

Etant un grand fan de PostgreSQL, j’aimerais faire une revue du support PostgreSQL et de la manière dont les requêtes SQL sont réécrites à la volée dans le core de Dolibarr. J’ai cherché dans le dossier « core » ou « includes » de Dolibarr, mais sans succès. Où le code gérant les requêtes SQL se situe-t-il ?

Merci d’avance.

il ne me semble pas qu’il y ait de réecritures de requete (à la volée ou au filet), elle sont compatibles avec les deux base (postgres et mariadb) dés le départ
Travis (l’outils d’intégration continue associé au dépot git de dolibarr) testant à la fois avec mariaDb et postgreSQL cela permet de garantir la pleine compatibilité entre les deux bases.
Rien ne t’empeche si tu veux améliorer les choses c’est ajouter des tests dans travis

Les requêtes SQL doivent être compatibles.

Je m’interroge sur la compatibilité des requêtes d’upgrade:

La syntaxe MySQL:
https://dev.mysql.com/doc/refman/5.7/en/alter-table.html

Il y a de nombreuses différences avec la syntaxe SQL99 standard:
https://www.postgresql.org/docs/devel/static/sql-altertable.html

Par exemple, ces requêtes vont aboutir à une erreur sous PostgreSQL:
MySQL: To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60);
Il fallait écrire :
PostgreSQL: ALTER TABLE llx_table ALTER COLUMN oldname RENAME newname;

MYSQL : To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60);
Il fallait écrire :
ALTER TABLE llx_table ALTER COLUMN type varchar(60);

MariaBD est bien compatible SQL99 :wink:

Par exemple :

J’ai écrit la SPEC:
https://github.com/Dolibarr/dolibarr/issues/7049

tu as regardé le paramétrage de Travis?
Il me semble que le controle sur les normes SQL sont en place justement
Les montés de versions fonctionnent depuis pas mal de temps, y compris au niveau de postgre donc j’ai tendance à penser qu’il n’y a pas de choses à faire de ce coté…
tu as regardé ici?

Il y a bien une couche d’abstraction dans htdocs/core/db
Database.interface.php DoliDB.class.php index.html mssql.class.php mysqli.class.php pgsql.class.php sqlite3.class.php

Les requêtes sont réécrites à la volée et c’est même bien écrit. Par exemple ALTER TABLE CHANGE COLUMN donne bien deux requêtes sous PostgreSQL selon qu’on change le type ou que l’on renomme la colonne d’une table.