Re: UUID datatype GiST index support
От | Misa Simic |
---|---|
Тема | Re: UUID datatype GiST index support |
Дата | |
Msg-id | CAH3i69kKeQjp0jNKvpOC0f4=jkm1NEYOWnYnKq_j64Afxbvn-w@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: UUID datatype GiST index support (Alexander Korotkov <aekorotkov@gmail.com>) |
Список | pgsql-hackers |
Thanks Alexander,
'Scalar datatype' - given me a hint...
Looking further in btree_gist source, for inet datatype, which seems a bit complexier then uuid... (char, char, char[16]) structure for inet, compared to jut char[16] for uuid.
GiST pattern works with double datatype... and there is method convert_network_to_scalar(Datum, Oid), whick converts an inet value - to scalar value... and then all index compare functions are based on the doubles.... which leads me to conclusion (maybe is wrong) if I can convert UUID value to double it would make a "job" a lot easier... and pretty straight forward...
Any suggestion, how to convert UUID (char[16]) to scalar?
looking into convert inet to scalar, what confuses me, even there is char[16] for an ip address... code is:
if (ip_family(ip) == PGSQL_AF_INET) len = 4; else len = 5; res = ip_family(ip); for (i = 0; i < len; i++) { res *= 256; res += ip_addr(ip)[i]; } return res;
takes just first 4, or 5 values from ipaddres even there is 16 - (decalred as char[16])
Many thanks,
Misa
2011/8/22 Alexander Korotkov <aekorotkov@gmail.com>
Hi!------On Mon, Aug 22, 2011 at 2:54 PM, Misa Simic <misa.simic@gmail.com> wrote:Seems that you need the address-of operator before ia->upper and ia->lower (likely one of operands should be "ia->lower"). UUIDPGetDatum except pointer as an argument, i.e. UUIDPGetDatum(&ia->upper).static intm4_uuidkey_cmp(const void *a, const void *b){uuidKEY *ia = (uuidKEY *) (((Usrt *) a)->t);uuidKEY *ib = (uuidKEY *) (((Usrt *) b)->t);int res;res = DatumGetInt32(DirectFunctionCall2(uuid_cmp, UUIDPGetDatum(ia->upper), UUIDPGetDatum(ia->upper)));if (res == 0)return DatumGetInt32(DirectFunctionCall2(uuid_cmp, UUIDPGetDatum(ia->upper), UUIDPGetDatum(ib->upper)));return res;}Getting error: aggregate error used where an integer was expected!It would be a lot appreciated if anyone could help me and suggest the best way to make Gist support for UUID datatype...I think you're on the right way. btree_gist is an extension which provides GiST indexing of scalar datatype. UUID is one of them. So, the module you are writing should be quite similar.
With best regards,
Alexander Korotkov.
В списке pgsql-hackers по дате отправления: