Skip to content
Extraits de code Groupes Projets
Valider 6d5f327d rédigé par cerdic's avatar cerdic
Parcourir les fichiers

trouver_table('spip_articles') recherchait la table reellement nommee...

trouver_table('spip_articles') recherchait la table reellement nommee spip_articles en base, sans changer le prefixe, ce qui obligeait, le cas echeant, a gerer le prefixe en amont de l'appel.
Ce comportement est incoherent avec le reste de l'api SQL car si on est sur une base avec prefixe 'truc_' et qu'une table 'spip_articles' est trouvee par trouver_table, la requete sql que l'on essayera de faire juste apres sur cette table sera en fait realisee sur truc_articles, puisque toutes les sql_xx renomment le prefixe automatiquement (sauf sql_showtable qui dispose d'un argument pour activer ce renommage, par defaut a false).

On introduit donc un argument $table_spip sur trouver_table, en 3eme position pour ne pas changer la signature, par defaut a true, ce qui correspond a l'usage general.
trouver_table('spip_articles') trouvera donc 'truc_articles' dans une base avec prefixe truc.
Pour trouver la vrai table spip_articles, il faut faire, le cas echeant trouver_table('spip_articles','',false);
Sachant qu'il n'est de toute facon pas possible de faire un sql_select sur cette table par l'api SQL, sauf peut etre en quotant le nom de la table avec les `spip_articles`

Ce changement risquant d'introduire des petits bugs, on le fait des maintenant pour avoir le temps de les detecter.

Corrolairement, dans une <BOUCLE_xx(spip_articles)>, c'est toujours la table principale qui est prise en compte, avec renommage du prefixe, idem pour les jointures.
parent 8a3f9bcf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -29,7 +29,7 @@ include_spip('public/interfaces'); ...@@ -29,7 +29,7 @@ include_spip('public/interfaces');
// un appel avec $nom vide est une demande explicite de vidange du cache des descriptions // un appel avec $nom vide est une demande explicite de vidange du cache des descriptions
// http://doc.spip.org/@base_trouver_table_dist // http://doc.spip.org/@base_trouver_table_dist
function base_trouver_table_dist($nom, $serveur=''){ function base_trouver_table_dist($nom, $serveur='', $table_spip = true){
static $nom_cache_desc_sql=array(); static $nom_cache_desc_sql=array();
global $tables_principales, $tables_auxiliaires, $table_des_tables; global $tables_principales, $tables_auxiliaires, $table_des_tables;
...@@ -105,12 +105,9 @@ function base_trouver_table_dist($nom, $serveur=''){ ...@@ -105,12 +105,9 @@ function base_trouver_table_dist($nom, $serveur=''){
} # table locale a cote de SPIP, comme non SPIP: } # table locale a cote de SPIP, comme non SPIP:
} }
// faut il interpreter le prefixe 'spip_' ?
$transposer_spip = ($nom_sql != $nom);
// La *vraie* base a la priorite // La *vraie* base a la priorite
if (true /* !$bdesc OR !$bdesc['field'] */) { if (true /* !$bdesc OR !$bdesc['field'] */) {
$desc = sql_showtable($nom_sql, $transposer_spip, $serveur); $desc = sql_showtable($nom_sql, $table_spip, $serveur);
if (!$desc OR !$desc['field']) { if (!$desc OR !$desc['field']) {
if (!$fdesc) { if (!$fdesc) {
spip_log("trouver_table: table inconnue '$serveur' '$nom'"); spip_log("trouver_table: table inconnue '$serveur' '$nom'");
......
...@@ -35,7 +35,7 @@ function modifier_contenu($type, $id, $options, $c=false, $serveur='') { ...@@ -35,7 +35,7 @@ function modifier_contenu($type, $id, $options, $c=false, $serveur='') {
$spip_table_objet = table_objet_sql($type); $spip_table_objet = table_objet_sql($type);
$id_table_objet = id_table_objet($type); $id_table_objet = id_table_objet($type);
$trouver_table = charger_fonction('trouver_table', 'base'); $trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_objet, $serveur); $desc = $trouver_table($spip_table_objet, $serveur);
// Appels incomplets (sans $c) // Appels incomplets (sans $c)
if (!is_array($c)) { if (!is_array($c)) {
......
...@@ -206,7 +206,7 @@ function echaffaudable($type){ ...@@ -206,7 +206,7 @@ function echaffaudable($type){
AND $trouver_table = charger_fonction('trouver_table','base') AND $trouver_table = charger_fonction('trouver_table','base')
AND AND
($desc = $trouver_table($table) ($desc = $trouver_table($table)
OR $desc = $trouver_table($table_sql = $GLOBALS['table_prefix']."_$table")) OR $desc = $trouver_table($table_sql = "spip_$table"))
) )
return $echaffaudable[$type] = array($table,$desc['table'],$desc); return $echaffaudable[$type] = array($table,$desc['table'],$desc);
else else
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter