Ticket #675 (assigned enhancement)

Opened 2 years ago

Last modified 8 months ago

mauvais id retourné par saveToDao

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

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

test.rar (5.3 kB) - added by leodc 2 years ago.
Module de test

Change History

  Changed 2 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 ?

follow-up: ↓ 3   Changed 2 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.

in reply to: ↑ 2   Changed 2 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 2 years ago by leodc

Module de test

  Changed 2 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...

  Changed 2 years ago by leodc

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

  Changed 23 months 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 ?

  Changed 22 months ago by laurentj

  • owner set to laurentj
  • status changed from new to assigned
  • component changed from jelix:forms to jelix:dao
  • milestone set to Jelix 1.0.6

  Changed 22 months ago by laurentj

  • milestone changed from Jelix 1.0.6 to Jelix 1.0.7

  Changed 20 months ago by laurentj

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

  Changed 14 months ago by laurentj

  • milestone Jelix 1.0.9 deleted

  Changed 8 months ago by laurentj

  • milestone set to Jelix 1.1.5

  Changed 8 months ago by laurentj

  • priority changed from normal to low

  Changed 8 months ago by laurentj

  • type changed from bug to enhancement
  • milestone Jelix 1.1.5 deleted

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

Note: See TracTickets for help on using tickets.