[pgsql] gestion de l'euro pour type money
Laurent7-Jun-2011/14:38:19+2:00
Ma base PostgreSQL utilise le type monétaire en Euros, ce qui pose des problèmes car le symbole euro renvoyé est codé sur 3 caractères en Rebol et fait planter en lecture le driver pgsql Softinnov. De plus l'écriture de type money Euro ne marche pas non plus car il faut au minimum remplacer les points par des virgules.

J'ai pu resoudre le problème:

* D'abord je m'assure de la localisation du type money en faisant:
do-sql 'db {SET lc_monetary TO "fr_FR.utf8"}


* Ensuite vu que je passe par le do-sql Cheyenne et que dans ce cas je n'ai pas trouvé comment utiliser au listes de conversions et que de toute façon il y aussi un problème en écriture j'ai du modifier directement le driver pgsql:

- dans la section Internals je fais la modification suivante:

790		money			[to money! append to block! 'EUR to decimal! next next next]

(j'ai essayé d'optimiser en remplaçant append par head insert tail mais ça provoque une confusion i/o. En remplaçant to block! 'EUR par simplement [EUR] j'ai des problèmes pour les enregistrements multiples, allez savoir pourquoi. Donc laissez comme ça )

- dans la fonction "to-sql" pour le type money je fais la modification suivante:
money!	[to-sql replace to string! second value #"." #","] 


Ensuite après relance "à froid" de Cheyenne et rechargement du driver par les workers tout se passe bien avec le type money Euro.
Ce n'est qu'un workaround, j'espère que DocKimbel ajoutera à son excellent driver la gestions des types monétaires multiples un de ces jours...
DocKimbel8-Jun-2011/16:26:59+2:00
Dommage de ne pas pouvoir passer par 'change-type-handler qui a justement été prévu pour personnaliser la conversion des types de données: http://softinnov.org/rebol/pgsql-usage.html#sect11.3.

Bon, je viens d'ajouter un raffinement /info à DO-SQL dans la révision 147 (http://code.google.com/p/cheyenne-server/source/detail?r=147) pour pouvoir accéder au port de communication afin de pouvoir le passer en paramètre à 'change-type-handler par exemple...
Laurent10-Jun-2011/16:30:34+2:00
Cool, je vais tester ça. Mais d'après ce que je crois comprendre 'change-type-handler ne marche que pour la lecture de la base. Quid du changement de type pour l'écriture?
DocKimbel10-Jun-2011/19:26:09+2:00
Ecriture: pas de support pour çà dans le driver, car tu as la main sur chaque valeur insérée, donc tu peux appliquer la conversion adéquate plus précisément que le driver.

Pour les types supportées nativement par le moteur de BDD, le driver doit fournir en natif le bon mapping en lecteur et écriture, autant que possible.

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2