developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 8 years ago

Closed 8 years ago

#1444 closed bug (invalid)

Debugbar et comptage des requêtes sql

Reported by: nesswaw Owned by:
Priority: normal Milestone:
Component: jelix Version: 1.3.1
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Bonjour,

J'ai ce code dans une méthode d'un controller

function insert()
{
    $dao = jDao::get('admin~reference');
        
    $rec = jDao::createRecord('admin~reference');
    $rec->title = 'Test';
    $rec->description = 'Desc';

    $dao->insert($rec);

    $rep = $this->getResponse('html');
    $rep->body->assign('MAIN', '<div id="content"><p>Ok</p></div>');
    return $rep;    
}

Une fois l'action exécuté, ma base contient bien un enregistrement en plus, mais la debugbar affiche qu'il y a eu deux insert.

Si je fais une boucle de 10, il fera bien 10 requêtes, mais la debugbar va afficher 20 requêtes...

Change History (5)

comment:1 Changed 8 years ago by bricet

Pour compléter ce bug report, je pense que l'on aurait bien besoin de ton DAO.

Par ailleurs, es-tu sûr que ce sont bien 2 requêtes d'INSERT que tu as dans ta debugbar et non 1 d'INSERT et 1 de SELECT (ce qui pourrait être le cas si tu as une colonne auto-incriment ou un insertpattern, AMHA)

comment:2 Changed 8 years ago by laurentj

Le type de base peut aussi influencer les requêtes exécutées.

comment:3 Changed 8 years ago by nesswaw

Bonjour,

Oui j'ai bien sur un champ un "insertpattern" et updatepattern" et en effet, il fait un INSERT et un SELECT, pourquoi ce SELECT?

Merci

comment:4 Changed 8 years ago by bricet

Parce que le ->insert() retourne l'enregistrement inséré. Et il faut donc faire une requête pour connaître la valeur de cet enregitrement (parce qu'au moins un champ a été affecté par le moteur SQL : soit en auto-incriment, soit en insert pattern). Ce sont les PKs qui sont utilisées pour récupérer cet enregistrement (ce qui fait d'ailleurs l'objet d'un autre ticket dont je dois m'occuper : shame on me). D'après la réponse de laurentj, il y a d'autres circonstances dont je ne peux te donner les détails, mais l'esprit doit rester le même ...

Je ne mets pas en "invalid" parce que je ne sais pas si j'ai assez de notoriété pour me le permettre ;)

comment:5 Changed 8 years ago by laurentj

  • Resolution set to invalid
  • Status changed from new to closed

bricet +1 :-)

Note: See TracTickets for help on using tickets.