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