Bonjour
j’utilise depuis très longtemps spip pour afficher le contenu de bases de données de mon laboratoire, la plupart étant en Postgresql.
Depuis que le support Postgresql est passé en expérimental, quand j’ai besoin de m’interfacer avec une base pg, je renomme ecrire/req/pg.exp.php en ecrire/req/pg.php et ça roule.
Un peu plus récemment (passage en spip 4 je pense), j’ai dû ajouter la fonction spip_pg_table_exists pour que ça continue à fonctionner.
--- a/ecrire/req/pg.php
+++ b/ecrire/req/pg.exp.php
@@ -127,6 +127,7 @@ $GLOBALS['spip_pg_functions_1'] = [
'set_connect_charset' => 'spip_pg_set_connect_charset',
'showbase' => 'spip_pg_showbase',
'showtable' => 'spip_pg_showtable',
+ 'table_exists' => 'spip_pg_table_exists',
'update' => 'spip_pg_update',
'updateq' => 'spip_pg_updateq',
];
@@ -1535,3 +1536,8 @@ function mysql2pg_type($v) {
function spip_versions_pg() {
return function_exists('pg_connect');
}
+
+function spip_pg_table_exists(string $table, $serveur = '', $requeter = true) {
+ $r = spip_pg_query(
+ 'SELECT * FROM information_schema.tables' .
+ ' WHERE table_name ILIKE ' . _q($table), $serveur, $requeter);
+ if (!$requeter) {
+ return $r;
+ }
+ $res = spip_pg_fetch($r);
+ return (bool) $res;
+}
+
Aujourd’hui, je travaille sur la migration 4.1 → 4.4 et je tombe sur un os que je n’arrive pas à résoudre.
Ce squelette fonctionne
<BOUCLE_apisp(apis_gavo:apis_data){nom='IO'}{par data_id}>
<br>#DATA_ID
</BOUCLE_apisp>
Mais pas celui-là :
<BOUCLE_apisp(apis_gavo:apis_data){nom='IO'}{par data_id}{pagination 10}>
<br>#DATA_ID
</BOUCLE_apisp>
En mettant quelques error_log dans pg.php, je vois que dans les 2 cas ma requête est bien exécutée (donc pas un pb de syntaxe).
Est-ce que quelqu’un aurait une idée ?