On Tue, Mar 11, 2014 at 5:19 AM, Peter Geoghegan <p...@heroku.com> wrote:

> On Mon, Mar 10, 2014 at 4:19 AM, Alexander Korotkov
> <aekorot...@gmail.com> wrote:
> > Here it is.
>
> So it looks like what you have here is analogous to the other problems
> that I fixed with both GiST and GIN. That isn't surprising, and this
> does fix my test-case. I'm not terribly happy about the lack of
> explanation for the hashing in that loop, though. Why use COMP_CRC32()
> at all, for one thing?
>
> Why do this for non-primitive jsonb hashing?
>
> COMP_CRC32(stack->hash_state, PATH_SEPARATOR, 1);
>
> Where PATH_SEPARATOR is:
>
> #define PATH_SEPARATOR ("\0")
>
> Actually, come to think of it, why not just use one hashing function
> everywhere? i.e., jsonb_hash(PG_FUNCTION_ARGS)? It's already very
> similar. Pretty much every hash operator support function 1 (i.e. a
> particular type's hash function) is implemented with hash_any(). Can't
> we just do the same here? In any case it isn't obvious why the
> requirements for those two things (the hashing mechanism used by the
> jsonb_hash_ops GIN opclass, and the hash operator class support
> function 1 hash function) cannot be the same thing.


It's because CRC32 interface allows incremental calculation while hash_any
requires single chunk of memory. I don't think that unfolding everything is
good idea. But we could implement incremental interface for hash_any.

------
With best regards,
Alexander Korotkov.

Reply via email to