[spip-dev] Critère isnull

Bonjour,

J'interface régulièrement des sites en SPIP avec des bases de données scientifiques. Or dans les bases de données en
science, on a beaucoup de données numériques. Et quand il n'y a pas de valeur, c'est NULL qui est la valeur par défaut.

Je me trouve donc régulièrement coincée dans des modèles quand je veux récupérer les lignes d'une table pour lesquelles
le champ aaa vaut NULL. Si je mets comme critère {aaa = NULL}, NULL est transformé en chaîne de caractère, et la base
de données SQL transforme la chaîne en 0. Ce qui est différent de NULL.

En cherchant sur les forums, j'ai trouvé une solution, qui est d'utiliser la fonction de MySQL ISNULL que je peux utiliser
ainsi {ISNULL aaa} ou {! ISNULL aaa}. Le problème est que ISNULL n'est pas une fonction SQL standard. Ce code n'est donc
pas portable. Comme j'ai aussi des bases de données PostgreSQL, ça coince.

Serait-ce possible d'envisager un nouveau critère {aaa isnull} pour pallier à ce manque ?

Merci de vos avis.

trés trés vite fait, un critère dans mes_options.php qui passe sous mysql comme sous pg (en tout cas, testé sous PostgreSQL 9.0.1) :

function critere_isnull_dist($idb, &$boucles, $crit) {
   $boucle = $boucles[$idb];
   $where = $boucle->id_table . '.' . $crit->param[0][0]->texte .
   ' IS' . ($crit->not ? ' NOT' : '') . ' NULL';
   $boucle->where[] = "'" . $where . "'";
}

s'utilise par exemple ainsi sur une table externe :

== table "chose_bla" ==

Bonjour,

30/10/10, Florence:

Quid d'une intégration dans le noyau de spip ?

Si ça arrive, il faudrait que ça s'appelle au moins "estnul", voire
"nul", histoire que ça serve pas juste aux gens qui connaissent déjà le
SQL.