On 9/1/23 11:30, Peter Eisentraut wrote:
> 1) If I write UNIQUE (a, b, c WITHOUT OVERLAPS), does the WITHOUT
> OVERLAPS clause attach to the last column, or to the whole column list?
> In the SQL standard, you can only have one period and it has to be
> listed last, so this question does not arise. But here we are building
> a more general facility to then build the SQL facility on top of. So I
> think it doesn't make sense that the range column must be last or that
> there can only be one. Also, your implementation requires at least one
> non-overlaps column, which also seems like a confusing restriction.
>
> I think the WITHOUT OVERLAPS clause should be per-column, so that
> something like UNIQUE (a WITHOUT OVERLAPS, b, c WITHOUT OVERLAPS) would
> be possible. Then the WITHOUT OVERLAPS clause would directly correspond
> to the choice between equality or overlaps operator per column.
>
> An alternative interpretation would be that WITHOUT OVERLAPS applies to
> the whole column list, and we would take it to mean, for any range
> column, use the overlaps operator, for any non-range column, use the
> equals operator. But I think this would be confusing and would prevent
> the case of using the equality operator for some ranges and the overlaps
> operator for some other ranges in the same key.
I prefer the first option. That is: WITHOUT OVERLAPS applies only to
the column or expression it is attached to, and need not be last in line.
--
Vik Fearing