On Thu, Jun 15, 2023 at 5:04 AM Joel Jacobson <j...@compiler.org> wrote:

> On Wed, Jun 14, 2023, at 15:16, Tomas Vondra wrote:
> > On 6/14/23 14:57, Joel Jacobson wrote:
> >> Would it be feasible to teach the planner to utilize the internal hash
> table of
> >> hashset directly? In the case of arrays, the hash table construction is
> an
> ...
> > It's definitely something I'd leave out of v0, personally.
>
> OK, thanks for guidance, I'll stay away from it.
>
> I've been doing some preparatory work on this todo item:
>
> > 3) support for other types (now it only works with int32)
>
> I've renamed the type from "hashset" to "int4hashset",
> and the SQL-functions are now prefixed with "int4"
> when necessary. The overloaded functions with
> int4hashset as input parameters don't need to be prefixed,
> e.g. hashset_add(int4hashset, int).
>
> Other changes since last update (4e60615):
>
> * Support creation of empty hashset using '{}'::hashset
> * Introduced a new function hashset_capacity() to return the current
> capacity
>   of a hashset.
> * Refactored hashset initialization:
>   - Replaced hashset_init(int) with int4hashset() to initialize an empty
> hashset
>     with zero capacity.
>   - Added int4hashset_with_capacity(int) to initialize a hashset with
>     a specified capacity.
> * Improved README.md and testing
>
> As a next step, I'm planning on adding int8 support.
>
> Looks and sounds good?
>
> /Joel

I am not sure the following results are correct.
with cte as (
    select hashset(x) as x
            ,hashset_capacity(hashset(x))
            ,hashset_count(hashset(x))
    from generate_series(1,10) g(x))
select *
        ,'|' as delim
        , hashset_add(x,11111::int)
        ,hashset_capacity(hashset_add(x,11111::int))
        ,hashset_count(hashset_add(x,11111::int))
from    cte \gx


results:
-[ RECORD 1 ]----+-----------------------------
x                | {8,1,10,3,9,4,6,2,11111,5,7}
hashset_capacity | 64
hashset_count    | 10
delim            | |
hashset_add      | {8,1,10,3,9,4,6,2,11111,5,7}
hashset_capacity | 64
hashset_count    | 11

but:
with cte as(select '{1,2}'::int4hashset as x)   select
x,hashset_add(x,3::int)  from cte;

returns
   x   | hashset_add
-------+-------------
 {1,2} | {3,1,2}
(1 row)
last simple query seems more sensible to me.

Reply via email to