On Tue, Jun 27, 2023 at 4:55 AM Joel Jacobson <j...@compiler.org> wrote: > > On Mon, Jun 26, 2023, at 13:06, jian he wrote: > > Can you try to glue the attached to the hashset data type input > > function. > > the attached will parse cstring with double quote and not. so '{1,2,3}' > > == '{"1","2","3"}'. obviously quote will preserve the inner string as > > is. > > currently int4hashset input is delimited by comma, if you want deal > > with range then you need escape the comma. > > Not sure what you're trying to do here; what's the problem with > the current int4hashset_in()? > > I think it might be best to focus on null semantics / three-valued logic > before moving on and trying to implement support for more types, > otherwise we would need to rewrite more code if we find general > thinkos that are problems in all types. > > Help wanted to reason about what the following queries should return: > > SELECT hashset_union(NULL::int4hashset, '{}'::int4hashset); > > SELECT hashset_intersection(NULL::int4hashset, '{}'::int4hashset); > > SELECT hashset_difference(NULL::int4hashset, '{}'::int4hashset); > > SELECT hashset_symmetric_difference(NULL::int4hashset, '{}'::int4hashset); > > Should they return NULL, the empty set or something else? > > I've renamed hashset_merge() -> hashset_union() to better match > SQL's MULTISET feature which has a MULTISET UNION. > > /Joel
in SQLMultiSets.pdf(previously thread) I found a related explanation on page 45, 46. (CASE WHEN OP1 IS NULL OR OP2 IS NULL THEN NULL ELSE MULTISET ( SELECT T1.V FROM UNNEST (OP1) AS T1 (V) INTERSECT SQ SELECT T2.V FROM UNNEST (OP2) AS T2 (V) ) END) CASE WHEN OP1 IS NULL OR OP2 IS NULL THEN NULL ELSE MULTISET ( SELECT T1.V FROM UNNEST (OP1) AS T1 (V) UNION SQ SELECT T2.V FROM UNNEST (OP2) AS T2 (V) ) END (CASE WHEN OP1 IS NULL OR OP2 IS NULL THEN NULL ELSE MULTISET ( SELECT T1.V FROM UNNEST (OP1) AS T1 (V) EXCEPT SQ SELECT T2.V FROM UNNEST (OP2) AS T2 (V) ) END) In page11, > > Unlike the corresponding table operators UNION, INTERSECT and EXCEPT, we have > chosen ALL as the default, since this is the most natural interpretation of > MULTISET UNION, etc also in page 11 aggregate name FUSION. (I like the name.................)