Robert Haas <robertmhaas@gmail.com> writes:
> Yeah, but isn't the current behavior awfully flaky?
The reason the particular case acts so oddly is there's no such thing as
half a point: you can't have a point with one null and one non-null
component. So there's no way to construct the value incrementally,
which is what that syntax implies doing. What actually happens is that
"foo[0] := something" results in a NULL point if the initial value of
foo was NULL, and then the same again for "foo[1] := something".
I suppose we could have these cases throw an error instead, but that's
not a lot better from the standpoint of functionality ... and I
certainly don't wish to try to introduce partially-null point values.
In general this shows the limitations of trying to pretend that complex
data types are arrays. Even if you can manage to find some kind of
mapping, it's not necessarily one-to-one, nor are all the values that
might be valid from one viewpoint valid from the other. So I've got no
enthusiasm for the OP's proposal.
regards, tom lane