[ 
https://issues.apache.org/jira/browse/CALCITE-5712?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Min-Seok Kim updated CALCITE-5712:
----------------------------------
    Description: 
We've encountered an issue in the interaction between the VolcanoPlanner and 
FilterableTable. Specifically, when the 
org.apache.calcite.util.trace.getPlannerTracer logger level is set to DEBUG, 
the isValid method within VolcanoPlanner throws an exception.

*Steps to Reproduce:*
 # Set the logger level for org.apache.calcite.util.trace.getPlannerTracer to 
DEBUG.
 # Run an existing test that uses FilterableTable.
$ ./gradlew :example:csv:test --tests 
"org.apache.calcite.test.CsvTest.testFilterableWhere"

*Actual Behavior:*

Running the above steps results in an AssertionError exception, which states:
{code:java}
FAILURE   1.1sec, org.apache.calcite.test.CsvTest > testFilterableWhere()
    java.lang.AssertionError: RelSubset [rel#42:RelSubset#2.ENUMERABLE.[]] has 
wrong best cost {130.0 rows, 246.0 cpu, 0.0 io}. Correct cost is {150.5 rows, 
350.505 cpu, 0.0 io}
        at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.isValid(VolcanoPlanner.java:663)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:620)
        at 
org.apache.calcite.plan.volcano.VolcanoRuleCall.transformTo(VolcanoRuleCall.java:144)
{code}

  was:
FilterableTable
{code:java}
class MyFilterableTable : AbstractTable(), FilterableTable {
    override fun getRowType(typeFactory: RelDataTypeFactory): RelDataType {
        return typeFactory.createStructType(
            listOf(typeFactory.createSqlType(SqlTypeName.BIGINT), 
typeFactory.createSqlType(SqlTypeName.VARCHAR)),
            listOf("ID", "NAME")
        )
    }    override fun scan(root: DataContext?, filters: MutableList<RexNode>?): 
Enumerable<Array<Any?>> {
        return Linq4j.asEnumerable(arrayOf(arrayOf(1L, "John")))
    }
}
{code}
*Steps to Reproduce:*
 # Clone the GitHub repository 
[https://github.com/emesday/filterabletable-coroutine]
 # USE_LOGBACK=true ./gradlew test -i
 ## this executes MinimalTest in src/test/kotlin/MinimalTest.kt

*Expected Behavior:*

The MyFilterableTable class should work correctly with coroutines (kotest) and 
logback.

*Actual Behavior:*

The MyFilterableTable class fails to function as expected when used in 
combination with coroutines (kotest) and logback. The failure message in the 
test case is as follows:
{code:java}
MinimalTest > MyFilterableTable fails FAILED
    java.lang.AssertionError: RelSubset [rel#78:RelSubset#2.ENUMERABLE.[]] has 
wrong best cost {130.0 rows, 216.0 cpu, 0.0 io}. Correct cost is {150.5 rows, 
150.505 cpu, 0.0 io}
        at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31) {code}
*Additional Information:*
 * Note that the MyScannableTable class is not affected by this issue.
 * When executing the test individually by running the 'MyFilterableTable 
fails' function using the IntelliJ plugin the MyFilterableTable class works 
correctly.

!image-2023-05-19-16-09-28-894.png|width=319,height=57!

Please feel free to make any necessary adjustments or additions to the provided 
information.

 

 


> VolcanoPlanner with FilterableTable shows wrong best cost 
> ----------------------------------------------------------
>
>                 Key: CALCITE-5712
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5712
>             Project: Calcite
>          Issue Type: Bug
>         Environment: Operating System: macOS Ventura 13.3.1(22E261)
> JDK Version: openjdk version "17.0.5" 2022-10-18 LTS
>            Reporter: Min-Seok Kim
>            Priority: Major
>         Attachments: image-2023-05-19-16-09-28-894.png
>
>
> We've encountered an issue in the interaction between the VolcanoPlanner and 
> FilterableTable. Specifically, when the 
> org.apache.calcite.util.trace.getPlannerTracer logger level is set to DEBUG, 
> the isValid method within VolcanoPlanner throws an exception.
> *Steps to Reproduce:*
>  # Set the logger level for org.apache.calcite.util.trace.getPlannerTracer to 
> DEBUG.
>  # Run an existing test that uses FilterableTable.
> $ ./gradlew :example:csv:test --tests 
> "org.apache.calcite.test.CsvTest.testFilterableWhere"
> *Actual Behavior:*
> Running the above steps results in an AssertionError exception, which states:
> {code:java}
> FAILURE   1.1sec, org.apache.calcite.test.CsvTest > testFilterableWhere()
>     java.lang.AssertionError: RelSubset [rel#42:RelSubset#2.ENUMERABLE.[]] 
> has wrong best cost {130.0 rows, 246.0 cpu, 0.0 io}. Correct cost is {150.5 
> rows, 350.505 cpu, 0.0 io}
>         at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
>         at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.isValid(VolcanoPlanner.java:663)
>         at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:620)
>         at 
> org.apache.calcite.plan.volcano.VolcanoRuleCall.transformTo(VolcanoRuleCall.java:144)
> {code}



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

Reply via email to