[spip-dev] probleme sur jointures spip 2.1.0 SVN-15608

Bonjour

Soit deux tables insues des données insee des communes et des
départements. déclarées de la manière suivante par le pipeline
"declarer_tables_principales"

function utils_declarer_tables_principales($tables_principales){
    // la table insee des communes
    $insee_communes_champs = array(
        'insee' => 'varchar(5) NOT NULL default \'00000\'',
        'cdc' => 'char(1) default NULL',
        'cheflieu' => 'char(1) default NULL',
        'reg' => 'char(2) default NULL',
        'dep' => 'char(3) default NULL',
        'com' => 'char(3) default NULL',
        'ar' => 'char(1) default NULL',
        'ct' => 'char(2) default NULL',
        'tncc' => 'char(1) default NULL',
        'article' => 'varchar(5) default NULL',
        'ville' => 'varchar(64) default NULL',
    );
    
    $insee_communes_cles = array(
        'PRIMARY KEY' => 'insee',
    );
    
    $insee_communes_jointures = array(
        'dep' => 'dep',
        'insee' => 'insee',
    );
        
    $tables_principales['spip_insee_communes'] = array(
        'field' => &$insee_communes_champs,
        'key' => &$insee_communes_cles,
        'join' => &$insee_communes_jointures,
    );
    
    // table des départements
    $insee_departements_champs = array(
        'region' => 'char(2) NOT NULL',
        'dep' => 'char(3) NOT NULL',
        'chef_lieu' => 'varchar(5) NOT NULL',
        'tncc' => 'char(1) NOT NULL',
        'departement' => 'varchar(64) NOT NULL',
    );
    
    $insee_departements_cles = array(
        'PRIMARY KEY' => 'dep',
    );
    
    $insee_departements_jointures = array(
        'dep' => 'dep',
    );
    
    $tables_principales['spip_insee_departements'] = array(
        'field' => &$insee_departements_champs,
        'key' => &$insee_departements_cles,
        'join' => &$insee_departements_jointures,
    );
    
    // fin déclarations
    return $tables_principales;
    
} // fin declarer_tables_principales

Ensuite déclaration des tables pour pouvoir faire les boucles et les
jointures par declarer_tables_interface

function utils_declarer_tables_interfaces($interface){
    // les noms des tables dans les boucles
    $interface['table_des_tables']['insee_communes'] = 'insee_communes';
    $interface['table_des_tables']['insee_departements'] =
'insee_departements';
    
    // les jointures
    $interface['tables_jointures']['spip_insee_departements']['dep'] =
'insee_communes';
    $interface['tables_jointures']['spip_insee_communes']['dep'] =
'insee_departements';
    
    return $interface;
}

essayé aussi avec
$interface['tables_jointures']['spip_insee_departements'][] =
'insee_communes';
    $interface['tables_jointures']['spip_insee_communes'][] =
'insee_departements';

la boucle

<BOUCLE_communes (INSEE_COMMUNES){par hasard}{0,10}>
    <li>#VILLE - #DEPARTEMENT</li>
</BOUCLE_communes>

n'affiche pas les départements correspondants à chaque ville (sauf à
déclarer spip_insee_departements en minuscules dans la boucle dans ce
cas on a bien la jointure automatique). Mais on ne devrait pas être
obligé de le faire.

Merci de l'aide.

Bonjour

Soit deux tables insues des données insee des communes et des
départements. déclarées de la manière suivante par le pipeline
"declarer_tables_principales"

function utils_declarer_tables_principales($tables_principales){

.../...

n'affiche pas les départements correspondants à chaque ville (sauf à
déclarer spip_insee_departements en minuscules dans la boucle dans ce
cas on a bien la jointure automatique). Mais on ne devrait pas être
obligé de le faire.

Dans l'article annonçant la sortie de la version 2.1

tu trouves :
Incompatibilités connues

Comme toute nouvelle version majeure, cette 2.1 s’accompagne de
quelques incompatibilités heureusement aisément corrigeables :

    * Dans les boucles, le nom des tables SQL extérieures à SPIP doit
être passé dans sa graphie réelle et non plus en majuscules :
      <BOUCLE_a(MaTable)... en lieu et place de <BOUCLE_a(MATABLE)...
      <BOUCLE_a(mes_infos)... en lieu et place de <BOUCLE_a(MES_INFOS)...

Je pense que ceci ne s'applique qu'aux tables externes **non déclarées**
les miennes sont déclarées et c'est la raison pour laquelle les tables
étant déclarées, la jointure étant déclarée, spip devrait fonctionner
avec la syntaxe traditionnelle, puisque une fois déclarées les tables
deviennent des tables de spip et non plus externes à spip (il propose
leur sauvegarde, etc..).

Le problème est ici dans la déclaration des jointures pas des tables.