On Mon, 2024-12-09 at 15:27 -0700, David G. Johnston wrote: > I have not done this. This is already a large patch and this kind of > example doesn't seem like our norm. I'm not opposed to more content > like this but for now would leave considering it as something an > interested party can propose once this goes in.
Fair enough Though I think it's a great example and I'd like to find some place to put it. > > <para> > The presence of null values in the system results in three-valued > logic. > In conventional two-valued (binary) logic every outcome is either > true or false. > In three-valued logic the concept of unknown, represented using > the null value, is > also an outcome. This results in falsifying the common-sense > notion > that "p OR NOT p" is always true. > </para> Thank you. I might reword the final sentence as more of an example, like: "Unknown values can lead to surprising behavior, for instance "NULL OR NOT NULL" evaluates to the null value." > > When executing an aggregate or window function the state tracking > component > (which may be initialized to a non-null value, e.g., 0 for the > count function) > will remain unchanged even if the underlying processing > function returns a null value, whether from being defined strict > or it simply returns a null value upon execution. Thank you. > Since count doesn't have an input function to check the only way to > see zero such rows is if the underlying thing being counted is empty. While true for COUNT(*), technically that's incorrect for COUNT(x), which counts the rows for which x is non-null. That doesn't invalidate your point, though: the initial state is unchanged either way. Regards, Jeff Davis