[ 
https://issues.apache.org/jira/browse/CALCITE-6465?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17891377#comment-17891377
 ] 

asdfgh19 commented on CALCITE-6465:
-----------------------------------

Thanks for noticing the 64KB issue [~jduong] .
Another issue is that OID in ('a','a1','a2','a3',...) is converted to the 
following code:
{code:java}
if (((binary_call_isNull ? false : binary_call_value) || (binary_call_isNull0 ? 
false : binary_call_value0) || (binary_call_isNull1 ? false : 
binary_call_value1) || (binary_call_isNull2 ? false : binary_call_value2) || 
(binary_call_isNull3 ? false : binary_call_value3) || (binary_call_isNull4 ? 
false : binary_call_value4) || (binary_call_isNull5 ? false : 
binary_call_value5) || (binary_call_isNull6 ? false : binary_call_value6) || 
(binary_call_isNull7 ? false : binary_call_value7) || (binary_call_isNull8 ? 
false : binary_call_value8) || (binary_call_isNull9 ? false : 
binary_call_value9) || (binary_call_isNull10 ? false : binary_call_value10) || 
(binary_call_isNull11 ? false : binary_call_value11) || (binary_call_isNull12 ? 
false : binary_call_value12) || (binary_call_isNull13 ? false : 
binary_call_value13) || (binary_call_isNull14 ? false : binary_call_value14) || 
(binary_call_isNull15 ? false : binary_call_value15) || (binary_call_isNull16 ? 
false : binary_call_value16) || (binary_call_isNull17 ? false : 
binary_call_value17) || (binary_call_isNull18 ? false : binary_call_value18) || 
(binary_call_isNull19 ? false : binary_call_value19) || (binary_call_isNull20 ? 
false : binary_call_value20) || (binary_call_isNull21 ? false : 
binary_call_value21) || (binary_call_isNull22 ? false : binary_call_value22) || 
(binary_call_isNull23 ? false : binary_call_value23) || (binary_call_isNull24 ? 
false : binary_call_value24) || (binary_call_isNull25 ? false : 
binary_call_value25) || (binary_call_isNull26 ? false : binary_call_value26) || 
(binary_call_isNull27 ? false : binary_call_value27) || (binary_call_isNull28 ? 
false : binary_call_value28) || (binary_call_isNull29 ? false : 
binary_call_value29) || (binary_call_isNull30 ? false : binary_call_value30) || 
(binary_call_isNull31 ? false : binary_call_value31) || (binary_call_isNull32 ? 
false : binary_call_value32) || (binary_call_isNull33 ? false : 
binary_call_value33) || (binary_call_isNull34 ? false : binary_call_value34) || 
(binary_call_isNull35 ? false : binary_call_value35) || (binary_call_isNull36 ? 
false : binary_call_value36) || (binary_call_isNull37 ? false : 
binary_call_value37) || (binary_call_isNull38 ? false : binary_call_value38) || 
(binary_call_isNull39 ? false : binary_call_value39) || (binary_call_isNull40 ? 
false : binary_call_value40) || (binary_call_isNull41 ? false : 
binary_call_value41) || (binary_call_isNull42 ? false : binary_call_value42) || 
(binary_call_isNull43 ? false : binary_call_value43) || (binary_call_isNull44 ? 
false : binary_call_value44) || (binary_call_isNull45 ? false : 
binary_call_value45) || (binary_call_isNull46 ? false : binary_call_value46) || 
(binary_call_isNull47 ? false : binary_call_value47) || (binary_call_isNull48 ? 
false : binary_call_value48) || (binary_call_isNull49 ? false : 
binary_call_value49) || (binary_call_isNull50 ? false : binary_call_value50) || 
(binary_call_isNull51 ? false : binary_call_value51) || (binary_call_isNull52 ? 
false : binary_call_value52) || (binary_call_isNull53 ? false : 
binary_call_value53) || (binary_call_isNull54 ? false : binary_call_value54) || 
(binary_call_isNull55 ? false : binary_call_value55) || (binary_call_isNull56 ? 
false : binary_call_value56) || (binary_call_isNull57 ? false : 
binary_call_value57) || (binary_call_isNull58 ? false : binary_call_value58) || 
(binary_call_isNull59 ? false : binary_call_value59) || (binary_call_isNull60 ? 
false : binary_call_value60) || (binary_call_isNull61 ? false : 
binary_call_value61) || (binary_call_isNull62 ? false : binary_call_value62) || 
(binary_call_isNull63 ? false : binary_call_value63) || (binary_call_isNull64 ? 
false : binary_call_value64) || (binary_call_isNull65 ? false : 
binary_call_value65) || (binary_call_isNull66 ? false : binary_call_value66) || 
(binary_call_isNull67 ? false : binary_call_value67) || (binary_call_isNull68 ? 
false : binary_call_value68) || (binary_call_isNull69 ? false : 
binary_call_value69) || (binary_call_isNull70 ? false : binary_call_value70) || 
(binary_call_isNull71 ? false : binary_call_value71) || (binary_call_isNull72 ? 
false : binary_call_value72) || (binary_call_isNull73 ? false : 
binary_call_value73) || (binary_call_isNull74 ? false : binary_call_value74) || 
(binary_call_isNull75 ? false : binary_call_value75) || (binary_call_isNull76 ? 
false : binary_call_value76) || (binary_call_isNull77 ? false : 
binary_call_value77) || (binary_call_isNull78 ? false : binary_call_value78) || 
(binary_call_isNull79 ? false : binary_call_value79) || (binary_call_isNull80 ? 
false : binary_call_value80) || (binary_call_isNull81 ? false : 
binary_call_value81) || (binary_call_isNull82 ? false : binary_call_value82) || 
(binary_call_isNull83 ? false : binary_call_value83) || (binary_call_isNull84 ? 
false : binary_call_value84) || (binary_call_isNull85 ? false : 
binary_call_value85) || (binary_call_isNull86 ? false : binary_call_value86) || 
(binary_call_isNull87 ? false : binary_call_value87) || (binary_call_isNull88 ? 
false : binary_call_value88) || (binary_call_isNull89 ? false : 
binary_call_value89) || (binary_call_isNull90 ? false : binary_call_value90) || 
(binary_call_isNull91 ? false : binary_call_value91) || (binary_call_isNull92 ? 
false : binary_call_value92) || (binary_call_isNull93 ? false : 
binary_call_value93) || (binary_call_isNull94 ? false : binary_call_value94) || 
(binary_call_isNull95 ? false : binary_call_value95) || (binary_call_isNull96 ? 
false : binary_call_value96) || (binary_call_isNull97 ? false : 
binary_call_value97) || (binary_call_isNull98 ? false : binary_call_value98) ? 
Boolean.TRUE : binary_call_isNull || binary_call_isNull0 || binary_call_isNull1 
|| binary_call_isNull2 || binary_call_isNull3 || binary_call_isNull4 || 
binary_call_isNull5 || binary_call_isNull6 || binary_call_isNull7 || 
binary_call_isNull8 || binary_call_isNull9 || binary_call_isNull10 || 
binary_call_isNull11 || binary_call_isNull12 || binary_call_isNull13 || 
binary_call_isNull14 || binary_call_isNull15 || binary_call_isNull16 || 
binary_call_isNull17 || binary_call_isNull18 || binary_call_isNull19 || 
binary_call_isNull20 || binary_call_isNull21 || binary_call_isNull22 || 
binary_call_isNull23 || binary_call_isNull24 || binary_call_isNull25 || 
binary_call_isNull26 || binary_call_isNull27 || binary_call_isNull28 || 
binary_call_isNull29 || binary_call_isNull30 || binary_call_isNull31 || 
binary_call_isNull32 || binary_call_isNull33 || binary_call_isNull34 || 
binary_call_isNull35 || binary_call_isNull36 || binary_call_isNull37 || 
binary_call_isNull38 || binary_call_isNull39 || binary_call_isNull40 || 
binary_call_isNull41 || binary_call_isNull42 || binary_call_isNull43 || 
binary_call_isNull44 || binary_call_isNull45 || binary_call_isNull46 || 
binary_call_isNull47 || binary_call_isNull48 || binary_call_isNull49 || 
binary_call_isNull50 || binary_call_isNull51 || binary_call_isNull52 || 
binary_call_isNull53 || binary_call_isNull54 || binary_call_isNull55 || 
binary_call_isNull56 || binary_call_isNull57 || binary_call_isNull58 || 
binary_call_isNull59 || binary_call_isNull60 || binary_call_isNull61 || 
binary_call_isNull62 || binary_call_isNull63 || binary_call_isNull64 || 
binary_call_isNull65 || binary_call_isNull66 || binary_call_isNull67 || 
binary_call_isNull68 || binary_call_isNull69 || binary_call_isNull70 || 
binary_call_isNull71 || binary_call_isNull72 || binary_call_isNull73 || 
binary_call_isNull74 || binary_call_isNull75 || binary_call_isNull76 || 
binary_call_isNull77 || binary_call_isNull78 || binary_call_isNull79 || 
binary_call_isNull80 || binary_call_isNull81 || binary_call_isNull82 || 
binary_call_isNull83 || binary_call_isNull84 || binary_call_isNull85 || 
binary_call_isNull86 || binary_call_isNull87 || binary_call_isNull88 || 
binary_call_isNull89 || binary_call_isNull90 || binary_call_isNull91 || 
binary_call_isNull92 || binary_call_isNull93 || binary_call_isNull94 || 
binary_call_isNull95 || binary_call_isNull96 || binary_call_isNull97 || 
binary_call_isNull98 ? null : Boolean.FALSE) != null && 
org.apache.calcite.runtime.SqlFunctions.toBoolean((binary_call_isNull ? false : 
binary_call_value) || (binary_call_isNull0 ? false : binary_call_value0) || 
(binary_call_isNull1 ? false : binary_call_value1) || (binary_call_isNull2 ? 
false : binary_call_value2) || (binary_call_isNull3 ? false : 
binary_call_value3) || (binary_call_isNull4 ? false : binary_call_value4) || 
(binary_call_isNull5 ? false : binary_call_value5) || (binary_call_isNull6 ? 
false : binary_call_value6) || (binary_call_isNull7 ? false : 
binary_call_value7) || (binary_call_isNull8 ? false : binary_call_value8) || 
(binary_call_isNull9 ? false : binary_call_value9) || (binary_call_isNull10 ? 
false : binary_call_value10) || (binary_call_isNull11 ? false : 
binary_call_value11) || (binary_call_isNull12 ? false : binary_call_value12) || 
(binary_call_isNull13 ? false : binary_call_value13) || (binary_call_isNull14 ? 
false : binary_call_value14) || (binary_call_isNull15 ? false : 
binary_call_value15) || (binary_call_isNull16 ? false : binary_call_value16) || 
(binary_call_isNull17 ? false : binary_call_value17) || (binary_call_isNull18 ? 
false : binary_call_value18) || (binary_call_isNull19 ? false : 
binary_call_value19) || (binary_call_isNull20 ? false : binary_call_value20) || 
(binary_call_isNull21 ? false : binary_call_value21) || (binary_call_isNull22 ? 
false : binary_call_value22) || (binary_call_isNull23 ? false : 
binary_call_value23) || (binary_call_isNull24 ? false : binary_call_value24) || 
(binary_call_isNull25 ? false : binary_call_value25) || (binary_call_isNull26 ? 
false : binary_call_value26) || (binary_call_isNull27 ? false : 
binary_call_value27) || (binary_call_isNull28 ? false : binary_call_value28) || 
(binary_call_isNull29 ? false : binary_call_value29) || (binary_call_isNull30 ? 
false : binary_call_value30) || (binary_call_isNull31 ? false : 
binary_call_value31) || (binary_call_isNull32 ? false : binary_call_value32) || 
(binary_call_isNull33 ? false : binary_call_value33) || (binary_call_isNull34 ? 
false : binary_call_value34) || (binary_call_isNull35 ? false : 
binary_call_value35) || (binary_call_isNull36 ? false : binary_call_value36) || 
(binary_call_isNull37 ? false : binary_call_value37) || (binary_call_isNull38 ? 
false : binary_call_value38) || (binary_call_isNull39 ? false : 
binary_call_value39) || (binary_call_isNull40 ? false : binary_call_value40) || 
(binary_call_isNull41 ? false : binary_call_value41) || (binary_call_isNull42 ? 
false : binary_call_value42) || (binary_call_isNull43 ? false : 
binary_call_value43) || (binary_call_isNull44 ? false : binary_call_value44) || 
(binary_call_isNull45 ? false : binary_call_value45) || (binary_call_isNull46 ? 
false : binary_call_value46) || (binary_call_isNull47 ? false : 
binary_call_value47) || (binary_call_isNull48 ? false : binary_call_value48) || 
(binary_call_isNull49 ? false : binary_call_value49) || (binary_call_isNull50 ? 
false : binary_call_value50) || (binary_call_isNull51 ? false : 
binary_call_value51) || (binary_call_isNull52 ? false : binary_call_value52) || 
(binary_call_isNull53 ? false : binary_call_value53) || (binary_call_isNull54 ? 
false : binary_call_value54) || (binary_call_isNull55 ? false : 
binary_call_value55) || (binary_call_isNull56 ? false : binary_call_value56) || 
(binary_call_isNull57 ? false : binary_call_value57) || (binary_call_isNull58 ? 
false : binary_call_value58) || (binary_call_isNull59 ? false : 
binary_call_value59) || (binary_call_isNull60 ? false : binary_call_value60) || 
(binary_call_isNull61 ? false : binary_call_value61) || (binary_call_isNull62 ? 
false : binary_call_value62) || (binary_call_isNull63 ? false : 
binary_call_value63) || (binary_call_isNull64 ? false : binary_call_value64) || 
(binary_call_isNull65 ? false : binary_call_value65) || (binary_call_isNull66 ? 
false : binary_call_value66) || (binary_call_isNull67 ? false : 
binary_call_value67) || (binary_call_isNull68 ? false : binary_call_value68) || 
(binary_call_isNull69 ? false : binary_call_value69) || (binary_call_isNull70 ? 
false : binary_call_value70) || (binary_call_isNull71 ? false : 
binary_call_value71) || (binary_call_isNull72 ? false : binary_call_value72) || 
(binary_call_isNull73 ? false : binary_call_value73) || (binary_call_isNull74 ? 
false : binary_call_value74) || (binary_call_isNull75 ? false : 
binary_call_value75) || (binary_call_isNull76 ? false : binary_call_value76) || 
(binary_call_isNull77 ? false : binary_call_value77) || (binary_call_isNull78 ? 
false : binary_call_value78) || (binary_call_isNull79 ? false : 
binary_call_value79) || (binary_call_isNull80 ? false : binary_call_value80) || 
(binary_call_isNull81 ? false : binary_call_value81) || (binary_call_isNull82 ? 
false : binary_call_value82) || (binary_call_isNull83 ? false : 
binary_call_value83) || (binary_call_isNull84 ? false : binary_call_value84) || 
(binary_call_isNull85 ? false : binary_call_value85) || (binary_call_isNull86 ? 
false : binary_call_value86) || (binary_call_isNull87 ? false : 
binary_call_value87) || (binary_call_isNull88 ? false : binary_call_value88) || 
(binary_call_isNull89 ? false : binary_call_value89) || (binary_call_isNull90 ? 
false : binary_call_value90) || (binary_call_isNull91 ? false : 
binary_call_value91) || (binary_call_isNull92 ? false : binary_call_value92) || 
(binary_call_isNull93 ? false : binary_call_value93) || (binary_call_isNull94 ? 
false : binary_call_value94) || (binary_call_isNull95 ? false : 
binary_call_value95) || (binary_call_isNull96 ? false : binary_call_value96) || 
(binary_call_isNull97 ? false : binary_call_value97) || (binary_call_isNull98 ? 
false : binary_call_value98) ? Boolean.TRUE : binary_call_isNull || 
binary_call_isNull0 || binary_call_isNull1 || binary_call_isNull2 || 
binary_call_isNull3 || binary_call_isNull4 || binary_call_isNull5 || 
binary_call_isNull6 || binary_call_isNull7 || binary_call_isNull8 || 
binary_call_isNull9 || binary_call_isNull10 || binary_call_isNull11 || 
binary_call_isNull12 || binary_call_isNull13 || binary_call_isNull14 || 
binary_call_isNull15 || binary_call_isNull16 || binary_call_isNull17 || 
binary_call_isNull18 || binary_call_isNull19 || binary_call_isNull20 || 
binary_call_isNull21 || binary_call_isNull22 || binary_call_isNull23 || 
binary_call_isNull24 || binary_call_isNull25 || binary_call_isNull26 || 
binary_call_isNull27 || binary_call_isNull28 || binary_call_isNull29 || 
binary_call_isNull30 || binary_call_isNull31 || binary_call_isNull32 || 
binary_call_isNull33 || binary_call_isNull34 || binary_call_isNull35 || 
binary_call_isNull36 || binary_call_isNull37 || binary_call_isNull38 || 
binary_call_isNull39 || binary_call_isNull40 || binary_call_isNull41 || 
binary_call_isNull42 || binary_call_isNull43 || binary_call_isNull44 || 
binary_call_isNull45 || binary_call_isNull46 || binary_call_isNull47 || 
binary_call_isNull48 || binary_call_isNull49 || binary_call_isNull50 || 
binary_call_isNull51 || binary_call_isNull52 || binary_call_isNull53 || 
binary_call_isNull54 || binary_call_isNull55 || binary_call_isNull56 || 
binary_call_isNull57 || binary_call_isNull58 || binary_call_isNull59 || 
binary_call_isNull60 || binary_call_isNull61 || binary_call_isNull62 || 
binary_call_isNull63 || binary_call_isNull64 || binary_call_isNull65 || 
binary_call_isNull66 || binary_call_isNull67 || binary_call_isNull68 || 
binary_call_isNull69 || binary_call_isNull70 || binary_call_isNull71 || 
binary_call_isNull72 || binary_call_isNull73 || binary_call_isNull74 || 
binary_call_isNull75 || binary_call_isNull76 || binary_call_isNull77 || 
binary_call_isNull78 || binary_call_isNull79 || binary_call_isNull80 || 
binary_call_isNull81 || binary_call_isNull82 || binary_call_isNull83 || 
binary_call_isNull84 || binary_call_isNull85 || binary_call_isNull86 || 
binary_call_isNull87 || binary_call_isNull88 || binary_call_isNull89 || 
binary_call_isNull90 || binary_call_isNull91 || binary_call_isNull92 || 
binary_call_isNull93 || binary_call_isNull94 || binary_call_isNull95 || 
binary_call_isNull96 || binary_call_isNull97 || binary_call_isNull98 ? null : 
Boolean.FALSE)) {  return true;}{code}
If the IN condition of where contains many items, or if where contains many OR 
conditions, it will cause janino to report the following error when compiling.
{code:java}
java.lang.StackOverflowError
    at org.codehaus.janino.UnitCompiler.getConstantValue(UnitCompiler.java:5871)
    at 
org.codehaus.janino.UnitCompiler.getConstantValue2(UnitCompiler.java:6161)
    at org.codehaus.janino.UnitCompiler.access$11600(UnitCompiler.java:236)
    at 
org.codehaus.janino.UnitCompiler$19.visitBinaryOperation(UnitCompiler.java:5889)
    at org.codehaus.janino.Java$BinaryOperation.accept(Java.java:5249)
    at org.codehaus.janino.UnitCompiler.getConstantValue(UnitCompiler.java:5871)
    at 
org.codehaus.janino.UnitCompiler.getConstantValue2(UnitCompiler.java:6161)
    at org.codehaus.janino.UnitCompiler.access$11600(UnitCompiler.java:236)
    at 
org.codehaus.janino.UnitCompiler$19.visitBinaryOperation(UnitCompiler.java:5889)
    at org.codehaus.janino.Java$BinaryOperation.accept(Java.java:5249) {code}
But this doesn't seem to be a problem that code splitting needs to solve, 
because it is a single expression; perhaps we can try not to put all the 
conditions into one expression when implementing OR, so that code splitting can 
handle this situation

> Rework code generator to use Flink code splitter
> ------------------------------------------------
>
>                 Key: CALCITE-6465
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6465
>             Project: Calcite
>          Issue Type: New Feature
>          Components: core
>            Reporter: James Duong
>            Assignee: James Duong
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.39.0
>
>         Attachments: after_split_01.txt, after_split_02.txt, 
> before_split_01.txt, before_split_02.txt
>
>
> Holistically replace the (or provide a separate optional) code generator to 
> reduce issues such as CALCITE-3094 .
> One suggestion in the comments for CALCITE-3094 has been to use the [code 
> generator from 
> Flink.|https://nightlies.apache.org/flink/flink-docs-release-1.3/api/java/org/apache/flink/table/codegen/CodeGenerator.html]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to