Bonjour à tous,
J'ai décidé de reprendre le projet opensource doctrine-spatial. Doctrine, un abstracteur de base de données, permet de faire le lien entre les objets PHP et la base de données. Doctrine spatial est une extension pour intégrer les types géométriques, géographiques et les fonctions spatiales. Le projet est dormant depuis 2017. Je le reprends. Je remarque dans le code quelques écueils que je voudrais éviter.
Par exemple, la fonction CONTAINS permet de déterminer si un objet en contient un autre. En MySQL 5.7, elle se nommait CONTAINS, en MySQL 8.0, elle se nomme ST_CONTAINS, en PostgreSQL, elle se nomme ST_CONTAINS et en MariaDB, l'algorithme est différent et ne renvoie pas le même résultat qu'en MySQL 5.7. (Je crois que les arguments sont inversés, mais je n'ai pas vérifié).
Bref, l'objectif d'un abstracteur de données est de rendre l'application compatible quelque soit le moteur de base de données derrière. Actuellement, le développeur se retrouve à créer des requêtes DQL (Doctrine Query Language), mais il doit adapter le nom des fonctions en fonction du SGBD. Je trouve cela incohérent avec l'objectif de doctrine : faire abstraction du SGBD.
La solution que j'ai choisie pour choisir la syntaxe de la fonction est la suivante :
- Je privilégie la norme SQL,
- À défaut, je suis la syntaxe de PostgreSQL puis de Microsoft SQL Server (j'ai bon espoir que quelqu'un me propose un "pull request" un jour)
- Voire je privilégie ce que décrit l'OGC (Open Geospatial Consortium) (travail fastidieux)
Derrière ce vœu pieu, je suis confronté à un problème, je ne trouve rien dans la norme SQL définissant les fonctions spatiales.
Existe-t-il une norme, une extension de la norme, définissant les fonctions spatiales ? L'objectif est de sélectionner un nom standardisé et un ordre des arguments standardisé également.
Partager