It’s difficult to say for sure whether the cast is necessary. For some of us consistency, is an end in itself. :)
If a null was to occur, then yes, the cast would throw. But it’s also possible that Calcite can deduce that a null is impossible, in which case it wouldn’t even generate the logic. I have this argument with Ashutosh from time to time. He tends to say we can never be sure which expressions might or might not produce nulls, so why bother being so strict? I’d rather use every piece of information we can get, because it might allow us to optimize. By the way, there are cases where we can deduce that columns are not-nullable but we cannot change the row-type due to the RelOptRule contract. We ought to be generating RelMdPredicates in these cases. Julian > On Aug 23, 2017, at 11:33 AM, Christian Beikov <[email protected]> > wrote: > > I am using materializations and my materialization table has nullable > columns. Calcite correctly determines that the underlying query can never > produce null for these columns, but I didn't encode that into the table > definitino. I was just wondering why the casts are generated in the SQL that > is sent to the owner of the materialization table. > > Thanks for the explanation, I suppose the cast causes proper exceptions to be > thrown when null is encountered instead of simply a NPE? Or is the cast in > such a case really unnecessary? > > > Mit freundlichen Grüßen, > ------------------------------------------------------------------------ > *Christian Beikov* > Am 23.08.2017 um 20:01 schrieb Julian Hyde: >> I presume you’re talking about RexNodes. It makes a lot of things easier if >> the argument to function call are EXACTLY the type required by that >> function. The system inserts implicit casts where necessary. >> >> If you’re generating Java code (in Enumerable convention) there is a lot of >> difference between INTEGER NOT NULL and INTEGER. The former can be >> represented by int, the latter only by java.lang.Integer. >> >> Julian >> >> >>> On Aug 23, 2017, at 2:08 AM, Christian Beikov <[email protected]> >>> wrote: >>> >>> Hello, >>> >>> I came to notice that the use of a nullable column in a context where a >>> non-nullable is expected, causes a cast that is essentially useless. Am I >>> missing something and is there reason to why that is done? >>> >>> -- >>> >>> Mit freundlichen Grüßen, >>> ------------------------------------------------------------------------ >>> *Christian Beikov* >
