From arnaud at underlands.org Tue Sep 2 09:11:21 2003 From: arnaud at underlands.org (arnaud@underlands.org) Date: Mon Aug 2 21:32:16 2004 Subject: [Marseille-pm] Fichier de test pour Class::DBI In-Reply-To: <20030830065253.GA15234@gandalf.local> References: <20030830065253.GA15234@gandalf.local> Message-ID: <20030902141121.GA29750@underlands.org> On Sat, Aug 30, 2003 at 08:52:53AM +0200, Robert Silve wrote: > ca y est j'ai fait un petit test qui plante chez moi : D?bugger avec un tel jeu de test est un r?gal ! Cours et complet, le TOP ! :-) R?ponse courte : ajoute la ligne suivante __PACKAGE__->columns(Essential => qw(id label1 label2 label3)); R?ponse longue : En regardant ton code, j'ai ?t? surpris par le print STDERRqui ne servait ? rien dans ce qui nous pr?occupait... J'ai donc remplac? print STDERR "WARNING ",map { $_->label1 } @acc; par my @dummy = map { $_->label1 } @acc; Pour un comportement identique. Suppositionr: ce qui fait marcher le 2? cas c'est probablement une autovivification en *acc?dant* ? $_->label1 tu *force* Perl a renseigner sa valeur. Pour en avoir le coeur net, j'ai affich? les clefs du haschage avant et apr?s l'autovivification : Avant : Juste Id pr?sent Apr?s : Toutes les colonnes sont pr?sentes en tant que cl? du haschage Donc le probl?me vient du fait qu'avec Class::DBI quand tu r?cup?res un objet ne r?cup?re pas TOUTES les collonnes (voir "lazy population" dans la doc) dans ton cas en essayant d'acc?der EXPLICITEMENT ? label1 tu forcais la r?cup?ration de toutes les autres colonnes... La ligne que j'ai donn? en d?but de mail, force la r?cup?ration de toutes les colonnes d?s le d?but (pas otimal en terme de vitesse d'?x?cution...) En esp?rant avoir r?pondu a tes attentes. Et encore d?sol? pour TOUS les retards que j'accumule, mais jetouche vraiment plus terre... Arnaud. From robert at mtice.fr Tue Sep 2 10:31:07 2003 From: robert at mtice.fr (Robert silve) Date: Mon Aug 2 21:32:16 2004 Subject: [Marseille-pm] Fichier de test pour Class::DBI In-Reply-To: <20030902141121.GA29750@underlands.org> References: <20030830065253.GA15234@gandalf.local> <20030902141121.GA29750@underlands.org> Message-ID: <20030902153107.GC6737@mtice.fr> On Tue, Sep 02, 2003 at 04:11:21PM +0200, Mr Arhuman wrote: > > D?bugger avec un tel jeu de test est un r?gal ! > Cours et complet, le TOP ! > :-) Merci ca fait plaisir > > R?ponse courte : > > ajoute la ligne suivante > __PACKAGE__->columns(Essential => qw(id label1 label2 label3)); > Ok je comprend tout. Question annexe : comment ferais tu pour utiliser Essential judicieusement et pouvoir forcer "proprement" le fetch des colonnes au cas par cas ? Robert From arnaud at underlands.org Tue Sep 2 11:28:46 2003 From: arnaud at underlands.org (arnaud@underlands.org) Date: Mon Aug 2 21:32:16 2004 Subject: [Marseille-pm] Fichier de test pour Class::DBI In-Reply-To: <20030902153107.GC6737@mtice.fr> References: <20030830065253.GA15234@gandalf.local> <20030902141121.GA29750@underlands.org> <20030902153107.GC6737@mtice.fr> Message-ID: <20030902162846.GA30229@underlands.org> On Tue, Sep 02, 2003 at 05:31:07PM +0200, Robert silve wrote: > Question annexe : comment ferais tu pour utiliser Essential > judicieusement et pouvoir forcer "proprement" le fetch des colonnes > au cas par cas ? Si tu veux pouvoir le d?clencher au cas par cas tu peux faire un truc comme MyDBI->columns(Primary => qw/id/); MyDBI->columns(Essential => qw/lib1/); MyDBI->columns(Others => qw/lib2 lib3/); Par d?faut charge id et lib2 (les cl?s et essential) si tu veux charger lib2 ET lib3 tu as juste ? faire un acc?s en lecture sur l'objet my (undef) = $mydbiobject->lib2; # C'est dailleurs ce que tu faisait avec ton map ;-) C'est lourd mais c'est ce qui t'offre le controle le plus fin... L'id?e est de r?duire essential au minimum pour les perf, et de regrouper les colonnes auquelles tu acc?de g?n?ralement en m?me temps dans un m?me groupe... J'ai pas test? mais tu devrais aussi pouvoir (re)d?finir Essential a diff?rents endroits de ton code pour choisir la "finesse" de ta "lazy population" c'est un compromis interm?diare entre la solution "fine" (ci dessus) et toutes les colonnes dans essential. Hope this helps. Arnaud. From robert at mtice.fr Wed Sep 3 01:10:07 2003 From: robert at mtice.fr (Robert silve) Date: Mon Aug 2 21:32:16 2004 Subject: [Marseille-pm] Fichier de test pour Class::DBI In-Reply-To: <20030902162846.GA30229@underlands.org> References: <20030830065253.GA15234@gandalf.local> <20030902141121.GA29750@underlands.org> <20030902153107.GC6737@mtice.fr> <20030902162846.GA30229@underlands.org> Message-ID: <20030903061007.GA27467@mtice.fr> On Tue, Sep 02, 2003 at 06:28:46PM +0200, Mr Arhuman wrote: > On Tue, Sep 02, 2003 at 05:31:07PM +0200, Robert silve wrote: > > Question annexe : comment ferais tu pour utiliser Essential > > judicieusement et pouvoir forcer "proprement" le fetch des colonnes > > au cas par cas ? > > Si tu veux pouvoir le d?clencher au cas par cas tu peux faire un truc comme > > MyDBI->columns(Primary => qw/id/); > MyDBI->columns(Essential => qw/lib1/); > MyDBI->columns(Others => qw/lib2 lib3/); > > Par d?faut charge id et lib2 (les cl?s et essential) > > si tu veux charger lib2 ET lib3 tu as juste ? faire un acc?s en lecture sur > l'objet > > my (undef) = $mydbiobject->lib2; # C'est dailleurs ce que tu faisait avec ton > map ;-) > Je sui d'accord mais ca m'embete de mettre du code inutile. Mon map mettait un message de debug doc quand je reprend mon code je vois ce qu'il fait la alors que my (undef) = $mydbiobject->lib2; je vais a chaque fois me demander ce que ca fait la !! Je pense donc que je vais me faire une methode perso $mydbiobject->fetch_all ou un truc comme ca qui soit plus parlant. > L'id?e est de r?duire essential au minimum pour les perf, et de regrouper > les colonnes auquelles tu acc?de g?n?ralement en m?me temps dans un m?me > groupe... > En fait je sais pourquoi je n'avais jamais eu ce probleme avant : j'utilisait toujours 'All' qui est pris comme essential par defaut. Or finalement je prefere actuellement proceder autrement donc pas de essential a part le "id". Tout est clair !! > J'ai pas test? mais tu devrais aussi pouvoir (re)d?finir Essential a > diff?rents endroits de ton code pour choisir la "finesse" de ta "lazy > population" c'est un compromis interm?diare entre la solution "fine" (ci > dessus) et toutes les colonnes dans essential. > Je vais regarder un peu dans cette direction Thanks Robert