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 12 years ago

Last modified 9 years ago

#675 delayed enhancement

mauvais id retourné par saveToDao

Reported by: leodc Owned by:
Priority: low Milestone:
Component: jelix:dao Version: 1.0.5
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Apparemment la méthode ne retourne pas vraiment l'id de l'enregistrement ajouté (dans le cas d'une insertion) mais plutôt un booléen vrai ou faux suivant si l'insertion à réussit ou non.

Dans mon cas j'utilise un id auto-incrémenté...

Attachments (1)

test.rar (5.3 KB) - added by leodc 12 years ago.
Module de test

Download all attachments as: .zip

Change History (17)

comment:1 Changed 12 years ago by bastnic

Salut leodc,

peux-tu expliquer ta situation ? Tous les tests unitaires et notre utilisation de tous les jours prouvent que théoriquement ça devrait fonctionner.

Tu utilises quel sgbd ? Peux-tu montrer ton utilisation ?

comment:2 follow-up: Changed 12 years ago by laurentj

  • Component changed from jelix to jelix:forms

il nous faudrait en effet un exemple concret le plus simple possible (donc fournir les fichiers ainsi que le schema sql), qui montre le problème.

je viens de rajouter des tests unitaires (que ce soit sur le trunk ou la branche 1.0.x), et ils montrent que tout fonctionne, au moins avec mysql.

comment:3 in reply to: ↑ 2 Changed 12 years ago by leodc

Je me doute que cette méthode doit fonctionner seulement dans mon cas apparemment il y a un problème, j'utilise PostgresSQL.

Le problème survient sur n'importe quelle insertion et sur n'importe quelle table.

J'ai fait une erreur dans mon descriptif, je travail avec la version 1.0.4 de Jélix.

J'ai vu avant avec Laurent qui m'a dit de créer un ticket, je fais de nouveaux test avec le moins de données possibles.

Dites moi si vous désirez quand même dao, script et cie...

Changed 12 years ago by leodc

Module de test

comment:4 Changed 12 years ago by leodc

Bon j'ai fait des test et apparemment cela ne vient pas du fait que ce soit un auto-incrémenté

J'ai joint le module de test que j'ai réalisé avec le script sql et les fichiers de config, j'utilise PostgresSQL 8.2...

comment:5 Changed 12 years ago by leodc

Salut, je voulais savoir si vous aviez trouvé l'erreur et si oui comment la résoudre?

comment:6 Changed 12 years ago by laurentj

Je pense que tu as un problème avec les sequences. saveToDao renvoi la valeur de la clé de l'enregistrement crée. On la récupère en appelant la base. Avec postgresql cette valeur est celle de la sequence associé à ton champs type serial. En effet, tout champs de ce type est est rattaché à une sequence.

Aussi, pour savoir le dernier id, le driver pgsql de jDb fait un

SELECT CURRVAL('nom_sequence') as id

Comme tu n'as pas donné de nom de sequence dans le fichier dao, il utilise nomtable_nomchamps_seq (je ne sais plus pourquoi on prend ce nom par défaut). Et probablement que le nom de la sequence associé à ta clé n'est pas celui là, auquel cas il faut que tu l'indiques explicitement (attribut sequence sur la balise property de ta clé).

Bref, la requête avec CURRVAL a échoué, et donc ça a retourné faux. Mais normalement tu as du avoir un warning du genre "lastInstertId invalide sequence name".

Essaye donc d'indiquer explicitement la sequence.

On pourrait peut être améliorer le driver pgsql en faisant un select lastval quand on n'a pas de nom de sequence, mais je ne sais pas si c'est fiable : est ce que la sequence qui sera lue avec le lastval sera bien celle utilisée lors de notre insert ?

comment:7 Changed 12 years ago by laurentj

  • Component changed from jelix:forms to jelix:dao
  • Milestone set to Jelix 1.0.6
  • Owner set to laurentj
  • Status changed from new to assigned

comment:8 Changed 12 years ago by laurentj

  • Milestone changed from Jelix 1.0.6 to Jelix 1.0.7

comment:9 Changed 12 years ago by laurentj

  • Summary changed from Méthode saveToDao to mauvais id retourné par saveToDao

comment:10 Changed 11 years ago by laurentj

  • Milestone Jelix 1.0.9 deleted

comment:11 Changed 11 years ago by laurentj

  • Milestone set to Jelix 1.1.5

comment:12 Changed 11 years ago by laurentj

  • Priority changed from normal to low

comment:13 Changed 11 years ago by laurentj

  • Milestone Jelix 1.1.5 deleted
  • Type changed from bug to enhancement

je n'ai pas de postgresql pour travailler sur ce ticket...

comment:14 Changed 9 years ago by laurentj

  • Owner laurentj deleted
  • Status changed from assigned to confirmed

comment:15 Changed 9 years ago by laurentj

  • Status changed from confirmed to new

comment:16 Changed 9 years ago by laurentj

  • Status changed from new to delayed
Note: See TracTickets for help on using tickets.