Ticket #675 (assigned bug)

Opened 3 months ago

Last modified 1 month ago

Méthode saveToDao

Reported by: leodc Assigned to: laurentj (accepted)
Priority: normal Milestone: Jelix 1.0.7
Component: jelix:dao Version: 1.0.5
Severity: normal Keywords:
Cc: Php version:
Review: Hosting Provider:
Documentation needed: 0 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 on 08/28/08 09:08:30.
Module de test

Change History

08/27/08 17:58:26 changed 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 ) 08/27/08 18:03:23 changed by laurentj

  • owner changed.
  • 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 ) 08/28/08 08:40:16 changed 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...

08/28/08 09:08:30 changed by leodc

  • attachment test.rar added.

Module de test

08/28/08 09:09:59 changed 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...

09/02/08 10:48:30 changed by leodc

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

09/11/08 00:11:47 changed 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 ?

10/12/08 22:06:30 changed 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.

10/16/08 21:42:48 changed by laurentj

  • milestone changed from Jelix 1.0.6 to Jelix 1.0.7.
Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed