In super, operations on null values with put, network_of, typename, and nameof currently produce non-null values. We could choose to do what SQL probably would do if these existed in SQL, which I suspect would be to propagate the null.
$ echo 'null' | super -c "put x:=1" -
error({message:"put: not a record",on:null})
$ echo 'null' | super -c "network_of(this)" -
error({message:"network_of: not an IP",on:null})
$ echo 'null' | super -c "network_of(10.1.2.3, this)" -
error({message:"network_of: bad arg for CIDR mask",on:null})
$ echo 'null' | super -c "typename(this)" -
error({message:"typename: argument must be a string",on:null})
$ echo 'null' | super -c "nameof(this)" -
error("missing")
$ echo 'null' | super -c "values grep('a', this)" -
false
$ echo 'null' | super -c "values grep(this, 'a')" -
error({message:"grep: pattern argument must be a string",on:null})
Details
Repro is with super commit 9ba80d7.
$ super -version
Version: v0.3.0-122-g9ba80d768
These are intentionally covered in this issue separate from #6947, as those all had direct equivalents in legacy SQL, whereas these are our own inventions so in theory we could make our own rules.
I believe it was @nwt who made a compelling argument that SuperSQL should typically propagate nulls even in non-SQL contexts: NULL values are primarily a concern because they come from outside systems or are produced by legacy SQL queries. In a world starting from zero based on super-structured data, rather than relying on NULL we'd probably advocate the use of first-class errors (e.g., error("missing"), structured errors, etc.) as these all convey more meaning than SQL's catch-all use of NULL for all things "unknown". But since nulls are often unavoidable, we could be consistent with SQL by treating it as a placeholder for "unknown" and propagating the null to the result when we encounter a null input to any SuperSQL function/operator.
In
super, operations onnullvalues withput,network_of,typename, andnameofcurrently produce non-nullvalues. We could choose to do what SQL probably would do if these existed in SQL, which I suspect would be to propagate thenull.Details
Repro is with super commit 9ba80d7.
These are intentionally covered in this issue separate from #6947, as those all had direct equivalents in legacy SQL, whereas these are our own inventions so in theory we could make our own rules.
I believe it was @nwt who made a compelling argument that SuperSQL should typically propagate nulls even in non-SQL contexts:
NULLvalues are primarily a concern because they come from outside systems or are produced by legacy SQL queries. In a world starting from zero based on super-structured data, rather than relying onNULLwe'd probably advocate the use of first-class errors (e.g., error("missing"), structured errors, etc.) as these all convey more meaning than SQL's catch-all use ofNULLfor all things "unknown". But since nulls are often unavoidable, we could be consistent with SQL by treating it as a placeholder for "unknown" and propagating thenullto the result when we encounter anullinput to any SuperSQL function/operator.