ECPG et le type Bytea

From: Guillaume LELARGE <gleu(at)wanadoo(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: ECPG et le type Bytea
Date: 2005-06-28 07:07:04
Message-ID: 42C0F718.50808@wanadoo.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour tout le monde,

J'ai un problème avec l'insertion d'une donnée de type Bytea par
l'intermédiaire d'un programme écrit en C avec ECPG. En fait, j'en finis
par me demander s'il est possible d'utiliser le type Bytea avec ECPG.

J'ai mis mon code complet en pièce jointe mais voici quelques
explications sur mon source de test.

Je crée un buffer d'une taille de 32 octets dans lequel je place des
valeurs dont deux valeurs nulles (0x00) et le caractère ' (39 en
décimal). Ces valeurs ont pour but de tester l'insertion. Si l'insertion
s'arrête après le premier 0x00, c'est un gros problème, Si l'insertion
plante à cause du ', c'est un autre gros problème.

Bref, buffer créé et initialisé, je le passe dans PQescapeBytea pour
récupérer un buffer tout propre à insérer dans ma requête. Ensuite, je
tente l'insertion via une instruction préparée et directement. Les deux
plantent... voici les traces du serveur :

2005-06-28 08:54:31 [6926] LOG:
connection received: host=127.0.0.1 port=33197
2005-06-28 08:54:31 [6926] LOG:
connection authorized: user=guillaume database=galette
2005-06-28 08:54:31 [6926] LOG:
statement: begin transaction
2005-06-28 08:54:31 [6926] LOG:
statement: INSERT INTO interieur (nom, contenu)
VALUES ('pouet', '=\\\\000\\''=\\\\000')
2005-06-28 08:54:31 [6926] ERROR:
invalid input syntax for type bytea
2005-06-28 08:54:31 [6926] LOG:
statement: commit
2005-06-28 08:54:31 [6926] LOG:
statement: begin transaction
2005-06-28 08:54:31 [6926] LOG:
statement: insert into interieur ( nom , contenu )
values ( 'pouet' , '=\\\\000\\''=\\\\000' )
2005-06-28 08:54:31 [6926] ERROR:
invalid input syntax for type bytea
2005-06-28 08:54:31 [6926] LOG: statement: commit

Dites-moi si je rêve mais j'ai l'impression qu'il a exécuté
PQescapeString avant d'exécuter ma requête car ce que m'a renvoyé
PQescapeBytea correspond à =\000'=\000 .

Du coup, j'ai testé l'ajout d'une chaîne via ecpg. Si j'utilise
PQescapeString, ma chaîne est échappée deux fois !

Bref, j'ai regardé les exemples du code source de postgresql, j'ai lu,
relu, rerelu la doc, j'ai cherché dans Google... rien, nada, que dalle.
Pas l'ombre d'une indication que ECPG gère les types Bytea (pas plus que
l'indication contraire d'ailleurs). Pas d'indication non plus sur le
fait qu'un PQescapeString semble exécuté juste avant l'envoi de la
requête au serveur. J'ai beau faire plein de jolis grep dans les sources
de ecpg, pas d'indication sur bytea.

Du coup, je suis un peu bloqué... si un pro d'ECPG peut me venir en
aide, ce serait avec joie. Merci.

--
Guillaume.
<!-- http://abs.traduc.org/
http://lfs.traduc.org/
http://traduc.postgresqlfr.org/ -->

Attachment Content-Type Size
montest.pgc text/plain 1.4 KB

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Daniel Verite 2005-06-29 09:05:14 Re: pg_dump avec .pgpass
Previous Message Stéphane Schildknecht 2005-06-24 08:33:26 Re: Salut à tous, un