Re: [HACKERS] Problems with the varlena patch in my module

2007-04-07 Thread Tzahi Fadida
On Saturday 07 April 2007 04:08:34 Tom Lane wrote:
 Tzahi Fadida [EMAIL PROTECTED] writes:
  This is an excerpt from my code:
  newtset-tids = (bytea *) fastgetattr(tupleTSet, LABELS_ALIGNED,
  fctx-tupleSetDesc, isnull);
 
  It seems that for an empty bytea (only the size of the header), i get
  that VARSIZE(newtset-tids)==534765440
  instead of VARHDRSZ.

 That code has always been broken, you just failed to exercise the

It always worked before the patch so it was hard to know that. 
You see, i knew from the start that this attribute would never reach certain 
sizes so i never thought it would be toasted.

 problem before.  There needs to be a detoasting call there, not
 merely a cast.  DatumGetByteaP() would probably be appropriate.

Thanks. One more question though, what is the CATALOG_VERSION_NO
of the varlena patch? 

The second problem i have (it is a bit long but simple so please bear with 
me):
You see, before there were slots (at least stable working slots)
tuples (slot_getattr, etc...), i needed this functionality.
So, i created the following function (which broke because of the varlena patch 
on the att_align function):
bool
heap_deformtuple_iterative(HeapTuple tuple,
   TupleDesc tupleDesc,
   Datum *values,
   char *nulls, 
   deformTupleIterativeState * ds,
   int tillAttNum, bool 
finishAll)

Where tuple is tuple,
tupleDesc is of course TupleDesc.
values are to store the deformed values (the array is already allocated).
nulls, same.
ds is a pointer to a structure i made to save the state of the 
heap_deformtuple in mid work.
tillAttNum is a number of attributes from the start to deform up to.
finishAll - deform all the remaining attributes.

Now, i want to move to the more standard way to do this. However, i want to 
keep the structure where i have a tuple-t (the tuple), tuple-v (the values 
array), tuple-n (the nulls array). I keep many tuples in memory like this 
and i can't change this now. I want to keep in memory only the heaptuple 
tuple-t and the deformed arrays tuple-v, tuple-n and possibly another 
needed (such as ds) structure for as long as the tuple is not completely 
deformed.

What do you recommend (aside from me reimplementing the heap_deformtuple 
iterative again hoping it won't break again)?


-- 
Regards,
Tzahi.
--
Tzahi Fadida
Blog: http://tzahi.blogsite.org | Home Site: http://tzahi.webhop.info
WARNING TO SPAMMERS:  see at 
http://members.lycos.co.uk/my2nis/spamwarning.html

---(end of broadcast)---
TIP 6: explain analyze is your friend


[HACKERS] Problems with the varlena patch in my module

2007-04-06 Thread Tzahi Fadida
Hi,
I am having trouble with fixing my code for this recent varlena patch:

http://archives.postgresql.org/pgsql-committers/2007-04/msg00081.php

My module is fulldisjunctions.
I have several problems but first i wish to address the following.
This is an excerpt from my code:
newtset-tids = (bytea *) fastgetattr(tupleTSet, LABELS_ALIGNED, 
fctx-tupleSetDesc, isnull);

It seems that for an empty bytea (only the size of the header), i get that 
VARSIZE(newtset-tids)==534765440
instead of VARHDRSZ.

What can i do?
10x.

-- 
Regards,
Tzahi.
--
Tzahi Fadida
Blog: http://tzahi.blogsite.org | Home Site: http://tzahi.webhop.info
WARNING TO SPAMMERS:  see at 
http://members.lycos.co.uk/my2nis/spamwarning.html

---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [HACKERS] Problems with the varlena patch in my module

2007-04-06 Thread Tom Lane
Tzahi Fadida [EMAIL PROTECTED] writes:
 This is an excerpt from my code:
 newtset-tids = (bytea *) fastgetattr(tupleTSet, LABELS_ALIGNED, 
 fctx-tupleSetDesc, isnull);

 It seems that for an empty bytea (only the size of the header), i get that 
 VARSIZE(newtset-tids)==534765440
 instead of VARHDRSZ.

That code has always been broken, you just failed to exercise the
problem before.  There needs to be a detoasting call there, not
merely a cast.  DatumGetByteaP() would probably be appropriate.

regards, tom lane

---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly