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