Re: ECPG support for struct in INTO list - Mailing list pgsql-hackers

From Boszormenyi Zoltan
Subject Re: ECPG support for struct in INTO list
Date
Msg-id 4A799A42.1070900@cybertec.at
Whole thread Raw
In response to Re: ECPG support for struct in INTO list  (Boszormenyi Zoltan <zb@cybertec.at>)
List pgsql-hackers
Boszormenyi Zoltan írta:
> Michael Meskes írta:
>   
>> On Wed, Aug 05, 2009 at 11:08:26AM +0200, Boszormenyi Zoltan wrote:
>>   
>>     
>>> I have looked at it. The code seems to be invalid.
>>>     
>>>       
>> Yes, it is, I was too lazy to make it valid. If you just allocate the memory
>> for the variable in get_var() it becomes valid.
>>   
>>     
>
> If you meant like this below, then ECPG segfaults on this too:
>
> int *
> get_var(void)
> {
>         EXEC SQL BEGIN DECLARE SECTION;
>         int *myvar;
>         EXEC SQL END DECLARE SECTION;
>
>         myvar = malloc(sizeof(int));
>         EXEC SQL DECLARE mycur CURSOR FOR SELECT id INTO :myvar FROM a1
> WHERE id = 1;
>         return myvar;
> }
>   

And another problem that we have run into already.
ECPG is a one-stage preprocessor, instead of a two-stage one.
If the above function is located later in the source file than
the "OPEN mycur" or "FETCH mycur", then ECPG complains
about an unknown cursor. Not a big annoyance, but ESQL/C
supports that.

> ecpg_type_name() aborts, ECPGt_array is unhandled
> besides struct and union, it's called at the same place
> in adjust_informix() as ECPGt_struct.
>
> Attached is my modified test28.pgc. Compiling it
> *without* -C INFORMIX makes it unusable, the variable
> or the address where the data should be fetched into
> doesn't even gets emitted in neither the DECLARE/OPEN
> nor the FETCH callsites. I think this code should be valid
> even in non-Informix-compatible mode.
>
>   
>> ... Just look at
>> test/compat_informix/test_informix.pgc for a real and working example.
>>   
>>     
>
> The example there is the other way around.
> The variable, the DECLARE and FETCH commands
> are in the outer main() function, and it calls a function called
> openit() where the OPEN command is emitted, so that
> example doesn't help here too much.
>
> Best regards,
> Zoltán Böszörményi
>
>   
> ------------------------------------------------------------------------
>
>


-- 
Bible has answers for everything. Proof:
"But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil." (Matthew 5:37) - basics of digital technology.
"May your kingdom come" - superficial description of plate tectonics

----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/



pgsql-hackers by date:

Previous
From: "David E. Wheeler"
Date:
Subject: Re: md.c should not call files "relations"
Next
From: Pavel Stehule
Date:
Subject: Re: Adding error message "source"