Hi, we're getting back to GiST development and would like to discuss our plans for 7.2. This discussion doesn't touch any changes in system tables to solve index_formtuple problem. We want to discuss implementation of null-safe interface to GiST (for reference see thread http://fts.postgresql.org/db/mw/msg.html?mid=1025848 ) There are seven user-defined functions one should write to create GiST opclass: 1. equal - it's already null-safe. GiST core will not call 'equal' function if any parameter is NULL 2,3. compress/decompress - always return NULL for NULL, so we could also handle them inside GiST core as for 'equal' 4. penalty - accepts 2 parameters and never returns NULL. In existed implementations we've seen penalty returns 0 (zero) if any of the parameters is NULL. For this case we propose not to call 'penalty' if it's marked as isstrict. 5. consistent - returns 'false' if any of the parameters is NULL. it never returns NULL. 6. union - accepts array of keys and returns their union. If all keys are NULL then returns NULL, so we don't need to call this function. If not all keys are NULL we could: a) Clean up NULLs from array b) don't touch this array and require 'union' function to handle NULL's. In this case we need an additional array to point NULLs if we want to support parameters pass-by-value 7. picksplit - accepts structure GIST_SPLITVEC and array of keys. It never returns NULL. there are 2 variants: a) Clean up NULLs from array don't need to change existed opclasses b) Require 'picksplit' to handle NULL' To support arguments passed by value we need additional array as in case 6.b Summary: 1. Only for one function - penalty, 'isstrict' mark could be required. in that case 'penalty' will be not called for NULL keys, otherwise, it's users responsibility to write null-safe code. Other functions could be handled inside GiST core without bothering of user. This is quite easy task. 2. For union and picksplit we propose to clean up NULLs from array of keys, so support of arguments 'passed-by-value' will not require changes of user interface. It would require some modification of current algorithm of splitting, but this wouldn't be a complex task for us. Proposed solution solves the problem with 'pass-by-value' interface, while we don't see where it could be used because in GiST key for index type of int4 is 8-byte. Regards, Oleg _____________________________________________________________ Oleg Bartunov, sci.researcher, hostmaster of AstroNet, Sternberg Astronomical Institute, Moscow University (Russia) Internet: [EMAIL PROTECTED], http://www.sai.msu.su/~megera/ phone: +007(095)939-16-83, +007(095)939-23-83 ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster