Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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: montest.pgc
Description: text/plain (1.4 KB)

pgsql-fr-generale by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group