You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by GitBox <gi...@apache.org> on 2020/01/20 10:21:07 UTC
[GitHub] [calcite] vlsi edited a comment on issue #1593: [CALCITE-3513]
Unify TableFunction implementor's NullPolicy and its behavior
vlsi edited a comment on issue #1593: [CALCITE-3513] Unify TableFunction implementor's NullPolicy and its behavior
URL: https://github.com/apache/calcite/pull/1593#issuecomment-576206023
Ok, so your main question is "what should Calcite do when a table function returns NPE"?
Oracle makes it indistinguishable from an empty collection.
For instance:
```sql
select * from dual, table(cast(null as sys.odcinumberlist)) t;
DUMMY | COLUMN_VALUE
0 rows
select * from dual, table(sys.odcinumberlist()) t;
DUMMY | COLUMN_VALUE
0 rows
select * from dual, table(cast(null as sys.odcinumberlist))(+) t;
DUMMY | COLUMN_VALUE
Y | [NULL]
1 row
select * from dual, table(sys.odcinumberlist())(+) t;
DUMMY | COLUMN_VALUE
Y | [NULL]
1 row
```
> Therefore, NullPolicy.ANY/STRICT/ARG0 seems to be meaningless
It is probably more to optimization and/or prevent invocation of the function on invalid inputs.
For instance, if NullPolicy is set to `ANY`, then enumerable executor won't invoke the function in case there are null arguments.
On the other hand, treating `null` table function result as an empty table is a different issue.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services