[Marseille-pm] A propos de Class::DBI

Robert silve robert at mtice.fr
Fri Aug 29 11:00:29 CDT 2003


Putain t'es rapide toi !!

On Fri, Aug 29, 2003 at 05:01:52PM +0200, Mr Arhuman wrote:
> On Mon, Aug 25, 2003 at 11:53:19AM +0200, Robert silve wrote:
> > en fait le plus emmerdant est le cas suivant :
> > je recupere le contenu d'un table
> > 
> > my @acc = Table->retrieve_all; # c'est un petite table
> > et je passe le tout a mon template 
> > $tmpl->param(table =>\@acc);
> > et hop dans mon template j'ai acces a tout ce qu'il me faut.
> > Le defaut c'est que , si je n'ai qu'un element, je ne recupere que l'identifiant
> 
> Que veux tu dire par identifiant ? ARRAY(...) ?

no je veut dire la valeur de la cle primaire correspondante dans la base

dans mon template j'ai un truc genre

<TMPL_LOOP NAME="table">
<TMPL_VAR NAME="id"><TMPL_VAR NAME="label">
</TMPL_LOOP>

et bien si @acc ne contient qu'une ligne il ne m'affiche pas le label 
(alors que celui ci existe)

si j'ai deux ligne ou plus tout va bien.
si avant de traiter le template je fait un print de mon champs label 
alors apres traitement l'affichage est correct.
(note que je fait un print sur n'importe quel colonne tout les colonnes s'affiche 
correctement)

> 
> > si entre la recuperation et le passage au template j'ajoute
> > warn map { $_->macolonne } @acc;
> 
> map "force" le contexte liste (et retransforme ton tableau en tableau)
> que fait le warn dans l'histoire ?
> 

le warn fait rien de particulier : en fait des que je fait quelquechose
avec une colonne particuliere (comme l'afficher via un warn) 
alors dans le template ca se met a marcher.


> > alors tout ce met a marcher.
> > Si ma table contient plus d'un element c'est ok.
> > Je ne comprend pas trop bien ce qui se passe.
> 
> > Arnaud as tu deja eu ce probleme et vois tu d'ou il peut venir ?
> 
> J'ai jamais eu ce problème...
> 
> piste possible :
> 
> _ un wantarray manque dans l'implémentation de retreive_all (optimisation?)

non pas d'optimisation

> _ "" interpréte différemment un scalaire et un tableau, quand tu appelles
> $tmpl->param(table => \@acc);
> Je *suppose* que le la partie droite de la flèche '=>' est interpollée dans un
> contexte de double quote...
> Si l'opérateur a été redéfini et que \@acc est consacré dans un type
> Class::DBI ca pourrait mettre la grouille dans un code qui marchait bien
> auparavant...
> 

en fait l'operateur => n'est pas redifinie (pas par moi en tout cas)

> que vaut \@acc ?

\@acc et @acc sont ok. Comme je te l'ai dit des que j'affiche les valeurs 
de acc "a la main", l'appel au template suivant me donne un resultat correct.

(en gros la mesure influe sur le phenomene : c'est un peu quantique mais bon)


> 
> Encore une fois si t'avais un  petit jeu de test (minimal) qui me permettrait
> de me remettre dans les MEMES conditions, je pourrais te donner une reponse
> plus précise...
> 

Je vais essayer de faire un petit fichier test
Ce dont je suis sur c'est que cette erreur est lie a la derniere version de Class::DBI
car le meme code avec la version precedente marche niquel.






> Arnaud.
> _______________________________________________
> Marseille-pm mailing list
> Marseille-pm at mail.pm.org
> http://mail.pm.org/mailman/listinfo/marseille-pm
> 



More information about the Marseille-pm mailing list