Optimized away later. In fact during SQL generation. SQL has no concept of 
“casting away nullability”.

> On Aug 23, 2017, at 6:10 PM, Christian Beikov <christian.bei...@gmail.com> 
> wrote:
> 
> RelOptMaterialization creates the cast which calls eventually into 
> RexUtil.generateCastExpressions. That method, probably rightfully, is strict 
> about nulls. The question is, whether the cast should be optimized away later 
> or it shouldn't be created in the first place. What do you say?
> 
> 
> Mit freundlichen Grüßen,
> ------------------------------------------------------------------------
> *Christian Beikov*
> Am 24.08.2017 um 02:05 schrieb Julian Hyde:
>> You didn’t say that the casts were ending up in generated SQL. That would be 
>> a bug. Probably in RelToSqlConverter.
>> 
>> 
>>> On Aug 23, 2017, at 4:35 PM, Christian Beikov <christian.bei...@gmail.com> 
>>> wrote:
>>> 
>>> I get that the cast is done "internally" to handle nulls properly, but why 
>>> would such a cast end up in the SQL that gets sent to the DBMS? Can you 
>>> point me to a direction where to look for these generated casts? I'd like 
>>> to try if I can avoid rendering these casts, as some DBMS planners might 
>>> get confused.
>>> 
>>> 
>>> Mit freundlichen Grüßen,
>>> ------------------------------------------------------------------------
>>> *Christian Beikov*
>>> Am 23.08.2017 um 21:20 schrieb Julian Hyde:
>>>> 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 
>>>>> <christian.bei...@gmail.com> 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 
>>>>>>> <christian.bei...@gmail.com> 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*
> 

Reply via email to