Carnet Wiki

Noms des tables, préfixe de BDD, fonctions de SPIP et API sql

Une table dans une BDD

Le préfixe de la BDD peut être ’spip_’ ou non.
+ Une table peut avoir le préfixe de la BDD ou non.

La combinatoire est riche et chaque fonction traite certains de ces contextes mais pas tous.

Préfixe de la BDD

= ’spip_’

Préfixe de la BDD

différent de ’spip_’

nom de table

avec le préfixe de la BDD

nom de table

sans le préfixe de la BDD

nom de table

avec préfixe ’spip_’

banal supporté ?

Se combinent ensuite les déclarations et les serveurs :


-  les déclarations peuvent avoir été faites explicitement
-  ou bien elles ne sont pas faites et SPIP fait de l’IA et spip devient magique


-  le serveur SQL peut être local (le même que celui de la BDD SPIP)
-  ou bien le serveur peut être un serveur distant

Portabilité des sources, indépendamment du préfixe

Pour assurer la portabilité des sources SPIP (squelettes html et code php des plugins), on utilise toujours le préfixe générique ’spip_’, quelque soit le préfixe réel de la base de donnée avec laquelle une installation de ce squelette ou plugin sera connecté.

Pour cela, il est nécessaire que le code de SPIP gère des noms de tables avec un préfixe ’spip_’ alors que ladite table n’existe pas, mais qu’il existe une table du même nom, mais avec le préfixe réel de la base de donnée.

Par exemple si le préfixe de la base de donnée est ’glub_’, les fonctions SPIP manipuleront une $table valant ’spip_articles’, alors que la table réelle s’appelle ’glub_articles’.

Les fonctions accèdent malgré cela à la table existante, en remplaçant le préfixe spip_ par le préfixe réel de la BDD, au moment nécessaire d’accés à la BDD (au dernier moment logiquement, pour avoir des arguments homogènes dans un maximum de fonctions).

Déclarations des tables

Il est possible de déclarer les tables dans $table_des_tables.
Voir
-  http://programmer.spip.org/declarer_tables_interfaces,379
-  https://programmer.spip.net/declarer_tables_objets_sql-970

Ce n’est toutefois pas obligatoire, mais on perd alors certaines fonctionnalités. Perdre dans ce cas le moins possible de fonctionnalités serait un louable objectif !

Questions

Les principales questions en suspens sont :
-  existe t il une fonction qui trouve une table à partir de son nom avec le préfixe ’spip_’ ? Il n’est pas exclu que « non » car parfois dans le source on voit des ajouts de préfixes à la main.
-  quelles sont s’il y en a les fonctions qui n’acceptent pas une table préfixée ’spip_’ quand le préfixe n’est pas ’spip_’ ? (ces fonctions ne trouvent pas ladite table et échouent)

Une question subsidiaire est :
-  les fonctions se comportent elles bien lorsqu’une table non standard n’utilise PAS le préfixe de la BDD ?
-  l’indication des noms de tables en paramètres des boucles est-il encore sensible à la casse , pour la table principale et pour les tables forcées pour jointure (avec et sans prefixe explicite : voir Expériences sur les jointures multiples) ?

Ces questions sont à examiner :
-  dans le cas où les déclarations sont faites explicitement
-  dans le cas où les déclarations ne sont pas faites

-  dans le cas où le serveur est le serveur local
-  dans le cas où le serveur est un serveur distant

-  on peut aussi vouloir/devoir prendre en compte le cas d’utilisation d’une connexion auxiliaire à une autre base de données

Le rôle de ’trouver_table’ semble clé, mais reste à préciser. Une petite note apparait au coeur de http://programmer.spip.org/trouver_table,620 mais elle semble contredire les indications données juste quelques lignes plus haut.

Documentation

 ?

JLuc - Mise à jour :16 mars 2024 à 13h23min