Re: [HACKERS] Comparing Datum's at aminsert() stage

2005-04-19 Thread Victor Y. Yegorov
* Tom Lane [EMAIL PROTECTED] [19.04.2005 19:48]:
 That's probably what you *have* to use, since the normal deconstructors
 assume they are working with heap tuples, which are different.  But I
 don't understand why you are waiting till after the index tuple is
 formed.  The aminsert function gets an array of Datums to start with.
 Why not do it there?

Well, I need that exactly in aminsert.

Each value is stored only once in the index (along with it's own
series-of-bits). Thus, I need to compare each Datum from aminsert()'s
array with the existing ones.

Also, I cannot form tuple the ordinary way (I need all values separated),
so I copy each TuplDesc-attrs[i] into temporary TupleDesc (1 attribute big)
and call heap_fill_tuple(). Actually, I'm not sure this is the right way...

I think, storing some kind of hash-value from the Datum is a good idea, but
it's need to be unique. Is it possible with any existing API?


-- 

Victor Y. Yegorov

---(end of broadcast)---
TIP 9: the planner will ignore your desire to choose an index scan if your
  joining column's datatypes do not match


[HACKERS] Comparing Datum's at aminsert() stage

2005-04-18 Thread Victor Y. Yegorov
Hi!

For bitmaps, I need to search each value being inserted (for each column of
the index) in the list of already existing values (stored in index's header
area). To do that I need:

1) create Datum from PageItem's value (I store each value in it's own
   PageItem);
2) compare newly inserted Datum with on-disk existing one.

For hash access method (maybe others too, haven't checked), this is done
via index_keytest() function. But it uses ScanKey, there's no such
at aminsert() stage.


So, I'd like to ask -- what is the reverse function for heap_fill_tuple(),
is it OK to use index_getattr()?
And how do I compare 2 Datums? I need FmgrInfo pointer for the equality
operator of the corresponding data type. Are there any API calls to obtain one?

Thank you.


-- 

Victor Y. Yegorov

---(end of broadcast)---
TIP 7: don't forget to increase your free space map settings


Re: [HACKERS] Comparing Datum's at aminsert() stage

2005-04-18 Thread Tom Lane
Victor Y. Yegorov [EMAIL PROTECTED] writes:
 So, I'd like to ask -- what is the reverse function for heap_fill_tuple(),
 is it OK to use index_getattr()?

That's probably what you *have* to use, since the normal deconstructors
assume they are working with heap tuples, which are different.  But I
don't understand why you are waiting till after the index tuple is
formed.  The aminsert function gets an array of Datums to start with.
Why not do it there?

 And how do I compare 2 Datums? I need FmgrInfo pointer for the equality
 operator of the corresponding data type. Are there any API calls to obtain 
 one?

Look at the array comparison functions for some ideas.  Be wary about
memory leaks: index AM code generally runs in a context that won't get
cleaned up until query end, so if you leak a little bit of memory per
call, you will have a problem you won't notice until it goes into the
field.

regards, tom lane

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