[
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)