From e13d560b6e802449143c40d785be9d6d9cf10a8a Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 10 May 2024 13:27:47 +0000 Subject: [PATCH 001/122] Enable quidem shadowing for decoupled testcases * Altered `QueryTestBuilder` to be able to switch to a backing quidem test * added a small crc to ensure that the shadow testcase does not deviate from the original one * Packaged all decoupled related things into a a single `DecoupledExtension` to reduce copy-paste * `DecoupledTestConfig#quidemReason` must describe why its being used * `DecoupledTestConfig#separateDefaultModeTest` can be used to make multiple case files based on `NullHandling` state * fixed a cosmetic bug during decoupled join translation * enhanced `!druidPlan` to report the final logical plan in non-decoupled mode as well * add check to ensure that only supported params are present in a druidtest uri * enabled shadow testcases for previously disabled testcases --- .../sql/calcite/planner/PlannerConfig.java | 26 ++ .../sql/calcite/planner/QueryHandler.java | 4 + .../druid/sql/calcite/rel/DruidRel.java | 32 +++ .../calcite/rule/logical/DruidJoinRule.java | 3 +- .../druid/quidem/DruidConnectionExtras.java | 2 +- .../apache/druid/quidem/DruidQTestInfo.java | 41 +++ .../quidem/DruidQuidemCommandHandler.java | 4 + .../sql/calcite/BaseCalciteQueryTest.java | 33 ++- .../sql/calcite/CalciteJoinQueryTest.java | 57 +++-- .../druid/sql/calcite/CalciteQueryTest.java | 22 +- .../druid/sql/calcite/DecoupledExtension.java | 50 +++- ...DecoupledPlanningCalciteJoinQueryTest.java | 4 - .../sql/calcite/DecoupledTestConfig.java | 20 +- .../apache/druid/sql/calcite/QTestCase.java | 120 +++++++++ .../druid/sql/calcite/QueryTestBuilder.java | 9 + .../druid/sql/calcite/QueryTestRunner.java | 29 +++ .../sql/calcite/SqlTestFrameworkConfig.java | 82 +++++- .../calcite/SqlTestFrameworkConfigTest.java | 20 ++ .../sql/calcite/util/SqlTestFramework.java | 14 + .../decoupled.iq | 2 +- .../join.iq | 2 +- .../testCommaJoinLeftFunction.iq | 90 +++++++ ...InnerJoinWithLimit@NullHandling=default.iq | 115 +++++++++ ...urces@all_disabled@NullHandling=default.iq | 163 ++++++++++++ ...ources@all_enabled@NullHandling=default.iq | 163 ++++++++++++ ...ataSources@default@NullHandling=default.iq | 160 ++++++++++++ ...ue-column_disabled@NullHandling=default.iq | 163 ++++++++++++ ...-rewrites-disabled@NullHandling=default.iq | 163 ++++++++++++ ...es@filter-rewrites@NullHandling=default.iq | 163 ++++++++++++ ...ces@join-to-filter@NullHandling=default.iq | 163 ++++++++++++ ...tLeft@all_disabled@NullHandling=default.iq | 90 +++++++ ...stLeft@all_enabled@NullHandling=default.iq | 90 +++++++ ...inCastLeft@default@NullHandling=default.iq | 87 +++++++ ...ue-column_disabled@NullHandling=default.iq | 90 +++++++ ...-rewrites-disabled@NullHandling=default.iq | 90 +++++++ ...ft@filter-rewrites@NullHandling=default.iq | 90 +++++++ ...eft@join-to-filter@NullHandling=default.iq | 90 +++++++ .../testInnerJoinLeftFunction@all_disabled.iq | 93 +++++++ .../testInnerJoinLeftFunction@all_enabled.iq | 93 +++++++ .../testInnerJoinLeftFunction@default.iq | 90 +++++++ ...unction@filter-on-value-column_disabled.iq | 93 +++++++ ...inLeftFunction@filter-rewrites-disabled.iq | 93 +++++++ ...stInnerJoinLeftFunction@filter-rewrites.iq | 93 +++++++ ...estInnerJoinLeftFunction@join-to-filter.iq | 93 +++++++ ...ccess@all_disabled@NullHandling=default.iq | 133 ++++++++++ ...Access@all_enabled@NullHandling=default.iq | 133 ++++++++++ ...rectAccess@default@NullHandling=default.iq | 130 ++++++++++ ...ue-column_disabled@NullHandling=default.iq | 133 ++++++++++ ...-rewrites-disabled@NullHandling=default.iq | 133 ++++++++++ ...ss@filter-rewrites@NullHandling=default.iq | 133 ++++++++++ ...ess@join-to-filter@NullHandling=default.iq | 133 ++++++++++ ...ccess@all_disabled@NullHandling=default.iq | 133 ++++++++++ ...Access@all_enabled@NullHandling=default.iq | 133 ++++++++++ ...rectAccess@default@NullHandling=default.iq | 130 ++++++++++ ...ue-column_disabled@NullHandling=default.iq | 133 ++++++++++ ...-rewrites-disabled@NullHandling=default.iq | 133 ++++++++++ ...ss@filter-rewrites@NullHandling=default.iq | 133 ++++++++++ ...ess@join-to-filter@NullHandling=default.iq | 133 ++++++++++ ...testInnerJoinQueryOfLookup@all_disabled.iq | 113 ++++++++ .../testInnerJoinQueryOfLookup@all_enabled.iq | 113 ++++++++ .../testInnerJoinQueryOfLookup@default.iq | 110 ++++++++ ...fLookup@filter-on-value-column_disabled.iq | 113 ++++++++ ...nQueryOfLookup@filter-rewrites-disabled.iq | 113 ++++++++ ...tInnerJoinQueryOfLookup@filter-rewrites.iq | 113 ++++++++ ...stInnerJoinQueryOfLookup@join-to-filter.iq | 113 ++++++++ ...JoinQueryOfLookupRemovable@all_disabled.iq | 96 +++++++ ...rJoinQueryOfLookupRemovable@all_enabled.iq | 96 +++++++ ...InnerJoinQueryOfLookupRemovable@default.iq | 93 +++++++ ...movable@filter-on-value-column_disabled.iq | 96 +++++++ ...ookupRemovable@filter-rewrites-disabled.iq | 96 +++++++ ...nQueryOfLookupRemovable@filter-rewrites.iq | 96 +++++++ ...inQueryOfLookupRemovable@join-to-filter.iq | 96 +++++++ ...iesWithFloorOnTime@NullHandling=default.iq | 155 +++++++++++ ...gateMultipleValues@NullHandling=default.iq | 155 +++++++++++ ...iesWithFloorOnTime@NullHandling=default.iq | 138 ++++++++++ ...hInputRefCondition@NullHandling=default.iq | 126 +++++++++ ...ccess@all_disabled@NullHandling=default.iq | 133 ++++++++++ ...Access@all_enabled@NullHandling=default.iq | 133 ++++++++++ ...rectAccess@default@NullHandling=default.iq | 130 ++++++++++ ...ue-column_disabled@NullHandling=default.iq | 133 ++++++++++ ...-rewrites-disabled@NullHandling=default.iq | 133 ++++++++++ ...ss@filter-rewrites@NullHandling=default.iq | 133 ++++++++++ ...ess@join-to-filter@NullHandling=default.iq | 133 ++++++++++ ...ccess@all_disabled@NullHandling=default.iq | 139 ++++++++++ ...Access@all_enabled@NullHandling=default.iq | 139 ++++++++++ ...rectAccess@default@NullHandling=default.iq | 136 ++++++++++ ...ue-column_disabled@NullHandling=default.iq | 139 ++++++++++ ...-rewrites-disabled@NullHandling=default.iq | 139 ++++++++++ ...ss@filter-rewrites@NullHandling=default.iq | 139 ++++++++++ ...ess@join-to-filter@NullHandling=default.iq | 139 ++++++++++ ...ccess@all_disabled@NullHandling=default.iq | 133 ++++++++++ ...Access@all_enabled@NullHandling=default.iq | 133 ++++++++++ ...rectAccess@default@NullHandling=default.iq | 130 ++++++++++ ...ue-column_disabled@NullHandling=default.iq | 133 ++++++++++ ...-rewrites-disabled@NullHandling=default.iq | 133 ++++++++++ ...ss@filter-rewrites@NullHandling=default.iq | 133 ++++++++++ ...ess@join-to-filter@NullHandling=default.iq | 133 ++++++++++ ...SubqueryWithSelectorFilter@all_disabled.iq | 100 ++++++++ ...nSubqueryWithSelectorFilter@all_enabled.iq | 100 ++++++++ ...tJoinSubqueryWithSelectorFilter@default.iq | 97 +++++++ ...rFilter@filter-on-value-column_disabled.iq | 100 ++++++++ ...SelectorFilter@filter-rewrites-disabled.iq | 100 ++++++++ ...queryWithSelectorFilter@filter-rewrites.iq | 100 ++++++++ ...bqueryWithSelectorFilter@join-to-filter.iq | 100 ++++++++ ...onSortedOrUniqueDictionary@all_disabled.iq | 87 +++++++ ...NonSortedOrUniqueDictionary@all_enabled.iq | 87 +++++++ ...WithNonSortedOrUniqueDictionary@default.iq | 84 ++++++ ...tionary@filter-on-value-column_disabled.iq | 87 +++++++ ...iqueDictionary@filter-rewrites-disabled.iq | 87 +++++++ ...ortedOrUniqueDictionary@filter-rewrites.iq | 87 +++++++ ...SortedOrUniqueDictionary@join-to-filter.iq | 87 +++++++ ...UniqueDictionaryOrderByDim@all_disabled.iq | 89 +++++++ ...rUniqueDictionaryOrderByDim@all_enabled.iq | 89 +++++++ ...tedOrUniqueDictionaryOrderByDim@default.iq | 86 +++++++ ...erByDim@filter-on-value-column_disabled.iq | 89 +++++++ ...naryOrderByDim@filter-rewrites-disabled.iq | 89 +++++++ ...queDictionaryOrderByDim@filter-rewrites.iq | 89 +++++++ ...iqueDictionaryOrderByDim@join-to-filter.iq | 89 +++++++ ...onFns@all_disabled@NullHandling=default.iq | 139 ++++++++++ ...ionFns@all_enabled@NullHandling=default.iq | 139 ++++++++++ ...ractionFns@default@NullHandling=default.iq | 136 ++++++++++ ...ue-column_disabled@NullHandling=default.iq | 139 ++++++++++ ...-rewrites-disabled@NullHandling=default.iq | 139 ++++++++++ ...ns@filter-rewrites@NullHandling=default.iq | 139 ++++++++++ ...Fns@join-to-filter@NullHandling=default.iq | 139 ++++++++++ ...mnOnMVFilterJoinExpression@all_disabled.iq | 126 +++++++++ ...umnOnMVFilterJoinExpression@all_enabled.iq | 126 +++++++++ ...lColumnOnMVFilterJoinExpression@default.iq | 123 +++++++++ ...ression@filter-on-value-column_disabled.iq | 126 +++++++++ ...JoinExpression@filter-rewrites-disabled.iq | 126 +++++++++ ...nMVFilterJoinExpression@filter-rewrites.iq | 126 +++++++++ ...OnMVFilterJoinExpression@join-to-filter.iq | 126 +++++++++ ...VFilterMultiJoinExpression@all_disabled.iq | 202 +++++++++++++++ ...MVFilterMultiJoinExpression@all_enabled.iq | 202 +++++++++++++++ ...mnOnMVFilterMultiJoinExpression@default.iq | 199 ++++++++++++++ ...ression@filter-on-value-column_disabled.iq | 202 +++++++++++++++ ...JoinExpression@filter-rewrites-disabled.iq | 202 +++++++++++++++ ...lterMultiJoinExpression@filter-rewrites.iq | 202 +++++++++++++++ ...ilterMultiJoinExpression@join-to-filter.iq | 202 +++++++++++++++ ...ndOtherAggregators@NullHandling=default.iq | 108 ++++++++ ...ingAndOtherAggregators@NullHandling=sql.iq | 108 ++++++++ ...PushdownExtraction@NullHandling=default.iq | 84 ++++++ ...imitPushdownExtraction@NullHandling=sql.iq | 85 ++++++ .../testGroupBySortPushDown.iq | 76 ++++++ ...pByTimeFloorAndDim@NullHandling=default.iq | 147 +++++++++++ ...GroupByTimeFloorAndDim@NullHandling=sql.iq | 146 +++++++++++ ...estGroupByWithLiteralInSubqueryGrouping.iq | 110 ++++++++ ...gregatorsUsingJoin@NullHandling=default.iq | 231 +++++++++++++++++ ...erAggregatorsUsingJoin@NullHandling=sql.iq | 242 ++++++++++++++++++ ...ojectDoesNotRename@NullHandling=default.iq | 152 +++++++++++ ...tyProjectDoesNotRename@NullHandling=sql.iq | 151 +++++++++++ ...eatedIdenticalVirtualExpressionGrouping.iq | 71 +++++ ...smatchWithLiterals@NullHandling=default.iq | 110 ++++++++ ...peMismatchWithLiterals@NullHandling=sql.iq | 111 ++++++++ ...ingWithScanAndSort@NullHandling=default.iq | 191 ++++++++++++++ ...ndowingWithScanAndSort@NullHandling=sql.iq | 202 +++++++++++++++ 156 files changed, 17331 insertions(+), 84 deletions(-) create mode 100644 sql/src/test/java/org/apache/druid/quidem/DruidQTestInfo.java create mode 100644 sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java index 75887bcbec14..6f2a97b24823 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java @@ -20,10 +20,12 @@ package org.apache.druid.sql.calcite.planner; import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.UOE; import org.apache.druid.query.QueryContexts; import org.joda.time.DateTimeZone; +import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -428,4 +430,28 @@ public PlannerConfig build() return config; } } + + public Map getNonDefaultAsQueryContext() + { + Map overrides = new HashMap<>(); + PlannerConfig def = new PlannerConfig(); + if (def.useApproximateCountDistinct != useApproximateCountDistinct) { + overrides.put( + CTX_KEY_USE_APPROXIMATE_COUNT_DISTINCT, + String.valueOf(useApproximateCountDistinct) + ); + } + if (def.useGroupingSetForExactDistinct != useGroupingSetForExactDistinct) { + overrides.put( + CTX_KEY_USE_GROUPING_SET_FOR_EXACT_DISTINCT, + String.valueOf(useGroupingSetForExactDistinct) + ); + } + + PlannerConfig newConfig = PlannerConfig.builder().withOverrides(overrides).build(); + if (!equals(newConfig)) { + throw new IAE("Some configs are not handled in this method or not persistable as QueryContext keys!\nold: %s\nnew: %s", this, newConfig); + } + return overrides; + } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java index 8a7bf4a6f742..9f15d3822866 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java @@ -588,7 +588,11 @@ protected PlannerResult planWithDruidConvention() throws ValidationException .plus(rootQueryRel.collation), parameterized ); + handlerContext.hook().captureDruidRel(druidRel); + + Hook.JAVA_PLAN.run(druidRel); + if (explain != null) { return planExplanation(possiblyLimitedRoot, druidRel, true); } else { diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidRel.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidRel.java index ac6c08547494..798b0bb407bd 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidRel.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidRel.java @@ -19,14 +19,19 @@ package org.apache.druid.sql.calcite.rel; +import com.google.common.collect.Iterables; import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelTraitSet; +import org.apache.calcite.plan.volcano.RelSubset; import org.apache.calcite.rel.AbstractRelNode; +import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.RelShuttleImpl; import org.apache.calcite.rel.RelWriter; import org.apache.druid.server.QueryResponse; import org.apache.druid.sql.calcite.planner.PlannerContext; import javax.annotation.Nullable; + import java.util.Set; public abstract class DruidRel> extends AbstractRelNode @@ -122,4 +127,31 @@ protected Object clone() throws CloneNotSupportedException * Get the set of names of table datasources read by this DruidRel */ public abstract Set getDataSourceNames(); + + public final RelNode unwrapLogicalPlan() + { + return accept(new LogicalPlanUnwrapperShuttle()); + } + + private static class LogicalPlanUnwrapperShuttle extends RelShuttleImpl + { + @Override + public RelNode visit(RelNode other) + { + return super.visit(visitNode(other)); + } + + private RelNode visitNode(RelNode other) + { + if (other instanceof RelSubset) { + final RelSubset subset = (RelSubset) other; + return visitNode(Iterables.getFirst(subset.getRels(), null)); + } + if (other instanceof DruidRel) { + DruidRel druidRel = (DruidRel) other; + return druidRel.getPartialDruidQuery().leafRel(); + } + return other; + } + } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rule/logical/DruidJoinRule.java b/sql/src/main/java/org/apache/druid/sql/calcite/rule/logical/DruidJoinRule.java index ded383cbefba..1a50ae1fbcd5 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rule/logical/DruidJoinRule.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rule/logical/DruidJoinRule.java @@ -54,7 +54,6 @@ public DruidJoinRule(Class clazz, RelTrait in, RelTrait out, // reject the query in case the anaysis detected any issues throw InvalidSqlInput.exception(analysis.errorStr); } - return new DruidJoin( join.getCluster(), newTrait, @@ -67,7 +66,7 @@ public DruidJoinRule(Class clazz, RelTrait in, RelTrait out, join.getRight(), DruidLogicalConvention.instance() ), - join.getCondition(), + analysis.getConditionWithUnsupportedSubConditionsIgnored(join.getCluster().getRexBuilder()), join.getVariablesSet(), join.getJoinType() ); diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java index 75bdd4280fab..2b75f82122c1 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java @@ -25,7 +25,7 @@ public interface DruidConnectionExtras { ObjectMapper getObjectMapper(); - class DruidConnectionExtrasImpl implements DruidConnectionExtras + public class DruidConnectionExtrasImpl implements DruidConnectionExtras { private final ObjectMapper objectMapper; diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQTestInfo.java b/sql/src/test/java/org/apache/druid/quidem/DruidQTestInfo.java new file mode 100644 index 000000000000..9d655da3448a --- /dev/null +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQTestInfo.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import java.io.File; + +public class DruidQTestInfo +{ + public final File caseDir; + public final String testName; + public final String comment; + + public DruidQTestInfo(File caseDir, String testName, String comment) + { + this.caseDir = caseDir; + this.testName = testName; + this.comment = comment; + } + + public File getIQFile() + { + return new File(caseDir, testName + ".iq"); + } +} diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java index f6577e3903fe..8c2b99d80b6b 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java @@ -33,6 +33,7 @@ import org.apache.calcite.util.Util; import org.apache.druid.query.Query; import org.apache.druid.sql.calcite.BaseCalciteQueryTest; +import org.apache.druid.sql.calcite.rel.DruidRel; import org.apache.druid.sql.calcite.util.QueryLogHook; import java.sql.ResultSet; @@ -171,6 +172,9 @@ protected final void executeExplain(Context x) } for (RelNode node : logged) { + if (node instanceof DruidRel) { + node = ((DruidRel) node).unwrapLogicalPlan(); + } String str = RelOptUtil.dumpPlan("", node, SqlExplainFormat.TEXT, SqlExplainLevel.EXPPLAN_ATTRIBUTES); x.echo(ImmutableList.of(str)); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java index 94d2249add3c..b991e8c230ea 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/BaseCalciteQueryTest.java @@ -106,6 +106,7 @@ import org.junit.Assert; import org.junit.internal.matchers.ThrowableMessageMatcher; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Named; import org.junit.jupiter.api.extension.RegisterExtension; import javax.annotation.Nullable; @@ -933,6 +934,12 @@ public Map baseQueryContext() { return baseQueryContext; } + + @Override + public SqlTestFramework queryFramework() + { + return BaseCalciteQueryTest.this.queryFramework(); + } } public enum ResultMatchMode @@ -1273,51 +1280,51 @@ public static Object[] provideQueryContexts() { return new Object[] { // default behavior - QUERY_CONTEXT_DEFAULT, + Named.of("default", QUERY_CONTEXT_DEFAULT), // all rewrites enabled - new ImmutableMap.Builder() + Named.of("all_enabled", new ImmutableMap.Builder() .putAll(QUERY_CONTEXT_DEFAULT) .put(QueryContexts.JOIN_FILTER_REWRITE_VALUE_COLUMN_FILTERS_ENABLE_KEY, true) .put(QueryContexts.JOIN_FILTER_REWRITE_ENABLE_KEY, true) .put(QueryContexts.REWRITE_JOIN_TO_FILTER_ENABLE_KEY, true) - .build(), + .build()), // filter-on-value-column rewrites disabled, everything else enabled - new ImmutableMap.Builder() + Named.of("filter-on-value-column_disabled", new ImmutableMap.Builder() .putAll(QUERY_CONTEXT_DEFAULT) .put(QueryContexts.JOIN_FILTER_REWRITE_VALUE_COLUMN_FILTERS_ENABLE_KEY, false) .put(QueryContexts.JOIN_FILTER_REWRITE_ENABLE_KEY, true) .put(QueryContexts.REWRITE_JOIN_TO_FILTER_ENABLE_KEY, true) - .build(), + .build()), // filter rewrites fully disabled, join-to-filter enabled - new ImmutableMap.Builder() + Named.of("join-to-filter", new ImmutableMap.Builder() .putAll(QUERY_CONTEXT_DEFAULT) .put(QueryContexts.JOIN_FILTER_REWRITE_VALUE_COLUMN_FILTERS_ENABLE_KEY, false) .put(QueryContexts.JOIN_FILTER_REWRITE_ENABLE_KEY, false) .put(QueryContexts.REWRITE_JOIN_TO_FILTER_ENABLE_KEY, true) - .build(), + .build()), // filter rewrites disabled, but value column filters still set to true // (it should be ignored and this should // behave the same as the previous context) - new ImmutableMap.Builder() + Named.of("filter-rewrites-disabled", new ImmutableMap.Builder() .putAll(QUERY_CONTEXT_DEFAULT) .put(QueryContexts.JOIN_FILTER_REWRITE_VALUE_COLUMN_FILTERS_ENABLE_KEY, true) .put(QueryContexts.JOIN_FILTER_REWRITE_ENABLE_KEY, false) .put(QueryContexts.REWRITE_JOIN_TO_FILTER_ENABLE_KEY, true) - .build(), + .build()), // filter rewrites fully enabled, join-to-filter disabled - new ImmutableMap.Builder() + Named.of("filter-rewrites", new ImmutableMap.Builder() .putAll(QUERY_CONTEXT_DEFAULT) .put(QueryContexts.JOIN_FILTER_REWRITE_VALUE_COLUMN_FILTERS_ENABLE_KEY, true) .put(QueryContexts.JOIN_FILTER_REWRITE_ENABLE_KEY, true) .put(QueryContexts.REWRITE_JOIN_TO_FILTER_ENABLE_KEY, false) - .build(), + .build()), // all rewrites disabled - new ImmutableMap.Builder() + Named.of("all_disabled", new ImmutableMap.Builder() .putAll(QUERY_CONTEXT_DEFAULT) .put(QueryContexts.JOIN_FILTER_REWRITE_VALUE_COLUMN_FILTERS_ENABLE_KEY, false) .put(QueryContexts.JOIN_FILTER_REWRITE_ENABLE_KEY, false) .put(QueryContexts.REWRITE_JOIN_TO_FILTER_ENABLE_KEY, false) - .build(), + .build()), }; } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java index a822d8b8f101..f1ddeb9ccfbd 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java @@ -83,7 +83,7 @@ import org.apache.druid.segment.virtual.ListFilteredVirtualColumn; import org.apache.druid.server.QueryLifecycle; import org.apache.druid.server.security.Access; -import org.apache.druid.sql.calcite.DecoupledTestConfig.NativeQueryIgnore; +import org.apache.druid.sql.calcite.DecoupledTestConfig.QuidemTestCaseReason; import org.apache.druid.sql.calcite.NotYetSupported.Modes; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.MinTopNThreshold; import org.apache.druid.sql.calcite.expression.DruidExpression; @@ -107,6 +107,7 @@ import java.util.Map; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assume.assumeFalse; import static org.junit.jupiter.api.Assertions.assertThrows; public class CalciteJoinQueryTest extends BaseCalciteQueryTest @@ -179,12 +180,11 @@ public void testInnerJoinWithLimitAndAlias() ); } - // Adjust topN threshold, so that the topN engine keeps only 1 slot for aggregates, which should be enough // to compute the query with limit 1. @SqlTestFrameworkConfig.MinTopNThreshold(1) @Test - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.EQUIV_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.EQUIV_PLAN, separateDefaultModeTest = true) public void testExactTopNOnInnerJoinWithLimit() { Map context = new HashMap<>(QUERY_CONTEXT_DEFAULT); @@ -492,7 +492,7 @@ public void testJoinWithLimitBeforeJoining() } @Test - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_FILTER_LOCATIONS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_FILTER_LOCATIONS, separateDefaultModeTest = true) public void testJoinOnTimeseriesWithFloorOnTime() { // Cannot vectorize JOIN operator. @@ -547,7 +547,7 @@ public void testJoinOnTimeseriesWithFloorOnTime() } @Test - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_FILTER_LOCATIONS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_FILTER_LOCATIONS, separateDefaultModeTest = true) public void testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime() { // Cannot vectorize JOIN operator. @@ -614,7 +614,7 @@ public void testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime() } @Test - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_FILTER_LOCATIONS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_FILTER_LOCATIONS, separateDefaultModeTest = true) public void testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues() { // Cannot vectorize JOIN operator. @@ -1529,7 +1529,7 @@ public void testManyManyInnerJoinOnManyManyLookup(Map queryConte ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.FINALIZING_FIELD_ACCESS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.FINALIZING_FIELD_ACCESS) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testInnerJoinQueryOfLookup(Map queryContext) @@ -1609,7 +1609,7 @@ public void testTimeColumnAggregationsOnLookups(Map queryContext } } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.DEFINETLY_WORSE_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.DEFINETLY_WORSE_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testInnerJoinQueryOfLookupRemovable(Map queryContext) @@ -1648,7 +1648,6 @@ public void testInnerJoinQueryOfLookupRemovable(Map queryContext ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.EQUIV_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testInnerJoinTwoLookupsToTableUsingNumericColumn(Map queryContext) @@ -1976,7 +1975,7 @@ public void testWhereInSelectNullFromLookup() } @Test - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_FILTER_LOCATIONS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_FILTER_LOCATIONS) public void testCommaJoinLeftFunction() { testQuery( @@ -2151,7 +2150,7 @@ public void testJoinTableLookupTableMismatchedTypesWithoutComma(Map queryContext) @@ -2280,7 +2279,7 @@ public void testInnerJoinMismatchedTypes(Map queryContext) ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_FILTER_LOCATIONS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_FILTER_LOCATIONS) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testInnerJoinLeftFunction(Map queryContext) @@ -2733,7 +2732,7 @@ public void testNotInAggregationSubquery(Map queryContext) ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_FILTER_LOCATIONS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_FILTER_LOCATIONS, separateDefaultModeTest = true) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testUsingSubqueryWithExtractionFns(Map queryContext) @@ -2937,7 +2936,7 @@ public void testLeftJoinOnTwoInlineDataSourcesWithTimeFilter(Map ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_LEFT_DIRECT_ACCESS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_LEFT_DIRECT_ACCESS, separateDefaultModeTest = true) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess(Map queryContext) @@ -3049,7 +3048,7 @@ public void testLeftJoinOnTwoInlineDataSourcesWithOuterWhere(Map ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_LEFT_DIRECT_ACCESS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_LEFT_DIRECT_ACCESS, separateDefaultModeTest = true) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess(Map queryContext) @@ -3151,7 +3150,7 @@ public void testLeftJoinOnTwoInlineDataSources(Map queryContext) ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_LEFT_DIRECT_ACCESS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_LEFT_DIRECT_ACCESS, separateDefaultModeTest = true) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess(Map queryContext) @@ -3253,7 +3252,7 @@ public void testInnerJoinOnTwoInlineDataSourcesWithOuterWhere(Map queryContext) @@ -3355,9 +3354,9 @@ public void testInnerJoinOnTwoInlineDataSources(Map queryContext ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.EQUIV_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.EQUIV_PLAN, separateDefaultModeTest = true) public void testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources(Map queryContext) { cannotVectorize(); @@ -3440,7 +3439,7 @@ public void testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources(Map queryContext) @@ -3591,6 +3590,10 @@ public void testLeftJoinSubqueryWithNullKeyFilter(Map queryConte // This test case was originally added in https://github.com/apache/druid/pull/11434 with a note about this. Assumptions.assumeFalse(NullHandling.replaceWithDefault() && QueryContext.of(queryContext).getEnableJoinFilterRewrite()); + assumeFalse( + "join condition not support in decoupled mode", testBuilder().isDecoupledMode() && NullHandling.replaceWithDefault() + ); + // Cannot vectorize due to 'concat' expression. cannotVectorize(); @@ -3670,9 +3673,9 @@ public void testLeftJoinSubqueryWithNullKeyFilter(Map queryConte ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.EQUIV_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.EQUIV_PLAN) public void testLeftJoinSubqueryWithSelectorFilter(Map queryContext) { // Cannot vectorize due to 'concat' expression. @@ -3876,7 +3879,6 @@ public void testJoinWithExplicitIsNotDistinctFromCondition(Map q ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.EQUIV_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testInnerJoinSubqueryWithSelectorFilter(Map queryContext) @@ -4152,7 +4154,6 @@ public void testSemiAndAntiJoinSimultaneouslyUsingWhereInSubquery(Map queryContext) @@ -5152,9 +5153,9 @@ public void testCountOnSemiJoinSingleColumn(Map queryContext) ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.EQUIV_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.EQUIV_PLAN) public void testTopNOnStringWithNonSortedOrUniqueDictionary(Map queryContext) { testQuery( @@ -5193,9 +5194,9 @@ public void testTopNOnStringWithNonSortedOrUniqueDictionary(Map ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.EQUIV_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.EQUIV_PLAN) public void testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim(Map queryContext) { @@ -5234,7 +5235,7 @@ public void testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim(Map queryContext) @@ -5291,7 +5292,7 @@ public void testVirtualColumnOnMVFilterJoinExpression(Map queryC ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.DEFINETLY_WORSE_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.DEFINETLY_WORSE_PLAN) @MethodSource("provideQueryContexts") @ParameterizedTest(name = "{0}") public void testVirtualColumnOnMVFilterMultiJoinExpression(Map queryContext) @@ -5652,6 +5653,8 @@ public void testPlanWithInFilterMoreThanInSubQueryThreshold() @ParameterizedTest(name = "{0}") public void testRegressionFilteredAggregatorsSubqueryJoins(Map queryContext) { + assumeFalse("not support in decoupled mode", testBuilder().isDecoupledMode() && NullHandling.replaceWithDefault()); + cannotVectorize(); testQuery( "select\n" + @@ -6027,7 +6030,7 @@ public void testJoinsWithThreeConditions() } @Test - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.JOIN_FILTER_LOCATIONS) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.JOIN_FILTER_LOCATIONS, separateDefaultModeTest = true) public void testJoinWithInputRefCondition() { cannotVectorize(); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java index b5a32f4301cb..33e2d3e00d07 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java @@ -112,7 +112,7 @@ import org.apache.druid.segment.column.RowSignature; import org.apache.druid.segment.join.JoinType; import org.apache.druid.segment.virtual.ExpressionVirtualColumn; -import org.apache.druid.sql.calcite.DecoupledTestConfig.NativeQueryIgnore; +import org.apache.druid.sql.calcite.DecoupledTestConfig.QuidemTestCaseReason; import org.apache.druid.sql.calcite.NotYetSupported.Modes; import org.apache.druid.sql.calcite.expression.DruidExpression; import org.apache.druid.sql.calcite.filtration.Filtration; @@ -6955,7 +6955,7 @@ public void testApproxCountDistinctBuiltin() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.AGG_COL_EXCHANGE) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.AGG_COL_EXCHANGE, separateDefaultModeTest = true) @Test public void testExactCountDistinctWithGroupingAndOtherAggregators() { @@ -7010,7 +7010,7 @@ public void testExactCountDistinctWithGroupingAndOtherAggregators() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.AGG_COL_EXCHANGE) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.AGG_COL_EXCHANGE, separateDefaultModeTest = true) @Test public void testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin() { @@ -8209,7 +8209,7 @@ public void testRegexpLikeFilter() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.AGG_COL_EXCHANGE) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.AGG_COL_EXCHANGE) @Test public void testGroupBySortPushDown() { @@ -8305,7 +8305,7 @@ public void testGroupByLimitPushDownWithHavingOnLong() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.IMPROVED_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.IMPROVED_PLAN, separateDefaultModeTest = true) @Test public void testGroupByLimitPushdownExtraction() { @@ -8752,7 +8752,7 @@ public void testGroupByFloor() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.SLIGHTLY_WORSE_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.SLIGHTLY_WORSE_PLAN, separateDefaultModeTest = true) @SqlTestFrameworkConfig.NumMergeBuffers(3) @Test public void testQueryWithSelectProjectAndIdentityProjectDoesNotRename() @@ -10594,7 +10594,7 @@ public void testGroupByTimeAndOtherDimension() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.IMPROVED_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.IMPROVED_PLAN, separateDefaultModeTest = true) @Test public void testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim() { @@ -12729,7 +12729,7 @@ public void testNvlColumns() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.IMPROVED_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.IMPROVED_PLAN) @Test public void testGroupByWithLiteralInSubqueryGrouping() { @@ -12918,7 +12918,7 @@ public void testQueryContextOuterLimit() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.IMPROVED_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.IMPROVED_PLAN) @Test public void testRepeatedIdenticalVirtualExpressionGrouping() { @@ -14493,7 +14493,7 @@ public void testGreatestFunctionForStringWithIsNull() ); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.AGGREGATE_REMOVE_NOT_FIRED) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.AGGREGATE_REMOVE_NOT_FIRED, separateDefaultModeTest = true) @Test public void testSubqueryTypeMismatchWithLiterals() { @@ -15213,7 +15213,7 @@ public void testScanAndSortCanGetSchemaFromScanQuery() .run(); } - @DecoupledTestConfig(nativeQueryIgnore = NativeQueryIgnore.SLIGHTLY_WORSE_PLAN) + @DecoupledTestConfig(quidemReason = QuidemTestCaseReason.SLIGHTLY_WORSE_PLAN, separateDefaultModeTest = true) @Test public void testWindowingWithScanAndSort() { diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java index ec1e64df95c3..ec3d25632a63 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java @@ -20,14 +20,20 @@ package org.apache.druid.sql.calcite; import com.google.common.collect.ImmutableMap; +import org.apache.druid.common.config.NullHandling; import org.apache.druid.query.QueryContexts; +import org.apache.druid.quidem.DruidQTestInfo; +import org.apache.druid.quidem.ProjectPathUtils; import org.apache.druid.server.security.AuthConfig; import org.apache.druid.sql.calcite.BaseCalciteQueryTest.CalciteTestConfig; import org.apache.druid.sql.calcite.planner.PlannerConfig; import org.apache.druid.sql.calcite.util.SqlTestFramework; -import org.junit.jupiter.api.extension.Extension; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; -public class DecoupledExtension implements Extension +import java.io.File; + +public class DecoupledExtension implements BeforeEachCallback { private BaseCalciteQueryTest baseTest; @@ -36,6 +42,15 @@ public DecoupledExtension(BaseCalciteQueryTest baseTest) this.baseTest = baseTest; } + private File qCaseDir; + + @Override + public void beforeEach(ExtensionContext context) throws Exception + { + Class testClass = context.getTestClass().get(); + qCaseDir = ProjectPathUtils.getPathFromProjectRoot("sql/src/test/quidem/" + testClass.getName()); + } + private static final ImmutableMap CONTEXT_OVERRIDES = ImmutableMap.builder() .putAll(BaseCalciteQueryTest.QUERY_CONTEXT_DEFAULT) .put(PlannerConfig.CTX_NATIVE_QUERY_SQL_PLANNING_MODE, PlannerConfig.NATIVE_QUERY_SQL_PLANNING_MODE_DECOUPLED) @@ -47,8 +62,11 @@ public QueryTestBuilder testBuilder() DecoupledTestConfig decTestConfig = BaseCalciteQueryTest.queryFrameworkRule .getAnnotation(DecoupledTestConfig.class); + boolean runQuidem = (decTestConfig != null && decTestConfig.quidemReason().isPresent()); + CalciteTestConfig testConfig = baseTest.new CalciteTestConfig(CONTEXT_OVERRIDES) { + @Override public SqlTestFramework.PlannerFixture plannerFixture(PlannerConfig plannerConfig, AuthConfig authConfig) { @@ -56,16 +74,36 @@ public SqlTestFramework.PlannerFixture plannerFixture(PlannerConfig plannerConfi return baseTest.queryFramework().plannerFixture(plannerConfig, authConfig); } + + @Override + public DruidQTestInfo getQTestInfo() + { + if (runQuidem) { + final String testName; + if (decTestConfig.separateDefaultModeTest()) { + if (NullHandling.sqlCompatible()) { + testName = BaseCalciteQueryTest.queryFrameworkRule.testName() + "@NullHandling=sql"; + } else { + testName = BaseCalciteQueryTest.queryFrameworkRule.testName() + "@NullHandling=default"; + } + } else { + testName = BaseCalciteQueryTest.queryFrameworkRule.testName(); + } + return new DruidQTestInfo( + qCaseDir, + testName, + "quidem testcase reason: " + decTestConfig.quidemReason() + ); + } else { + return null; + } + } }; QueryTestBuilder builder = new QueryTestBuilder(testConfig) .cannotVectorize(baseTest.cannotVectorize) .skipVectorize(baseTest.skipVectorize); - if (decTestConfig != null && decTestConfig.nativeQueryIgnore().isPresent()) { - builder.verifyNativeQueries(x -> false); - } - return builder; } } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledPlanningCalciteJoinQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledPlanningCalciteJoinQueryTest.java index dba11b35ffeb..d8abfbb20753 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledPlanningCalciteJoinQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledPlanningCalciteJoinQueryTest.java @@ -19,7 +19,6 @@ package org.apache.druid.sql.calcite; -import org.apache.druid.sql.calcite.DisableUnless.DisableUnlessRule; import org.apache.druid.sql.calcite.NotYetSupported.NotYetSupportedProcessor; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; @@ -32,9 +31,6 @@ @ExtendWith(NotYetSupportedProcessor.class) public class DecoupledPlanningCalciteJoinQueryTest extends CalciteJoinQueryTest { - @RegisterExtension - public DisableUnlessRule sqlCompatOnly = DisableUnless.SQL_COMPATIBLE; - @RegisterExtension DecoupledExtension decoupledExtension = new DecoupledExtension(this); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledTestConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledTestConfig.java index 511db82b76b7..9bd57e10afb4 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledTestConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledTestConfig.java @@ -22,9 +22,6 @@ import org.apache.calcite.rel.rules.CoreRules; import org.apache.druid.query.QueryContexts; import org.apache.druid.query.aggregation.post.FinalizingFieldAccessPostAggregator; -import org.apache.druid.query.scan.ScanQuery; -import org.apache.druid.query.timeseries.TimeseriesQuery; - import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -42,9 +39,9 @@ * * The value of this field should describe the root cause of the difference. */ - NativeQueryIgnore nativeQueryIgnore() default NativeQueryIgnore.NONE; + QuidemTestCaseReason quidemReason() default QuidemTestCaseReason.NONE; - enum NativeQueryIgnore + enum QuidemTestCaseReason { NONE, /** @@ -68,16 +65,6 @@ enum NativeQueryIgnore * Worse plan; may loose vectorization; but no extra queries */ SLIGHTLY_WORSE_PLAN, - /** - * {@link TimeseriesQuery} to {@link ScanQuery} change. - * - * Not yet sure if this is improvement; or some issue - */ - TS_TO_SCAN, - /** - * GroupBy doesn't sorted?! - */ - GBY_DOESNT_SORT, /** * Equvivalent plan. * @@ -107,6 +94,7 @@ public boolean isPresent() { return this != NONE; } - }; + } + boolean separateDefaultModeTest() default false; } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java b/sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java new file mode 100644 index 000000000000..888f8ecc573e --- /dev/null +++ b/sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.sql.calcite; + +import com.google.common.hash.HashCode; +import com.google.common.hash.Hashing; +import com.google.common.io.Files; +import org.apache.druid.java.util.common.FileUtils; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.quidem.DruidQTestInfo; +import org.apache.druid.quidem.DruidQuidemTestBase; +import org.apache.druid.quidem.DruidQuidemTestBase.DruidQuidemRunner; +import org.apache.druid.sql.calcite.QueryTestRunner.QueryRunStep; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +public class QTestCase +{ + private StringBuffer sb; + private DruidQTestInfo testInfo; + + public QTestCase(DruidQTestInfo testInfo) + { + this.testInfo = testInfo; + sb = new StringBuffer(); + sb.append("# " + testInfo.comment); + sb.append("\n"); + } + + public void println(String str) + { + sb.append(str); + sb.append("\n"); + } + + public QueryRunStep toRunner() + { + return new QueryRunStep(null) + { + + @Override + public void run() + { + try { + if (DruidQuidemRunner.isOverwrite()) { + writeCaseTo(testInfo.getIQFile()); + } else { + isValidTestCaseFile(testInfo.getIQFile()); + } + + DruidQuidemRunner runner = new DruidQuidemTestBase.DruidQuidemRunner(); + runner.run(testInfo.getIQFile()); + } + catch (Exception e) { + throw new RuntimeException("Error running quidem test", e); + } + } + }; + } + + protected void isValidTestCaseFile(File iqFile) + { + if (!iqFile.exists()) { + throw new IllegalStateException("testcase doesn't exists; run with (-Dquidem.overwrite) : " + iqFile); + } + try { + String header = makeHeader(); + String testCaseFirstLine = Files.asCharSource(iqFile, StandardCharsets.UTF_8).readFirstLine(); + if (!header.equals(testCaseFirstLine)) { + throw new IllegalStateException( + "backing quidem testcase doesn't match test - run with (-Dquidem.overwrite) : " + iqFile + ); + } + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + private String makeHeader() + { + HashCode hash = Hashing.crc32().hashBytes(sb.toString().getBytes(StandardCharsets.UTF_8)); + return StringUtils.format("# %s case-crc:%s", testInfo.testName, hash); + + } + + public void writeCaseTo(File file) throws IOException + { + FileUtils.mkdirp(file.getParentFile()); + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(makeHeader().getBytes(StandardCharsets.UTF_8)); + fos.write('\n'); + fos.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + } + catch (IOException e) { + throw new RuntimeException("Error writing testcase to: " + file, e); + } + } + +} diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestBuilder.java b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestBuilder.java index ff7e9b5a6bac..9484fd3d892c 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestBuilder.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestBuilder.java @@ -23,6 +23,7 @@ import com.google.common.base.Preconditions; import org.apache.druid.query.Query; import org.apache.druid.query.QueryContexts; +import org.apache.druid.quidem.DruidQTestInfo; import org.apache.druid.segment.column.RowSignature; import org.apache.druid.server.security.AuthConfig; import org.apache.druid.server.security.AuthenticationResult; @@ -34,6 +35,7 @@ import org.apache.druid.sql.calcite.planner.PlannerConfig; import org.apache.druid.sql.calcite.util.CalciteTestBase; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.calcite.util.SqlTestFramework; import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerFixture; import org.apache.druid.sql.http.SqlParameter; import java.util.ArrayList; @@ -75,6 +77,13 @@ public interface QueryTestConfig boolean isRunningMSQ(); Map baseQueryContext(); + + default DruidQTestInfo getQTestInfo() + { + return null; + } + + SqlTestFramework queryFramework(); } protected final QueryTestConfig config; diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java index df14aeb105a0..1a5830b05d31 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java @@ -34,6 +34,7 @@ import org.apache.druid.java.util.common.guava.Sequence; import org.apache.druid.query.Query; import org.apache.druid.query.QueryContexts; +import org.apache.druid.quidem.DruidQTestInfo; import org.apache.druid.segment.column.RowSignature; import org.apache.druid.server.security.ResourceAction; import org.apache.druid.sql.DirectStatement; @@ -56,6 +57,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -637,6 +639,33 @@ public void verify() public QueryTestRunner(QueryTestBuilder builder) { QueryTestConfig config = builder.config; + DruidQTestInfo iqTestInfo = config.getQTestInfo(); + if (iqTestInfo != null) { + QTestCase qt = new QTestCase(iqTestInfo); + Map queryContext = builder.getQueryContext(); + for (Entry entry : queryContext.entrySet()) { + qt.println(StringUtils.format("!set %s %s", entry.getKey(), entry.getValue())); + } + Map queryContext1 = builder.plannerConfig.getNonDefaultAsQueryContext(); + for (Entry entry : queryContext1.entrySet()) { + qt.println(StringUtils.format("!set %s %s", entry.getKey(), entry.getValue())); + } + + qt.println("!set outputformat mysql"); + qt.println("!use " + builder.config.queryFramework().getDruidTestURI()); + + qt.println(builder.sql + ";"); + if (builder.expectedResults != null) { + qt.println("!ok"); + } + qt.println("!logicalPlan"); + qt.println("!druidPlan"); + if (builder.expectedQueries != null) { + qt.println("!nativePlan"); + } + runSteps.add(qt.toRunner()); + return; + } if (builder.expectedResultsVerifier == null && builder.expectedResults != null) { builder.expectedResultsVerifier = config.defaultResultsVerifier( builder.expectedResults, diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index d320f4985a8d..ee75e73d52c3 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -19,10 +19,13 @@ package org.apache.druid.sql.calcite; +import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableSet; +import org.apache.curator.shaded.com.google.common.collect.Sets; import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.query.topn.TopNQueryConfig; @@ -30,6 +33,7 @@ import org.apache.druid.sql.calcite.util.SqlTestFramework; import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; +import org.apache.http.client.utils.URIBuilder; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; @@ -45,14 +49,19 @@ import java.lang.annotation.Target; import java.lang.reflect.Constructor; import java.lang.reflect.Method; +import java.net.URI; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.Set; import java.util.function.Function; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -146,6 +155,13 @@ public Class fromString(String name) throws Ex Class value(); } + private static final Set KNOWN_CONFIG_KEYS = ImmutableSet.builder() + .add(NumMergeBuffers.class.getSimpleName()) + .add(MinTopNThreshold.class.getSimpleName()) + .add(ResultCache.class.getSimpleName()) + .add(ComponentSupplier.class.getSimpleName()) + .build(); + public final int numMergeBuffers; public final int minTopNThreshold; public final ResultCacheMode resultCache; @@ -166,6 +182,7 @@ public SqlTestFrameworkConfig(List annotations) public SqlTestFrameworkConfig(Map queryParams) { + validateConfigKeys(queryParams.keySet()); try { numMergeBuffers = NumMergeBuffers.PROCESSOR.fromMap(queryParams); minTopNThreshold = MinTopNThreshold.PROCESSOR.fromMap(queryParams); @@ -177,6 +194,15 @@ public SqlTestFrameworkConfig(Map queryParams) } } + private void validateConfigKeys(Set keySet) + { + Set diff = Sets.difference(keySet, KNOWN_CONFIG_KEYS); + if (diff.isEmpty()) { + return; + } + throw new IAE("Invalid configuration key(s) specified [%s]; valid options are [%s]", diff, KNOWN_CONFIG_KEYS); + } + @Override public int hashCode() { @@ -244,6 +270,7 @@ public static class Rule implements AfterAllCallback, BeforeEachCallback SqlTestFrameworkConfigStore configStore = new SqlTestFrameworkConfigStore(); private SqlTestFrameworkConfig config; private Method method; + private String testName; @Override public void afterAll(ExtensionContext context) @@ -259,12 +286,31 @@ public void beforeEach(ExtensionContext context) private void setConfig(ExtensionContext context) { + testName = buildTestCaseName(context); method = context.getTestMethod().get(); Class testClass = context.getTestClass().get(); List annotations = collectAnnotations(testClass, method); config = new SqlTestFrameworkConfig(annotations); } + /** + * Returns a string identifying the testcase. + * + * + */ + public String buildTestCaseName(ExtensionContext context) + { + List names = new ArrayList(); + Pattern pattern = Pattern.compile("\\([^\\)]*\\)"); + // this will add all name pieces - except the "last" which would be the + // Class level name + do { + names.add(0, pattern.matcher(context.getDisplayName()).replaceAll("")); + context = context.getParent().get(); + } while (context.getTestMethod().isPresent()); + return Joiner.on("@").join(names); + } + public SqlTestFrameworkConfig getConfig() { return config; @@ -282,7 +328,7 @@ public T getAnnotation(Class annotationType) public String testName() { - return method.getName(); + return testName; } } @@ -292,8 +338,8 @@ public static class ConfigurationInstance ConfigurationInstance(SqlTestFrameworkConfig config, QueryComponentSupplier testHost) { - SqlTestFramework.Builder builder = new SqlTestFramework.Builder(testHost) + .withConfig(config) .catalogResolver(testHost.createCatalogResolver()) .minTopNThreshold(config.minTopNThreshold) .mergeBufferCount(config.numMergeBuffers) @@ -321,6 +367,38 @@ public void close() } } + public URI getDruidTestURI() + { + try { + Map params = getNonDefaultMap(); + URIBuilder ub = new URIBuilder("druidtest:///"); + for (Entry entry : params.entrySet()) { + ub.setParameter(entry.getKey(), entry.getValue()); + } + ub.setPath("///"); + return ub.build(); + } + catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + + private Map getNonDefaultMap() + { + Map map = new HashMap<>(); + SqlTestFrameworkConfig def = new SqlTestFrameworkConfig(Collections.emptyList()); + if (def.numMergeBuffers != numMergeBuffers) { + map.put("NumMergeBuffers", String.valueOf(numMergeBuffers)); + } + if (def.minTopNThreshold != minTopNThreshold) { + map.put("MinTopNThreshold", String.valueOf(minTopNThreshold)); + } + if (!equals(new SqlTestFrameworkConfig(map))) { + throw new IAE("Can't reproduce config via map!"); + } + return map; + } + abstract static class ConfigOptionProcessor { final Class annotationClass; diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java index 7618ccf67ea4..175dbb1649d4 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java @@ -19,7 +19,9 @@ package org.apache.druid.sql.calcite; +import com.google.common.collect.ImmutableMap; import nl.jqno.equalsverifier.EqualsVerifier; +import org.apache.druid.java.util.common.IAE; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.MinTopNThreshold; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.NumMergeBuffers; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ResultCache; @@ -30,6 +32,7 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; public class SqlTestFrameworkConfigTest { @@ -118,4 +121,21 @@ public void testAnnotationsAtTestLevel() throws Exception assertEquals(1, config.numMergeBuffers); assertEquals(ResultCacheMode.DISABLED, config.resultCache); } + + @Test + public void testInvalidConfigKeySpecified() + { + ImmutableMap configMap = ImmutableMap.builder() + .put("nonExistent", "someValue") + .build(); + IAE e = assertThrows( + IAE.class, + () -> new SqlTestFrameworkConfig(configMap) + ); + assertEquals( + "Invalid configuration key(s) specified [[nonExistent]]; valid options are [[NumMergeBuffers, MinTopNThreshold, ResultCache, ComponentSupplier]]", + e.getMessage() + ); + } + } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index f0d6431615db..c64888414b62 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -50,6 +50,7 @@ import org.apache.druid.server.security.AuthConfig; import org.apache.druid.server.security.AuthorizerMapper; import org.apache.druid.sql.SqlStatementFactory; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; import org.apache.druid.sql.calcite.TempDirProducer; import org.apache.druid.sql.calcite.aggregation.SqlAggregationModule; import org.apache.druid.sql.calcite.planner.CalciteRulesManager; @@ -70,6 +71,7 @@ import java.io.Closeable; import java.io.IOException; +import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Properties; @@ -403,6 +405,7 @@ public static class Builder private int mergeBufferCount; private CatalogResolver catalogResolver = CatalogResolver.NULL_RESOLVER; private List overrideModules = new ArrayList<>(); + private SqlTestFrameworkConfig config; public Builder(QueryComponentSupplier componentSupplier) { @@ -437,6 +440,12 @@ public SqlTestFramework build() { return new SqlTestFramework(this); } + + public Builder withConfig(SqlTestFrameworkConfig config) + { + this.config = config; + return this; + } } /** @@ -692,4 +701,9 @@ public void close() throw new RE(e); } } + + public URI getDruidTestURI() + { + return builder.config.getDruidTestURI(); + } } diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq index be52c7c4c65b..049d8d9d4d7e 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq @@ -1,5 +1,5 @@ !set plannerStrategy DECOUPLED -!use druidtest://?numMergeBuffers=3 +!use druidtest://?NumMergeBuffers=3 !set outputformat mysql select cityName, count(case when delta > 0 then channel end) as cnt, count(1) as aall diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq index e1ae27eef0d2..b48f587db246 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq @@ -1,4 +1,4 @@ -!use druidtest://?numMergeBuffers=3 +!use druidtest://?NumMergeBuffers=3 !set outputformat mysql with v as ( diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq new file mode 100644 index 000000000000..19a189db3708 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq @@ -0,0 +1,90 @@ +# testCommaJoinLeftFunction case-crc:30bb2791 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo, lookup.lookyloo l +WHERE SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f2=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f2=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq new file mode 100644 index 000000000000..a784c1fd3d03 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq @@ -0,0 +1,115 @@ +# testExactTopNOnInnerJoinWithLimit@NullHandling=default case-crc:c3f897f8 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set useApproximateTopN false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:///?MinTopNThreshold=1 +select f1."dim4", sum("m1") from numfoo f1 inner join ( + select "dim4" from numfoo where dim4 <> 'a' group by 1 +) f2 on f1."dim4" = f2."dim4" group by 1 limit 1; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 15.0 | ++------+--------+ +(1 row) + +!ok +LogicalSort(fetch=[1]) + LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim4=[$4], m1=[$14]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalAggregate(group=[{4}]) + LogicalFilter(condition=[<>($4, 'a')]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidSort(fetch=[1], druid=[logical]) + DruidAggregate(group=[{0}], EXPR$1=[SUM($1)], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim4=[$4], m1=[$14], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidAggregate(group=[{4}], druid=[logical]) + DruidFilter(condition=[<>($4, 'a')]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim4", + "value" : "a" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim4", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0._d0\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + }, + "threshold" : 1, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "doubleSum", + "name" : "a0", + "fieldName" : "m1" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..aa340691cc2c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq @@ -0,0 +1,163 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default case-crc:7916e17e +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..6c43fc799d24 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq @@ -0,0 +1,163 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default case-crc:a79ba14e +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq new file mode 100644 index 000000000000..276e69eb7c1d --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq @@ -0,0 +1,160 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default case-crc:d168257e +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..6e3914f40ffe --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,163 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default case-crc:dc96fa7f +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..f478bc1b7006 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,163 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default case-crc:7936703f +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..f053d1aaf892 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,163 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default case-crc:b5081d1c +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..968c7766fbd8 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq @@ -0,0 +1,163 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default case-crc:c0c596f8 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..8a2cf66e10cf --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@all_disabled@NullHandling=default case-crc:532afc53 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..1bd3e860324a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@all_enabled@NullHandling=default case-crc:615b6635 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq new file mode 100644 index 000000000000..c91afac87da7 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq @@ -0,0 +1,87 @@ +# testInnerJoinCastLeft@default@NullHandling=default case-crc:fda58dbf +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..d03641f46e32 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default case-crc:951d4374 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..39346aec7909 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default case-crc:403f05e1 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..74fb0a1e3f51 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@filter-rewrites@NullHandling=default case-crc:9b73e9cb +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..4cd32a7d9361 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@join-to-filter@NullHandling=default case-crc:032c945b +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR NOT NULL], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq new file mode 100644 index 000000000000..fbdc5c4f6153 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq @@ -0,0 +1,93 @@ +# testInnerJoinLeftFunction@all_disabled case-crc:635a6dda +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq new file mode 100644 index 000000000000..15c92578854c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq @@ -0,0 +1,93 @@ +# testInnerJoinLeftFunction@all_enabled case-crc:7d493ec9 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq new file mode 100644 index 000000000000..a50455563bcb --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq @@ -0,0 +1,90 @@ +# testInnerJoinLeftFunction@default case-crc:00943b4a +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..d4873e34d87f --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq @@ -0,0 +1,93 @@ +# testInnerJoinLeftFunction@filter-on-value-column_disabled case-crc:70beb233 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..af34a46f2d65 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq @@ -0,0 +1,93 @@ +# testInnerJoinLeftFunction@filter-rewrites-disabled case-crc:da4555b7 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq new file mode 100644 index 000000000000..03fd1fea1489 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq @@ -0,0 +1,93 @@ +# testInnerJoinLeftFunction@filter-rewrites case-crc:22eb8e52 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq new file mode 100644 index 000000000000..f4791a842f69 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq @@ -0,0 +1,93 @@ +# testInnerJoinLeftFunction@join-to-filter case-crc:90b51ec9 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.dim1, foo.dim2, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON SUBSTRING(foo.dim2, 1, 1) = l.k +; ++------+------+---+----+ +| dim1 | dim2 | k | v | ++------+------+---+----+ +| | a | a | xa | +| 1 | a | a | xa | +| def | abc | a | xa | ++------+------+---+----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4]) + LogicalJoin(condition=[=($2, $3)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], k=[$3], v=[$4], druid=[logical]) + DruidJoin(condition=[=($2, $3)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], $f8=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.k", "j0.v" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..bfe4a888f9ed --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:31aaba25 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..f05512baf05f --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:22a7ed95 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq new file mode 100644 index 000000000000..cf4014bd8d58 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq @@ -0,0 +1,130 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default case-crc:fe77c11d +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..91309ae20b7b --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:c115dcb0 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..e3f639e243a1 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:466c2dda +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..b3c0ab2c0f9b --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:8b226734 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..892aa79987d6 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:36ee0be3 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..c2010de170dc --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:0c7abe39 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..8e3ac0a20c62 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:e167e948 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq new file mode 100644 index 000000000000..9a984f60c234 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq @@ -0,0 +1,130 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default case-crc:ca2c56e9 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..eeb19b299173 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:012eaa97 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..943df21f27d0 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:39af5216 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..0108161cc01a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:ec74956b +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..4069023b634e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:080e87b6 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq new file mode 100644 index 000000000000..dcd8f81055f7 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq @@ -0,0 +1,113 @@ +# testInnerJoinQueryOfLookup@all_disabled case-crc:1357fef3 +# quidem testcase reason: FINALIZING_FIELD_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.v, t1.v +FROM foo +INNER JOIN + (SELECT SUBSTRING(k, 1, 1) k, ANY_VALUE(v, 10) v FROM lookup.lookyloo GROUP BY 1) t1 + ON foo.dim2 = t1.k; ++------+------+------+------+ +| dim1 | dim2 | v | v | ++------+------+------+------+ +| | a | xabc | xabc | +| 1 | a | xabc | xabc | ++------+------+------+------+ +(2 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], v=[ANY_VALUE($1, $2)]) + LogicalProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], v=[ANY_VALUE($1, $2)], druid=[logical]) + DruidProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "k", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0:a", + "fieldName" : "v", + "maxStringBytes" : 10, + "aggregateMultipleValues" : true + } ], + "postAggregations" : [ { + "type" : "finalizingFieldAccess", + "name" : "a0", + "fieldName" : "a0:a" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq new file mode 100644 index 000000000000..227cd5975ed9 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq @@ -0,0 +1,113 @@ +# testInnerJoinQueryOfLookup@all_enabled case-crc:33c35499 +# quidem testcase reason: FINALIZING_FIELD_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.v, t1.v +FROM foo +INNER JOIN + (SELECT SUBSTRING(k, 1, 1) k, ANY_VALUE(v, 10) v FROM lookup.lookyloo GROUP BY 1) t1 + ON foo.dim2 = t1.k; ++------+------+------+------+ +| dim1 | dim2 | v | v | ++------+------+------+------+ +| | a | xabc | xabc | +| 1 | a | xabc | xabc | ++------+------+------+------+ +(2 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], v=[ANY_VALUE($1, $2)]) + LogicalProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], v=[ANY_VALUE($1, $2)], druid=[logical]) + DruidProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "k", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0:a", + "fieldName" : "v", + "maxStringBytes" : 10, + "aggregateMultipleValues" : true + } ], + "postAggregations" : [ { + "type" : "finalizingFieldAccess", + "name" : "a0", + "fieldName" : "a0:a" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq new file mode 100644 index 000000000000..cdf3d768f81b --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq @@ -0,0 +1,110 @@ +# testInnerJoinQueryOfLookup@default case-crc:fdc22455 +# quidem testcase reason: FINALIZING_FIELD_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.v, t1.v +FROM foo +INNER JOIN + (SELECT SUBSTRING(k, 1, 1) k, ANY_VALUE(v, 10) v FROM lookup.lookyloo GROUP BY 1) t1 + ON foo.dim2 = t1.k; ++------+------+------+------+ +| dim1 | dim2 | v | v | ++------+------+------+------+ +| | a | xabc | xabc | +| 1 | a | xabc | xabc | ++------+------+------+------+ +(2 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], v=[ANY_VALUE($1, $2)]) + LogicalProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], v=[ANY_VALUE($1, $2)], druid=[logical]) + DruidProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "k", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0:a", + "fieldName" : "v", + "maxStringBytes" : 10, + "aggregateMultipleValues" : true + } ], + "postAggregations" : [ { + "type" : "finalizingFieldAccess", + "name" : "a0", + "fieldName" : "a0:a" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..ba934275555a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq @@ -0,0 +1,113 @@ +# testInnerJoinQueryOfLookup@filter-on-value-column_disabled case-crc:223bb3ea +# quidem testcase reason: FINALIZING_FIELD_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.v, t1.v +FROM foo +INNER JOIN + (SELECT SUBSTRING(k, 1, 1) k, ANY_VALUE(v, 10) v FROM lookup.lookyloo GROUP BY 1) t1 + ON foo.dim2 = t1.k; ++------+------+------+------+ +| dim1 | dim2 | v | v | ++------+------+------+------+ +| | a | xabc | xabc | +| 1 | a | xabc | xabc | ++------+------+------+------+ +(2 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], v=[ANY_VALUE($1, $2)]) + LogicalProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], v=[ANY_VALUE($1, $2)], druid=[logical]) + DruidProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "k", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0:a", + "fieldName" : "v", + "maxStringBytes" : 10, + "aggregateMultipleValues" : true + } ], + "postAggregations" : [ { + "type" : "finalizingFieldAccess", + "name" : "a0", + "fieldName" : "a0:a" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..ce93b8d50fe3 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq @@ -0,0 +1,113 @@ +# testInnerJoinQueryOfLookup@filter-rewrites-disabled case-crc:90a7efad +# quidem testcase reason: FINALIZING_FIELD_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.v, t1.v +FROM foo +INNER JOIN + (SELECT SUBSTRING(k, 1, 1) k, ANY_VALUE(v, 10) v FROM lookup.lookyloo GROUP BY 1) t1 + ON foo.dim2 = t1.k; ++------+------+------+------+ +| dim1 | dim2 | v | v | ++------+------+------+------+ +| | a | xabc | xabc | +| 1 | a | xabc | xabc | ++------+------+------+------+ +(2 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], v=[ANY_VALUE($1, $2)]) + LogicalProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], v=[ANY_VALUE($1, $2)], druid=[logical]) + DruidProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "k", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0:a", + "fieldName" : "v", + "maxStringBytes" : 10, + "aggregateMultipleValues" : true + } ], + "postAggregations" : [ { + "type" : "finalizingFieldAccess", + "name" : "a0", + "fieldName" : "a0:a" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq new file mode 100644 index 000000000000..3fde71a60692 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq @@ -0,0 +1,113 @@ +# testInnerJoinQueryOfLookup@filter-rewrites case-crc:41899e3c +# quidem testcase reason: FINALIZING_FIELD_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.v, t1.v +FROM foo +INNER JOIN + (SELECT SUBSTRING(k, 1, 1) k, ANY_VALUE(v, 10) v FROM lookup.lookyloo GROUP BY 1) t1 + ON foo.dim2 = t1.k; ++------+------+------+------+ +| dim1 | dim2 | v | v | ++------+------+------+------+ +| | a | xabc | xabc | +| 1 | a | xabc | xabc | ++------+------+------+------+ +(2 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], v=[ANY_VALUE($1, $2)]) + LogicalProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], v=[ANY_VALUE($1, $2)], druid=[logical]) + DruidProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "k", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0:a", + "fieldName" : "v", + "maxStringBytes" : 10, + "aggregateMultipleValues" : true + } ], + "postAggregations" : [ { + "type" : "finalizingFieldAccess", + "name" : "a0", + "fieldName" : "a0:a" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq new file mode 100644 index 000000000000..9c7807a4f67e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq @@ -0,0 +1,113 @@ +# testInnerJoinQueryOfLookup@join-to-filter case-crc:9a602cc7 +# quidem testcase reason: FINALIZING_FIELD_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.v, t1.v +FROM foo +INNER JOIN + (SELECT SUBSTRING(k, 1, 1) k, ANY_VALUE(v, 10) v FROM lookup.lookyloo GROUP BY 1) t1 + ON foo.dim2 = t1.k; ++------+------+------+------+ +| dim1 | dim2 | v | v | ++------+------+------+------+ +| | a | xabc | xabc | +| 1 | a | xabc | xabc | ++------+------+------+------+ +(2 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], v=[ANY_VALUE($1, $2)]) + LogicalProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], v=[$3], v0=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], v=[ANY_VALUE($1, $2)], druid=[logical]) + DruidProject(k=[SUBSTRING($0, 1, 1)], v=[$1], $f2=[10], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "k", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0:a", + "fieldName" : "v", + "maxStringBytes" : 10, + "aggregateMultipleValues" : true + } ], + "postAggregations" : [ { + "type" : "finalizingFieldAccess", + "name" : "a0", + "fieldName" : "a0:a" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq new file mode 100644 index 000000000000..a1153a61a6c9 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq @@ -0,0 +1,96 @@ +# testInnerJoinQueryOfLookupRemovable@all_disabled case-crc:25b83d15 +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.sk +FROM foo +INNER JOIN + (SELECT k, SUBSTRING(v, 1, 3) sk FROM lookup.lookyloo) t1 + ON foo.dim2 = t1.k; ++------+------+-----+ +| dim1 | dim2 | sk | ++------+------+-----+ +| | a | xa | +| 1 | a | xa | +| def | abc | xab | ++------+------+-----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], sk=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(k=[$0], sk=[SUBSTRING($1, 1, 3)]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], sk=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(k=[$0], sk=[SUBSTRING($1, 1, 3)], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"v\", 0, 3)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "k", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq new file mode 100644 index 000000000000..e5a886338fad --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq @@ -0,0 +1,96 @@ +# testInnerJoinQueryOfLookupRemovable@all_enabled case-crc:c65c79d6 +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.sk +FROM foo +INNER JOIN + (SELECT k, SUBSTRING(v, 1, 3) sk FROM lookup.lookyloo) t1 + ON foo.dim2 = t1.k; ++------+------+-----+ +| dim1 | dim2 | sk | ++------+------+-----+ +| | a | xa | +| 1 | a | xa | +| def | abc | xab | ++------+------+-----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], sk=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(k=[$0], sk=[SUBSTRING($1, 1, 3)]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], sk=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(k=[$0], sk=[SUBSTRING($1, 1, 3)], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"v\", 0, 3)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "k", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq new file mode 100644 index 000000000000..c2df57120deb --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq @@ -0,0 +1,93 @@ +# testInnerJoinQueryOfLookupRemovable@default case-crc:c025c7ff +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.sk +FROM foo +INNER JOIN + (SELECT k, SUBSTRING(v, 1, 3) sk FROM lookup.lookyloo) t1 + ON foo.dim2 = t1.k; ++------+------+-----+ +| dim1 | dim2 | sk | ++------+------+-----+ +| | a | xa | +| 1 | a | xa | +| def | abc | xab | ++------+------+-----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], sk=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(k=[$0], sk=[SUBSTRING($1, 1, 3)]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], sk=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(k=[$0], sk=[SUBSTRING($1, 1, 3)], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"v\", 0, 3)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "k", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..3712e2f8bfeb --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq @@ -0,0 +1,96 @@ +# testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled case-crc:f30ce07a +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.sk +FROM foo +INNER JOIN + (SELECT k, SUBSTRING(v, 1, 3) sk FROM lookup.lookyloo) t1 + ON foo.dim2 = t1.k; ++------+------+-----+ +| dim1 | dim2 | sk | ++------+------+-----+ +| | a | xa | +| 1 | a | xa | +| def | abc | xab | ++------+------+-----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], sk=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(k=[$0], sk=[SUBSTRING($1, 1, 3)]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], sk=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(k=[$0], sk=[SUBSTRING($1, 1, 3)], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"v\", 0, 3)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "k", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..1dfd6567a787 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq @@ -0,0 +1,96 @@ +# testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled case-crc:5385c408 +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.sk +FROM foo +INNER JOIN + (SELECT k, SUBSTRING(v, 1, 3) sk FROM lookup.lookyloo) t1 + ON foo.dim2 = t1.k; ++------+------+-----+ +| dim1 | dim2 | sk | ++------+------+-----+ +| | a | xa | +| 1 | a | xa | +| def | abc | xab | ++------+------+-----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], sk=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(k=[$0], sk=[SUBSTRING($1, 1, 3)]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], sk=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(k=[$0], sk=[SUBSTRING($1, 1, 3)], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"v\", 0, 3)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "k", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq new file mode 100644 index 000000000000..dcc17c4ec78a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq @@ -0,0 +1,96 @@ +# testInnerJoinQueryOfLookupRemovable@filter-rewrites case-crc:a5134bce +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.sk +FROM foo +INNER JOIN + (SELECT k, SUBSTRING(v, 1, 3) sk FROM lookup.lookyloo) t1 + ON foo.dim2 = t1.k; ++------+------+-----+ +| dim1 | dim2 | sk | ++------+------+-----+ +| | a | xa | +| 1 | a | xa | +| def | abc | xab | ++------+------+-----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], sk=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(k=[$0], sk=[SUBSTRING($1, 1, 3)]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], sk=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(k=[$0], sk=[SUBSTRING($1, 1, 3)], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"v\", 0, 3)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "k", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq new file mode 100644 index 000000000000..908086df3c8e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq @@ -0,0 +1,96 @@ +# testInnerJoinQueryOfLookupRemovable@join-to-filter case-crc:20d8db5e +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, dim2, t1.sk +FROM foo +INNER JOIN + (SELECT k, SUBSTRING(v, 1, 3) sk FROM lookup.lookyloo) t1 + ON foo.dim2 = t1.k; ++------+------+-----+ +| dim1 | dim2 | sk | ++------+------+-----+ +| | a | xa | +| 1 | a | xa | +| def | abc | xab | ++------+------+-----+ +(3 rows) + +!ok +LogicalProject(dim1=[$0], dim2=[$1], sk=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim1=[$1], dim2=[$2]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(k=[$0], sk=[SUBSTRING($1, 1, 3)]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(dim1=[$0], dim2=[$1], sk=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim1=[$1], dim2=[$2], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(k=[$0], sk=[SUBSTRING($1, 1, 3)], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"v\", 0, 3)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "k", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim2\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "dim2", "j0.v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq new file mode 100644 index 000000000000..016c05bcaf46 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq @@ -0,0 +1,155 @@ +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default case-crc:a9e23ec5 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN + ( + SELECT CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1 AS t1, MIN(m1) AS t2 FROM foo WHERE dim3 = 'b' + AND __time BETWEEN '1994-04-29 00:00:00' AND '2020-01-11 00:00:00' GROUP BY 1 + ) +GROUP BY 1, 2 +; ++--------------+-----+--------+ +| EXPR$0 | m1 | EXPR$2 | ++--------------+-----+--------+ +| 946684800000 | 1.0 | [a, b] | +| 946771200000 | 2.0 | [b, c] | ++--------------+-----+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3)]) + LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100]) + LogicalJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + LogicalProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], t2=[MIN($1)]) + LogicalProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5]) + LogicalFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3)], druid=[logical]) + DruidProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], druid=[logical]) + DruidJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + DruidProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], t2=[MIN($1)], druid=[logical]) + DruidProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5], druid=[logical]) + DruidFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "dim3", "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING", "FLOAT", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1994-04-29T00:00:00.000Z/2020-01-11T00:00:00.001Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "filter" : { + "type" : "selector", + "dimension" : "dim3", + "value" : "b" + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "aggregations" : [ { + "type" : "floatMin", + "name" : "a0", + "fieldName" : "m1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"v0\" == \"j0.d0\") && (\"m1\" == \"j0.a0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "m1", + "outputName" : "d1", + "outputType" : "FLOAT" + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0", + "fieldName" : "dim3", + "maxStringBytes" : 100, + "aggregateMultipleValues" : true + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq new file mode 100644 index 000000000000..90db281aa10f --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq @@ -0,0 +1,155 @@ +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default case-crc:b873fcbb +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, false) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN + ( + SELECT CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1 AS t1, MIN(m1) AS t2 FROM foo WHERE dim3 = 'b' + AND __time BETWEEN '1994-04-29 00:00:00' AND '2020-01-11 00:00:00' GROUP BY 1 + ) +GROUP BY 1, 2 +; ++--------------+-----+--------+ +| EXPR$0 | m1 | EXPR$2 | ++--------------+-----+--------+ +| 946684800000 | 1.0 | a | +| 946771200000 | 2.0 | b | ++--------------+-----+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)]) + LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[false]) + LogicalJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + LogicalProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], t2=[MIN($1)]) + LogicalProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5]) + LogicalFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)], druid=[logical]) + DruidProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[false], druid=[logical]) + DruidJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + DruidProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], t2=[MIN($1)], druid=[logical]) + DruidProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5], druid=[logical]) + DruidFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "dim3", "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING", "FLOAT", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1994-04-29T00:00:00.000Z/2020-01-11T00:00:00.001Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "filter" : { + "type" : "selector", + "dimension" : "dim3", + "value" : "b" + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "aggregations" : [ { + "type" : "floatMin", + "name" : "a0", + "fieldName" : "m1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"v0\" == \"j0.d0\") && (\"m1\" == \"j0.a0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "m1", + "outputName" : "d1", + "outputType" : "FLOAT" + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0", + "fieldName" : "dim3", + "maxStringBytes" : 100, + "aggregateMultipleValues" : false + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq new file mode 100644 index 000000000000..d5379c6190b3 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq @@ -0,0 +1,138 @@ +# testJoinOnTimeseriesWithFloorOnTime@NullHandling=default case-crc:76e87aaa +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, true) FROM foo WHERE (TIME_FLOOR(__time, 'PT1H'), m1) IN + ( + SELECT TIME_FLOOR(__time, 'PT1H') AS t1, MIN(m1) AS t2 FROM foo WHERE dim3 = 'b' + AND __time BETWEEN '1994-04-29 00:00:00' AND '2020-01-11 00:00:00' GROUP BY 1 + ) +GROUP BY 1, 2 +; ++--------------+-----+--------+ +| EXPR$0 | m1 | EXPR$2 | ++--------------+-----+--------+ +| 946684800000 | 1.0 | [a, b] | +| 946771200000 | 2.0 | [b, c] | ++--------------+-----+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)]) + LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[true]) + LogicalJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + LogicalProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[TIME_FLOOR($0, 'PT1H')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], t2=[MIN($1)]) + LogicalProject(t1=[TIME_FLOOR($0, 'PT1H')], m1=[$5]) + LogicalFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)], druid=[logical]) + DruidProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[true], druid=[logical]) + DruidJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + DruidProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[TIME_FLOOR($0, 'PT1H')], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], t2=[MIN($1)], druid=[logical]) + DruidProject(t1=[TIME_FLOOR($0, 'PT1H')], m1=[$5], druid=[logical]) + DruidFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "timestamp_floor(\"__time\",'PT1H',null,'UTC')", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "dim3", "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING", "FLOAT", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "timeseries", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1994-04-29T00:00:00.000Z/2020-01-11T00:00:00.001Z" ] + }, + "filter" : { + "type" : "selector", + "dimension" : "dim3", + "value" : "b" + }, + "granularity" : "HOUR", + "aggregations" : [ { + "type" : "floatMin", + "name" : "a0", + "fieldName" : "m1" + } ] + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"v0\" == \"j0.d0\") && (\"m1\" == \"j0.a0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "m1", + "outputName" : "d1", + "outputType" : "FLOAT" + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0", + "fieldName" : "dim3", + "maxStringBytes" : 100, + "aggregateMultipleValues" : true + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq new file mode 100644 index 000000000000..594acb5b77f5 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq @@ -0,0 +1,126 @@ +# testJoinWithInputRefCondition@NullHandling=default case-crc:a8c0f240 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT COUNT(*) FILTER (WHERE FLOOR(100) NOT IN (SELECT m1 FROM foo)) FROM foo; ++--------+ +| EXPR$0 | ++--------+ +| 6 | ++--------+ +(1 row) + +!ok +LogicalAggregate(group=[{}], EXPR$0=[COUNT() FILTER $0]) + LogicalProject($f0=[IS NULL($2)]) + LogicalJoin(condition=[=(CAST(FLOOR(100)):FLOAT NOT NULL, $1)], joinType=[left]) + LogicalProject(DUMMY=[0]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{5}], i=[LITERAL_AGG(true)]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{}], EXPR$0=[COUNT() FILTER $0], druid=[logical]) + DruidProject($f0=[IS NULL($2)], druid=[logical]) + DruidJoin(condition=[=(CAST(FLOOR(100)):FLOAT NOT NULL, $1)], joinType=[left]) + DruidProject(DUMMY=[0], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{5}], i=[LITERAL_AGG(true)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "timeseries", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "0", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "m1", + "outputName" : "d0", + "outputType" : "FLOAT" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "a0", + "expression" : "1", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(CAST(floor(100), 'DOUBLE') == \"j0.d0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "selector", + "dimension" : "j0.a0", + "value" : null + }, + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..1149a9fc4daa --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:5934672b +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..9d204e2afb59 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:2305f2ac +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq new file mode 100644 index 000000000000..ed2870a68fb9 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq @@ -0,0 +1,130 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default case-crc:fb3f7888 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..674b934fe1f2 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:914692f2 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..707bfcb3dbc8 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:8033cbb3 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..421e08d29c1d --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:82d2e4f7 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..11fa38a41524 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:6381fa96 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..68149ec8f71e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:5df88307 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..db1534db083f --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:e1a970a4 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq new file mode 100644 index 000000000000..7845b7176b2f --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq @@ -0,0 +1,136 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default case-crc:235e0aba +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..446296eaf106 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:46643c1d +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..c59700399fdf --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:fe4a2072 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..b59bafc8b1fa --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:a5ec6a25 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..dff78591ed13 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:78302b3a +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..5c59c87be249 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:f40ac966 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..1b77b8f5f771 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:b06e5180 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq new file mode 100644 index 000000000000..7272c8143be5 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq @@ -0,0 +1,130 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default case-crc:113b89ee +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..ee0d9adb8c2b --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:1c4df7a3 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..a770dd20136a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:c8b860e5 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..a73e657f0a39 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:47dc2525 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..310fcfb9ab20 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -0,0 +1,133 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:28f1233a +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "selector", + "dimension" : "dim1", + "value" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq new file mode 100644 index 000000000000..0fdaa3152dd1 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq @@ -0,0 +1,100 @@ +# testLeftJoinSubqueryWithSelectorFilter@all_disabled case-crc:6ecea68d +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set computeInnerJoinCostAsFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, l1.k +FROM foo +LEFT JOIN (select k || '' as k from lookup.lookyloo group by 1) l1 ON foo.dim1 = l1.k +WHERE l1.k = 'abc' +; ++------+-----+ +| dim1 | k | ++------+-----+ +| abc | abc | ++------+-----+ +(1 row) + +!ok +LogicalJoin(condition=[AND(=($0, $1), =($1, 'abc'))], joinType=[inner]) + LogicalProject(dim1=[$1]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(k=[||($0, '')]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidJoin(condition=[AND(=($0, $1), =('abc', $1))], joinType=[inner]) + DruidProject(dim1=[$1], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(k=[||($0, '')], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "concat(\"k\",'')", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"dim1\" == \"j0.d0\") && ('abc' == \"j0.d0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "j0.d0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq new file mode 100644 index 000000000000..0df67a503b43 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq @@ -0,0 +1,100 @@ +# testLeftJoinSubqueryWithSelectorFilter@all_enabled case-crc:1781f405 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set computeInnerJoinCostAsFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, l1.k +FROM foo +LEFT JOIN (select k || '' as k from lookup.lookyloo group by 1) l1 ON foo.dim1 = l1.k +WHERE l1.k = 'abc' +; ++------+-----+ +| dim1 | k | ++------+-----+ +| abc | abc | ++------+-----+ +(1 row) + +!ok +LogicalJoin(condition=[AND(=($0, $1), =($1, 'abc'))], joinType=[inner]) + LogicalProject(dim1=[$1]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(k=[||($0, '')]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidJoin(condition=[AND(=($0, $1), =('abc', $1))], joinType=[inner]) + DruidProject(dim1=[$1], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(k=[||($0, '')], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "concat(\"k\",'')", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"dim1\" == \"j0.d0\") && ('abc' == \"j0.d0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "j0.d0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq new file mode 100644 index 000000000000..bec4d44eeb22 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq @@ -0,0 +1,97 @@ +# testLeftJoinSubqueryWithSelectorFilter@default case-crc:63cb4668 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set computeInnerJoinCostAsFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT dim1, l1.k +FROM foo +LEFT JOIN (select k || '' as k from lookup.lookyloo group by 1) l1 ON foo.dim1 = l1.k +WHERE l1.k = 'abc' +; ++------+-----+ +| dim1 | k | ++------+-----+ +| abc | abc | ++------+-----+ +(1 row) + +!ok +LogicalJoin(condition=[AND(=($0, $1), =($1, 'abc'))], joinType=[inner]) + LogicalProject(dim1=[$1]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(k=[||($0, '')]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidJoin(condition=[AND(=($0, $1), =('abc', $1))], joinType=[inner]) + DruidProject(dim1=[$1], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(k=[||($0, '')], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "concat(\"k\",'')", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"dim1\" == \"j0.d0\") && ('abc' == \"j0.d0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "j0.d0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..f0e508b60ebd --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq @@ -0,0 +1,100 @@ +# testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled case-crc:a3446cc7 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set computeInnerJoinCostAsFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, l1.k +FROM foo +LEFT JOIN (select k || '' as k from lookup.lookyloo group by 1) l1 ON foo.dim1 = l1.k +WHERE l1.k = 'abc' +; ++------+-----+ +| dim1 | k | ++------+-----+ +| abc | abc | ++------+-----+ +(1 row) + +!ok +LogicalJoin(condition=[AND(=($0, $1), =($1, 'abc'))], joinType=[inner]) + LogicalProject(dim1=[$1]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(k=[||($0, '')]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidJoin(condition=[AND(=($0, $1), =('abc', $1))], joinType=[inner]) + DruidProject(dim1=[$1], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(k=[||($0, '')], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "concat(\"k\",'')", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"dim1\" == \"j0.d0\") && ('abc' == \"j0.d0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "j0.d0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..c5a872721836 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq @@ -0,0 +1,100 @@ +# testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled case-crc:c34594f7 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set computeInnerJoinCostAsFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, l1.k +FROM foo +LEFT JOIN (select k || '' as k from lookup.lookyloo group by 1) l1 ON foo.dim1 = l1.k +WHERE l1.k = 'abc' +; ++------+-----+ +| dim1 | k | ++------+-----+ +| abc | abc | ++------+-----+ +(1 row) + +!ok +LogicalJoin(condition=[AND(=($0, $1), =($1, 'abc'))], joinType=[inner]) + LogicalProject(dim1=[$1]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(k=[||($0, '')]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidJoin(condition=[AND(=($0, $1), =('abc', $1))], joinType=[inner]) + DruidProject(dim1=[$1], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(k=[||($0, '')], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "concat(\"k\",'')", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"dim1\" == \"j0.d0\") && ('abc' == \"j0.d0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "j0.d0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq new file mode 100644 index 000000000000..52e0867d25c4 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq @@ -0,0 +1,100 @@ +# testLeftJoinSubqueryWithSelectorFilter@filter-rewrites case-crc:cc6beb91 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set computeInnerJoinCostAsFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim1, l1.k +FROM foo +LEFT JOIN (select k || '' as k from lookup.lookyloo group by 1) l1 ON foo.dim1 = l1.k +WHERE l1.k = 'abc' +; ++------+-----+ +| dim1 | k | ++------+-----+ +| abc | abc | ++------+-----+ +(1 row) + +!ok +LogicalJoin(condition=[AND(=($0, $1), =($1, 'abc'))], joinType=[inner]) + LogicalProject(dim1=[$1]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(k=[||($0, '')]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidJoin(condition=[AND(=($0, $1), =('abc', $1))], joinType=[inner]) + DruidProject(dim1=[$1], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(k=[||($0, '')], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "concat(\"k\",'')", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"dim1\" == \"j0.d0\") && ('abc' == \"j0.d0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "j0.d0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq new file mode 100644 index 000000000000..f223813ea87b --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq @@ -0,0 +1,100 @@ +# testLeftJoinSubqueryWithSelectorFilter@join-to-filter case-crc:93aa5a3b +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set computeInnerJoinCostAsFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim1, l1.k +FROM foo +LEFT JOIN (select k || '' as k from lookup.lookyloo group by 1) l1 ON foo.dim1 = l1.k +WHERE l1.k = 'abc' +; ++------+-----+ +| dim1 | k | ++------+-----+ +| abc | abc | ++------+-----+ +(1 row) + +!ok +LogicalJoin(condition=[AND(=($0, $1), =($1, 'abc'))], joinType=[inner]) + LogicalProject(dim1=[$1]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(k=[||($0, '')]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidJoin(condition=[AND(=($0, $1), =('abc', $1))], joinType=[inner]) + DruidProject(dim1=[$1], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(k=[||($0, '')], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "foo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "concat(\"k\",'')", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"dim1\" == \"j0.d0\") && ('abc' == \"j0.d0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim1", "j0.d0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq new file mode 100644 index 000000000000..b6d4ee823411 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq @@ -0,0 +1,87 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled case-crc:c879b2d7 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 2 LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| a | 9 | +| b | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$1], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$1], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "numeric", + "metric" : "a0" + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq new file mode 100644 index 000000000000..18a6f61af924 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq @@ -0,0 +1,87 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled case-crc:9ce24a96 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 2 LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| a | 9 | +| b | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$1], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$1], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "numeric", + "metric" : "a0" + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq new file mode 100644 index 000000000000..c6ca4654cd03 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq @@ -0,0 +1,84 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionary@default case-crc:a6504917 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 2 LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| a | 9 | +| b | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$1], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$1], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "numeric", + "metric" : "a0" + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..2cea2b163451 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq @@ -0,0 +1,87 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled case-crc:0a77a16f +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 2 LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| a | 9 | +| b | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$1], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$1], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "numeric", + "metric" : "a0" + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..99ba2ecc6d6c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq @@ -0,0 +1,87 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled case-crc:493a622a +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 2 LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| a | 9 | +| b | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$1], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$1], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "numeric", + "metric" : "a0" + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq new file mode 100644 index 000000000000..ff02227c2605 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq @@ -0,0 +1,87 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites case-crc:62c4653d +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 2 LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| a | 9 | +| b | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$1], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$1], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "numeric", + "metric" : "a0" + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq new file mode 100644 index 000000000000..ef541bc46f4e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq @@ -0,0 +1,87 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter case-crc:ade7f733 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 2 LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| a | 9 | +| b | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$1], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$1], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "numeric", + "metric" : "a0" + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq new file mode 100644 index 000000000000..f5003b573a61 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq @@ -0,0 +1,89 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled case-crc:7385b5ed +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 1 DESC LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 9 | +| a | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$0], dir0=[DESC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$0], dir0=[DESC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq new file mode 100644 index 000000000000..9493848bdfd1 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq @@ -0,0 +1,89 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled case-crc:f1d6d218 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 1 DESC LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 9 | +| a | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$0], dir0=[DESC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$0], dir0=[DESC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq new file mode 100644 index 000000000000..bb7efc406924 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq @@ -0,0 +1,86 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default case-crc:94e7e664 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 1 DESC LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 9 | +| a | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$0], dir0=[DESC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$0], dir0=[DESC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..97ca3bc0e06a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq @@ -0,0 +1,89 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled case-crc:6270c3ac +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 1 DESC LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 9 | +| a | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$0], dir0=[DESC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$0], dir0=[DESC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..dc582354c4c9 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq @@ -0,0 +1,89 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled case-crc:424109c4 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 1 DESC LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 9 | +| a | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$0], dir0=[DESC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$0], dir0=[DESC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq new file mode 100644 index 000000000000..29cdbfc32010 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq @@ -0,0 +1,89 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites case-crc:d0ac6d14 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 1 DESC LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 9 | +| a | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$0], dir0=[DESC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$0], dir0=[DESC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq new file mode 100644 index 000000000000..3d953d2e325c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq @@ -0,0 +1,89 @@ +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter case-crc:1a92bbad +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT druid.broadcast.dim4, COUNT(*) +FROM druid.numfoo +INNER JOIN druid.broadcast ON numfoo.dim4 = broadcast.dim4 +GROUP BY 1 ORDER BY 1 DESC LIMIT 4; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 9 | +| a | 9 | ++------+--------+ +(2 rows) + +!ok +LogicalSort(sort0=[$0], dir0=[DESC], fetch=[4]) + LogicalAggregate(group=[{1}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($0, $1)], joinType=[inner]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim4=[$4]) + LogicalTableScan(table=[[druid, broadcast]]) + +!logicalPlan +DruidSort(sort0=[$0], dir0=[DESC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($0, $1)], joinType=[inner]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim4=[$4], druid=[logical]) + DruidTableScan(table=[[druid, broadcast]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "globalTable", + "name" : "broadcast" + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0.dim4\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "j0.dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "inverted", + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + } + }, + "threshold" : 4, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..6a8f185c2b65 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default case-crc:f2ca92ca +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim1", + "value" : null + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq new file mode 100644 index 000000000000..c17ac58287a1 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default case-crc:2261e315 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim1", + "value" : null + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq new file mode 100644 index 000000000000..6f276a7f689c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq @@ -0,0 +1,136 @@ +# testUsingSubqueryWithExtractionFns@default@NullHandling=default case-crc:e8b174d8 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim1", + "value" : null + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq new file mode 100644 index 000000000000..f1cd9c88b5e6 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default case-crc:c71da62e +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim1", + "value" : null + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq new file mode 100644 index 000000000000..2d8c1e7202f2 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default case-crc:ea2bb732 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim1", + "value" : null + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq new file mode 100644 index 000000000000..938e2c4a6772 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default case-crc:7443f782 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim1", + "value" : null + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq new file mode 100644 index 000000000000..78aaa620f516 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq @@ -0,0 +1,139 @@ +# testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default case-crc:6178ece2 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "dim1", + "value" : null + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq new file mode 100644 index 000000000000..bc97a36fb27a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq @@ -0,0 +1,126 @@ +# testVirtualColumnOnMVFilterJoinExpression@all_disabled case-crc:7a32e94a +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim3", "j0.dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq new file mode 100644 index 000000000000..9c43e9625d7c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq @@ -0,0 +1,126 @@ +# testVirtualColumnOnMVFilterJoinExpression@all_enabled case-crc:91fa3751 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim3", "j0.dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq new file mode 100644 index 000000000000..6988e39d1e8f --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq @@ -0,0 +1,123 @@ +# testVirtualColumnOnMVFilterJoinExpression@default case-crc:3387da5c +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim3", "j0.dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..d6cc278554c2 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq @@ -0,0 +1,126 @@ +# testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled case-crc:2116c5d2 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim3", "j0.dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..4a6831e10ea4 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq @@ -0,0 +1,126 @@ +# testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled case-crc:93e6503a +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim3", "j0.dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq new file mode 100644 index 000000000000..8cb747f268c6 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq @@ -0,0 +1,126 @@ +# testVirtualColumnOnMVFilterJoinExpression@filter-rewrites case-crc:f4ddf549 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim3", "j0.dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq new file mode 100644 index 000000000000..c92c1686a148 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq @@ -0,0 +1,126 @@ +# testVirtualColumnOnMVFilterJoinExpression@join-to-filter case-crc:f3a7b2f1 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "dim3", "j0.dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq new file mode 100644 index 000000000000..6115a839e4a6 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq @@ -0,0 +1,202 @@ +# testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled case-crc:9c935b4c +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "_v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "_v0", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(\"v0\" == \"_j0._v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.dim3", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq new file mode 100644 index 000000000000..1e4e0aa6acc6 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq @@ -0,0 +1,202 @@ +# testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled case-crc:812de429 +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "_v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "_v0", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(\"v0\" == \"_j0._v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.dim3", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq new file mode 100644 index 000000000000..2f175178b09c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq @@ -0,0 +1,199 @@ +# testVirtualColumnOnMVFilterMultiJoinExpression@default case-crc:a431c313 +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "_v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "_v0", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(\"v0\" == \"_j0._v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.dim3", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq new file mode 100644 index 000000000000..f4295f4464ce --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq @@ -0,0 +1,202 @@ +# testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled case-crc:2429103a +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "_v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "_v0", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(\"v0\" == \"_j0._v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.dim3", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq new file mode 100644 index 000000000000..ec8a00bf4043 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq @@ -0,0 +1,202 @@ +# testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled case-crc:5dbbd67c +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "_v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "_v0", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(\"v0\" == \"_j0._v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.dim3", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq new file mode 100644 index 000000000000..b4c1225b6adf --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq @@ -0,0 +1,202 @@ +# testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites case-crc:0da69cb7 +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "_v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "_v0", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(\"v0\" == \"_j0._v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.dim3", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq new file mode 100644 index 000000000000..b8aa7edbf717 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq @@ -0,0 +1,202 @@ +# testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter case-crc:3e1879da +# quidem testcase reason: DEFINETLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) +; ++-----------+-----------+ +| dim3 | dim3 | ++-----------+-----------+ +| ["a","b"] | ["a","b"] | ++-----------+-----------+ +(1 row) + +!ok +LogicalProject(dim3=[$0], dim30=[$2]) + LogicalJoin(condition=[=($1, $3)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim3=[$0], dim30=[$2], druid=[logical]) + DruidJoin(condition=[=($1, $3)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject(dim3=[$0], $f1=[MV_FILTER_ONLY($0, ARRAY('a'))], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim3=[$3], $f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidProject($f17=[MV_FILTER_ONLY($3, ARRAY('a'))], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim3", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "mv-filtered", + "name" : "_v0", + "delegate" : { + "type" : "default", + "dimension" : "dim3", + "outputName" : "dim3", + "outputType" : "STRING" + }, + "values" : [ "a" ], + "isAllowList" : true + } ], + "resultFormat" : "compactedList", + "columns" : [ "_v0", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(\"v0\" == \"_j0._v0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.dim3", "dim3" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq new file mode 100644 index 000000000000..96e1908cbf2e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq @@ -0,0 +1,108 @@ +# testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default case-crc:80416865 +# quidem testcase reason: AGG_COL_EXCHANGE +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set useApproximateCountDistinct false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, SUM(cnt), COUNT(distinct dim1) FROM druid.foo GROUP BY dim2; ++------+--------+--------+ +| dim2 | EXPR$1 | EXPR$2 | ++------+--------+--------+ +| | 3 | 3 | +| a | 2 | 1 | +| abc | 1 | 1 | ++------+--------+--------+ +(3 rows) + +!ok +LogicalAggregate(group=[{1}], EXPR$1=[SUM($2)], EXPR$2=[COUNT($0)]) + LogicalAggregate(group=[{1, 2}], EXPR$1=[SUM($4)]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{1}], EXPR$1=[SUM($2)], EXPR$2=[COUNT($0)], druid=[logical]) + DruidAggregate(group=[{1, 2}], EXPR$1=[SUM($4)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d1", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "longSum", + "name" : "a0", + "fieldName" : "cnt" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d1", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "longSum", + "name" : "_a0", + "fieldName" : "a0" + }, { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "_a1" + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "d0", + "value" : null + } + }, + "name" : "_a1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq new file mode 100644 index 000000000000..591792ade346 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq @@ -0,0 +1,108 @@ +# testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql case-crc:80416865 +# quidem testcase reason: AGG_COL_EXCHANGE +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set useApproximateCountDistinct false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, SUM(cnt), COUNT(distinct dim1) FROM druid.foo GROUP BY dim2; ++------+--------+--------+ +| dim2 | EXPR$1 | EXPR$2 | ++------+--------+--------+ +| | 1 | 1 | +| a | 2 | 2 | +| abc | 1 | 1 | +| | 2 | 2 | ++------+--------+--------+ +(4 rows) + +!ok +LogicalAggregate(group=[{1}], EXPR$1=[SUM($2)], EXPR$2=[COUNT($0)]) + LogicalAggregate(group=[{1, 2}], EXPR$1=[SUM($4)]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{1}], EXPR$1=[SUM($2)], EXPR$2=[COUNT($0)], druid=[logical]) + DruidAggregate(group=[{1, 2}], EXPR$1=[SUM($4)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d1", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "longSum", + "name" : "a0", + "fieldName" : "cnt" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d1", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "longSum", + "name" : "_a0", + "fieldName" : "a0" + }, { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "_a1" + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "null", + "column" : "d0" + } + }, + "name" : "_a1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq new file mode 100644 index 000000000000..4e6bbff9d57c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq @@ -0,0 +1,84 @@ +# testGroupByLimitPushdownExtraction@NullHandling=default case-crc:1bfa9337 +# quidem testcase reason: IMPROVED_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT dim4, substring(dim5, 1, 1), count(*) FROM druid.numfoo WHERE dim4 = 'a' GROUP BY 1,2 LIMIT 2; ++------+--------+--------+ +| dim4 | EXPR$1 | EXPR$2 | ++------+--------+--------+ +| a | a | 2 | +| a | b | 1 | ++------+--------+--------+ +(2 rows) + +!ok +LogicalProject(dim4=[CAST('a':VARCHAR):VARCHAR], EXPR$1=[$0], EXPR$2=[$1]) + LogicalSort(fetch=[2]) + LogicalAggregate(group=[{0}], EXPR$2=[COUNT()]) + LogicalProject(EXPR$1=[SUBSTRING($5, 1, 1)]) + LogicalFilter(condition=[=($4, 'a')]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim4=[CAST('a':VARCHAR):VARCHAR], EXPR$1=[$0], EXPR$2=[$1], druid=[logical]) + DruidSort(fetch=[2], druid=[logical]) + DruidAggregate(group=[{0}], EXPR$2=[COUNT()], druid=[logical]) + DruidProject(EXPR$1=[SUBSTRING($5, 1, 1)], druid=[logical]) + DruidFilter(condition=[=($4, 'a')]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "dimension" : { + "type" : "extraction", + "dimension" : "dim5", + "outputName" : "_d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + }, + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + }, + "threshold" : 2, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "selector", + "dimension" : "dim4", + "value" : "a" + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "s0", + "expression" : "'a'", + "outputType" : "STRING" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq new file mode 100644 index 000000000000..e104bbb0cf5a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq @@ -0,0 +1,85 @@ +# testGroupByLimitPushdownExtraction@NullHandling=sql case-crc:1bfa9337 +# quidem testcase reason: IMPROVED_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT dim4, substring(dim5, 1, 1), count(*) FROM druid.numfoo WHERE dim4 = 'a' GROUP BY 1,2 LIMIT 2; ++------+--------+--------+ +| dim4 | EXPR$1 | EXPR$2 | ++------+--------+--------+ +| a | a | 2 | +| a | b | 1 | ++------+--------+--------+ +(2 rows) + +!ok +LogicalProject(dim4=[CAST('a':VARCHAR):VARCHAR], EXPR$1=[$0], EXPR$2=[$1]) + LogicalSort(fetch=[2]) + LogicalAggregate(group=[{0}], EXPR$2=[COUNT()]) + LogicalProject(EXPR$1=[SUBSTRING($5, 1, 1)]) + LogicalFilter(condition=[=($4, 'a')]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(dim4=[CAST('a':VARCHAR):VARCHAR], EXPR$1=[$0], EXPR$2=[$1], druid=[logical]) + DruidSort(fetch=[2], druid=[logical]) + DruidAggregate(group=[{0}], EXPR$2=[COUNT()], druid=[logical]) + DruidProject(EXPR$1=[SUBSTRING($5, 1, 1)], druid=[logical]) + DruidFilter(condition=[=($4, 'a')]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "dimension" : { + "type" : "extraction", + "dimension" : "dim5", + "outputName" : "_d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + }, + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + }, + "threshold" : 2, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "equals", + "column" : "dim4", + "matchValueType" : "STRING", + "matchValue" : "a" + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "s0", + "expression" : "'a'", + "outputType" : "STRING" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq new file mode 100644 index 000000000000..6b4a8021d71a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq @@ -0,0 +1,76 @@ +# testGroupBySortPushDown case-crc:5655a1ec +# quidem testcase reason: AGG_COL_EXCHANGE +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, dim1, SUM(cnt) FROM druid.foo GROUP BY dim2, dim1 ORDER BY dim1 LIMIT 4; ++------+------+--------+ +| dim2 | dim1 | EXPR$2 | ++------+------+--------+ +| a | | 1 | +| a | 1 | 1 | +| | 10.1 | 1 | +| | 2 | 1 | ++------+------+--------+ +(4 rows) + +!ok +LogicalProject(dim2=[$1], dim1=[$0], EXPR$2=[$2]) + LogicalSort(sort0=[$0], dir0=[ASC], fetch=[4]) + LogicalAggregate(group=[{1, 2}], EXPR$2=[SUM($4)]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim2=[$1], dim1=[$0], EXPR$2=[$2], druid=[logical]) + DruidSort(sort0=[$0], dir0=[ASC], fetch=[4], druid=[logical]) + DruidAggregate(group=[{1, 2}], EXPR$2=[SUM($4)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d1", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "longSum", + "name" : "a0", + "fieldName" : "cnt" + } ], + "limitSpec" : { + "type" : "default", + "columns" : [ { + "dimension" : "d0", + "direction" : "ascending", + "dimensionOrder" : { + "type" : "lexicographic" + } + } ], + "limit" : 4 + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq new file mode 100644 index 000000000000..384456a0dd06 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq @@ -0,0 +1,147 @@ +# testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default case-crc:634b75d5 +# quidem testcase reason: IMPROVED_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, time_floor(gran, 'P1M') gran, sum(s) +FROM (SELECT time_floor(__time, 'P1D') AS gran, dim2, sum(m1) as s FROM druid.foo GROUP BY 1, 2 HAVING sum(m1) > 1) AS x +GROUP BY 1, 2 +ORDER BY dim2, gran desc; ++------+---------------------+--------+ +| dim2 | gran | EXPR$2 | ++------+---------------------+--------+ +| | 2001-01-01 00:00:00 | 6.0 | +| | 2000-01-01 00:00:00 | 5.0 | +| a | 2001-01-01 00:00:00 | 4.0 | +| abc | 2001-01-01 00:00:00 | 5.0 | ++------+---------------------+--------+ +(4 rows) + +!ok +LogicalSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[DESC]) + LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)]) + LogicalProject(dim2=[$1], gran=[TIME_FLOOR($0, 'P1M')], s=[$2]) + LogicalFilter(condition=[>($2, 1)]) + LogicalAggregate(group=[{0, 1}], s=[SUM($2)]) + LogicalProject(gran=[TIME_FLOOR($0, 'P1D')], dim2=[$2], m1=[$5]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[DESC], druid=[logical]) + DruidAggregate(group=[{0, 1}], EXPR$2=[SUM($2)], druid=[logical]) + DruidProject(dim2=[$1], gran=[TIME_FLOOR($0, 'P1M')], s=[$2], druid=[logical]) + DruidFilter(condition=[>($2, 1)]) + DruidAggregate(group=[{0, 1}], s=[SUM($2)], druid=[logical]) + DruidProject(gran=[TIME_FLOOR($0, 'P1D')], dim2=[$2], m1=[$5], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "timestamp_floor(\"__time\",'P1D',null,'UTC')", + "outputType" : "LONG" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d1", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "doubleSum", + "name" : "a0", + "fieldName" : "m1" + } ], + "having" : { + "type" : "filter", + "filter" : { + "type" : "bound", + "dimension" : "a0", + "lower" : "1", + "lowerStrict" : true, + "ordering" : { + "type" : "numeric" + } + }, + "finalize" : true + }, + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "timestamp_floor(\"d0\",'P1M',null,'UTC')", + "outputType" : "LONG" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d1", + "outputName" : "_d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d1", + "outputType" : "LONG" + } ], + "aggregations" : [ { + "type" : "doubleSum", + "name" : "_a0", + "fieldName" : "a0" + } ], + "limitSpec" : { + "type" : "default", + "columns" : [ { + "dimension" : "_d0", + "direction" : "ascending", + "dimensionOrder" : { + "type" : "lexicographic" + } + }, { + "dimension" : "_d1", + "direction" : "descending", + "dimensionOrder" : { + "type" : "numeric" + } + } ] + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq new file mode 100644 index 000000000000..aafc63709ec0 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq @@ -0,0 +1,146 @@ +# testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql case-crc:634b75d5 +# quidem testcase reason: IMPROVED_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, time_floor(gran, 'P1M') gran, sum(s) +FROM (SELECT time_floor(__time, 'P1D') AS gran, dim2, sum(m1) as s FROM druid.foo GROUP BY 1, 2 HAVING sum(m1) > 1) AS x +GROUP BY 1, 2 +ORDER BY dim2, gran desc; ++------+---------------------+--------+ +| dim2 | gran | EXPR$2 | ++------+---------------------+--------+ +| | 2001-01-01 00:00:00 | 6.0 | +| | 2000-01-01 00:00:00 | 2.0 | +| | 2000-01-01 00:00:00 | 3.0 | +| a | 2001-01-01 00:00:00 | 4.0 | +| abc | 2001-01-01 00:00:00 | 5.0 | ++------+---------------------+--------+ +(5 rows) + +!ok +LogicalSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[DESC]) + LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)]) + LogicalProject(dim2=[$1], gran=[TIME_FLOOR($0, 'P1M')], s=[$2]) + LogicalFilter(condition=[>($2, 1)]) + LogicalAggregate(group=[{0, 1}], s=[SUM($2)]) + LogicalProject(gran=[TIME_FLOOR($0, 'P1D')], dim2=[$2], m1=[$5]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[DESC], druid=[logical]) + DruidAggregate(group=[{0, 1}], EXPR$2=[SUM($2)], druid=[logical]) + DruidProject(dim2=[$1], gran=[TIME_FLOOR($0, 'P1M')], s=[$2], druid=[logical]) + DruidFilter(condition=[>($2, 1)]) + DruidAggregate(group=[{0, 1}], s=[SUM($2)], druid=[logical]) + DruidProject(gran=[TIME_FLOOR($0, 'P1D')], dim2=[$2], m1=[$5], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "timestamp_floor(\"__time\",'P1D',null,'UTC')", + "outputType" : "LONG" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d1", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "doubleSum", + "name" : "a0", + "fieldName" : "m1" + } ], + "having" : { + "type" : "filter", + "filter" : { + "type" : "range", + "column" : "a0", + "matchValueType" : "LONG", + "lower" : 1, + "lowerOpen" : true + }, + "finalize" : true + }, + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "timestamp_floor(\"d0\",'P1M',null,'UTC')", + "outputType" : "LONG" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d1", + "outputName" : "_d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d1", + "outputType" : "LONG" + } ], + "aggregations" : [ { + "type" : "doubleSum", + "name" : "_a0", + "fieldName" : "a0" + } ], + "limitSpec" : { + "type" : "default", + "columns" : [ { + "dimension" : "_d0", + "direction" : "ascending", + "dimensionOrder" : { + "type" : "lexicographic" + } + }, { + "dimension" : "_d1", + "direction" : "descending", + "dimensionOrder" : { + "type" : "numeric" + } + } ] + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq new file mode 100644 index 000000000000..18fbcc29a0c7 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq @@ -0,0 +1,110 @@ +# testGroupByWithLiteralInSubqueryGrouping case-crc:ddf0feaf +# quidem testcase reason: IMPROVED_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT + t1, t2 + FROM + ( SELECT + 'dummy' as t1, + CASE + WHEN + dim4 = 'b' + THEN dim4 + ELSE NULL + END AS t2 + FROM + numfoo + GROUP BY + dim4 + ) + GROUP BY + t1,t2 +; ++-------+----+ +| t1 | t2 | ++-------+----+ +| dummy | b | +| dummy | | ++-------+----+ +(2 rows) + +!ok +LogicalProject(t1=['dummy'], t2=[$0]) + LogicalAggregate(group=[{0}]) + LogicalProject(t2=[CASE(=($0, 'b'), $0, null:VARCHAR)]) + LogicalAggregate(group=[{4}]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidProject(t1=['dummy'], t2=[$0], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(t2=[CASE(=($0, 'b'), $0, null:VARCHAR)], druid=[logical]) + DruidAggregate(group=[{4}], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim4", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "case_searched((\"_d0\" == 'b'),\"_d0\",null)", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "p0", + "expression" : "'dummy'", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq new file mode 100644 index 000000000000..01941e6a7e9e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq @@ -0,0 +1,231 @@ +# testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default case-crc:6c95ac54 +# quidem testcase reason: AGG_COL_EXCHANGE +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set useApproximateCountDistinct false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*), COUNT(distinct dim1), COUNT(distinct cnt) FROM druid.foo GROUP BY dim2; ++------+--------+--------+--------+ +| dim2 | EXPR$1 | EXPR$2 | EXPR$3 | ++------+--------+--------+--------+ +| | 3 | 3 | 1 | +| a | 2 | 1 | 1 | +| abc | 1 | 1 | 1 | ++------+--------+--------+--------+ +(3 rows) + +!ok +LogicalProject(dim2=[$0], EXPR$1=[$1], EXPR$2=[$3], EXPR$3=[$5]) + LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner]) + LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner]) + LogicalAggregate(group=[{2}], EXPR$1=[COUNT()]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{1}], EXPR$2=[COUNT($0)]) + LogicalAggregate(group=[{1, 2}]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], EXPR$3=[COUNT($1)]) + LogicalAggregate(group=[{2, 4}]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim2=[$0], EXPR$1=[$1], EXPR$2=[$3], EXPR$3=[$5], druid=[logical]) + DruidJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner]) + DruidJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner]) + DruidAggregate(group=[{2}], EXPR$1=[COUNT()], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$2=[COUNT($0)], druid=[logical]) + DruidAggregate(group=[{1, 2}], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], EXPR$3=[COUNT($1)], druid=[logical]) + DruidAggregate(group=[{2, 4}], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d1", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d1", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "d0", + "value" : null + } + }, + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "notdistinctfrom(\"d0\",\"j0._d0\")", + "joinType" : "INNER" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "cnt", + "outputName" : "d1", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "notdistinctfrom(\"d0\",\"_j0._d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.a0", "a0", "d0", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "LONG", "STRING", "LONG" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq new file mode 100644 index 000000000000..d0620db5261d --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq @@ -0,0 +1,242 @@ +# testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql case-crc:6c95ac54 +# quidem testcase reason: AGG_COL_EXCHANGE +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set useApproximateCountDistinct false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*), COUNT(distinct dim1), COUNT(distinct cnt) FROM druid.foo GROUP BY dim2; ++------+--------+--------+--------+ +| dim2 | EXPR$1 | EXPR$2 | EXPR$3 | ++------+--------+--------+--------+ +| | 1 | 1 | 1 | +| a | 2 | 2 | 1 | +| abc | 1 | 1 | 1 | +| | 2 | 2 | 1 | ++------+--------+--------+--------+ +(4 rows) + +!ok +LogicalProject(dim2=[$0], EXPR$1=[$1], EXPR$2=[$3], EXPR$3=[$5]) + LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner]) + LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner]) + LogicalAggregate(group=[{2}], EXPR$1=[COUNT()]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{1}], EXPR$2=[COUNT($0)]) + LogicalAggregate(group=[{1, 2}]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], EXPR$3=[COUNT($1)]) + LogicalAggregate(group=[{2, 4}]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim2=[$0], EXPR$1=[$1], EXPR$2=[$3], EXPR$3=[$5], druid=[logical]) + DruidJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner]) + DruidJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner]) + DruidAggregate(group=[{2}], EXPR$1=[COUNT()], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{1}], EXPR$2=[COUNT($0)], druid=[logical]) + DruidAggregate(group=[{1, 2}], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], EXPR$3=[COUNT($1)], druid=[logical]) + DruidAggregate(group=[{2, 4}], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d1", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d1", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "null", + "column" : "d0" + } + }, + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "notdistinctfrom(\"d0\",\"j0._d0\")", + "joinType" : "INNER" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + }, { + "type" : "default", + "dimension" : "cnt", + "outputName" : "d1", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "d0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "null", + "column" : "d1" + } + }, + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "notdistinctfrom(\"d0\",\"_j0._d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "_j0.a0", "a0", "d0", "j0.a0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "LONG", "STRING", "LONG" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq new file mode 100644 index 000000000000..1cbbe18e49d8 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq @@ -0,0 +1,152 @@ +# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default case-crc:43cd3215 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set useApproximateCountDistinct false +!set useGroupingSetForExactDistinct true +!set outputformat mysql +!use druidtest:///?NumMergeBuffers=3 +SELECT +(SUM(CASE WHEN (TIMESTAMP '2000-01-04 17:00:00'<=__time AND __time= 947005200000) && (\"__time\" < 1641402000000)),\"dim1\",null)", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "bound", + "dimension" : "__time", + "lower" : "947005200000", + "upper" : "1641402000000", + "upperStrict" : true, + "ordering" : { + "type" : "numeric" + } + }, + "name" : "a0" + }, { + "type" : "grouping", + "name" : "a1", + "groupings" : [ "v0" ] + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + }, + "subtotalsSpec" : [ [ "d0" ], [ ] ] + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "longMin", + "name" : "_a0", + "fieldName" : "a0" + }, + "filter" : { + "type" : "selector", + "dimension" : "a1", + "value" : "1" + }, + "name" : "_a0" + }, { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "_a1" + }, + "filter" : { + "type" : "and", + "fields" : [ { + "type" : "not", + "field" : { + "type" : "selector", + "dimension" : "d0", + "value" : null + } + }, { + "type" : "selector", + "dimension" : "a1", + "value" : "0" + } ] + }, + "name" : "_a1" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "p0", + "expression" : "(CAST(\"_a0\", 'DOUBLE') / \"_a1\")", + "outputType" : "DOUBLE" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq new file mode 100644 index 000000000000..4f6646b7f537 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq @@ -0,0 +1,151 @@ +# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql case-crc:43cd3215 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set useApproximateCountDistinct false +!set useGroupingSetForExactDistinct true +!set outputformat mysql +!use druidtest:///?NumMergeBuffers=3 +SELECT +(SUM(CASE WHEN (TIMESTAMP '2000-01-04 17:00:00'<=__time AND __time= 947005200000) && (\"__time\" < 1641402000000)),\"dim1\",null)", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "range", + "column" : "__time", + "matchValueType" : "LONG", + "lower" : 947005200000, + "upper" : 1641402000000, + "upperOpen" : true + }, + "name" : "a0" + }, { + "type" : "grouping", + "name" : "a1", + "groupings" : [ "v0" ] + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + }, + "subtotalsSpec" : [ [ "d0" ], [ ] ] + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "longMin", + "name" : "_a0", + "fieldName" : "a0" + }, + "filter" : { + "type" : "equals", + "column" : "a1", + "matchValueType" : "LONG", + "matchValue" : 1 + }, + "name" : "_a0" + }, { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "_a1" + }, + "filter" : { + "type" : "and", + "fields" : [ { + "type" : "not", + "field" : { + "type" : "null", + "column" : "d0" + } + }, { + "type" : "equals", + "column" : "a1", + "matchValueType" : "LONG", + "matchValue" : 0 + } ] + }, + "name" : "_a1" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "p0", + "expression" : "(CAST(\"_a0\", 'DOUBLE') / \"_a1\")", + "outputType" : "DOUBLE" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq new file mode 100644 index 000000000000..333ea9002d38 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq @@ -0,0 +1,71 @@ +# testRepeatedIdenticalVirtualExpressionGrouping case-crc:1a5712f6 +# quidem testcase reason: IMPROVED_PLAN +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT + CASE dim1 WHEN NULL THEN FALSE ELSE TRUE END AS col_a, + CASE dim2 WHEN NULL THEN FALSE ELSE TRUE END AS col_b +FROM foo +GROUP BY 1, 2; ++-------+-------+ +| col_a | col_b | ++-------+-------+ +| true | true | ++-------+-------+ +(1 row) + +!ok +LogicalProject(col_a=[$0], col_b=[true]) + LogicalAggregate(group=[{0}]) + LogicalProject(col_a=[true]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(col_a=[$0], col_b=[true], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(col_a=[true], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "1", + "outputType" : "LONG" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "p0", + "expression" : "1", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq new file mode 100644 index 000000000000..88eecd621478 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq @@ -0,0 +1,110 @@ +# testSubqueryTypeMismatchWithLiterals@NullHandling=default case-crc:55baf28f +# quidem testcase reason: AGGREGATE_REMOVE_NOT_FIRED +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT + dim1, + SUM(CASE WHEN sum_l1 = 0 THEN 1 ELSE 0 END) AS outer_l1 +from ( + select + dim1, + SUM(l1) as sum_l1 + from numfoo + group by dim1 +) +group by 1; ++------+----------+ +| dim1 | outer_l1 | ++------+----------+ +| | 0 | +| 1 | 1 | +| 10.1 | 0 | +| 2 | 1 | +| abc | 1 | +| def | 1 | ++------+----------+ +(6 rows) + +!ok +LogicalAggregate(group=[{0}], outer_l1=[COUNT() FILTER $1]) + LogicalProject(dim1=[$0], $f2=[=($1, 0)]) + LogicalAggregate(group=[{1}], sum_l1=[SUM($11)]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidAggregate(group=[{0}], outer_l1=[COUNT() FILTER $1], druid=[logical]) + DruidProject(dim1=[$0], $f2=[=($1, 0)], druid=[logical]) + DruidAggregate(group=[{1}], sum_l1=[SUM($11)], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim1", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "longSum", + "name" : "a0", + "fieldName" : "l1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "_d0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "_a0" + }, + "filter" : { + "type" : "selector", + "dimension" : "a0", + "value" : "0" + }, + "name" : "_a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq new file mode 100644 index 000000000000..1ccd29e4854d --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq @@ -0,0 +1,111 @@ +# testSubqueryTypeMismatchWithLiterals@NullHandling=sql case-crc:55baf28f +# quidem testcase reason: AGGREGATE_REMOVE_NOT_FIRED +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT + dim1, + SUM(CASE WHEN sum_l1 = 0 THEN 1 ELSE 0 END) AS outer_l1 +from ( + select + dim1, + SUM(l1) as sum_l1 + from numfoo + group by dim1 +) +group by 1; ++------+----------+ +| dim1 | outer_l1 | ++------+----------+ +| | 0 | +| 1 | 0 | +| 10.1 | 0 | +| 2 | 1 | +| abc | 0 | +| def | 0 | ++------+----------+ +(6 rows) + +!ok +LogicalAggregate(group=[{0}], outer_l1=[COUNT() FILTER $1]) + LogicalProject(dim1=[$0], $f2=[IS TRUE(=($1, 0))]) + LogicalAggregate(group=[{1}], sum_l1=[SUM($11)]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidAggregate(group=[{0}], outer_l1=[COUNT() FILTER $1], druid=[logical]) + DruidProject(dim1=[$0], $f2=[IS TRUE(=($1, 0))], druid=[logical]) + DruidAggregate(group=[{1}], sum_l1=[SUM($11)], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim1", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "longSum", + "name" : "a0", + "fieldName" : "l1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "_d0", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "_a0" + }, + "filter" : { + "type" : "equals", + "column" : "a0", + "matchValueType" : "LONG", + "matchValue" : 0 + }, + "name" : "_a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq new file mode 100644 index 000000000000..e4c3fbb28f18 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq @@ -0,0 +1,191 @@ +# testWindowingWithScanAndSort@NullHandling=default case-crc:24efe380 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set enableWindowing true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with t AS ( +SELECT + RANK() OVER (PARTITION BY m2 ORDER BY m2 ASC) + AS ranking, + COUNT(m1) as trend_score +FROM foo +GROUP BY m2,m1 LIMIT 10 +) +select ranking, trend_score from t ORDER BY trend_score; ++---------+-------------+ +| ranking | trend_score | ++---------+-------------+ +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | ++---------+-------------+ +(6 rows) + +!ok +LogicalProject(ranking=[$2], trend_score=[$1]) + LogicalSort(sort0=[$1], dir0=[ASC]) + LogicalSort(fetch=[10]) + LogicalWindow(window#0=[window(partition {0} order by [0] aggs [RANK()])]) + LogicalProject(m2=[$1], trend_score=[$2]) + LogicalAggregate(group=[{5, 6}], trend_score=[COUNT()]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(ranking=[$2], trend_score=[$1], druid=[logical]) + DruidSort(sort0=[$1], dir0=[ASC], druid=[logical]) + DruidSort(fetch=[10], druid=[logical]) + DruidWindow(window#0=[window(partition {0} order by [0] aggs [RANK()])]) + DruidProject(m2=[$1], trend_score=[$2], druid=[logical]) + DruidAggregate(group=[{5, 6}], trend_score=[COUNT()], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "windowOperator", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "windowOperator", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "m1", + "outputName" : "d0", + "outputType" : "FLOAT" + }, { + "type" : "default", + "dimension" : "m2", + "outputName" : "d1", + "outputType" : "DOUBLE" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "LegacySegmentSpec", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "outputSignature" : [ { + "name" : "d1", + "type" : "DOUBLE" + }, { + "name" : "a0", + "type" : "LONG" + }, { + "name" : "w0", + "type" : "LONG" + } ], + "operatorDefinition" : [ { + "type" : "naiveSort", + "columns" : [ { + "column" : "d1", + "direction" : "ASC" + } ] + }, { + "type" : "naivePartition", + "partitionColumns" : [ "d1" ] + }, { + "type" : "window", + "processor" : { + "type" : "rank", + "group" : [ "d1" ], + "outputColumn" : "w0", + "asPercent" : false + } + } ], + "leafOperators" : [ ], + "granularity" : { + "type" : "all" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "limit" : 10, + "columns" : [ "a0", "d1", "w0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "DOUBLE", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "intervals" : { + "type" : "LegacySegmentSpec", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "outputSignature" : [ { + "name" : "w0", + "type" : "LONG" + }, { + "name" : "a0", + "type" : "LONG" + } ], + "operatorDefinition" : [ { + "type" : "naiveSort", + "columns" : [ { + "column" : "a0", + "direction" : "ASC" + } ] + }, { + "type" : "scan", + "timeRange" : null, + "filter" : null, + "offsetLimit" : null, + "projectedColumns" : [ "w0", "a0" ], + "virtualColumns" : null, + "ordering" : null + } ], + "leafOperators" : [ { + "type" : "scan", + "timeRange" : null, + "filter" : null, + "offsetLimit" : { + "offset" : 0, + "limit" : 9223372036854775807 + }, + "projectedColumns" : [ "a0", "w0" ], + "virtualColumns" : null, + "ordering" : null + } ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq new file mode 100644 index 000000000000..8e18b7fb640b --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq @@ -0,0 +1,202 @@ +# testWindowingWithScanAndSort@NullHandling=sql case-crc:24efe380 +# quidem testcase reason: SLIGHTLY_WORSE_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set enableWindowing true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with t AS ( +SELECT + RANK() OVER (PARTITION BY m2 ORDER BY m2 ASC) + AS ranking, + COUNT(m1) as trend_score +FROM foo +GROUP BY m2,m1 LIMIT 10 +) +select ranking, trend_score from t ORDER BY trend_score; ++---------+-------------+ +| ranking | trend_score | ++---------+-------------+ +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | +| 1 | 1 | ++---------+-------------+ +(6 rows) + +!ok +LogicalProject(ranking=[$2], trend_score=[$1]) + LogicalSort(sort0=[$1], dir0=[ASC]) + LogicalSort(fetch=[10]) + LogicalWindow(window#0=[window(partition {0} order by [0] aggs [RANK()])]) + LogicalProject(m2=[$1], trend_score=[$2]) + LogicalAggregate(group=[{5, 6}], trend_score=[COUNT($5)]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(ranking=[$2], trend_score=[$1], druid=[logical]) + DruidSort(sort0=[$1], dir0=[ASC], druid=[logical]) + DruidSort(fetch=[10], druid=[logical]) + DruidWindow(window#0=[window(partition {0} order by [0] aggs [RANK()])]) + DruidProject(m2=[$1], trend_score=[$2], druid=[logical]) + DruidAggregate(group=[{5, 6}], trend_score=[COUNT($5)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "windowOperator", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "windowOperator", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "m1", + "outputName" : "d0", + "outputType" : "FLOAT" + }, { + "type" : "default", + "dimension" : "m2", + "outputName" : "d1", + "outputType" : "DOUBLE" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "null", + "column" : "m1" + } + }, + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "LegacySegmentSpec", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "outputSignature" : [ { + "name" : "d1", + "type" : "DOUBLE" + }, { + "name" : "a0", + "type" : "LONG" + }, { + "name" : "w0", + "type" : "LONG" + } ], + "operatorDefinition" : [ { + "type" : "naiveSort", + "columns" : [ { + "column" : "d1", + "direction" : "ASC" + } ] + }, { + "type" : "naivePartition", + "partitionColumns" : [ "d1" ] + }, { + "type" : "window", + "processor" : { + "type" : "rank", + "group" : [ "d1" ], + "outputColumn" : "w0", + "asPercent" : false + } + } ], + "leafOperators" : [ ], + "granularity" : { + "type" : "all" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "limit" : 10, + "columns" : [ "a0", "d1", "w0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "DOUBLE", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "intervals" : { + "type" : "LegacySegmentSpec", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "outputSignature" : [ { + "name" : "w0", + "type" : "LONG" + }, { + "name" : "a0", + "type" : "LONG" + } ], + "operatorDefinition" : [ { + "type" : "naiveSort", + "columns" : [ { + "column" : "a0", + "direction" : "ASC" + } ] + }, { + "type" : "scan", + "timeRange" : null, + "filter" : null, + "offsetLimit" : null, + "projectedColumns" : [ "w0", "a0" ], + "virtualColumns" : null, + "ordering" : null + } ], + "leafOperators" : [ { + "type" : "scan", + "timeRange" : null, + "filter" : null, + "offsetLimit" : { + "offset" : 0, + "limit" : 9223372036854775807 + }, + "projectedColumns" : [ "a0", "w0" ], + "virtualColumns" : null, + "ordering" : null + } ], + "granularity" : { + "type" : "all" + } +} +!nativePlan From e36c46a85aff2e33be81d99b451903099d513612 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 13 May 2024 14:11:19 +0000 Subject: [PATCH 002/122] fix import style fixes clenaup --- .../druid/quidem/DruidConnectionExtras.java | 2 +- .../sql/calcite/CalciteJoinQueryTest.java | 14 +- .../druid/sql/calcite/DecoupledExtension.java | 2 +- .../apache/druid/sql/calcite/QTestCase.java | 3 +- .../sql/calcite/SqlTestFrameworkConfig.java | 2 +- ...pNOnInnerJoinWithLimit@NullHandling=sql.iq | 116 +++++++++++ ...taSources@all_disabled@NullHandling=sql.iq | 165 ++++++++++++++++ ...ataSources@all_enabled@NullHandling=sql.iq | 165 ++++++++++++++++ ...ineDataSources@default@NullHandling=sql.iq | 162 +++++++++++++++ ...-value-column_disabled@NullHandling=sql.iq | 165 ++++++++++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 165 ++++++++++++++++ ...ources@filter-rewrites@NullHandling=sql.iq | 165 ++++++++++++++++ ...Sources@join-to-filter@NullHandling=sql.iq | 165 ++++++++++++++++ ...nCastLeft@all_disabled@NullHandling=sql.iq | 90 +++++++++ ...inCastLeft@all_enabled@NullHandling=sql.iq | 90 +++++++++ ...erJoinCastLeft@default@NullHandling=sql.iq | 87 ++++++++ ...-value-column_disabled@NullHandling=sql.iq | 90 +++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 90 +++++++++ ...stLeft@filter-rewrites@NullHandling=sql.iq | 90 +++++++++ ...astLeft@join-to-filter@NullHandling=sql.iq | 90 +++++++++ ...ectAccess@all_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...rectAccess@all_enabled@NullHandling=sql.iq | 135 +++++++++++++ ...ftDirectAccess@default@NullHandling=sql.iq | 132 +++++++++++++ ...-value-column_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 135 +++++++++++++ ...Access@filter-rewrites@NullHandling=sql.iq | 135 +++++++++++++ ...tAccess@join-to-filter@NullHandling=sql.iq | 135 +++++++++++++ ...ectAccess@all_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...rectAccess@all_enabled@NullHandling=sql.iq | 135 +++++++++++++ ...ftDirectAccess@default@NullHandling=sql.iq | 132 +++++++++++++ ...-value-column_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 135 +++++++++++++ ...Access@filter-rewrites@NullHandling=sql.iq | 135 +++++++++++++ ...tAccess@join-to-filter@NullHandling=sql.iq | 135 +++++++++++++ ...eseriesWithFloorOnTime@NullHandling=sql.iq | 156 +++++++++++++++ ...ggregateMultipleValues@NullHandling=sql.iq | 156 +++++++++++++++ ...eseriesWithFloorOnTime@NullHandling=sql.iq | 139 +++++++++++++ ...nWithInputRefCondition@NullHandling=sql.iq | 186 ++++++++++++++++++ ...ectAccess@all_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...rectAccess@all_enabled@NullHandling=sql.iq | 135 +++++++++++++ ...ftDirectAccess@default@NullHandling=sql.iq | 132 +++++++++++++ ...-value-column_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 135 +++++++++++++ ...Access@filter-rewrites@NullHandling=sql.iq | 135 +++++++++++++ ...tAccess@join-to-filter@NullHandling=sql.iq | 135 +++++++++++++ ...ectAccess@all_disabled@NullHandling=sql.iq | 141 +++++++++++++ ...rectAccess@all_enabled@NullHandling=sql.iq | 141 +++++++++++++ ...ftDirectAccess@default@NullHandling=sql.iq | 138 +++++++++++++ ...-value-column_disabled@NullHandling=sql.iq | 141 +++++++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 141 +++++++++++++ ...Access@filter-rewrites@NullHandling=sql.iq | 141 +++++++++++++ ...tAccess@join-to-filter@NullHandling=sql.iq | 141 +++++++++++++ ...ectAccess@all_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...rectAccess@all_enabled@NullHandling=sql.iq | 135 +++++++++++++ ...ftDirectAccess@default@NullHandling=sql.iq | 132 +++++++++++++ ...-value-column_disabled@NullHandling=sql.iq | 135 +++++++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 135 +++++++++++++ ...Access@filter-rewrites@NullHandling=sql.iq | 135 +++++++++++++ ...tAccess@join-to-filter@NullHandling=sql.iq | 135 +++++++++++++ ...actionFns@all_disabled@NullHandling=sql.iq | 140 +++++++++++++ ...ractionFns@all_enabled@NullHandling=sql.iq | 140 +++++++++++++ ...hExtractionFns@default@NullHandling=sql.iq | 137 +++++++++++++ ...-value-column_disabled@NullHandling=sql.iq | 140 +++++++++++++ ...lter-rewrites-disabled@NullHandling=sql.iq | 140 +++++++++++++ ...ionFns@filter-rewrites@NullHandling=sql.iq | 140 +++++++++++++ ...tionFns@join-to-filter@NullHandling=sql.iq | 140 +++++++++++++ 66 files changed, 8273 insertions(+), 11 deletions(-) create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq create mode 100644 sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java index 2b75f82122c1..75bdd4280fab 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java @@ -25,7 +25,7 @@ public interface DruidConnectionExtras { ObjectMapper getObjectMapper(); - public class DruidConnectionExtrasImpl implements DruidConnectionExtras + class DruidConnectionExtrasImpl implements DruidConnectionExtras { private final ObjectMapper objectMapper; diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java index f1ddeb9ccfbd..346563083fbc 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java @@ -94,7 +94,6 @@ import org.joda.time.DateTimeZone; import org.joda.time.Period; import org.junit.Assert; -import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -107,8 +106,8 @@ import java.util.Map; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assume.assumeFalse; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assumptions.assumeFalse; public class CalciteJoinQueryTest extends BaseCalciteQueryTest { @@ -3588,10 +3587,11 @@ public void testLeftJoinSubqueryWithNullKeyFilter(Map queryConte { // JoinFilterAnalyzer bug causes incorrect results on this test in replace-with-default mode. // This test case was originally added in https://github.com/apache/druid/pull/11434 with a note about this. - Assumptions.assumeFalse(NullHandling.replaceWithDefault() && QueryContext.of(queryContext).getEnableJoinFilterRewrite()); + assumeFalse(NullHandling.replaceWithDefault() && QueryContext.of(queryContext).getEnableJoinFilterRewrite()); assumeFalse( - "join condition not support in decoupled mode", testBuilder().isDecoupledMode() && NullHandling.replaceWithDefault() + testBuilder().isDecoupledMode() && NullHandling.replaceWithDefault(), + "join condition not support in decoupled mode" ); // Cannot vectorize due to 'concat' expression. @@ -4702,7 +4702,7 @@ public void testJoinWithNonEquiCondition(Map queryContext) cannotVectorize(); // We don't handle non-equi join conditions for non-sql compatible mode. - Assumptions.assumeFalse(NullHandling.replaceWithDefault()); + assumeFalse(NullHandling.replaceWithDefault()); testQuery( "SELECT x.m1, y.m1 FROM foo x INNER JOIN foo y ON x.m1 > y.m1", @@ -4765,7 +4765,7 @@ public void testJoinWithEquiAndNonEquiCondition(Map queryContext cannotVectorize(); // We don't handle non-equi join conditions for non-sql compatible mode. - Assumptions.assumeFalse(NullHandling.replaceWithDefault()); + assumeFalse(NullHandling.replaceWithDefault()); testQuery( "SELECT x.m1, y.m1 FROM foo x INNER JOIN foo y ON x.m1 = y.m1 AND x.m1 + y.m1 = 6.0", @@ -5653,7 +5653,7 @@ public void testPlanWithInFilterMoreThanInSubQueryThreshold() @ParameterizedTest(name = "{0}") public void testRegressionFilteredAggregatorsSubqueryJoins(Map queryContext) { - assumeFalse("not support in decoupled mode", testBuilder().isDecoupledMode() && NullHandling.replaceWithDefault()); + assumeFalse(testBuilder().isDecoupledMode() && NullHandling.replaceWithDefault(), "not support in decoupled mode"); cannotVectorize(); testQuery( diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java index ec3d25632a63..094a23cb1d67 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/DecoupledExtension.java @@ -45,7 +45,7 @@ public DecoupledExtension(BaseCalciteQueryTest baseTest) private File qCaseDir; @Override - public void beforeEach(ExtensionContext context) throws Exception + public void beforeEach(ExtensionContext context) { Class testClass = context.getTestClass().get(); qCaseDir = ProjectPathUtils.getPathFromProjectRoot("sql/src/test/quidem/" + testClass.getName()); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java b/sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java index 888f8ecc573e..67f5bf3c2eb7 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/QTestCase.java @@ -43,7 +43,8 @@ public QTestCase(DruidQTestInfo testInfo) { this.testInfo = testInfo; sb = new StringBuffer(); - sb.append("# " + testInfo.comment); + sb.append("# "); + sb.append(testInfo.comment); sb.append("\n"); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index ee75e73d52c3..643f158c09fe 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -25,7 +25,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableSet; -import org.apache.curator.shaded.com.google.common.collect.Sets; +import com.google.common.collect.Sets; import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.query.topn.TopNQueryConfig; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq new file mode 100644 index 000000000000..8ba93f763e74 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq @@ -0,0 +1,116 @@ +# testExactTopNOnInnerJoinWithLimit@NullHandling=sql case-crc:c3f897f8 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set useApproximateTopN false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:///?MinTopNThreshold=1 +select f1."dim4", sum("m1") from numfoo f1 inner join ( + select "dim4" from numfoo where dim4 <> 'a' group by 1 +) f2 on f1."dim4" = f2."dim4" group by 1 limit 1; ++------+--------+ +| dim4 | EXPR$1 | ++------+--------+ +| b | 15.0 | ++------+--------+ +(1 row) + +!ok +LogicalSort(fetch=[1]) + LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim4=[$4], m1=[$14]) + LogicalTableScan(table=[[druid, numfoo]]) + LogicalAggregate(group=[{4}]) + LogicalFilter(condition=[<>($4, 'a')]) + LogicalTableScan(table=[[druid, numfoo]]) + +!logicalPlan +DruidSort(fetch=[1], druid=[logical]) + DruidAggregate(group=[{0}], EXPR$1=[SUM($1)], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim4=[$4], m1=[$14], druid=[logical]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + DruidAggregate(group=[{4}], druid=[logical]) + DruidFilter(condition=[<>($4, 'a')]) + DruidTableScan(table=[[druid, numfoo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "topN", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "table", + "name" : "numfoo" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "numfoo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim4", + "matchValueType" : "STRING", + "matchValue" : "a" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim4", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"dim4\" == \"j0._d0\")", + "joinType" : "INNER" + }, + "dimension" : { + "type" : "default", + "dimension" : "dim4", + "outputName" : "d0", + "outputType" : "STRING" + }, + "metric" : { + "type" : "dimension", + "ordering" : { + "type" : "lexicographic" + } + }, + "threshold" : 1, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "doubleSum", + "name" : "a0", + "fieldName" : "m1" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..356be34dc392 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq @@ -0,0 +1,165 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql case-crc:7916e17e +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..ddc2b0ecdd0a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq @@ -0,0 +1,165 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql case-crc:a79ba14e +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq new file mode 100644 index 000000000000..f4c6125d1bba --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq @@ -0,0 +1,162 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql case-crc:d168257e +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..1969ce07a445 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,165 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql case-crc:dc96fa7f +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..4392c091c59a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,165 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql case-crc:7936703f +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..ff701602a1b5 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,165 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql case-crc:b5081d1c +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..224c50949638 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,165 @@ +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql case-crc:c0c596f8 +# quidem testcase reason: EQUIV_PLAN +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT dim1 from (SELECT dim1,__time FROM (SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1) GROUP BY 1,2) GROUP BY dim1 +; ++------+ +| dim1 | ++------+ +| 10.1 | ++------+ +(1 row) + +!ok +LogicalAggregate(group=[{0}]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalAggregate(group=[{1}]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidAggregate(group=[{1}], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "_d0", + "outputType" : "STRING" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..f6e767759e27 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@all_disabled@NullHandling=sql case-crc:532afc53 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..b8333e400f07 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@all_enabled@NullHandling=sql case-crc:615b6635 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq new file mode 100644 index 000000000000..5e748b1bc6b7 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq @@ -0,0 +1,87 @@ +# testInnerJoinCastLeft@default@NullHandling=sql case-crc:fda58dbf +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..0d87b27ef7a3 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql case-crc:951d4374 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..aee845662ba5 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql case-crc:403f05e1 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..0612cdc7c69f --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@filter-rewrites@NullHandling=sql case-crc:9b73e9cb +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..b5fb9ad3390c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,90 @@ +# testInnerJoinCastLeft@join-to-filter@NullHandling=sql case-crc:032c945b +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT foo.m1, l.k, l.v +FROM foo +INNER JOIN lookup.lookyloo l ON CAST(foo.m1 AS VARCHAR) = l.k +; ++----+---+---+ +| m1 | k | v | ++----+---+---+ ++----+---+---+ +(0 rows) + +!ok +LogicalProject(m1=[$0], k=[$2], v=[$3]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(m1=[$5], m10=[CAST($5):VARCHAR]) + LogicalTableScan(table=[[druid, foo]]) + LogicalTableScan(table=[[lookup, lookyloo]]) + +!logicalPlan +DruidProject(m1=[$0], k=[$2], v=[$3], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(m1=[$5], m10=[CAST($5):VARCHAR], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidTableScan(table=[[lookup, lookyloo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "CAST(\"m1\", 'STRING')", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "FLOAT", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "lookup", + "lookup" : "lookyloo" + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.k\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "columns" : [ "j0.k", "j0.v", "m1" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING", "FLOAT" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..a6ce3c85c6c2 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:31aaba25 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..ee580a34db1e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:22a7ed95 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq new file mode 100644 index 000000000000..7bbf3f0b0481 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq @@ -0,0 +1,132 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql case-crc:fe77c11d +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..71f7bb4f85d0 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:c115dcb0 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..ba8f07a1b113 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:466c2dda +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..071ca6b988bf --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:8b226734 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..bcaa4ae3a72e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:36ee0be3 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..b9b2e88d446e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:0c7abe39 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..d4801c32301e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:e167e948 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq new file mode 100644 index 000000000000..ac546d393156 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq @@ -0,0 +1,132 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql case-crc:ca2c56e9 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..1a87891288c3 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:012eaa97 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..12291f8b1edf --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:39af5216 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..24a6d8c44e9e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:ec74956b +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..4d4fb88efd4e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:080e87b6 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 INNER JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[inner]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[inner]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq new file mode 100644 index 000000000000..b88ec4f6e781 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq @@ -0,0 +1,156 @@ +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql case-crc:a9e23ec5 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN + ( + SELECT CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1 AS t1, MIN(m1) AS t2 FROM foo WHERE dim3 = 'b' + AND __time BETWEEN '1994-04-29 00:00:00' AND '2020-01-11 00:00:00' GROUP BY 1 + ) +GROUP BY 1, 2 +; ++--------------+-----+--------+ +| EXPR$0 | m1 | EXPR$2 | ++--------------+-----+--------+ +| 946684800000 | 1.0 | [a, b] | +| 946771200000 | 2.0 | [b, c] | ++--------------+-----+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3)]) + LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100]) + LogicalJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + LogicalProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], t2=[MIN($1)]) + LogicalProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5]) + LogicalFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3)], druid=[logical]) + DruidProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], druid=[logical]) + DruidJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + DruidProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], t2=[MIN($1)], druid=[logical]) + DruidProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5], druid=[logical]) + DruidFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "dim3", "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING", "FLOAT", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1994-04-29T00:00:00.000Z/2020-01-11T00:00:00.001Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "filter" : { + "type" : "equals", + "column" : "dim3", + "matchValueType" : "STRING", + "matchValue" : "b" + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "aggregations" : [ { + "type" : "floatMin", + "name" : "a0", + "fieldName" : "m1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"v0\" == \"j0.d0\") && (\"m1\" == \"j0.a0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "m1", + "outputName" : "d1", + "outputType" : "FLOAT" + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0", + "fieldName" : "dim3", + "maxStringBytes" : 100, + "aggregateMultipleValues" : true + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq new file mode 100644 index 000000000000..8941dbd89388 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq @@ -0,0 +1,156 @@ +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql case-crc:b873fcbb +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, false) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN + ( + SELECT CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1 AS t1, MIN(m1) AS t2 FROM foo WHERE dim3 = 'b' + AND __time BETWEEN '1994-04-29 00:00:00' AND '2020-01-11 00:00:00' GROUP BY 1 + ) +GROUP BY 1, 2 +; ++--------------+-----+--------+ +| EXPR$0 | m1 | EXPR$2 | ++--------------+-----+--------+ +| 946684800000 | 1.0 | a | +| 946771200000 | 2.0 | b | ++--------------+-----+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)]) + LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[false]) + LogicalJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + LogicalProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], t2=[MIN($1)]) + LogicalProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5]) + LogicalFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)], druid=[logical]) + DruidProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[false], druid=[logical]) + DruidJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + DruidProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], t2=[MIN($1)], druid=[logical]) + DruidProject(t1=[+(CAST(TIME_FLOOR($0, 'PT1H')):BIGINT NOT NULL, 1)], m1=[$5], druid=[logical]) + DruidFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "dim3", "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING", "FLOAT", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1994-04-29T00:00:00.000Z/2020-01-11T00:00:00.001Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "(timestamp_floor(\"__time\",'PT1H',null,'UTC') + 1)", + "outputType" : "LONG" + } ], + "filter" : { + "type" : "equals", + "column" : "dim3", + "matchValueType" : "STRING", + "matchValue" : "b" + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "v0", + "outputName" : "d0", + "outputType" : "LONG" + } ], + "aggregations" : [ { + "type" : "floatMin", + "name" : "a0", + "fieldName" : "m1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"v0\" == \"j0.d0\") && (\"m1\" == \"j0.a0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "m1", + "outputName" : "d1", + "outputType" : "FLOAT" + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0", + "fieldName" : "dim3", + "maxStringBytes" : 100, + "aggregateMultipleValues" : false + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq new file mode 100644 index 000000000000..561ddd6a9fd1 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq @@ -0,0 +1,139 @@ +# testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql case-crc:76e87aaa +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set defaultTimeout 300000 +!set maxScatterGatherBytes 9223372036854775807 +!set plannerStrategy DECOUPLED +!set debug true +!set outputformat mysql +!use druidtest:/// +SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, true) FROM foo WHERE (TIME_FLOOR(__time, 'PT1H'), m1) IN + ( + SELECT TIME_FLOOR(__time, 'PT1H') AS t1, MIN(m1) AS t2 FROM foo WHERE dim3 = 'b' + AND __time BETWEEN '1994-04-29 00:00:00' AND '2020-01-11 00:00:00' GROUP BY 1 + ) +GROUP BY 1, 2 +; ++--------------+-----+--------+ +| EXPR$0 | m1 | EXPR$2 | ++--------------+-----+--------+ +| 946684800000 | 1.0 | [a, b] | +| 946771200000 | 2.0 | [b, c] | ++--------------+-----+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)]) + LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[true]) + LogicalJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + LogicalProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[TIME_FLOOR($0, 'PT1H')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}], t2=[MIN($1)]) + LogicalProject(t1=[TIME_FLOOR($0, 'PT1H')], m1=[$5]) + LogicalFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0, 1}], EXPR$2=[ANY_VALUE($2, $3, $4)], druid=[logical]) + DruidProject(EXPR$0=[CAST($0):BIGINT NOT NULL], m1=[$2], dim3=[$1], $f3=[100], $f4=[true], druid=[logical]) + DruidJoin(condition=[AND(=($3, $4), =($2, $5))], joinType=[inner]) + DruidProject(__time=[$0], dim3=[$3], m1=[$5], $f3=[TIME_FLOOR($0, 'PT1H')], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], t2=[MIN($1)], druid=[logical]) + DruidProject(t1=[TIME_FLOOR($0, 'PT1H')], m1=[$5], druid=[logical]) + DruidFilter(condition=[AND(=($3, 'b'), SEARCH($0, Sarg[[1994-04-29 00:00:00:TIMESTAMP(3)..2020-01-11 00:00:00:TIMESTAMP(3)]]:TIMESTAMP(3)))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "timestamp_floor(\"__time\",'PT1H',null,'UTC')", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "dim3", "m1", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING", "FLOAT", "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "timeseries", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1994-04-29T00:00:00.000Z/2020-01-11T00:00:00.001Z" ] + }, + "filter" : { + "type" : "equals", + "column" : "dim3", + "matchValueType" : "STRING", + "matchValue" : "b" + }, + "granularity" : "HOUR", + "aggregations" : [ { + "type" : "floatMin", + "name" : "a0", + "fieldName" : "m1" + } ] + } + }, + "rightPrefix" : "j0.", + "condition" : "((\"v0\" == \"j0.d0\") && (\"m1\" == \"j0.a0\"))", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "__time", + "outputName" : "d0", + "outputType" : "LONG" + }, { + "type" : "default", + "dimension" : "m1", + "outputName" : "d1", + "outputType" : "FLOAT" + } ], + "aggregations" : [ { + "type" : "stringAny", + "name" : "a0", + "fieldName" : "dim3", + "maxStringBytes" : 100, + "aggregateMultipleValues" : true + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq new file mode 100644 index 000000000000..1a7fa89a2572 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq @@ -0,0 +1,186 @@ +# testJoinWithInputRefCondition@NullHandling=sql case-crc:a8c0f240 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT COUNT(*) FILTER (WHERE FLOOR(100) NOT IN (SELECT m1 FROM foo)) FROM foo; ++--------+ +| EXPR$0 | ++--------+ +| 6 | ++--------+ +(1 row) + +!ok +LogicalAggregate(group=[{}], EXPR$0=[COUNT() FILTER $0]) + LogicalProject($f0=[OR(=($1, 0), AND(IS NULL($4), >=($2, $1)))]) + LogicalJoin(condition=[=(CAST(FLOOR(100)):FLOAT NOT NULL, $3)], joinType=[left]) + LogicalJoin(condition=[true], joinType=[inner]) + LogicalProject(DUMMY=[0]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($5)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{5}], i=[LITERAL_AGG(true)]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{}], EXPR$0=[COUNT() FILTER $0], druid=[logical]) + DruidProject($f0=[OR(=($1, 0), AND(IS NULL($4), >=($2, $1)))], druid=[logical]) + DruidJoin(condition=[=(CAST(FLOOR(100)):FLOAT NOT NULL, $3)], joinType=[left]) + DruidJoin(condition=[true], joinType=[inner]) + DruidProject(DUMMY=[0], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{}], c=[COUNT()], ck=[COUNT($5)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{5}], i=[LITERAL_AGG(true)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "timeseries", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "0", + "outputType" : "LONG" + } ], + "resultFormat" : "compactedList", + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "timeseries", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "count", + "name" : "a0" + }, { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a1" + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "null", + "column" : "m1" + } + }, + "name" : "a1" + } ] + } + }, + "rightPrefix" : "j0.", + "condition" : "1", + "joinType" : "INNER" + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "m1", + "outputName" : "d0", + "outputType" : "FLOAT" + } ], + "postAggregations" : [ { + "type" : "expression", + "name" : "a0", + "expression" : "1", + "outputType" : "LONG" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "_j0.", + "condition" : "(CAST(floor(100), 'DOUBLE') == \"_j0.d0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "or", + "fields" : [ { + "type" : "equals", + "column" : "j0.a0", + "matchValueType" : "LONG", + "matchValue" : 0 + }, { + "type" : "and", + "fields" : [ { + "type" : "null", + "column" : "_j0.a0" + }, { + "type" : "expression", + "expression" : "(\"j0.a1\" >= \"j0.a0\")" + } ] + } ] + }, + "name" : "a0" + } ] +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..0c24e3c8b6ee --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:5934672b +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..f03e87a6461e --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:2305f2ac +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq new file mode 100644 index 000000000000..eca55c3f7030 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq @@ -0,0 +1,132 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql case-crc:fb3f7888 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..cf22102a7f8a --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:914692f2 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..5fc2bb9cb8f4 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:8033cbb3 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..29a8ed8f68ca --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:82d2e4f7 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..7d7c49473ef3 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:6381fa96 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..9086994526c4 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -0,0 +1,141 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:5df88307 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..65964c4e24ba --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -0,0 +1,141 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:e1a970a4 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq new file mode 100644 index 000000000000..f84e845560ec --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq @@ -0,0 +1,138 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql case-crc:235e0aba +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..5d5862e40eb2 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,141 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:46643c1d +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..0c7479f6cbb1 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,141 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:fe4a2072 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..bf4ef3f6a30d --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,141 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:a5ec6a25 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..555a221b1d5d --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,141 @@ +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:78302b3a +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' AND "__time" >= '1999' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 WHERE t1.dim1 = '10.1' +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR]) + LogicalFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], druid=[logical]) + DruidFilter(condition=[AND(=($1, '10.1'), >=($0, 1999-01-01 00:00:00))]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "1999-01-01T00:00:00.000Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.v0\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..8a53e2530103 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:f40ac966 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..345462e02137 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:b06e5180 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq new file mode 100644 index 000000000000..550cedf244ae --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq @@ -0,0 +1,132 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql case-crc:113b89ee +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..7ada0b4ee919 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:1c4df7a3 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..1e37eb09ef25 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:c8b860e5 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..ee900fb9e451 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:47dc2525 +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..57a191af9ec5 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,135 @@ +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:28f1233a +# quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set enableJoinLeftTableScanDirect true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +with abc as +( + SELECT dim1, "__time", m1 from foo WHERE "dim1" = '10.1' +) +SELECT t1.dim1, t1."__time" from abc as t1 LEFT JOIN abc as t2 on t1.dim1 = t2.dim1 +; ++------+---------------------+ +| dim1 | __time | ++------+---------------------+ +| 10.1 | 2000-01-02 00:00:00 | ++------+---------------------+ +(1 row) + +!ok +LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1]) + LogicalJoin(condition=[=($0, $2)], joinType=[left]) + LogicalProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + LogicalProject(dim1=[$1]) + LogicalFilter(condition=[=($1, '10.1')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$1], druid=[logical]) + DruidJoin(condition=[=($0, $2)], joinType=[left]) + DruidProject(dim1=[CAST('10.1':VARCHAR):VARCHAR], __time=[$0], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidProject(dim1=[$1], druid=[logical]) + DruidFilter(condition=[=($1, '10.1')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "scan", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "__time", "v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "resultFormat" : "compactedList", + "filter" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "10.1" + }, + "columns" : [ "dim1" ], + "legacy" : false, + "columnTypes" : [ "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.dim1\")", + "joinType" : "LEFT" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "_v0", + "expression" : "'10.1'", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "__time", "_v0" ], + "legacy" : false, + "columnTypes" : [ "LONG", "STRING" ], + "granularity" : { + "type" : "all" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..e76aaeec1ec6 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq @@ -0,0 +1,140 @@ +# testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql case-crc:f2ca92ca +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq new file mode 100644 index 000000000000..83b81fbfe59c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq @@ -0,0 +1,140 @@ +# testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql case-crc:2261e315 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq new file mode 100644 index 000000000000..453393efc416 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq @@ -0,0 +1,137 @@ +# testUsingSubqueryWithExtractionFns@default@NullHandling=sql case-crc:e8b174d8 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..891d7d7f8090 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq @@ -0,0 +1,140 @@ +# testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql case-crc:c71da62e +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq new file mode 100644 index 000000000000..379e182f73c3 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq @@ -0,0 +1,140 @@ +# testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql case-crc:ea2bb732 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq new file mode 100644 index 000000000000..a23e14136025 --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq @@ -0,0 +1,140 @@ +# testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql case-crc:7443f782 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters true +!set enableRewriteJoinToFilter false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite true +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq new file mode 100644 index 000000000000..e1a05fcb0f0c --- /dev/null +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq @@ -0,0 +1,140 @@ +# testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql case-crc:6178ece2 +# quidem testcase reason: JOIN_FILTER_LOCATIONS +!set sqlQueryId dummy +!set defaultTimeout 300000 +!set debug true +!set maxScatterGatherBytes 9223372036854775807 +!set enableJoinFilterRewriteValueColumnFilters false +!set enableRewriteJoinToFilter true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set plannerStrategy DECOUPLED +!set enableJoinFilterRewrite false +!set outputformat mysql +!use druidtest:/// +SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; ++------+--------+ +| dim2 | EXPR$1 | ++------+--------+ +| a | 2 | +| abc | 1 | ++------+--------+ +(2 rows) + +!ok +LogicalAggregate(group=[{0}], EXPR$1=[COUNT()]) + LogicalJoin(condition=[=($1, $2)], joinType=[inner]) + LogicalProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)]) + LogicalTableScan(table=[[druid, foo]]) + LogicalAggregate(group=[{0}]) + LogicalProject(EXPR$0=[SUBSTRING($1, 1, 1)]) + LogicalFilter(condition=[<>($1, '')]) + LogicalTableScan(table=[[druid, foo]]) + +!logicalPlan +DruidAggregate(group=[{0}], EXPR$1=[COUNT()], druid=[logical]) + DruidJoin(condition=[=($1, $2)], joinType=[inner]) + DruidProject(dim2=[$2], $f1=[SUBSTRING($2, 1, 1)], druid=[logical]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + DruidAggregate(group=[{0}], druid=[logical]) + DruidProject(EXPR$0=[SUBSTRING($1, 1, 1)], druid=[logical]) + DruidFilter(condition=[<>($1, '')]) + DruidTableScan(table=[[druid, foo]], druid=[logical]) + +!druidPlan +{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "join", + "left" : { + "type" : "query", + "query" : { + "queryType" : "scan", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "virtualColumns" : [ { + "type" : "expression", + "name" : "v0", + "expression" : "substring(\"dim2\", 0, 1)", + "outputType" : "STRING" + } ], + "resultFormat" : "compactedList", + "columns" : [ "dim2", "v0" ], + "legacy" : false, + "columnTypes" : [ "STRING", "STRING" ], + "granularity" : { + "type" : "all" + } + } + }, + "right" : { + "type" : "query", + "query" : { + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "foo" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "not", + "field" : { + "type" : "equals", + "column" : "dim1", + "matchValueType" : "STRING", + "matchValue" : "" + } + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "extraction", + "dimension" : "dim1", + "outputName" : "d0", + "outputType" : "STRING", + "extractionFn" : { + "type" : "substring", + "index" : 0, + "length" : 1 + } + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } + } + }, + "rightPrefix" : "j0.", + "condition" : "(\"v0\" == \"j0.d0\")", + "joinType" : "INNER" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "dim2", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "count", + "name" : "a0" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +} +!nativePlan From 3132c12781c6ea99f6d462081ad9c7d9c1a6a9bf Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 14 May 2024 07:36:07 +0000 Subject: [PATCH 003/122] remove unnecessary \\ --- .../org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 643f158c09fe..2e136d525001 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -301,7 +301,7 @@ private void setConfig(ExtensionContext context) public String buildTestCaseName(ExtensionContext context) { List names = new ArrayList(); - Pattern pattern = Pattern.compile("\\([^\\)]*\\)"); + Pattern pattern = Pattern.compile("\\([^)]*\\)"); // this will add all name pieces - except the "last" which would be the // Class level name do { From b7b73fa7fe507e36ee18b19486886bfa0ee5f71e Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 14 May 2024 08:53:01 +0000 Subject: [PATCH 004/122] fix context key order --- .../apache/druid/sql/calcite/QueryTestRunner.java | 11 +++++------ .../testCommaJoinLeftFunction.iq | 8 ++++---- ...opNOnInnerJoinWithLimit@NullHandling=default.iq | 10 +++++----- ...actTopNOnInnerJoinWithLimit@NullHandling=sql.iq | 10 +++++----- ...ataSources@all_disabled@NullHandling=default.iq | 12 ++++++------ ...ineDataSources@all_disabled@NullHandling=sql.iq | 12 ++++++------ ...DataSources@all_enabled@NullHandling=default.iq | 12 ++++++------ ...lineDataSources@all_enabled@NullHandling=sql.iq | 12 ++++++------ ...lineDataSources@default@NullHandling=default.iq | 8 ++++---- ...woInlineDataSources@default@NullHandling=sql.iq | 8 ++++---- ...n-value-column_disabled@NullHandling=default.iq | 12 ++++++------ ...er-on-value-column_disabled@NullHandling=sql.iq | 12 ++++++------ ...ilter-rewrites-disabled@NullHandling=default.iq | 12 ++++++------ ...es@filter-rewrites-disabled@NullHandling=sql.iq | 12 ++++++------ ...Sources@filter-rewrites@NullHandling=default.iq | 12 ++++++------ ...DataSources@filter-rewrites@NullHandling=sql.iq | 12 ++++++------ ...aSources@join-to-filter@NullHandling=default.iq | 12 ++++++------ ...eDataSources@join-to-filter@NullHandling=sql.iq | 12 ++++++------ ...inCastLeft@all_disabled@NullHandling=default.iq | 12 ++++++------ ...erJoinCastLeft@all_disabled@NullHandling=sql.iq | 12 ++++++------ ...oinCastLeft@all_enabled@NullHandling=default.iq | 12 ++++++------ ...nerJoinCastLeft@all_enabled@NullHandling=sql.iq | 12 ++++++------ ...nerJoinCastLeft@default@NullHandling=default.iq | 8 ++++---- ...stInnerJoinCastLeft@default@NullHandling=sql.iq | 8 ++++---- ...n-value-column_disabled@NullHandling=default.iq | 12 ++++++------ ...er-on-value-column_disabled@NullHandling=sql.iq | 12 ++++++------ ...ilter-rewrites-disabled@NullHandling=default.iq | 12 ++++++------ ...ft@filter-rewrites-disabled@NullHandling=sql.iq | 12 ++++++------ ...astLeft@filter-rewrites@NullHandling=default.iq | 12 ++++++------ ...oinCastLeft@filter-rewrites@NullHandling=sql.iq | 12 ++++++------ ...CastLeft@join-to-filter@NullHandling=default.iq | 12 ++++++------ ...JoinCastLeft@join-to-filter@NullHandling=sql.iq | 12 ++++++------ .../testInnerJoinLeftFunction@all_disabled.iq | 12 ++++++------ .../testInnerJoinLeftFunction@all_enabled.iq | 12 ++++++------ .../testInnerJoinLeftFunction@default.iq | 8 ++++---- ...LeftFunction@filter-on-value-column_disabled.iq | 12 ++++++------ ...nerJoinLeftFunction@filter-rewrites-disabled.iq | 12 ++++++------ .../testInnerJoinLeftFunction@filter-rewrites.iq | 12 ++++++------ .../testInnerJoinLeftFunction@join-to-filter.iq | 12 ++++++------ ...rectAccess@all_disabled@NullHandling=default.iq | 14 +++++++------- ...ftDirectAccess@all_disabled@NullHandling=sql.iq | 14 +++++++------- ...irectAccess@all_enabled@NullHandling=default.iq | 14 +++++++------- ...eftDirectAccess@all_enabled@NullHandling=sql.iq | 14 +++++++------- ...eftDirectAccess@default@NullHandling=default.iq | 10 +++++----- ...ithLeftDirectAccess@default@NullHandling=sql.iq | 10 +++++----- ...n-value-column_disabled@NullHandling=default.iq | 14 +++++++------- ...er-on-value-column_disabled@NullHandling=sql.iq | 14 +++++++------- ...ilter-rewrites-disabled@NullHandling=default.iq | 14 +++++++------- ...ss@filter-rewrites-disabled@NullHandling=sql.iq | 14 +++++++------- ...tAccess@filter-rewrites@NullHandling=default.iq | 14 +++++++------- ...irectAccess@filter-rewrites@NullHandling=sql.iq | 14 +++++++------- ...ctAccess@join-to-filter@NullHandling=default.iq | 14 +++++++------- ...DirectAccess@join-to-filter@NullHandling=sql.iq | 14 +++++++------- ...rectAccess@all_disabled@NullHandling=default.iq | 14 +++++++------- ...ftDirectAccess@all_disabled@NullHandling=sql.iq | 14 +++++++------- ...irectAccess@all_enabled@NullHandling=default.iq | 14 +++++++------- ...eftDirectAccess@all_enabled@NullHandling=sql.iq | 14 +++++++------- ...eftDirectAccess@default@NullHandling=default.iq | 10 +++++----- ...ithLeftDirectAccess@default@NullHandling=sql.iq | 10 +++++----- ...n-value-column_disabled@NullHandling=default.iq | 14 +++++++------- ...er-on-value-column_disabled@NullHandling=sql.iq | 14 +++++++------- ...ilter-rewrites-disabled@NullHandling=default.iq | 14 +++++++------- ...ss@filter-rewrites-disabled@NullHandling=sql.iq | 14 +++++++------- ...tAccess@filter-rewrites@NullHandling=default.iq | 14 +++++++------- ...irectAccess@filter-rewrites@NullHandling=sql.iq | 14 +++++++------- ...ctAccess@join-to-filter@NullHandling=default.iq | 14 +++++++------- ...DirectAccess@join-to-filter@NullHandling=sql.iq | 14 +++++++------- .../testInnerJoinQueryOfLookup@all_disabled.iq | 12 ++++++------ .../testInnerJoinQueryOfLookup@all_enabled.iq | 12 ++++++------ .../testInnerJoinQueryOfLookup@default.iq | 8 ++++---- ...ueryOfLookup@filter-on-value-column_disabled.iq | 12 ++++++------ ...erJoinQueryOfLookup@filter-rewrites-disabled.iq | 12 ++++++------ .../testInnerJoinQueryOfLookup@filter-rewrites.iq | 12 ++++++------ .../testInnerJoinQueryOfLookup@join-to-filter.iq | 12 ++++++------ ...InnerJoinQueryOfLookupRemovable@all_disabled.iq | 12 ++++++------ ...tInnerJoinQueryOfLookupRemovable@all_enabled.iq | 12 ++++++------ .../testInnerJoinQueryOfLookupRemovable@default.iq | 8 ++++---- ...kupRemovable@filter-on-value-column_disabled.iq | 12 ++++++------ ...ryOfLookupRemovable@filter-rewrites-disabled.iq | 12 ++++++------ ...erJoinQueryOfLookupRemovable@filter-rewrites.iq | 12 ++++++------ ...nerJoinQueryOfLookupRemovable@join-to-filter.iq | 12 ++++++------ ...meseriesWithFloorOnTime@NullHandling=default.iq | 8 ++++---- ...OfTimeseriesWithFloorOnTime@NullHandling=sql.iq | 8 ++++---- ...AggregateMultipleValues@NullHandling=default.iq | 8 ++++---- ...thNoAggregateMultipleValues@NullHandling=sql.iq | 8 ++++---- ...meseriesWithFloorOnTime@NullHandling=default.iq | 8 ++++---- ...OnTimeseriesWithFloorOnTime@NullHandling=sql.iq | 8 ++++---- ...inWithInputRefCondition@NullHandling=default.iq | 8 ++++---- ...stJoinWithInputRefCondition@NullHandling=sql.iq | 8 ++++---- ...rectAccess@all_disabled@NullHandling=default.iq | 14 +++++++------- ...ftDirectAccess@all_disabled@NullHandling=sql.iq | 14 +++++++------- ...irectAccess@all_enabled@NullHandling=default.iq | 14 +++++++------- ...eftDirectAccess@all_enabled@NullHandling=sql.iq | 14 +++++++------- ...eftDirectAccess@default@NullHandling=default.iq | 10 +++++----- ...ithLeftDirectAccess@default@NullHandling=sql.iq | 10 +++++----- ...n-value-column_disabled@NullHandling=default.iq | 14 +++++++------- ...er-on-value-column_disabled@NullHandling=sql.iq | 14 +++++++------- ...ilter-rewrites-disabled@NullHandling=default.iq | 14 +++++++------- ...ss@filter-rewrites-disabled@NullHandling=sql.iq | 14 +++++++------- ...tAccess@filter-rewrites@NullHandling=default.iq | 14 +++++++------- ...irectAccess@filter-rewrites@NullHandling=sql.iq | 14 +++++++------- ...ctAccess@join-to-filter@NullHandling=default.iq | 14 +++++++------- ...DirectAccess@join-to-filter@NullHandling=sql.iq | 14 +++++++------- ...rectAccess@all_disabled@NullHandling=default.iq | 14 +++++++------- ...ftDirectAccess@all_disabled@NullHandling=sql.iq | 14 +++++++------- ...irectAccess@all_enabled@NullHandling=default.iq | 14 +++++++------- ...eftDirectAccess@all_enabled@NullHandling=sql.iq | 14 +++++++------- ...eftDirectAccess@default@NullHandling=default.iq | 10 +++++----- ...ithLeftDirectAccess@default@NullHandling=sql.iq | 10 +++++----- ...n-value-column_disabled@NullHandling=default.iq | 14 +++++++------- ...er-on-value-column_disabled@NullHandling=sql.iq | 14 +++++++------- ...ilter-rewrites-disabled@NullHandling=default.iq | 14 +++++++------- ...ss@filter-rewrites-disabled@NullHandling=sql.iq | 14 +++++++------- ...tAccess@filter-rewrites@NullHandling=default.iq | 14 +++++++------- ...irectAccess@filter-rewrites@NullHandling=sql.iq | 14 +++++++------- ...ctAccess@join-to-filter@NullHandling=default.iq | 14 +++++++------- ...DirectAccess@join-to-filter@NullHandling=sql.iq | 14 +++++++------- ...rectAccess@all_disabled@NullHandling=default.iq | 14 +++++++------- ...ftDirectAccess@all_disabled@NullHandling=sql.iq | 14 +++++++------- ...irectAccess@all_enabled@NullHandling=default.iq | 14 +++++++------- ...eftDirectAccess@all_enabled@NullHandling=sql.iq | 14 +++++++------- ...eftDirectAccess@default@NullHandling=default.iq | 10 +++++----- ...ithLeftDirectAccess@default@NullHandling=sql.iq | 10 +++++----- ...n-value-column_disabled@NullHandling=default.iq | 14 +++++++------- ...er-on-value-column_disabled@NullHandling=sql.iq | 14 +++++++------- ...ilter-rewrites-disabled@NullHandling=default.iq | 14 +++++++------- ...ss@filter-rewrites-disabled@NullHandling=sql.iq | 14 +++++++------- ...tAccess@filter-rewrites@NullHandling=default.iq | 14 +++++++------- ...irectAccess@filter-rewrites@NullHandling=sql.iq | 14 +++++++------- ...ctAccess@join-to-filter@NullHandling=default.iq | 14 +++++++------- ...DirectAccess@join-to-filter@NullHandling=sql.iq | 14 +++++++------- ...tJoinSubqueryWithSelectorFilter@all_disabled.iq | 14 +++++++------- ...ftJoinSubqueryWithSelectorFilter@all_enabled.iq | 14 +++++++------- ...stLeftJoinSubqueryWithSelectorFilter@default.iq | 10 +++++----- ...lectorFilter@filter-on-value-column_disabled.iq | 14 +++++++------- ...yWithSelectorFilter@filter-rewrites-disabled.iq | 14 +++++++------- ...inSubqueryWithSelectorFilter@filter-rewrites.iq | 14 +++++++------- ...oinSubqueryWithSelectorFilter@join-to-filter.iq | 14 +++++++------- ...WithNonSortedOrUniqueDictionary@all_disabled.iq | 12 ++++++------ ...gWithNonSortedOrUniqueDictionary@all_enabled.iq | 12 ++++++------ ...tringWithNonSortedOrUniqueDictionary@default.iq | 8 ++++---- ...ueDictionary@filter-on-value-column_disabled.iq | 12 ++++++------ ...dOrUniqueDictionary@filter-rewrites-disabled.iq | 12 ++++++------ ...hNonSortedOrUniqueDictionary@filter-rewrites.iq | 12 ++++++------ ...thNonSortedOrUniqueDictionary@join-to-filter.iq | 12 ++++++------ ...tedOrUniqueDictionaryOrderByDim@all_disabled.iq | 12 ++++++------ ...rtedOrUniqueDictionaryOrderByDim@all_enabled.iq | 12 ++++++------ ...onSortedOrUniqueDictionaryOrderByDim@default.iq | 8 ++++---- ...ryOrderByDim@filter-on-value-column_disabled.iq | 12 ++++++------ ...ictionaryOrderByDim@filter-rewrites-disabled.iq | 12 ++++++------ ...OrUniqueDictionaryOrderByDim@filter-rewrites.iq | 12 ++++++------ ...dOrUniqueDictionaryOrderByDim@join-to-filter.iq | 12 ++++++------ ...ractionFns@all_disabled@NullHandling=default.iq | 12 ++++++------ ...hExtractionFns@all_disabled@NullHandling=sql.iq | 12 ++++++------ ...tractionFns@all_enabled@NullHandling=default.iq | 12 ++++++------ ...thExtractionFns@all_enabled@NullHandling=sql.iq | 12 ++++++------ ...thExtractionFns@default@NullHandling=default.iq | 8 ++++---- ...ryWithExtractionFns@default@NullHandling=sql.iq | 8 ++++---- ...n-value-column_disabled@NullHandling=default.iq | 12 ++++++------ ...er-on-value-column_disabled@NullHandling=sql.iq | 12 ++++++------ ...ilter-rewrites-disabled@NullHandling=default.iq | 12 ++++++------ ...ns@filter-rewrites-disabled@NullHandling=sql.iq | 12 ++++++------ ...tionFns@filter-rewrites@NullHandling=default.iq | 12 ++++++------ ...tractionFns@filter-rewrites@NullHandling=sql.iq | 12 ++++++------ ...ctionFns@join-to-filter@NullHandling=default.iq | 12 ++++++------ ...xtractionFns@join-to-filter@NullHandling=sql.iq | 12 ++++++------ ...lColumnOnMVFilterJoinExpression@all_disabled.iq | 12 ++++++------ ...alColumnOnMVFilterJoinExpression@all_enabled.iq | 12 ++++++------ ...irtualColumnOnMVFilterJoinExpression@default.iq | 8 ++++---- ...inExpression@filter-on-value-column_disabled.iq | 12 ++++++------ ...ilterJoinExpression@filter-rewrites-disabled.iq | 12 ++++++------ ...lumnOnMVFilterJoinExpression@filter-rewrites.iq | 12 ++++++------ ...olumnOnMVFilterJoinExpression@join-to-filter.iq | 12 ++++++------ ...mnOnMVFilterMultiJoinExpression@all_disabled.iq | 12 ++++++------ ...umnOnMVFilterMultiJoinExpression@all_enabled.iq | 12 ++++++------ ...lColumnOnMVFilterMultiJoinExpression@default.iq | 8 ++++---- ...inExpression@filter-on-value-column_disabled.iq | 12 ++++++------ ...MultiJoinExpression@filter-rewrites-disabled.iq | 12 ++++++------ ...nMVFilterMultiJoinExpression@filter-rewrites.iq | 12 ++++++------ ...OnMVFilterMultiJoinExpression@join-to-filter.iq | 12 ++++++------ ...pingAndOtherAggregators@NullHandling=default.iq | 8 ++++---- ...GroupingAndOtherAggregators@NullHandling=sql.iq | 8 ++++---- ...LimitPushdownExtraction@NullHandling=default.iq | 8 ++++---- ...upByLimitPushdownExtraction@NullHandling=sql.iq | 8 ++++---- .../testGroupBySortPushDown.iq | 8 ++++---- ...nGroupByTimeFloorAndDim@NullHandling=default.iq | 8 ++++---- ...DimOnGroupByTimeFloorAndDim@NullHandling=sql.iq | 8 ++++---- .../testGroupByWithLiteralInSubqueryGrouping.iq | 10 +++++----- ...herAggregatorsUsingJoin@NullHandling=default.iq | 8 ++++---- ...ndOtherAggregatorsUsingJoin@NullHandling=sql.iq | 8 ++++---- ...ityProjectDoesNotRename@NullHandling=default.iq | 8 ++++---- ...dentityProjectDoesNotRename@NullHandling=sql.iq | 8 ++++---- ...stRepeatedIdenticalVirtualExpressionGrouping.iq | 8 ++++---- ...ypeMismatchWithLiterals@NullHandling=default.iq | 8 ++++---- ...eryTypeMismatchWithLiterals@NullHandling=sql.iq | 8 ++++---- ...indowingWithScanAndSort@NullHandling=default.iq | 8 ++++---- ...estWindowingWithScanAndSort@NullHandling=sql.iq | 8 ++++---- 197 files changed, 1157 insertions(+), 1158 deletions(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java index a8974fb164e9..5873659927f1 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedMap; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.sql.SqlExplainFormat; @@ -662,15 +663,13 @@ public QueryTestRunner(QueryTestBuilder builder) DruidQTestInfo iqTestInfo = config.getQTestInfo(); if (iqTestInfo != null) { QTestCase qt = new QTestCase(iqTestInfo); - Map queryContext = builder.getQueryContext(); + Map queryContext = ImmutableSortedMap.naturalOrder() + .putAll(builder.getQueryContext()) + .putAll(builder.plannerConfig.getNonDefaultAsQueryContext()) + .build(); for (Entry entry : queryContext.entrySet()) { qt.println(StringUtils.format("!set %s %s", entry.getKey(), entry.getValue())); } - Map queryContext1 = builder.plannerConfig.getNonDefaultAsQueryContext(); - for (Entry entry : queryContext1.entrySet()) { - qt.println(StringUtils.format("!set %s %s", entry.getKey(), entry.getValue())); - } - qt.println("!set outputformat mysql"); qt.println("!use " + builder.config.queryFramework().getDruidTestURI()); diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq index 19a189db3708..7cbc21bd5513 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testCommaJoinLeftFunction.iq @@ -1,11 +1,11 @@ -# testCommaJoinLeftFunction case-crc:30bb2791 +# testCommaJoinLeftFunction case-crc:0f0b74b8 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq index a784c1fd3d03..b3c4475391ce 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq @@ -1,12 +1,12 @@ -# testExactTopNOnInnerJoinWithLimit@NullHandling=default case-crc:c3f897f8 +# testExactTopNOnInnerJoinWithLimit@NullHandling=default case-crc:d28d4632 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set useApproximateTopN false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy +!set useApproximateTopN false !set outputformat mysql !use druidtest:///?MinTopNThreshold=1 select f1."dim4", sum("m1") from numfoo f1 inner join ( diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq index 8ba93f763e74..23f6365d1fed 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq @@ -1,12 +1,12 @@ -# testExactTopNOnInnerJoinWithLimit@NullHandling=sql case-crc:c3f897f8 +# testExactTopNOnInnerJoinWithLimit@NullHandling=sql case-crc:d28d4632 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set useApproximateTopN false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy +!set useApproximateTopN false !set outputformat mysql !use druidtest:///?MinTopNThreshold=1 select f1."dim4", sum("m1") from numfoo f1 inner join ( diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq index aa340691cc2c..f9c384b6ad2f 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default case-crc:7916e17e +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=default case-crc:9802d63b # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq index 356be34dc392..99b6b8653fc4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql case-crc:7916e17e +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_disabled@NullHandling=sql case-crc:9802d63b # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq index 6c43fc799d24..191120de0f7e 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default case-crc:a79ba14e +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=default case-crc:06fe6714 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq index ddc2b0ecdd0a..8b2a57ef9c5e 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql case-crc:a79ba14e +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@all_enabled@NullHandling=sql case-crc:06fe6714 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq index 276e69eb7c1d..c327a62751a9 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default case-crc:d168257e +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=default case-crc:2e780a44 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq index f4c6125d1bba..404071a7b2a4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql case-crc:d168257e +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@default@NullHandling=sql case-crc:2e780a44 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq index 6e3914f40ffe..614328ce40aa 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default case-crc:dc96fa7f +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=default case-crc:ec1996e8 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq index 1969ce07a445..f100ba33fd51 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql case-crc:dc96fa7f +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-on-value-column_disabled@NullHandling=sql case-crc:ec1996e8 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq index f478bc1b7006..03d22e1c0d5a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default case-crc:7936703f +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=default case-crc:ddcd7387 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq index 4392c091c59a..ad90e641a99b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql case-crc:7936703f +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites-disabled@NullHandling=sql case-crc:ddcd7387 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq index f053d1aaf892..bfb82dce17d6 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default case-crc:b5081d1c +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=default case-crc:cf16e9a6 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq index ff701602a1b5..a2866beb2ed7 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql case-crc:b5081d1c +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@filter-rewrites@NullHandling=sql case-crc:cf16e9a6 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq index 968c7766fbd8..da25c7a65241 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default case-crc:c0c596f8 +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=default case-crc:830604f9 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq index 224c50949638..20124df76e2c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql case-crc:c0c596f8 +# testGroupByOverGroupByOverInnerJoinOnTwoInlineDataSources@join-to-filter@NullHandling=sql case-crc:830604f9 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq index 8a2cf66e10cf..4581d237a812 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@all_disabled@NullHandling=default case-crc:532afc53 +# testInnerJoinCastLeft@all_disabled@NullHandling=default case-crc:8cd9e460 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq index f6e767759e27..588444b911a6 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@all_disabled@NullHandling=sql case-crc:532afc53 +# testInnerJoinCastLeft@all_disabled@NullHandling=sql case-crc:8cd9e460 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq index 1bd3e860324a..98f34424e83a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@all_enabled@NullHandling=default case-crc:615b6635 +# testInnerJoinCastLeft@all_enabled@NullHandling=default case-crc:57e7eb69 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq index b8333e400f07..5d6e4aa29414 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@all_enabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@all_enabled@NullHandling=sql case-crc:615b6635 +# testInnerJoinCastLeft@all_enabled@NullHandling=sql case-crc:57e7eb69 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq index c91afac87da7..85dffdbac3d7 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testInnerJoinCastLeft@default@NullHandling=default case-crc:fda58dbf +# testInnerJoinCastLeft@default@NullHandling=default case-crc:55da2e8b # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq index 5e748b1bc6b7..28cc7fc8f792 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@default@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testInnerJoinCastLeft@default@NullHandling=sql case-crc:fda58dbf +# testInnerJoinCastLeft@default@NullHandling=sql case-crc:55da2e8b # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq index d03641f46e32..b787c9f6b2ca 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default case-crc:951d4374 +# testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=default case-crc:7f9dea41 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq index 0d87b27ef7a3..3ca909dbbe7a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql case-crc:951d4374 +# testInnerJoinCastLeft@filter-on-value-column_disabled@NullHandling=sql case-crc:7f9dea41 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq index 39346aec7909..23363f31d947 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default case-crc:403f05e1 +# testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=default case-crc:1723b06b # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq index aee845662ba5..20f06ae17de9 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql case-crc:403f05e1 +# testInnerJoinCastLeft@filter-rewrites-disabled@NullHandling=sql case-crc:1723b06b # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq index 74fb0a1e3f51..7ec2378fe2a2 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@filter-rewrites@NullHandling=default case-crc:9b73e9cb +# testInnerJoinCastLeft@filter-rewrites@NullHandling=default case-crc:fb3b0939 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq index 0612cdc7c69f..fca3275f788c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@filter-rewrites@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@filter-rewrites@NullHandling=sql case-crc:9b73e9cb +# testInnerJoinCastLeft@filter-rewrites@NullHandling=sql case-crc:fb3b0939 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq index 4cd32a7d9361..a17fe3fbce47 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@join-to-filter@NullHandling=default case-crc:032c945b +# testInnerJoinCastLeft@join-to-filter@NullHandling=default case-crc:2b873437 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq index b5fb9ad3390c..94cf34202276 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinCastLeft@join-to-filter@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testInnerJoinCastLeft@join-to-filter@NullHandling=sql case-crc:032c945b +# testInnerJoinCastLeft@join-to-filter@NullHandling=sql case-crc:2b873437 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.m1, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq index fbdc5c4f6153..e5bd0124fcf3 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinLeftFunction@all_disabled case-crc:635a6dda +# testInnerJoinLeftFunction@all_disabled case-crc:a8494934 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq index 15c92578854c..659a20e45337 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@all_enabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinLeftFunction@all_enabled case-crc:7d493ec9 +# testInnerJoinLeftFunction@all_enabled case-crc:51164f2b # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq index a50455563bcb..44f2c01da3cc 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@default.iq @@ -1,11 +1,11 @@ -# testInnerJoinLeftFunction@default case-crc:00943b4a +# testInnerJoinLeftFunction@default case-crc:cbea2a3d # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq index d4873e34d87f..cb70cfd6786c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-on-value-column_disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinLeftFunction@filter-on-value-column_disabled case-crc:70beb233 +# testInnerJoinLeftFunction@filter-on-value-column_disabled case-crc:e04823f2 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq index af34a46f2d65..c6a24964fbf3 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites-disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinLeftFunction@filter-rewrites-disabled case-crc:da4555b7 +# testInnerJoinLeftFunction@filter-rewrites-disabled case-crc:49782da2 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq index 03fd1fea1489..238d9fcddb9b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@filter-rewrites.iq @@ -1,14 +1,14 @@ -# testInnerJoinLeftFunction@filter-rewrites case-crc:22eb8e52 +# testInnerJoinLeftFunction@filter-rewrites case-crc:88fbe7a0 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq index f4791a842f69..f5a8444cd952 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinLeftFunction@join-to-filter.iq @@ -1,14 +1,14 @@ -# testInnerJoinLeftFunction@join-to-filter case-crc:90b51ec9 +# testInnerJoinLeftFunction@join-to-filter case-crc:d8b2c6e1 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo.dim1, foo.dim2, l.k, l.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq index bfe4a888f9ed..b673cb7d7224 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:31aaba25 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:c8387bad # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq index a6ce3c85c6c2..eecc02c743b2 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:31aaba25 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:c8387bad # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq index f05512baf05f..4067edb5bcbe 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:22a7ed95 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:3117d34a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq index ee580a34db1e..1996db4d5d07 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:22a7ed95 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:3117d34a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq index cf4014bd8d58..6062daaf9a6b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq @@ -1,12 +1,12 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default case-crc:fe77c11d +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default case-crc:8573b42e # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq index 7bbf3f0b0481..538c16122552 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq @@ -1,12 +1,12 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql case-crc:fe77c11d +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql case-crc:8573b42e # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq index 91309ae20b7b..5c905acff34e 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:c115dcb0 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:aba2d8ac # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq index 71f7bb4f85d0..3fb25cee4120 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:c115dcb0 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:aba2d8ac # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq index e3f639e243a1..273ab55d1a06 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:466c2dda +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:6bf67b17 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq index ba8f07a1b113..92e569b8a862 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:466c2dda +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:6bf67b17 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq index b3c0ab2c0f9b..fb0b6d4fa2a6 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:8b226734 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:bf731e2a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq index 071ca6b988bf..3f7bf11759ce 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:8b226734 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:bf731e2a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq index 892aa79987d6..c8718ddff9be 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:36ee0be3 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:a0b23b27 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq index bcaa4ae3a72e..afdb2ecd8892 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:36ee0be3 +# testInnerJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:a0b23b27 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq index c2010de170dc..bb7b19ce9db0 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:0c7abe39 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:bc06e265 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq index b9b2e88d446e..585ba59b372a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:0c7abe39 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:bc06e265 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq index 8e3ac0a20c62..589d7222a598 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:e167e948 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:19717e46 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq index d4801c32301e..83c9355ff1b7 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:e167e948 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:19717e46 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq index 9a984f60c234..7df3873f942f 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq @@ -1,12 +1,12 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default case-crc:ca2c56e9 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default case-crc:cddd4617 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq index ac546d393156..51c017fa0888 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq @@ -1,12 +1,12 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql case-crc:ca2c56e9 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql case-crc:cddd4617 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq index eeb19b299173..a5611b67b169 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:012eaa97 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:e72bd235 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq index 1a87891288c3..a30b72faf1a4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:012eaa97 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:e72bd235 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq index 943df21f27d0..a9dc43455726 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:39af5216 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:50015dc5 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq index 12291f8b1edf..b068148f553c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:39af5216 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:50015dc5 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq index 0108161cc01a..2b4c57c3931f 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:ec74956b +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:ae732a4e # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq index 24a6d8c44e9e..7671fed30ede 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:ec74956b +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:ae732a4e # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq index 4069023b634e..90f380fbc429 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:080e87b6 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:a3f1513a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq index 4d4fb88efd4e..03bf0675958e 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:080e87b6 +# testInnerJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:a3f1513a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq index dcd8f81055f7..fbff0879b5cd 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookup@all_disabled case-crc:1357fef3 +# testInnerJoinQueryOfLookup@all_disabled case-crc:d41a4a0d # quidem testcase reason: FINALIZING_FIELD_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.v, t1.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq index 227cd5975ed9..3409cd00e568 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@all_enabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookup@all_enabled case-crc:33c35499 +# testInnerJoinQueryOfLookup@all_enabled case-crc:93392df4 # quidem testcase reason: FINALIZING_FIELD_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.v, t1.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq index cdf3d768f81b..0c4f8abd6f92 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@default.iq @@ -1,11 +1,11 @@ -# testInnerJoinQueryOfLookup@default case-crc:fdc22455 +# testInnerJoinQueryOfLookup@default case-crc:ee151062 # quidem testcase reason: FINALIZING_FIELD_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.v, t1.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq index ba934275555a..3d61195af638 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-on-value-column_disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookup@filter-on-value-column_disabled case-crc:223bb3ea +# testInnerJoinQueryOfLookup@filter-on-value-column_disabled case-crc:dbd4147e # quidem testcase reason: FINALIZING_FIELD_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.v, t1.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq index ce93b8d50fe3..30b667f33cb4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites-disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookup@filter-rewrites-disabled case-crc:90a7efad +# testInnerJoinQueryOfLookup@filter-rewrites-disabled case-crc:57dd8dfa # quidem testcase reason: FINALIZING_FIELD_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.v, t1.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq index 3fde71a60692..279e3a590c0a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@filter-rewrites.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookup@filter-rewrites case-crc:41899e3c +# testInnerJoinQueryOfLookup@filter-rewrites case-crc:10d0367d # quidem testcase reason: FINALIZING_FIELD_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.v, t1.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq index 9c7807a4f67e..52c6bc9980ae 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookup@join-to-filter.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookup@join-to-filter case-crc:9a602cc7 +# testInnerJoinQueryOfLookup@join-to-filter case-crc:967213e2 # quidem testcase reason: FINALIZING_FIELD_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.v, t1.v diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq index a1153a61a6c9..c8d92aff808a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookupRemovable@all_disabled case-crc:25b83d15 +# testInnerJoinQueryOfLookupRemovable@all_disabled case-crc:f9e61e4e # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.sk diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq index e5a886338fad..95cdbe258584 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@all_enabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookupRemovable@all_enabled case-crc:c65c79d6 +# testInnerJoinQueryOfLookupRemovable@all_enabled case-crc:110c167a # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.sk diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq index c2df57120deb..3fb227e9c34e 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@default.iq @@ -1,11 +1,11 @@ -# testInnerJoinQueryOfLookupRemovable@default case-crc:c025c7ff +# testInnerJoinQueryOfLookupRemovable@default case-crc:56875820 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.sk diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq index 3712e2f8bfeb..94433129db0f 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled case-crc:f30ce07a +# testInnerJoinQueryOfLookupRemovable@filter-on-value-column_disabled case-crc:1624eceb # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.sk diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq index 1dfd6567a787..87be9556a359 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled case-crc:5385c408 +# testInnerJoinQueryOfLookupRemovable@filter-rewrites-disabled case-crc:d2cf1525 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.sk diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq index dcc17c4ec78a..207003ad6f36 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@filter-rewrites.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookupRemovable@filter-rewrites case-crc:a5134bce +# testInnerJoinQueryOfLookupRemovable@filter-rewrites case-crc:f6c15132 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.sk diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq index 908086df3c8e..c2fc24a63075 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testInnerJoinQueryOfLookupRemovable@join-to-filter.iq @@ -1,14 +1,14 @@ -# testInnerJoinQueryOfLookupRemovable@join-to-filter case-crc:20d8db5e +# testInnerJoinQueryOfLookupRemovable@join-to-filter case-crc:dfb4dee9 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, dim2, t1.sk diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq index 016c05bcaf46..c395fdf3ba99 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default case-crc:a9e23ec5 +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=default case-crc:6c775193 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq index b88ec4f6e781..4c8cbccbacfd 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql case-crc:a9e23ec5 +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTime@NullHandling=sql case-crc:6c775193 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq index 90db281aa10f..5478c6b9381a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default case-crc:b873fcbb +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=default case-crc:86f4769d # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, false) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq index 8941dbd89388..5e815f2c3cbf 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql case-crc:b873fcbb +# testJoinOnGroupByInsteadOfTimeseriesWithFloorOnTimeWithNoAggregateMultipleValues@NullHandling=sql case-crc:86f4769d # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, false) FROM foo WHERE (CAST(TIME_FLOOR(__time, 'PT1H') AS BIGINT) + 1, m1) IN diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq index d5379c6190b3..7167a4ce8db2 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testJoinOnTimeseriesWithFloorOnTime@NullHandling=default case-crc:76e87aaa +# testJoinOnTimeseriesWithFloorOnTime@NullHandling=default case-crc:5df8fd08 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, true) FROM foo WHERE (TIME_FLOOR(__time, 'PT1H'), m1) IN diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq index 561ddd6a9fd1..073386da08c3 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql case-crc:76e87aaa +# testJoinOnTimeseriesWithFloorOnTime@NullHandling=sql case-crc:5df8fd08 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT CAST(__time AS BIGINT), m1, ANY_VALUE(dim3, 100, true) FROM foo WHERE (TIME_FLOOR(__time, 'PT1H'), m1) IN diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq index 594acb5b77f5..babde45b3cea 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testJoinWithInputRefCondition@NullHandling=default case-crc:a8c0f240 +# testJoinWithInputRefCondition@NullHandling=default case-crc:9a6c217b # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT COUNT(*) FILTER (WHERE FLOOR(100) NOT IN (SELECT m1 FROM foo)) FROM foo; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq index 1a7fa89a2572..7b233392a0e1 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testJoinWithInputRefCondition@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testJoinWithInputRefCondition@NullHandling=sql case-crc:a8c0f240 +# testJoinWithInputRefCondition@NullHandling=sql case-crc:9a6c217b # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT COUNT(*) FILTER (WHERE FLOOR(100) NOT IN (SELECT m1 FROM foo)) FROM foo; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq index 1149a9fc4daa..8eded902facc 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:5934672b +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:812bafe2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq index 0c24e3c8b6ee..a0843c687b57 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:5934672b +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:812bafe2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq index 9d204e2afb59..876e3754f560 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:2305f2ac +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:8fd5adf2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq index f03e87a6461e..9522671d9987 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:2305f2ac +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:8fd5adf2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq index ed2870a68fb9..62ceac66ee5b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default.iq @@ -1,12 +1,12 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default case-crc:fb3f7888 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=default case-crc:96a161fe # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq index eca55c3f7030..aef0110abb0a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql.iq @@ -1,12 +1,12 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql case-crc:fb3f7888 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@default@NullHandling=sql case-crc:96a161fe # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq index 674b934fe1f2..a7a738f3b553 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:914692f2 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:c04e449a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq index cf22102a7f8a..77ef79c876d8 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:914692f2 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:c04e449a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq index 707bfcb3dbc8..4efc038a380d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:8033cbb3 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:758d5732 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq index 5fc2bb9cb8f4..854f0e04cab8 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:8033cbb3 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:758d5732 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq index 421e08d29c1d..4a656b3bc077 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:82d2e4f7 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:108e478f # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq index 29a8ed8f68ca..4689ba669150 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:82d2e4f7 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:108e478f # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq index 11fa38a41524..0a10654bbdc1 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:6381fa96 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:9aafecc7 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq index 7d7c49473ef3..f102203a9797 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:6381fa96 +# testLeftJoinOnTwoInlineDataSourcesWithOuterWhere_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:9aafecc7 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq index 68149ec8f71e..c899ca42f506 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:5df88307 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:8c906e38 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq index 9086994526c4..b72648d4ba38 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:5df88307 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:8c906e38 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq index db1534db083f..ae82abfaed84 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:e1a970a4 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:82cd66be # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq index 65964c4e24ba..efd79e345320 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:e1a970a4 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:82cd66be # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq index 7845b7176b2f..04d616a090ae 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default.iq @@ -1,12 +1,12 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default case-crc:235e0aba +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=default case-crc:0d6a36b1 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq index f84e845560ec..43ac841557c0 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql.iq @@ -1,12 +1,12 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql case-crc:235e0aba +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@default@NullHandling=sql case-crc:0d6a36b1 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq index 446296eaf106..d39d77e3a821 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:46643c1d +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:39d6e0f2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq index 5d5862e40eb2..4b96abc1555d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:46643c1d +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:39d6e0f2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq index c59700399fdf..7bf6fa02d00d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:fe4a2072 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:18bc3b01 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq index 0c7479f6cbb1..0803b4279825 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:fe4a2072 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:18bc3b01 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq index b59bafc8b1fa..4068aa57724c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:a5ec6a25 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:f4e03dc8 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq index bf4ef3f6a30d..949d14d853d9 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:a5ec6a25 +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:f4e03dc8 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq index dff78591ed13..9c1d562f6824 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:78302b3a +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:12f185e2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq index 555a221b1d5d..9bd4ecafd97b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:78302b3a +# testLeftJoinOnTwoInlineDataSourcesWithTimeFilter_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:12f185e2 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq index 5c59c87be249..d3f88c965504 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:f40ac966 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=default case-crc:4fbedf89 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq index 8a53e2530103..1c91a6ca4d4b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:f40ac966 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_disabled@NullHandling=sql case-crc:4fbedf89 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq index 1b77b8f5f771..8674874c92a4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:b06e5180 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=default case-crc:b8a4cfcc # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq index 345462e02137..efff7d664056 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:b06e5180 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@all_enabled@NullHandling=sql case-crc:b8a4cfcc # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq index 7272c8143be5..9302fc9bb4ff 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default.iq @@ -1,12 +1,12 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default case-crc:113b89ee +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=default case-crc:894a632a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq index 550cedf244ae..cf60b23d50c0 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql.iq @@ -1,12 +1,12 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql case-crc:113b89ee +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@default@NullHandling=sql case-crc:894a632a # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq index ee0d9adb8c2b..935e4701f1ec 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:1c4df7a3 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=default case-crc:3fd983bc # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq index 7ada0b4ee919..c74ae449b9e4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:1c4df7a3 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-on-value-column_disabled@NullHandling=sql case-crc:3fd983bc # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq index a770dd20136a..9acd3ab46557 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:c8b860e5 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=default case-crc:af2a3a3c # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq index 1e37eb09ef25..0294f2a6027f 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:c8b860e5 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites-disabled@NullHandling=sql case-crc:af2a3a3c # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq index a73e657f0a39..6e0f9288ca25 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:47dc2525 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=default case-crc:f53ef0f5 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq index ee900fb9e451..a5119dd551af 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:47dc2525 +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@filter-rewrites@NullHandling=sql case-crc:f53ef0f5 # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true -!set enableRewriteJoinToFilter false !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter false +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq index 310fcfb9ab20..128b3ddfa23d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:28f1233a +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=default case-crc:76a9a03f # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq index 57a191af9ec5..2562afd6020d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql.iq @@ -1,15 +1,15 @@ -# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:28f1233a +# testLeftJoinOnTwoInlineDataSources_withLeftDirectAccess@join-to-filter@NullHandling=sql case-crc:76a9a03f # quidem testcase reason: JOIN_LEFT_DIRECT_ACCESS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false -!set enableRewriteJoinToFilter true !set enableJoinLeftTableScanDirect true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set enableRewriteJoinToFilter true +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with abc as diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq index 0fdaa3152dd1..f69e5c22b5ea 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_disabled.iq @@ -1,15 +1,15 @@ -# testLeftJoinSubqueryWithSelectorFilter@all_disabled case-crc:6ecea68d +# testLeftJoinSubqueryWithSelectorFilter@all_disabled case-crc:6d5ce04a # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 +!set computeInnerJoinCostAsFilter false !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set computeInnerJoinCostAsFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, l1.k diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq index 0df67a503b43..0fcfdbe725d7 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@all_enabled.iq @@ -1,15 +1,15 @@ -# testLeftJoinSubqueryWithSelectorFilter@all_enabled case-crc:1781f405 +# testLeftJoinSubqueryWithSelectorFilter@all_enabled case-crc:74a61554 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 +!set computeInnerJoinCostAsFilter false !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set computeInnerJoinCostAsFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, l1.k diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq index bec4d44eeb22..b2f470dcb748 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@default.iq @@ -1,12 +1,12 @@ -# testLeftJoinSubqueryWithSelectorFilter@default case-crc:63cb4668 +# testLeftJoinSubqueryWithSelectorFilter@default case-crc:cbdfab50 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 +!set computeInnerJoinCostAsFilter false !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set computeInnerJoinCostAsFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, l1.k diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq index f0e508b60ebd..e0b664541d4c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled.iq @@ -1,15 +1,15 @@ -# testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled case-crc:a3446cc7 +# testLeftJoinSubqueryWithSelectorFilter@filter-on-value-column_disabled case-crc:ca23bb81 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 +!set computeInnerJoinCostAsFilter false !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set computeInnerJoinCostAsFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, l1.k diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq index c5a872721836..f9e5916b7991 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled.iq @@ -1,15 +1,15 @@ -# testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled case-crc:c34594f7 +# testLeftJoinSubqueryWithSelectorFilter@filter-rewrites-disabled case-crc:c16b9934 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 +!set computeInnerJoinCostAsFilter false !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set computeInnerJoinCostAsFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, l1.k diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq index 52e0867d25c4..07aac4aeacad 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@filter-rewrites.iq @@ -1,15 +1,15 @@ -# testLeftJoinSubqueryWithSelectorFilter@filter-rewrites case-crc:cc6beb91 +# testLeftJoinSubqueryWithSelectorFilter@filter-rewrites case-crc:1fe88b1a # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 +!set computeInnerJoinCostAsFilter false !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set computeInnerJoinCostAsFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, l1.k diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq index f223813ea87b..2b975eab86a6 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testLeftJoinSubqueryWithSelectorFilter@join-to-filter.iq @@ -1,15 +1,15 @@ -# testLeftJoinSubqueryWithSelectorFilter@join-to-filter case-crc:93aa5a3b +# testLeftJoinSubqueryWithSelectorFilter@join-to-filter case-crc:04e8d03a # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 +!set computeInnerJoinCostAsFilter false !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set computeInnerJoinCostAsFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim1, l1.k diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq index b6d4ee823411..fb598d994caa 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled case-crc:c879b2d7 +# testTopNOnStringWithNonSortedOrUniqueDictionary@all_disabled case-crc:6743a794 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq index 18a6f61af924..e234dcfef442 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled case-crc:9ce24a96 +# testTopNOnStringWithNonSortedOrUniqueDictionary@all_enabled case-crc:f4532a33 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq index c6ca4654cd03..31280e8a5d34 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@default.iq @@ -1,11 +1,11 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionary@default case-crc:a6504917 +# testTopNOnStringWithNonSortedOrUniqueDictionary@default case-crc:2b5c4879 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq index 2cea2b163451..51897f2bb881 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled case-crc:0a77a16f +# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-on-value-column_disabled case-crc:8c22741e # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq index 99ba2ecc6d6c..3beccf7f1089 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled case-crc:493a622a +# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites-disabled case-crc:1728364a # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq index ff02227c2605..4a811104ee75 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites case-crc:62c4653d +# testTopNOnStringWithNonSortedOrUniqueDictionary@filter-rewrites case-crc:9f95d078 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq index ef541bc46f4e..ef1d84fe2cf5 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter case-crc:ade7f733 +# testTopNOnStringWithNonSortedOrUniqueDictionary@join-to-filter case-crc:358d0e27 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq index f5003b573a61..a750d0b09551 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled case-crc:7385b5ed +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_disabled case-crc:ace8ed41 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq index 9493848bdfd1..7b561820d8f5 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled case-crc:f1d6d218 +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@all_enabled case-crc:0e40f98f # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq index bb7efc406924..e74437f53096 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default.iq @@ -1,11 +1,11 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default case-crc:94e7e664 +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@default case-crc:1100fa9d # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq index 97ca3bc0e06a..06c2f09c0608 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled case-crc:6270c3ac +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-on-value-column_disabled case-crc:ac75d0d3 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq index dc582354c4c9..7ed1f8bf28b2 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled case-crc:424109c4 +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites-disabled case-crc:374272b7 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq index 29cdbfc32010..7faa207dbe5b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites case-crc:d0ac6d14 +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@filter-rewrites case-crc:40d7e399 # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq index 3d953d2e325c..f93a30fe0c18 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter.iq @@ -1,14 +1,14 @@ -# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter case-crc:1a92bbad +# testTopNOnStringWithNonSortedOrUniqueDictionaryOrderByDim@join-to-filter case-crc:a676ed8c # quidem testcase reason: EQUIV_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT druid.broadcast.dim4, COUNT(*) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq index 6a8f185c2b65..bc0fcae56d4d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default case-crc:f2ca92ca +# testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=default case-crc:9a0f41b6 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq index e76aaeec1ec6..915925987a1d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql case-crc:f2ca92ca +# testUsingSubqueryWithExtractionFns@all_disabled@NullHandling=sql case-crc:9a0f41b6 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq index c17ac58287a1..612567cb0a38 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default case-crc:2261e315 +# testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=default case-crc:0562e77f # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq index 83b81fbfe59c..b08fd8766fd5 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql case-crc:2261e315 +# testUsingSubqueryWithExtractionFns@all_enabled@NullHandling=sql case-crc:0562e77f # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq index 6f276a7f689c..4f3ddcb829f2 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testUsingSubqueryWithExtractionFns@default@NullHandling=default case-crc:e8b174d8 +# testUsingSubqueryWithExtractionFns@default@NullHandling=default case-crc:7fdb7eb2 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq index 453393efc416..e158564b8015 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@default@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testUsingSubqueryWithExtractionFns@default@NullHandling=sql case-crc:e8b174d8 +# testUsingSubqueryWithExtractionFns@default@NullHandling=sql case-crc:7fdb7eb2 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq index f1cd9c88b5e6..021473e3f44c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default case-crc:c71da62e +# testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=default case-crc:8312764a # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq index 891d7d7f8090..ac02ef44b472 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql case-crc:c71da62e +# testUsingSubqueryWithExtractionFns@filter-on-value-column_disabled@NullHandling=sql case-crc:8312764a # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq index 2d8c1e7202f2..5d2e94ea90f6 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default case-crc:ea2bb732 +# testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=default case-crc:75a02bd6 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq index 379e182f73c3..44563315f01d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql case-crc:ea2bb732 +# testUsingSubqueryWithExtractionFns@filter-rewrites-disabled@NullHandling=sql case-crc:75a02bd6 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq index 938e2c4a6772..c771a5e6a9f0 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default case-crc:7443f782 +# testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=default case-crc:59cbfae8 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq index a23e14136025..4e31bf0d9857 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql case-crc:7443f782 +# testUsingSubqueryWithExtractionFns@filter-rewrites@NullHandling=sql case-crc:59cbfae8 # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq index 78aaa620f516..e8201c2800a4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default case-crc:6178ece2 +# testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=default case-crc:7dafda1a # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq index e1a05fcb0f0c..62bfdc1a0c53 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql.iq @@ -1,14 +1,14 @@ -# testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql case-crc:6178ece2 +# testUsingSubqueryWithExtractionFns@join-to-filter@NullHandling=sql case-crc:7dafda1a # quidem testcase reason: JOIN_FILTER_LOCATIONS -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, COUNT(*) FROM druid.foo WHERE substring(dim2, 1, 1) IN (SELECT substring(dim1, 1, 1) FROM druid.foo WHERE dim1 <> '')group by dim2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq index bc97a36fb27a..389fb0eeaeff 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_disabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterJoinExpression@all_disabled case-crc:7a32e94a +# testVirtualColumnOnMVFilterJoinExpression@all_disabled case-crc:1d9875df # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq index 9c43e9625d7c..01e268234fc3 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@all_enabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterJoinExpression@all_enabled case-crc:91fa3751 +# testVirtualColumnOnMVFilterJoinExpression@all_enabled case-crc:83f9a216 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq index 6988e39d1e8f..ae58b2deb851 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@default.iq @@ -1,11 +1,11 @@ -# testVirtualColumnOnMVFilterJoinExpression@default case-crc:3387da5c +# testVirtualColumnOnMVFilterJoinExpression@default case-crc:d6301c80 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq index d6cc278554c2..ec901fab83b2 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled case-crc:2116c5d2 +# testVirtualColumnOnMVFilterJoinExpression@filter-on-value-column_disabled case-crc:98ed9bb6 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq index 4a6831e10ea4..be025d6afb7d 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled case-crc:93e6503a +# testVirtualColumnOnMVFilterJoinExpression@filter-rewrites-disabled case-crc:c960c4d6 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq index 8cb747f268c6..95250d0012d2 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@filter-rewrites.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterJoinExpression@filter-rewrites case-crc:f4ddf549 +# testVirtualColumnOnMVFilterJoinExpression@filter-rewrites case-crc:ec24f5d6 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq index c92c1686a148..6028287a7be9 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterJoinExpression@join-to-filter.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterJoinExpression@join-to-filter case-crc:f3a7b2f1 +# testVirtualColumnOnMVFilterJoinExpression@join-to-filter case-crc:8f235220 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN druid.numfoo as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq index 6115a839e4a6..c026e25e85ce 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled case-crc:9c935b4c +# testVirtualColumnOnMVFilterMultiJoinExpression@all_disabled case-crc:6ee56696 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq index 1e4e0aa6acc6..2e13a83a2a85 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled case-crc:812de429 +# testVirtualColumnOnMVFilterMultiJoinExpression@all_enabled case-crc:b798a172 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq index 2f175178b09c..fe86f2126f5a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@default.iq @@ -1,11 +1,11 @@ -# testVirtualColumnOnMVFilterMultiJoinExpression@default case-crc:a431c313 +# testVirtualColumnOnMVFilterMultiJoinExpression@default case-crc:0f7e2c53 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq index f4295f4464ce..40462afd1d02 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled case-crc:2429103a +# testVirtualColumnOnMVFilterMultiJoinExpression@filter-on-value-column_disabled case-crc:f2bee432 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq index ec8a00bf4043..8a33035d0402 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled case-crc:5dbbd67c +# testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites-disabled case-crc:daa5d2d1 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq index b4c1225b6adf..d07362349463 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites case-crc:0da69cb7 +# testVirtualColumnOnMVFilterMultiJoinExpression@filter-rewrites case-crc:dfefab18 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite true !set enableJoinFilterRewriteValueColumnFilters true !set enableRewriteJoinToFilter false -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq index b8aa7edbf717..a844b048a2ec 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter.iq @@ -1,14 +1,14 @@ -# testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter case-crc:3e1879da +# testVirtualColumnOnMVFilterMultiJoinExpression@join-to-filter case-crc:2ad04401 # quidem testcase reason: DEFINETLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true -!set maxScatterGatherBytes 9223372036854775807 +!set defaultTimeout 300000 +!set enableJoinFilterRewrite false !set enableJoinFilterRewriteValueColumnFilters false !set enableRewriteJoinToFilter true -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set enableJoinFilterRewrite false +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT foo1.dim3, foo2.dim3 FROM druid.numfoo as foo1 INNER JOIN (SELECT foo3.dim3 FROM druid.numfoo as foo3 INNER JOIN druid.numfoo as foo4 ON MV_FILTER_ONLY(foo3.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo4.dim3, ARRAY['a'])) as foo2 ON MV_FILTER_ONLY(foo1.dim3, ARRAY['a']) = MV_FILTER_ONLY(foo2.dim3, ARRAY['a']) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq index 96e1908cbf2e..70979223a8e8 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default case-crc:80416865 +# testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=default case-crc:f03f8870 # quidem testcase reason: AGG_COL_EXCHANGE -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set useApproximateCountDistinct false !set outputformat mysql !use druidtest:/// diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq index 591792ade346..636b96669464 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql case-crc:80416865 +# testExactCountDistinctWithGroupingAndOtherAggregators@NullHandling=sql case-crc:f03f8870 # quidem testcase reason: AGG_COL_EXCHANGE -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set useApproximateCountDistinct false !set outputformat mysql !use druidtest:/// diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq index 4e6bbff9d57c..a7a5d16f35ec 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testGroupByLimitPushdownExtraction@NullHandling=default case-crc:1bfa9337 +# testGroupByLimitPushdownExtraction@NullHandling=default case-crc:006ffd2b # quidem testcase reason: IMPROVED_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim4, substring(dim5, 1, 1), count(*) FROM druid.numfoo WHERE dim4 = 'a' GROUP BY 1,2 LIMIT 2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq index e104bbb0cf5a..e6c589194f76 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByLimitPushdownExtraction@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testGroupByLimitPushdownExtraction@NullHandling=sql case-crc:1bfa9337 +# testGroupByLimitPushdownExtraction@NullHandling=sql case-crc:006ffd2b # quidem testcase reason: IMPROVED_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim4, substring(dim5, 1, 1), count(*) FROM druid.numfoo WHERE dim4 = 'a' GROUP BY 1,2 LIMIT 2; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq index 6b4a8021d71a..ce70e1c2ba2e 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupBySortPushDown.iq @@ -1,11 +1,11 @@ -# testGroupBySortPushDown case-crc:5655a1ec +# testGroupBySortPushDown case-crc:0f7a48bb # quidem testcase reason: AGG_COL_EXCHANGE -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, dim1, SUM(cnt) FROM druid.foo GROUP BY dim2, dim1 ORDER BY dim1 LIMIT 4; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq index 384456a0dd06..bd5bb765dedd 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default case-crc:634b75d5 +# testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=default case-crc:d9fe7bd2 # quidem testcase reason: IMPROVED_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, time_floor(gran, 'P1M') gran, sum(s) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq index aafc63709ec0..fb4b5cd8dfb4 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql case-crc:634b75d5 +# testGroupByTimeFloorAndDimOnGroupByTimeFloorAndDim@NullHandling=sql case-crc:d9fe7bd2 # quidem testcase reason: IMPROVED_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT dim2, time_floor(gran, 'P1M') gran, sum(s) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq index 18fbcc29a0c7..b5d2c682643b 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq @@ -1,11 +1,11 @@ -# testGroupByWithLiteralInSubqueryGrouping case-crc:ddf0feaf +# testGroupByWithLiteralInSubqueryGrouping case-crc:a63c5a2f # quidem testcase reason: IMPROVED_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT @@ -30,8 +30,8 @@ SELECT +-------+----+ | t1 | t2 | +-------+----+ -| dummy | b | | dummy | | +| dummy | b | +-------+----+ (2 rows) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq index 01941e6a7e9e..e7322a876fc9 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default case-crc:6c95ac54 +# testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=default case-crc:65809f91 # quidem testcase reason: AGG_COL_EXCHANGE -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set useApproximateCountDistinct false !set outputformat mysql !use druidtest:/// diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq index d0620db5261d..098415f6b1b1 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql case-crc:6c95ac54 +# testMultipleExactCountDistinctWithGroupingAndOtherAggregatorsUsingJoin@NullHandling=sql case-crc:65809f91 # quidem testcase reason: AGG_COL_EXCHANGE -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set useApproximateCountDistinct false !set outputformat mysql !use druidtest:/// diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq index 1cbbe18e49d8..847896ebe132 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default case-crc:43cd3215 +# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default case-crc:d6c371b5 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set useApproximateCountDistinct false !set useGroupingSetForExactDistinct true !set outputformat mysql diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq index 4f6646b7f537..8d7f28bcece1 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql case-crc:43cd3215 +# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=sql case-crc:d6c371b5 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set useApproximateCountDistinct false !set useGroupingSetForExactDistinct true !set outputformat mysql diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq index 333ea9002d38..f87b98802c6c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testRepeatedIdenticalVirtualExpressionGrouping.iq @@ -1,11 +1,11 @@ -# testRepeatedIdenticalVirtualExpressionGrouping case-crc:1a5712f6 +# testRepeatedIdenticalVirtualExpressionGrouping case-crc:c6ee44b6 # quidem testcase reason: IMPROVED_PLAN -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq index 88eecd621478..e84db59af531 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=default.iq @@ -1,11 +1,11 @@ -# testSubqueryTypeMismatchWithLiterals@NullHandling=default case-crc:55baf28f +# testSubqueryTypeMismatchWithLiterals@NullHandling=default case-crc:e7079756 # quidem testcase reason: AGGREGATE_REMOVE_NOT_FIRED -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq index 1ccd29e4854d..b464b19c371a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testSubqueryTypeMismatchWithLiterals@NullHandling=sql.iq @@ -1,11 +1,11 @@ -# testSubqueryTypeMismatchWithLiterals@NullHandling=sql case-crc:55baf28f +# testSubqueryTypeMismatchWithLiterals@NullHandling=sql case-crc:e7079756 # quidem testcase reason: AGGREGATE_REMOVE_NOT_FIRED -!set sqlQueryId dummy -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set debug true !set defaultTimeout 300000 !set maxScatterGatherBytes 9223372036854775807 !set plannerStrategy DECOUPLED -!set debug true +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// SELECT diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq index e4c3fbb28f18..5368d23981f9 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=default.iq @@ -1,12 +1,12 @@ -# testWindowingWithScanAndSort@NullHandling=default case-crc:24efe380 +# testWindowingWithScanAndSort@NullHandling=default case-crc:bb1d6e53 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set enableWindowing true !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with t AS ( diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq index 8e18b7fb640b..86e22e97353c 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testWindowingWithScanAndSort@NullHandling=sql.iq @@ -1,12 +1,12 @@ -# testWindowingWithScanAndSort@NullHandling=sql case-crc:24efe380 +# testWindowingWithScanAndSort@NullHandling=sql case-crc:bb1d6e53 # quidem testcase reason: SLIGHTLY_WORSE_PLAN -!set sqlQueryId dummy -!set defaultTimeout 300000 !set debug true +!set defaultTimeout 300000 !set enableWindowing true !set maxScatterGatherBytes 9223372036854775807 -!set sqlCurrentTimestamp 2000-01-01T00:00:00Z !set plannerStrategy DECOUPLED +!set sqlCurrentTimestamp 2000-01-01T00:00:00Z +!set sqlQueryId dummy !set outputformat mysql !use druidtest:/// with t AS ( From 3fbb3cb853456bebccfbf8fc16ba7f30a810c26c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 14 May 2024 09:39:02 +0000 Subject: [PATCH 005/122] add --- .../apache/druid/cli/recorder/Launcher.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java diff --git a/integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java b/integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java new file mode 100644 index 000000000000..7be05e227d5c --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.cli.recorder; + +public class Launcher +{ + public static void main(String[] args) + { + + } +} From 43fd8af63c3fddbc5c223216435dc77fcc90cc0d Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 14 May 2024 09:39:04 +0000 Subject: [PATCH 006/122] Revert "add" This reverts commit 3fbb3cb853456bebccfbf8fc16ba7f30a810c26c. --- .../apache/druid/cli/recorder/Launcher.java | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java diff --git a/integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java b/integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java deleted file mode 100644 index 7be05e227d5c..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/cli/recorder/Launcher.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.cli.recorder; - -public class Launcher -{ - public static void main(String[] args) - { - - } -} From a16f982699bef52bdb5f50c70e5a5e0d3debc337 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 14 May 2024 16:04:19 +0000 Subject: [PATCH 007/122] remove crap --- .../java/org/apache/druid/sql/calcite/util/SqlTestFramework.java | 1 - 1 file changed, 1 deletion(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index c64888414b62..ff2d676a54cc 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -610,7 +610,6 @@ private SqlTestFramework(Builder builder) // test pulls in a module, then pull in that module, even though we are // not the Druid node to which the module is scoped. .ignoreLoadScopes() - .addModule(binder -> binder.bind(Closer.class).toInstance(resourceCloser)) .addModule(new LookylooModule()) .addModule(new SegmentWranglerModule()) .addModule(new SqlAggregationModule()) From 73011267afef8bf09712913ef77b940d0d49f96c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 15 May 2024 10:34:48 +0000 Subject: [PATCH 008/122] triaks --- .../org/apache/druid/quidem/Launcher.java | 452 ++++++++++++++++++ .../druid/guice/BaseInjectorBuilder.java | 2 +- .../druid/guice/StartupInjectorBuilder.java | 5 +- .../druid/guice/http/HttpClientModule.java | 6 +- 4 files changed, 458 insertions(+), 7 deletions(-) create mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java new file mode 100644 index 000000000000..7220ef81963b --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -0,0 +1,452 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Binder; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Provides; +import com.google.inject.TypeLiteral; +import com.google.inject.name.Names; +import com.google.inject.util.Modules; +import org.apache.calcite.avatica.server.AbstractAvaticaHandler; +import org.apache.druid.cli.CliBroker; +import org.apache.druid.guice.DruidInjectorBuilder; +import org.apache.druid.guice.LazySingleton; +import org.apache.druid.guice.StartupInjectorBuilder; +import org.apache.druid.initialization.DruidModule; +import org.apache.druid.java.util.common.FileUtils; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.java.util.common.io.Closer; +import org.apache.druid.java.util.emitter.service.ServiceEmitter; +import org.apache.druid.query.DefaultQueryConfig; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; +import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.server.DruidNode; +import org.apache.druid.server.QueryLifecycleFactory; +import org.apache.druid.server.QueryScheduler; +import org.apache.druid.server.QuerySchedulerProvider; +import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.server.log.RequestLogger; +import org.apache.druid.server.log.TestRequestLogger; +import org.apache.druid.server.metrics.NoopServiceEmitter; +import org.apache.druid.server.security.AuthenticatorMapper; +import org.apache.druid.server.security.AuthorizerMapper; +import org.apache.druid.server.security.Escalator; +import org.apache.druid.sql.avatica.AvaticaMonitor; +import org.apache.druid.sql.avatica.DruidAvaticaJsonHandler; +import org.apache.druid.sql.avatica.DruidMeta; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; +import org.apache.druid.sql.calcite.planner.CalciteRulesManager; +import org.apache.druid.sql.calcite.planner.CatalogResolver; +import org.apache.druid.sql.calcite.planner.PlannerConfig; +import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; +import org.apache.druid.sql.calcite.schema.DruidSchemaName; +import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.calcite.util.SqlTestFramework; +import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; +import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; +import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; +import org.apache.druid.sql.guice.SqlModule; +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.client.utils.URLEncodedUtils; +import org.eclipse.jetty.server.Server; +import org.junit.Test; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +public class Launcher +{ + + public static final String URI_PREFIX = "druidtest://"; + public static final String DEFAULT_URI = URI_PREFIX + "/"; + + static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); + + public Launcher() + { + } + + public Connection connect(String url, Properties info) throws SQLException + { + try { + SqlTestFrameworkConfig config = buildConfigfromURIParams(url); + + ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( + config, + x -> new AvaticaBasedTestConnectionSupplier(x) + ); + + AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); + return server.getConnection(info); + } + catch (Exception e) { + throw new SQLException("Can't create testconnection", e); + } + } + + static class AvaticaBasedConnectionModule implements DruidModule, Closeable + { + Closer closer = Closer.create(); + + @Provides + @LazySingleton + public DruidSchemaCatalog getLookupNodeService(QueryRunnerFactoryConglomerate conglomerate, + SpecificSegmentsQuerySegmentWalker walker, PlannerConfig plannerConfig) + { + return CalciteTests.createMockRootSchema( + conglomerate, + walker, + plannerConfig, + CalciteTests.TEST_AUTHORIZER_MAPPER + ); + } + + @Provides + @LazySingleton + public DruidConnectionExtras getConnectionExtras(ObjectMapper objectMapper) + { + return new DruidConnectionExtras.DruidConnectionExtrasImpl(objectMapper); + } + + @Provides + @LazySingleton + public AvaticaJettyServer getAvaticaServer(DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) + throws Exception + { + AvaticaJettyServer avaticaJettyServer = new AvaticaJettyServer(druidMeta, druidConnectionExtras); + closer.register(avaticaJettyServer); + return avaticaJettyServer; + } + + @Override + public void configure(Binder binder) + { + } + + @Override + public void close() throws IOException + { + closer.close(); + } + + } + + static class AvaticaJettyServer implements Closeable + { + final DruidMeta druidMeta; + final Server server; + final String url; + final DruidConnectionExtras connectionExtras; + + AvaticaJettyServer(final DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) throws Exception + { + this.druidMeta = druidMeta; + server = new Server(0); + server.setHandler(getAvaticaHandler(druidMeta)); + server.start(); + url = StringUtils.format( + "jdbc:avatica:remote:url=%s", + new URIBuilder(server.getURI()).setPath(DruidAvaticaJsonHandler.AVATICA_PATH).build() + ); + connectionExtras = druidConnectionExtras; + } + + public Connection getConnection(Properties info) throws SQLException + { + Connection realConnection = DriverManager.getConnection(url, info); + Connection proxyConnection = DynamicComposite.make( + realConnection, + Connection.class, + connectionExtras, + DruidConnectionExtras.class + ); + return proxyConnection; + } + + @Override + public void close() + { + druidMeta.closeAllConnections(); + try { + server.stop(); + } + catch (Exception e) { + throw new RuntimeException("Can't stop server", e); + } + } + + protected AbstractAvaticaHandler getAvaticaHandler(final DruidMeta druidMeta) + { + return new DruidAvaticaJsonHandler( + druidMeta, + new DruidNode("dummy", "dummy", false, 1, null, true, false), + new AvaticaMonitor() + ); + } + } + + static class AvaticaBasedTestConnectionSupplier implements QueryComponentSupplier + { + private QueryComponentSupplier delegate; + private AvaticaBasedConnectionModule connectionModule; + + public AvaticaBasedTestConnectionSupplier(QueryComponentSupplier delegate) + { + this.delegate = delegate; + this.connectionModule = new AvaticaBasedConnectionModule(); + } + + @Override + public void gatherProperties(Properties properties) + { + delegate.gatherProperties(properties); + } + + @Override + public void configureGuice(DruidInjectorBuilder builder) + { + delegate.configureGuice(builder); + TestRequestLogger testRequestLogger = new TestRequestLogger(); + builder.addModule(connectionModule); + builder.addModule( + binder -> { + binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); + binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); + binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); + binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); + binder.bind(RequestLogger.class).toInstance(testRequestLogger); + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); + binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); + binder.bind(QueryScheduler.class) + .toProvider(QuerySchedulerProvider.class) + .in(LazySingleton.class); + binder.install(new SqlModule.SqlStatementFactoryModule()); + binder.bind(new TypeLiteral>() + { + }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); + binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); + binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); + } + ); + } + + @Override + public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) + { + return delegate.createCongolmerate(builder, closer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + } + + @Override + public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) + { + return delegate.createEngine(qlf, objectMapper, injector); + } + + @Override + public void configureJsonMapper(ObjectMapper mapper) + { + delegate.configureJsonMapper(mapper); + } + + @Override + public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) + { + return delegate.createJoinableFactoryWrapper(lookupProvider); + } + + @Override + public void finalizeTestFramework(SqlTestFramework sqlTestFramework) + { + delegate.finalizeTestFramework(sqlTestFramework); + } + + @Override + public void close() throws IOException + { + connectionModule.close(); + delegate.close(); + } + + @Override + public PlannerComponentSupplier getPlannerComponentSupplier() + { + return delegate.getPlannerComponentSupplier(); + } + } + + protected File createTempFolder(String prefix) + { + File tempDir = FileUtils.createTempDir(prefix); + Runtime.getRuntime().addShutdownHook(new Thread() + { + @Override + public void run() + { + try { + FileUtils.deleteDirectory(tempDir); + } + catch (IOException ex) { + ex.printStackTrace(); + } + } + }); + return tempDir; + } + + public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws SQLException + { + Map queryParams; + queryParams = new HashMap<>(); + try { + List params = URLEncodedUtils.parse(new URI(url), StandardCharsets.UTF_8); + for (NameValuePair pair : params) { + queryParams.put(pair.getName(), pair.getValue()); + } + // possible caveat: duplicate entries overwrite earlier ones + } + catch (URISyntaxException e) { + throw new SQLException("Can't decode URI", e); + } + + return new SqlTestFrameworkConfig(queryParams); + } + + public static void main(String[] args) throws Exception + { + ConfigurationInstance ci = getCI(); + + AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); + + } + + private static ConfigurationInstance getCI() throws SQLException, Exception + { + SqlTestFrameworkConfig config = buildConfigfromURIParams("druidtest:///"); + + ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( + config, + x -> new AvaticaBasedTestConnectionSupplier(x) + ); + return ci; + } + + @Test + public void runIt() throws Exception + { + Launcher.main1(null); + } + + static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { + + private List overrideModules =new ArrayList<>(); + + public CustomStartupInjectorBuilder() + { + Properties localProps = new Properties(); + localProps.put("druid.enableTlsPort", "false"); + localProps.put("druid.plaintextPort","12345"); + + + addOverride(binder -> binder.bind(Properties.class).toInstance(localProps)); +// addOverride(binder -> { +// binder.bind(SSLClientConfig.class).toProvider(Providers.of(null)); +// binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null)); +// binder.bind(SSLClientConfig.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); +// binder.bind(SSLContext.class).toProvider(Providers.of(null)); +// binder.bind(SSLContextProvider.class).annotatedWith(Global.class).toProvider(Providers.of(null)); +// binder.bind(SSLContextProvider.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); +// binder.bind(SSLContext.class).annotatedWith(Global.class).toProvider(Providers.of(null)); +// binder.bind(SSLContext.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); +// } +// ); + + } + + private void addOverride(com.google.inject.Module m) + { + overrideModules.add(m); + } + + @Override + public Injector build() + { + return Guice.createInjector( + Modules.override(modules) + .with( overrideModules.toArray(new com.google.inject.Module[0]))); + + } + + } + + private static void main1(Object object) + { + final Injector injector = new CustomStartupInjectorBuilder() + .forTests() + .build(); + +// SSLContextProvider u = injector.getInstance(SSLContextProvider.class); +// System.out.println(u); + + + + CliBroker c = new CliBroker(); + injector.injectMembers(c); + // c.configure(new Properties()); + c.run(); + + } + +} diff --git a/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java b/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java index 40bbc5a0f8ec..c979efb9048c 100644 --- a/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java +++ b/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java @@ -33,7 +33,7 @@ */ public class BaseInjectorBuilder> { - private final List modules = new ArrayList<>(); + protected final List modules = new ArrayList<>(); @SuppressWarnings("unchecked") public T add(Module... modules) diff --git a/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java b/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java index e091e6eb5229..f49893b6b05f 100644 --- a/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java +++ b/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java @@ -24,7 +24,6 @@ import org.apache.druid.math.expr.ExpressionProcessingModule; import org.apache.druid.utils.RuntimeInfo; -import java.util.Arrays; import java.util.Properties; /** @@ -75,9 +74,9 @@ public StartupInjectorBuilder withExtensions() public StartupInjectorBuilder forServer() { - withExtensions(); +// withExtensions(); add( - new PropertiesModule(Arrays.asList("common.runtime.properties", "runtime.properties")), +// new PropertiesModule(Arrays.asList("common.runtime.properties", "runtime.properties")), new RuntimeInfoModule() ); return this; diff --git a/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java b/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java index 2aaf30a469f2..dd42c158f9c6 100644 --- a/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java +++ b/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java @@ -119,9 +119,9 @@ public HttpClient get() final Binding sslContextBinding = getSslContextBinding(); - if (sslContextBinding != null) { - builder.withSslContext(sslContextBinding.getProvider().get()); - } +// if (sslContextBinding != null) { +// builder.withSslContext(sslContextBinding.getProvider().get()); +// } HttpClient client = HttpClientInit.createClient( builder.build(), From d4b052a5795962748af31ae96aba891422eeffde Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 15 May 2024 11:57:13 +0000 Subject: [PATCH 009/122] stuff --- .../org/apache/druid/quidem/Launcher.java | 142 +++++++++++++++++- .../curator/discovery/DiscoveryModule.java | 13 +- .../initialization/CoreInjectorBuilder.java | 12 +- .../java/org/apache/druid/cli/CliBroker.java | 3 +- .../sql/calcite/SqlTestFrameworkConfig.java | 19 ++- 5 files changed, 165 insertions(+), 24 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 7220ef81963b..a79262499a20 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -24,15 +24,22 @@ import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import com.google.inject.AbstractModule; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; +import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; import com.google.inject.util.Modules; import org.apache.calcite.avatica.server.AbstractAvaticaHandler; import org.apache.druid.cli.CliBroker; +import org.apache.druid.discovery.DiscoveryDruidNode; +import org.apache.druid.discovery.DruidNodeDiscovery; +import org.apache.druid.discovery.DruidNodeDiscoveryProvider; +import org.apache.druid.discovery.NodeRole; import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.StartupInjectorBuilder; @@ -90,10 +97,14 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; +import java.util.function.BooleanSupplier; public class Launcher { @@ -389,18 +400,125 @@ public void runIt() throws Exception Launcher.main1(null); } + private static Module propOverrideModuel() + { + Properties localProps = new Properties(); + localProps.put("druid.enableTlsPort", "false"); + localProps.put("druid.zk.service.enabled", "false"); + localProps.put("druid.plaintextPort","12345"); + + + Module m = binder -> binder.bind(Properties.class).toInstance(localProps); + return m; + } + + public static class DiscovertModule extends AbstractModule { + + DiscovertModule() { + } + + @Override + protected void configure() + { + } + + @Provides + DruidNodeDiscoveryProvider getProvider() { + final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); + FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( + ImmutableMap.of( + NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode)) + ) + ); + return provider; + } + + /** + * A fake {@link DruidNodeDiscoveryProvider} for {@link #createMockSystemSchema}. + */ + private static class FakeDruidNodeDiscoveryProvider extends DruidNodeDiscoveryProvider + { + private final Map nodeDiscoveries; + + public FakeDruidNodeDiscoveryProvider(Map nodeDiscoveries) + { + this.nodeDiscoveries = nodeDiscoveries; + } + + @Override + public BooleanSupplier getForNode(DruidNode node, NodeRole nodeRole) + { + boolean get = nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()) + .getAllNodes() + .stream() + .anyMatch(x -> x.getDruidNode().equals(node)); + return () -> get; + } + + @Override + public DruidNodeDiscovery getForNodeRole(NodeRole nodeRole) + { + return nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()); + } + } + + private static class FakeDruidNodeDiscovery implements DruidNodeDiscovery + { + private final Set nodes; + + FakeDruidNodeDiscovery() + { + this.nodes = new HashSet<>(); + } + + FakeDruidNodeDiscovery(Map nodes) + { + this.nodes = Sets.newHashSetWithExpectedSize(nodes.size()); + nodes.forEach((k, v) -> { + addNode(v, k); + }); + } + + @Override + public Collection getAllNodes() + { + return nodes; + } + + void addNode(DruidNode node, NodeRole role) + { + final DiscoveryDruidNode discoveryNode = new DiscoveryDruidNode(node, role, ImmutableMap.of()); + this.nodes.add(discoveryNode); + } + + @Override + public void registerListener(Listener listener) + { + + } + } + + + + } + + private static Module discoverModule() + { + +// DruidNodeDiscoveryProvider instance = ; +// Module m = binder -> binder.bind(DruidNodeDiscoveryProvider.class).toInstance(instance); + return new DiscovertModule(); + + } + static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { private List overrideModules =new ArrayList<>(); public CustomStartupInjectorBuilder() { - Properties localProps = new Properties(); - localProps.put("druid.enableTlsPort", "false"); - localProps.put("druid.plaintextPort","12345"); - - - addOverride(binder -> binder.bind(Properties.class).toInstance(localProps)); + Module m = propOverrideModuel(); + addOverride(m); // addOverride(binder -> { // binder.bind(SSLClientConfig.class).toProvider(Providers.of(null)); // binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null)); @@ -431,19 +549,27 @@ public Injector build() } - private static void main1(Object object) + private static void main1(Object object) throws Exception { final Injector injector = new CustomStartupInjectorBuilder() .forTests() .build(); + + SqlTestFramework framework = getCI().extracted( + propOverrideModuel(), + discoverModule() + ) + + ; + // SSLContextProvider u = injector.getInstance(SSLContextProvider.class); // System.out.println(u); CliBroker c = new CliBroker(); - injector.injectMembers(c); + framework.injector().injectMembers(c); // c.configure(new Properties()); c.run(); diff --git a/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java b/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java index 4889261fcae4..37f32eefbe39 100644 --- a/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java +++ b/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java @@ -77,12 +77,15 @@ /** * The DiscoveryModule allows for the registration of Keys of DruidNode objects, which it intends to be * automatically announced at the end of the lifecycle start. - * + * * In order for this to work a ServiceAnnouncer instance *must* be injected and instantiated first. * This can often be achieved by registering ServiceAnnouncer.class with the LifecycleModule. */ public class DiscoveryModule implements Module { +public DiscoveryModule(){ + super(); + } private static final String NAME = "DiscoveryModule:internal"; private static final String INTERNAL_DISCOVERY_PROP = "druid.discovery.type"; @@ -98,7 +101,7 @@ public void configure(Properties properties) /** * Requests that the un-annotated DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle @@ -112,7 +115,7 @@ public static void registerDefault(Binder binder) /** * Requests that the annotated DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class, annotation)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle @@ -126,7 +129,7 @@ public static void register(Binder binder, Annotation annotation) /** * Requests that the annotated DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class, annotation)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle @@ -141,7 +144,7 @@ public static void register(Binder binder, Class annotatio /** * Requests that the keyed DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class, annotation)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle diff --git a/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java b/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java index 59516f8d4c49..264cf9944144 100644 --- a/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java +++ b/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java @@ -20,11 +20,7 @@ package org.apache.druid.initialization; import com.google.inject.Injector; -import org.apache.druid.curator.CuratorModule; -import org.apache.druid.curator.discovery.DiscoveryModule; import org.apache.druid.discovery.NodeRole; -import org.apache.druid.guice.AnnouncerModule; -import org.apache.druid.guice.CoordinatorDiscoveryModule; import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.DruidSecondaryModule; import org.apache.druid.guice.ExpressionModule; @@ -106,8 +102,8 @@ public CoreInjectorBuilder forServer() HttpClientModule.escalatedGlobal(), new HttpClientModule("druid.broker.http", Client.class, true), new HttpClientModule("druid.broker.http", EscalatedClient.class, true), - new CuratorModule(), - new AnnouncerModule(), +// new CuratorModule(), +// new AnnouncerModule(), new MetricsModule(), new SegmentWriteOutMediumModule(), new ServerModule(), @@ -115,12 +111,12 @@ public CoreInjectorBuilder forServer() new JettyServerModule(), new ExpressionModule(), new NestedDataModule(), - new DiscoveryModule(), +// new DiscoveryModule(), new ServerViewModule(), new MetadataConfigModule(), new DerbyMetadataStorageDruidModule(), new JacksonConfigManagerModule(), - new CoordinatorDiscoveryModule(), +// new CoordinatorDiscoveryModule(), new LocalDataStorageDruidModule(), new TombstoneDataStorageModule(), new FirehoseModule(), diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker.java b/services/src/main/java/org/apache/druid/cli/CliBroker.java index 7fe5ec576310..eee0773237e3 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker.java @@ -47,7 +47,6 @@ import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; import org.apache.druid.guice.LifecycleModule; -import org.apache.druid.guice.ManageLifecycle; import org.apache.druid.guice.QueryRunnerFactoryModule; import org.apache.druid.guice.QueryableModule; import org.apache.druid.guice.SegmentWranglerModule; @@ -164,7 +163,7 @@ protected List getModules() LifecycleModule.register(binder, Server.class); binder.bind(SegmentManager.class).in(LazySingleton.class); - binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); +// binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); Jerseys.addResource(binder, HistoricalResource.class); Jerseys.addResource(binder, SegmentListerResource.class); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 2e136d525001..8aaa529957c1 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -26,6 +26,7 @@ import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.google.inject.Module; import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.query.topn.TopNQueryConfig; @@ -335,8 +336,19 @@ public String testName() public static class ConfigurationInstance { public SqlTestFramework framework; + private SqlTestFrameworkConfig config; + private QueryComponentSupplier testHost; ConfigurationInstance(SqlTestFrameworkConfig config, QueryComponentSupplier testHost) + { + this.config = config; + this.testHost = testHost; + SqlTestFramework framework1 = extracted(); + framework=framework1; + } + + //FIXME remove + public SqlTestFramework extracted(Module ...modules) { SqlTestFramework.Builder builder = new SqlTestFramework.Builder(testHost) .withConfig(config) @@ -344,7 +356,12 @@ public static class ConfigurationInstance .minTopNThreshold(config.minTopNThreshold) .mergeBufferCount(config.numMergeBuffers) .withOverrideModule(config.resultCache.makeModule()); - framework = builder.build(); + for (Module m : modules) { + builder.withOverrideModule(m); + } + + SqlTestFramework framework1 = builder.build(); + return framework1; } public ConfigurationInstance( From 8ee41f58d04651ee06fcd3c1a4bc1d5186fe5b4e Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 15 May 2024 15:14:43 +0000 Subject: [PATCH 010/122] it does work --- .../org/apache/druid/quidem/Launcher.java | 45 ++- .../druid/guice/StartupInjectorBuilder.java | 5 +- .../client/BrokerSegmentWatcherConfig.java | 2 +- .../curator/discovery/DiscoveryModule.java | 13 +- .../druid/guice/http/HttpClientModule.java | 4 +- .../initialization/CoreInjectorBuilder.java | 12 +- .../java/org/apache/druid/cli/CliBroker.java | 3 +- .../java/org/apache/druid/cli/CliBroker2.java | 286 ++++++++++++++++++ .../schema/BrokerSegmentMetadataCache.java | 2 - .../schema/DruidCalciteSchemaModule.java | 22 +- .../org/apache/druid/sql/guice/SqlModule.java | 28 +- .../sql/calcite/util/SqlTestFramework.java | 44 ++- 12 files changed, 415 insertions(+), 51 deletions(-) create mode 100644 services/src/main/java/org/apache/druid/cli/CliBroker2.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index a79262499a20..1f4859be726e 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -34,8 +34,9 @@ import com.google.inject.TypeLiteral; import com.google.inject.name.Names; import com.google.inject.util.Modules; +import com.google.inject.util.Providers; import org.apache.calcite.avatica.server.AbstractAvaticaHandler; -import org.apache.druid.cli.CliBroker; +import org.apache.druid.cli.CliBroker2; import org.apache.druid.discovery.DiscoveryDruidNode; import org.apache.druid.discovery.DruidNodeDiscovery; import org.apache.druid.discovery.DruidNodeDiscoveryProvider; @@ -43,6 +44,7 @@ import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.StartupInjectorBuilder; +import org.apache.druid.guice.annotations.Json; import org.apache.druid.initialization.DruidModule; import org.apache.druid.java.util.common.FileUtils; import org.apache.druid.java.util.common.StringUtils; @@ -50,6 +52,7 @@ import org.apache.druid.java.util.emitter.service.ServiceEmitter; import org.apache.druid.query.DefaultQueryConfig; import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.QuerySegmentWalker; import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; import org.apache.druid.segment.join.JoinableFactoryWrapper; import org.apache.druid.server.DruidNode; @@ -72,9 +75,12 @@ import org.apache.druid.sql.calcite.planner.CalciteRulesManager; import org.apache.druid.sql.calcite.planner.CatalogResolver; import org.apache.druid.sql.calcite.planner.PlannerConfig; +import org.apache.druid.sql.calcite.run.NativeSqlEngine; import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.schema.DruidSchemaName; +import org.apache.druid.sql.calcite.util.CacheTestHelperModule; import org.apache.druid.sql.calcite.util.CalciteTests; import org.apache.druid.sql.calcite.util.SqlTestFramework; import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; @@ -259,7 +265,7 @@ public void configureGuice(DruidInjectorBuilder builder) { delegate.configureGuice(builder); TestRequestLogger testRequestLogger = new TestRequestLogger(); - builder.addModule(connectionModule); +// builder.addModule(connectionModule); builder.addModule( binder -> { binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); @@ -406,6 +412,7 @@ private static Module propOverrideModuel() localProps.put("druid.enableTlsPort", "false"); localProps.put("druid.zk.service.enabled", "false"); localProps.put("druid.plaintextPort","12345"); + localProps.put("druid.host", "localhost"); Module m = binder -> binder.bind(Properties.class).toInstance(localProps); @@ -423,6 +430,18 @@ protected void configure() } @Provides + @LazySingleton + public SqlEngine createMockSqlEngine( + final QuerySegmentWalker walker, + final QueryRunnerFactoryConglomerate conglomerate, + @Json ObjectMapper jsonMapper ) + { + return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); + } + + + @Provides + @LazySingleton DruidNodeDiscoveryProvider getProvider() { final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( @@ -502,7 +521,7 @@ public void registerListener(Listener listener) } - private static Module discoverModule() + private static DiscovertModule discoverModule() { // DruidNodeDiscoveryProvider instance = ; @@ -558,7 +577,9 @@ private static void main1(Object object) throws Exception SqlTestFramework framework = getCI().extracted( propOverrideModuel(), - discoverModule() + discoverModule(), + binder -> binder.bind(BrokerSegmentMetadataCache.class).toProvider(Providers.of(null)) + ) ; @@ -568,7 +589,21 @@ private static void main1(Object object) throws Exception - CliBroker c = new CliBroker(); + CliBroker2 c = new CliBroker2() { + protected List getModules() { + List ret = new ArrayList<>(); + ret.add(discoverModule()); + ret.add(propOverrideModuel()); + ret.add(framework.testSetupModule()); +// ret.add(new AvaticaBasedConnectionModule()); + ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); + ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); + ret.addAll(super.getModules()); + return ret; + } + + + }; framework.injector().injectMembers(c); // c.configure(new Properties()); c.run(); diff --git a/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java b/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java index f49893b6b05f..e091e6eb5229 100644 --- a/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java +++ b/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java @@ -24,6 +24,7 @@ import org.apache.druid.math.expr.ExpressionProcessingModule; import org.apache.druid.utils.RuntimeInfo; +import java.util.Arrays; import java.util.Properties; /** @@ -74,9 +75,9 @@ public StartupInjectorBuilder withExtensions() public StartupInjectorBuilder forServer() { -// withExtensions(); + withExtensions(); add( -// new PropertiesModule(Arrays.asList("common.runtime.properties", "runtime.properties")), + new PropertiesModule(Arrays.asList("common.runtime.properties", "runtime.properties")), new RuntimeInfoModule() ); return this; diff --git a/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java b/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java index 5f3dbd3abe7d..9136c7d34586 100644 --- a/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java +++ b/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java @@ -40,7 +40,7 @@ public class BrokerSegmentWatcherConfig private boolean watchRealtimeTasks = true; @JsonProperty - private boolean awaitInitializationOnStart = true; + private boolean awaitInitializationOnStart = false; public Set getWatchedTiers() { diff --git a/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java b/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java index 37f32eefbe39..4889261fcae4 100644 --- a/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java +++ b/server/src/main/java/org/apache/druid/curator/discovery/DiscoveryModule.java @@ -77,15 +77,12 @@ /** * The DiscoveryModule allows for the registration of Keys of DruidNode objects, which it intends to be * automatically announced at the end of the lifecycle start. - * + * * In order for this to work a ServiceAnnouncer instance *must* be injected and instantiated first. * This can often be achieved by registering ServiceAnnouncer.class with the LifecycleModule. */ public class DiscoveryModule implements Module { -public DiscoveryModule(){ - super(); - } private static final String NAME = "DiscoveryModule:internal"; private static final String INTERNAL_DISCOVERY_PROP = "druid.discovery.type"; @@ -101,7 +98,7 @@ public void configure(Properties properties) /** * Requests that the un-annotated DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle @@ -115,7 +112,7 @@ public static void registerDefault(Binder binder) /** * Requests that the annotated DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class, annotation)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle @@ -129,7 +126,7 @@ public static void register(Binder binder, Annotation annotation) /** * Requests that the annotated DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class, annotation)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle @@ -144,7 +141,7 @@ public static void register(Binder binder, Class annotatio /** * Requests that the keyed DruidNode instance be injected and published as part of the lifecycle. - * + * * That is, this module will announce the DruidNode instance returned by * injector.getInstance(Key.get(DruidNode.class, annotation)) automatically. * Announcement will happen in the ANNOUNCEMENTS stage of the Lifecycle diff --git a/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java b/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java index dd42c158f9c6..7c6b4e99d36c 100644 --- a/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java +++ b/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java @@ -119,9 +119,9 @@ public HttpClient get() final Binding sslContextBinding = getSslContextBinding(); -// if (sslContextBinding != null) { + if (sslContextBinding != null) { // builder.withSslContext(sslContextBinding.getProvider().get()); -// } + } HttpClient client = HttpClientInit.createClient( builder.build(), diff --git a/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java b/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java index 264cf9944144..59516f8d4c49 100644 --- a/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java +++ b/server/src/main/java/org/apache/druid/initialization/CoreInjectorBuilder.java @@ -20,7 +20,11 @@ package org.apache.druid.initialization; import com.google.inject.Injector; +import org.apache.druid.curator.CuratorModule; +import org.apache.druid.curator.discovery.DiscoveryModule; import org.apache.druid.discovery.NodeRole; +import org.apache.druid.guice.AnnouncerModule; +import org.apache.druid.guice.CoordinatorDiscoveryModule; import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.DruidSecondaryModule; import org.apache.druid.guice.ExpressionModule; @@ -102,8 +106,8 @@ public CoreInjectorBuilder forServer() HttpClientModule.escalatedGlobal(), new HttpClientModule("druid.broker.http", Client.class, true), new HttpClientModule("druid.broker.http", EscalatedClient.class, true), -// new CuratorModule(), -// new AnnouncerModule(), + new CuratorModule(), + new AnnouncerModule(), new MetricsModule(), new SegmentWriteOutMediumModule(), new ServerModule(), @@ -111,12 +115,12 @@ public CoreInjectorBuilder forServer() new JettyServerModule(), new ExpressionModule(), new NestedDataModule(), -// new DiscoveryModule(), + new DiscoveryModule(), new ServerViewModule(), new MetadataConfigModule(), new DerbyMetadataStorageDruidModule(), new JacksonConfigManagerModule(), -// new CoordinatorDiscoveryModule(), + new CoordinatorDiscoveryModule(), new LocalDataStorageDruidModule(), new TombstoneDataStorageModule(), new FirehoseModule(), diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker.java b/services/src/main/java/org/apache/druid/cli/CliBroker.java index eee0773237e3..7fe5ec576310 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker.java @@ -47,6 +47,7 @@ import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; import org.apache.druid.guice.LifecycleModule; +import org.apache.druid.guice.ManageLifecycle; import org.apache.druid.guice.QueryRunnerFactoryModule; import org.apache.druid.guice.QueryableModule; import org.apache.druid.guice.SegmentWranglerModule; @@ -163,7 +164,7 @@ protected List getModules() LifecycleModule.register(binder, Server.class); binder.bind(SegmentManager.class).in(LazySingleton.class); -// binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); + binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); Jerseys.addResource(binder, HistoricalResource.class); Jerseys.addResource(binder, SegmentListerResource.class); diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker2.java b/services/src/main/java/org/apache/druid/cli/CliBroker2.java new file mode 100644 index 000000000000..8bde7a4ee41b --- /dev/null +++ b/services/src/main/java/org/apache/druid/cli/CliBroker2.java @@ -0,0 +1,286 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.cli; + +import com.github.rvesse.airline.annotations.Command; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Inject; +import com.google.inject.Key; +import com.google.inject.Module; +import com.google.inject.name.Names; +import org.apache.druid.client.BrokerSegmentWatcherConfig; +import org.apache.druid.client.BrokerServerView; +import org.apache.druid.client.CachingClusteredClient; +import org.apache.druid.client.HttpServerInventoryViewResource; +import org.apache.druid.client.InternalQueryConfig; +import org.apache.druid.client.TimelineServerView; +import org.apache.druid.client.cache.CacheConfig; +import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; +import org.apache.druid.client.selector.ServerSelectorStrategy; +import org.apache.druid.client.selector.TierSelectorStrategy; +import org.apache.druid.curator.ZkEnablementConfig; +import org.apache.druid.discovery.NodeRole; +import org.apache.druid.guice.BrokerProcessingModule; +import org.apache.druid.guice.BrokerServiceModule; +import org.apache.druid.guice.CacheModule; +import org.apache.druid.guice.Jerseys; +import org.apache.druid.guice.JoinableFactoryModule; +import org.apache.druid.guice.JsonConfigProvider; +import org.apache.druid.guice.LazySingleton; +import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; +import org.apache.druid.guice.LifecycleModule; +import org.apache.druid.guice.ManageLifecycle; +import org.apache.druid.guice.QueryRunnerFactoryModule; +import org.apache.druid.guice.QueryableModule; +import org.apache.druid.guice.SegmentWranglerModule; +import org.apache.druid.guice.ServerTypeConfig; +import org.apache.druid.java.util.common.logger.Logger; +import org.apache.druid.query.QuerySegmentWalker; +import org.apache.druid.query.RetryQueryRunnerConfig; +import org.apache.druid.query.lookup.LookupModule; +import org.apache.druid.server.BrokerQueryResource; +import org.apache.druid.server.ClientInfoResource; +import org.apache.druid.server.ClientQuerySegmentWalker; +import org.apache.druid.server.ResponseContextConfig; +import org.apache.druid.server.SegmentManager; +import org.apache.druid.server.SubqueryGuardrailHelper; +import org.apache.druid.server.SubqueryGuardrailHelperProvider; +import org.apache.druid.server.coordination.ServerType; +import org.apache.druid.server.coordination.ZkCoordinator; +import org.apache.druid.server.http.BrokerResource; +import org.apache.druid.server.http.HistoricalResource; +import org.apache.druid.server.http.SegmentListerResource; +import org.apache.druid.server.http.SelfDiscoveryResource; +import org.apache.druid.server.initialization.jetty.JettyServerInitializer; +import org.apache.druid.server.metrics.QueryCountStatsProvider; +import org.apache.druid.server.metrics.SubqueryCountStatsProvider; +import org.apache.druid.server.router.TieredBrokerConfig; +import org.apache.druid.sql.calcite.schema.DruidSchemaName; +import org.apache.druid.sql.calcite.schema.MetadataSegmentView; +import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.calcite.util.LookylooModule; +import org.apache.druid.sql.guice.SqlModule; +import org.apache.druid.timeline.PruneLoadSpec; +import org.eclipse.jetty.server.Server; + +import java.util.List; +import java.util.Properties; +import java.util.Set; + +@Command( + name = "broker", + description = "Runs a broker node, see https://druid.apache.org/docs/latest/Broker.html for a description" +) +public class CliBroker2 extends ServerRunnable +{ + private static final Logger log = new Logger(CliBroker2.class); + + private boolean isZkEnabled = true; + + public CliBroker2() + { + super(log); + } + + + List getmodules2() + { + return getModules(); + } + + @Inject + public void configure(Properties properties) + { + isZkEnabled = ZkEnablementConfig.isEnabled(properties); + } + + @Override + protected Set getNodeRoles(Properties properties) + { + return ImmutableSet.of( + NodeRole.BROKER, + NodeRole.COORDINATOR, + NodeRole.HISTORICAL, + NodeRole.INDEXER, + NodeRole.MIDDLE_MANAGER, + NodeRole.ROUTER, + NodeRole.OVERLORD + + ); + } + + @Override + protected List getModules() + { + return ImmutableList.of( + new LegacyBrokerParallelMergeConfigModule(), + new BrokerProcessingModule(), +// new QueryableModule(), + new QueryRunnerFactoryModule(), + new SegmentWranglerModule(), + new JoinableFactoryModule(), + new BrokerServiceModule(), + binder -> { + validateCentralizedDatasourceSchemaConfig(getProperties()); + + binder.bindConstant().annotatedWith(Names.named("serviceName")).to( + TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME + ); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); + binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); + binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); + +// binder.bind(CachingClusteredClient.class).in(LazySingleton.class); +// LifecycleModule.register(binder, BrokerServerView.class); +// LifecycleModule.register(binder, MetadataSegmentView.class); + binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); +// +// JsonConfigProvider.bind(binder, "druid.broker.cache", CacheConfig.class); +// binder.install(new CacheModule()); +// + JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); + +// binder.bind(QuerySegmentWalker.class).to(ClientQuerySegmentWalker.class).in(LazySingleton.class); + + binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); + +// binder.bind(BrokerQueryResource.class).in(LazySingleton.class); + Jerseys.addResource(binder, BrokerQueryResource.class); +// binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); +// binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); +// binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); + Jerseys.addResource(binder, BrokerResource.class); + Jerseys.addResource(binder, ClientInfoResource.class); + + LifecycleModule.register(binder, BrokerQueryResource.class); + +// Jerseys.addResource(binder, HttpServerInventoryViewResource.class); + + LifecycleModule.register(binder, Server.class); +// binder.bind(SegmentManager.class).in(LazySingleton.class); +// binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); + binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); +// Jerseys.addResource(binder, HistoricalResource.class); +// Jerseys.addResource(binder, SegmentListerResource.class); + +// if (isZkEnabled) { +// LifecycleModule.register(binder, ZkCoordinator.class); +// } + +// bindAnnouncer( +// binder, +// DiscoverySideEffectsProvider.withLegacyAnnouncer() +// ); + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + + Jerseys.addResource(binder, SelfDiscoveryResource.class); + LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); + }, +// new LookupModule(), + new LookylooModule(), + new SqlModule() + ); + } + + protected List getModules1() + { + return ImmutableList.of( + new LegacyBrokerParallelMergeConfigModule(), + new BrokerProcessingModule(), + new QueryableModule(), + new QueryRunnerFactoryModule(), + new SegmentWranglerModule(), + new JoinableFactoryModule(), + new BrokerServiceModule(), + binder -> { + validateCentralizedDatasourceSchemaConfig(getProperties()); + + binder.bindConstant().annotatedWith(Names.named("serviceName")).to( + TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME + ); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); + binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); + binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); + + binder.bind(CachingClusteredClient.class).in(LazySingleton.class); + LifecycleModule.register(binder, BrokerServerView.class); + LifecycleModule.register(binder, MetadataSegmentView.class); + binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); + + JsonConfigProvider.bind(binder, "druid.broker.cache", CacheConfig.class); + binder.install(new CacheModule()); + + JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); + + binder.bind(QuerySegmentWalker.class).to(ClientQuerySegmentWalker.class).in(LazySingleton.class); + + binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); + + binder.bind(BrokerQueryResource.class).in(LazySingleton.class); + Jerseys.addResource(binder, BrokerQueryResource.class); + binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); + binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); + binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); + Jerseys.addResource(binder, BrokerResource.class); + Jerseys.addResource(binder, ClientInfoResource.class); + + LifecycleModule.register(binder, BrokerQueryResource.class); + + Jerseys.addResource(binder, HttpServerInventoryViewResource.class); + + LifecycleModule.register(binder, Server.class); + binder.bind(SegmentManager.class).in(LazySingleton.class); + binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); + binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); + Jerseys.addResource(binder, HistoricalResource.class); + Jerseys.addResource(binder, SegmentListerResource.class); + + if (isZkEnabled) { + LifecycleModule.register(binder, ZkCoordinator.class); + } + + bindAnnouncer( + binder, + DiscoverySideEffectsProvider.withLegacyAnnouncer() + ); + + Jerseys.addResource(binder, SelfDiscoveryResource.class); + LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); + }, + new LookupModule(), + new SqlModule() + ); + } +} diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java b/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java index 0573d8d49ee1..838143f30e7a 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java @@ -21,7 +21,6 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.Sets; -import com.google.inject.Inject; import org.apache.druid.client.InternalQueryConfig; import org.apache.druid.client.ServerView; import org.apache.druid.client.TimelineServerView; @@ -77,7 +76,6 @@ public class BrokerSegmentMetadataCache extends AbstractSegmentMetadataCache Date: Wed, 15 May 2024 16:23:11 +0000 Subject: [PATCH 011/122] workinhg stuff --- .../org/apache/druid/quidem/Launcher2.java | 613 ++++++++++++++++++ .../src/main/resources/log4j2.xml | 2 +- .../apache/druid/server/StatusResource.java | 2 +- 3 files changed, 615 insertions(+), 2 deletions(-) create mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java new file mode 100644 index 000000000000..0dcc30db5cf3 --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java @@ -0,0 +1,613 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import com.google.inject.AbstractModule; +import com.google.inject.Binder; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; +import com.google.inject.Provides; +import com.google.inject.TypeLiteral; +import com.google.inject.name.Names; +import com.google.inject.util.Modules; +import com.google.inject.util.Providers; +import org.apache.calcite.avatica.server.AbstractAvaticaHandler; +import org.apache.druid.cli.CliBroker2; +import org.apache.druid.discovery.DiscoveryDruidNode; +import org.apache.druid.discovery.DruidNodeDiscovery; +import org.apache.druid.discovery.DruidNodeDiscoveryProvider; +import org.apache.druid.discovery.NodeRole; +import org.apache.druid.guice.DruidInjectorBuilder; +import org.apache.druid.guice.LazySingleton; +import org.apache.druid.guice.StartupInjectorBuilder; +import org.apache.druid.guice.annotations.Json; +import org.apache.druid.initialization.DruidModule; +import org.apache.druid.java.util.common.FileUtils; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.java.util.common.io.Closer; +import org.apache.druid.java.util.emitter.service.ServiceEmitter; +import org.apache.druid.query.DefaultQueryConfig; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.QuerySegmentWalker; +import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; +import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.server.DruidNode; +import org.apache.druid.server.QueryLifecycleFactory; +import org.apache.druid.server.QueryScheduler; +import org.apache.druid.server.QuerySchedulerProvider; +import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.server.log.RequestLogger; +import org.apache.druid.server.log.TestRequestLogger; +import org.apache.druid.server.metrics.NoopServiceEmitter; +import org.apache.druid.server.security.AuthenticatorMapper; +import org.apache.druid.server.security.AuthorizerMapper; +import org.apache.druid.server.security.Escalator; +import org.apache.druid.sql.avatica.AvaticaMonitor; +import org.apache.druid.sql.avatica.DruidAvaticaJsonHandler; +import org.apache.druid.sql.avatica.DruidMeta; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; +import org.apache.druid.sql.calcite.planner.CalciteRulesManager; +import org.apache.druid.sql.calcite.planner.CatalogResolver; +import org.apache.druid.sql.calcite.planner.PlannerConfig; +import org.apache.druid.sql.calcite.run.NativeSqlEngine; +import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; +import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; +import org.apache.druid.sql.calcite.schema.DruidSchemaName; +import org.apache.druid.sql.calcite.util.CacheTestHelperModule; +import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.calcite.util.SqlTestFramework; +import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; +import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; +import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; +import org.apache.druid.sql.guice.SqlModule; +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.client.utils.URLEncodedUtils; +import org.eclipse.jetty.server.Server; +import org.junit.Test; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.function.BooleanSupplier; + +public class Launcher2 +{ + + public static final String URI_PREFIX = "druidtest://"; + public static final String DEFAULT_URI = URI_PREFIX + "/"; + + static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); + + public Launcher2() + { + } + + public Connection connect(String url, Properties info) throws SQLException + { + try { + SqlTestFrameworkConfig config = buildConfigfromURIParams(url); + + ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( + config, + x -> new AvaticaBasedTestConnectionSupplier(x) + ); + + AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); + return server.getConnection(info); + } + catch (Exception e) { + throw new SQLException("Can't create testconnection", e); + } + } + + static class AvaticaBasedConnectionModule implements DruidModule, Closeable + { + Closer closer = Closer.create(); + + @Provides + @LazySingleton + public DruidSchemaCatalog getLookupNodeService(QueryRunnerFactoryConglomerate conglomerate, + SpecificSegmentsQuerySegmentWalker walker, PlannerConfig plannerConfig) + { + return CalciteTests.createMockRootSchema( + conglomerate, + walker, + plannerConfig, + CalciteTests.TEST_AUTHORIZER_MAPPER + ); + } + + @Provides + @LazySingleton + public DruidConnectionExtras getConnectionExtras(ObjectMapper objectMapper) + { + return new DruidConnectionExtras.DruidConnectionExtrasImpl(objectMapper); + } + + @Provides + @LazySingleton + public AvaticaJettyServer getAvaticaServer(DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) + throws Exception + { + AvaticaJettyServer avaticaJettyServer = new AvaticaJettyServer(druidMeta, druidConnectionExtras); + closer.register(avaticaJettyServer); + return avaticaJettyServer; + } + + @Override + public void configure(Binder binder) + { + } + + @Override + public void close() throws IOException + { + closer.close(); + } + + } + + static class AvaticaJettyServer implements Closeable + { + final DruidMeta druidMeta; + final Server server; + final String url; + final DruidConnectionExtras connectionExtras; + + AvaticaJettyServer(final DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) throws Exception + { + this.druidMeta = druidMeta; + server = new Server(0); + server.setHandler(getAvaticaHandler(druidMeta)); + server.start(); + url = StringUtils.format( + "jdbc:avatica:remote:url=%s", + new URIBuilder(server.getURI()).setPath(DruidAvaticaJsonHandler.AVATICA_PATH).build() + ); + connectionExtras = druidConnectionExtras; + } + + public Connection getConnection(Properties info) throws SQLException + { + Connection realConnection = DriverManager.getConnection(url, info); + Connection proxyConnection = DynamicComposite.make( + realConnection, + Connection.class, + connectionExtras, + DruidConnectionExtras.class + ); + return proxyConnection; + } + + @Override + public void close() + { + druidMeta.closeAllConnections(); + try { + server.stop(); + } + catch (Exception e) { + throw new RuntimeException("Can't stop server", e); + } + } + + protected AbstractAvaticaHandler getAvaticaHandler(final DruidMeta druidMeta) + { + return new DruidAvaticaJsonHandler( + druidMeta, + new DruidNode("dummy", "dummy", false, 1, null, true, false), + new AvaticaMonitor() + ); + } + } + + static class AvaticaBasedTestConnectionSupplier implements QueryComponentSupplier + { + private QueryComponentSupplier delegate; + private AvaticaBasedConnectionModule connectionModule; + + public AvaticaBasedTestConnectionSupplier(QueryComponentSupplier delegate) + { + this.delegate = delegate; + this.connectionModule = new AvaticaBasedConnectionModule(); + } + + @Override + public void gatherProperties(Properties properties) + { + delegate.gatherProperties(properties); + } + + @Override + public void configureGuice(DruidInjectorBuilder builder) + { + delegate.configureGuice(builder); + TestRequestLogger testRequestLogger = new TestRequestLogger(); +// builder.addModule(connectionModule); + builder.addModule( + binder -> { + binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); + binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); + binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); + binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); + binder.bind(RequestLogger.class).toInstance(testRequestLogger); + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); + binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); + binder.bind(QueryScheduler.class) + .toProvider(QuerySchedulerProvider.class) + .in(LazySingleton.class); + binder.install(new SqlModule.SqlStatementFactoryModule()); + binder.bind(new TypeLiteral>() + { + }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); + binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); + binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); + } + ); + } + + @Override + public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) + { + return delegate.createCongolmerate(builder, closer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + } + + @Override + public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) + { + return delegate.createEngine(qlf, objectMapper, injector); + } + + @Override + public void configureJsonMapper(ObjectMapper mapper) + { + delegate.configureJsonMapper(mapper); + } + + @Override + public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) + { + return delegate.createJoinableFactoryWrapper(lookupProvider); + } + + @Override + public void finalizeTestFramework(SqlTestFramework sqlTestFramework) + { + delegate.finalizeTestFramework(sqlTestFramework); + } + + @Override + public void close() throws IOException + { + connectionModule.close(); + delegate.close(); + } + + @Override + public PlannerComponentSupplier getPlannerComponentSupplier() + { + return delegate.getPlannerComponentSupplier(); + } + } + + protected File createTempFolder(String prefix) + { + File tempDir = FileUtils.createTempDir(prefix); + Runtime.getRuntime().addShutdownHook(new Thread() + { + @Override + public void run() + { + try { + FileUtils.deleteDirectory(tempDir); + } + catch (IOException ex) { + ex.printStackTrace(); + } + } + }); + return tempDir; + } + + public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws SQLException + { + Map queryParams; + queryParams = new HashMap<>(); + try { + List params = URLEncodedUtils.parse(new URI(url), StandardCharsets.UTF_8); + for (NameValuePair pair : params) { + queryParams.put(pair.getName(), pair.getValue()); + } + // possible caveat: duplicate entries overwrite earlier ones + } + catch (URISyntaxException e) { + throw new SQLException("Can't decode URI", e); + } + + return new SqlTestFrameworkConfig(queryParams); + } + + public static void main(String[] args) throws Exception + { + ConfigurationInstance ci = getCI(); + + AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); + + } + + private static ConfigurationInstance getCI() throws SQLException, Exception + { + SqlTestFrameworkConfig config = buildConfigfromURIParams("druidtest:///"); + + ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( + config, + x -> new AvaticaBasedTestConnectionSupplier(x) + ); + return ci; + } + + @Test + public void runIt() throws Exception + { + Launcher2.main1(null); + } + + private static Module propOverrideModuel() + { + Properties localProps = new Properties(); + localProps.put("druid.enableTlsPort", "false"); + localProps.put("druid.zk.service.enabled", "false"); + localProps.put("druid.plaintextPort","12345"); + localProps.put("druid.host", "localhost"); + + + Module m = binder -> binder.bind(Properties.class).toInstance(localProps); + return m; + } + + public static class DiscovertModule extends AbstractModule { + + DiscovertModule() { + } + + @Override + protected void configure() + { + } + + @Provides + @LazySingleton + public SqlEngine createMockSqlEngine( + final QuerySegmentWalker walker, + final QueryRunnerFactoryConglomerate conglomerate, + @Json ObjectMapper jsonMapper ) + { + return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); + } + + + @Provides + @LazySingleton + DruidNodeDiscoveryProvider getProvider() { + final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); + FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( + ImmutableMap.of( + NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode)) + ) + ); + return provider; + } + + /** + * A fake {@link DruidNodeDiscoveryProvider} for {@link #createMockSystemSchema}. + */ + private static class FakeDruidNodeDiscoveryProvider extends DruidNodeDiscoveryProvider + { + private final Map nodeDiscoveries; + + public FakeDruidNodeDiscoveryProvider(Map nodeDiscoveries) + { + this.nodeDiscoveries = nodeDiscoveries; + } + + @Override + public BooleanSupplier getForNode(DruidNode node, NodeRole nodeRole) + { + boolean get = nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()) + .getAllNodes() + .stream() + .anyMatch(x -> x.getDruidNode().equals(node)); + return () -> get; + } + + @Override + public DruidNodeDiscovery getForNodeRole(NodeRole nodeRole) + { + return nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()); + } + } + + private static class FakeDruidNodeDiscovery implements DruidNodeDiscovery + { + private final Set nodes; + + FakeDruidNodeDiscovery() + { + this.nodes = new HashSet<>(); + } + + FakeDruidNodeDiscovery(Map nodes) + { + this.nodes = Sets.newHashSetWithExpectedSize(nodes.size()); + nodes.forEach((k, v) -> { + addNode(v, k); + }); + } + + @Override + public Collection getAllNodes() + { + return nodes; + } + + void addNode(DruidNode node, NodeRole role) + { + final DiscoveryDruidNode discoveryNode = new DiscoveryDruidNode(node, role, ImmutableMap.of()); + this.nodes.add(discoveryNode); + } + + @Override + public void registerListener(Listener listener) + { + + } + } + + + + } + + private static DiscovertModule discoverModule() + { + +// DruidNodeDiscoveryProvider instance = ; +// Module m = binder -> binder.bind(DruidNodeDiscoveryProvider.class).toInstance(instance); + return new DiscovertModule(); + + } + + static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { + + private List overrideModules =new ArrayList<>(); + + public CustomStartupInjectorBuilder() + { + Module m = propOverrideModuel(); + addOverride(m); +// addOverride(binder -> { +// binder.bind(SSLClientConfig.class).toProvider(Providers.of(null)); +// binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null)); +// binder.bind(SSLClientConfig.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); +// binder.bind(SSLContext.class).toProvider(Providers.of(null)); +// binder.bind(SSLContextProvider.class).annotatedWith(Global.class).toProvider(Providers.of(null)); +// binder.bind(SSLContextProvider.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); +// binder.bind(SSLContext.class).annotatedWith(Global.class).toProvider(Providers.of(null)); +// binder.bind(SSLContext.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); +// } +// ); + + } + + private void addOverride(com.google.inject.Module m) + { + overrideModules.add(m); + } + + @Override + public Injector build() + { + return Guice.createInjector( + Modules.override(modules) + .with( overrideModules.toArray(new com.google.inject.Module[0]))); + + } + + } + + private static void main1(Object object) throws Exception + { + final Injector injector = new CustomStartupInjectorBuilder() + .forTests() + .build(); + + + SqlTestFramework framework = getCI().extracted( + propOverrideModuel(), + discoverModule(), + binder -> binder.bind(BrokerSegmentMetadataCache.class).toProvider(Providers.of(null)) + + ) + + ; + +// SSLContextProvider u = injector.getInstance(SSLContextProvider.class); +// System.out.println(u); + + + + CliBroker2 c = new CliBroker2() { + protected List getModules() { + List ret = new ArrayList<>(); + ret.add(discoverModule()); + ret.add(propOverrideModuel()); + ret.add(framework.testSetupModule()); +// ret.add(new AvaticaBasedConnectionModule()); + ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); + ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); + ret.addAll(super.getModules()); + return ret; + } + + + }; + framework.injector().injectMembers(c); + // c.configure(new Properties()); + c.run(); + + } + +} diff --git a/integration-tests/src/main/resources/log4j2.xml b/integration-tests/src/main/resources/log4j2.xml index 405619e31801..6325d9cf51d7 100644 --- a/integration-tests/src/main/resources/log4j2.xml +++ b/integration-tests/src/main/resources/log4j2.xml @@ -25,7 +25,7 @@ - + diff --git a/server/src/main/java/org/apache/druid/server/StatusResource.java b/server/src/main/java/org/apache/druid/server/StatusResource.java index e15ddaf43bd1..f1680f7503e9 100644 --- a/server/src/main/java/org/apache/druid/server/StatusResource.java +++ b/server/src/main/java/org/apache/druid/server/StatusResource.java @@ -137,7 +137,7 @@ public static class Status public Status(Collection modules) { - this.version = getDruidVersion(); + this.version = "30.0.0-asd1";//getDruidVersion(); this.modules = getExtensionVersions(modules); this.memory = new Memory(JvmUtils.getRuntimeInfo()); } From 074161dfde780815b0625fe16f2c0cc1af68ad38 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 05:53:42 +0000 Subject: [PATCH 012/122] add some service crap --- .../org/apache/druid/quidem/Launcher.java | 2 + .../apache/druid/quidem/QuidemCapture.java | 46 +++++++++++++++++++ .../druid/quidem/QuidemCaptureModule.java | 37 +++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java create mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 1f4859be726e..af50ce8cd2e9 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -598,6 +598,7 @@ protected List getModules() { // ret.add(new AvaticaBasedConnectionModule()); ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); + ret.add(new QuidemCaptureModule()); ret.addAll(super.getModules()); return ret; } @@ -606,6 +607,7 @@ protected List getModules() { }; framework.injector().injectMembers(c); // c.configure(new Properties()); + c.run(); } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java new file mode 100644 index 000000000000..3b29be13ade5 --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("/quidem") +public class QuidemCapture +{ + + @GET + @Path("/") + @Produces(MediaType.TEXT_PLAIN) + public String getSome() + { + return "Asd"; + } + + @GET + @Path("/asd") + @Produces(MediaType.TEXT_PLAIN) + public String getSome1() + { + return "Asd"; + } +} diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java new file mode 100644 index 000000000000..c5399f9421ff --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.google.inject.Binder; +import com.google.inject.Module; +import org.apache.druid.guice.Jerseys; + +public class QuidemCaptureModule implements Module +{ + + @Override + public void configure(Binder binder) + { + Jerseys.addResource(binder, QuidemCapture.class); + } + + + +} From 5f552a2997399881b0b4aa6c7e9a8b9336526e85 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 09:30:41 +0000 Subject: [PATCH 013/122] c --- .../org/apache/druid/quidem/Launcher.java | 179 +++++++++++++++++- .../druid/quidem/QuidemCaptureModule.java | 3 - .../java/org/apache/druid/cli/CliBroker2.java | 55 +++++- .../org/apache/druid/cli/GuiceRunnable.java | 2 +- 4 files changed, 224 insertions(+), 15 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index af50ce8cd2e9..54a81d99105e 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -41,8 +41,14 @@ import org.apache.druid.discovery.DruidNodeDiscovery; import org.apache.druid.discovery.DruidNodeDiscoveryProvider; import org.apache.druid.discovery.NodeRole; +import org.apache.druid.guice.BrokerProcessingModule; +import org.apache.druid.guice.BrokerServiceModule; import org.apache.druid.guice.DruidInjectorBuilder; +import org.apache.druid.guice.JoinableFactoryModule; import org.apache.druid.guice.LazySingleton; +import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; +import org.apache.druid.guice.QueryRunnerFactoryModule; +import org.apache.druid.guice.SegmentWranglerModule; import org.apache.druid.guice.StartupInjectorBuilder; import org.apache.druid.guice.annotations.Json; import org.apache.druid.initialization.DruidModule; @@ -403,7 +409,7 @@ private static ConfigurationInstance getCI() throws SQLException, Exception @Test public void runIt() throws Exception { - Launcher.main1(null); + Launcher.main3(null); } private static Module propOverrideModuel() @@ -612,4 +618,175 @@ protected List getModules() { } + + private static ConfigurationInstance getCI2() throws SQLException, Exception + { + SqlTestFrameworkConfig config = buildConfigfromURIParams("druidtest:///"); + + ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( + config, + x -> new AvaticaBasedTestConnectionSupplier2(x) + ); + return ci; + } + + static class AvaticaBasedTestConnectionSupplier2 implements QueryComponentSupplier + { + private QueryComponentSupplier delegate; + private AvaticaBasedConnectionModule connectionModule; + + public AvaticaBasedTestConnectionSupplier2(QueryComponentSupplier delegate) + { + this.delegate = delegate; + this.connectionModule = new AvaticaBasedConnectionModule(); + } + + @Override + public void gatherProperties(Properties properties) + { + delegate.gatherProperties(properties); + } + + @Override + public void configureGuice(DruidInjectorBuilder builder) + { + delegate.configureGuice(builder); + TestRequestLogger testRequestLogger = new TestRequestLogger(); +// builder.addModule(connectionModule); + + builder.addModule(discoverModule()); + builder.addModule(binder -> binder.bind(BrokerSegmentMetadataCache.class).toProvider(Providers.of(null))); + +// builder.addModule(propOverrideModuel()); + + if(false) { + builder.addModule(new LegacyBrokerParallelMergeConfigModule()); + builder.addModule(new BrokerProcessingModule()); +// new QueryableModule(), + builder.addModule(new QueryRunnerFactoryModule()); + builder.addModule(new SegmentWranglerModule()); + builder.addModule(new JoinableFactoryModule()); + builder.addModule(new BrokerServiceModule()); + } + +// builder.addModule(new StorageNodeModule()); + +// builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); + + builder.addModule( + binder -> { + binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); + binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); + binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); + binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); + binder.bind(RequestLogger.class).toInstance(testRequestLogger); + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); + binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); + binder.bind(QueryScheduler.class) + .toProvider(QuerySchedulerProvider.class) + .in(LazySingleton.class); + binder.install(new SqlModule.SqlStatementFactoryModule()); + binder.bind(new TypeLiteral>() + { + }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); + binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); + binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); + } + ); + + } + + @Override + public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) + { + return delegate.createCongolmerate(builder, closer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + } + + @Override + public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) + { + return delegate.createEngine(qlf, objectMapper, injector); + } + + @Override + public void configureJsonMapper(ObjectMapper mapper) + { + delegate.configureJsonMapper(mapper); + } + + @Override + public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) + { + return delegate.createJoinableFactoryWrapper(lookupProvider); + } + + @Override + public void finalizeTestFramework(SqlTestFramework sqlTestFramework) + { + delegate.finalizeTestFramework(sqlTestFramework); + } + + @Override + public void close() throws IOException + { + connectionModule.close(); + delegate.close(); + } + + @Override + public PlannerComponentSupplier getPlannerComponentSupplier() + { + return delegate.getPlannerComponentSupplier(); + } + } + + + private static void main3(Object object) throws Exception + { + + SqlTestFramework framework = getCI2().framework + // builder.addModule(propOverrideModuel()); + + ; + +// SSLContextProvider u = injector.getInstance(SSLContextProvider.class); +// System.out.println(u); + + + CliBroker2 c = new CliBroker2() { + protected List getModules() { + List ret = new ArrayList<>(); + ret.add(discoverModule()); + ret.add(propOverrideModuel()); + ret.add(framework.testSetupModule()); +// ret.add(new AvaticaBasedConnectionModule()); + ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); + ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); + ret.add(new QuidemCaptureModule()); + ret.addAll(super.getModules()); + return ret; + } + + + }; + framework.injector().injectMembers(c); +// c.configure(new Properties()); + + c.run2(); + + } + + } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java index c5399f9421ff..f041bc286b5a 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java @@ -31,7 +31,4 @@ public void configure(Binder binder) { Jerseys.addResource(binder, QuidemCapture.class); } - - - } diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker2.java b/services/src/main/java/org/apache/druid/cli/CliBroker2.java index 8bde7a4ee41b..856cc9dc0e47 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker2.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker2.java @@ -20,9 +20,10 @@ package org.apache.druid.cli; import com.github.rvesse.airline.annotations.Command; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.google.inject.Inject; +import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.name.Names; @@ -36,7 +37,6 @@ import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; import org.apache.druid.client.selector.ServerSelectorStrategy; import org.apache.druid.client.selector.TierSelectorStrategy; -import org.apache.druid.curator.ZkEnablementConfig; import org.apache.druid.discovery.NodeRole; import org.apache.druid.guice.BrokerProcessingModule; import org.apache.druid.guice.BrokerServiceModule; @@ -52,6 +52,8 @@ import org.apache.druid.guice.QueryableModule; import org.apache.druid.guice.SegmentWranglerModule; import org.apache.druid.guice.ServerTypeConfig; +import org.apache.druid.initialization.ServerInjectorBuilder; +import org.apache.druid.java.util.common.lifecycle.Lifecycle; import org.apache.druid.java.util.common.logger.Logger; import org.apache.druid.query.QuerySegmentWalker; import org.apache.druid.query.RetryQueryRunnerConfig; @@ -93,7 +95,7 @@ public class CliBroker2 extends ServerRunnable { private static final Logger log = new Logger(CliBroker2.class); - private boolean isZkEnabled = true; + private boolean isZkEnabled = false; public CliBroker2() { @@ -101,17 +103,11 @@ public CliBroker2() } - List getmodules2() + public List getmodules2() { return getModules(); } - @Inject - public void configure(Properties properties) - { - isZkEnabled = ZkEnablementConfig.isEnabled(properties); - } - @Override protected Set getNodeRoles(Properties properties) { @@ -283,4 +279,43 @@ protected List getModules1() new SqlModule() ); } + + + public void run2() + { + final Injector injector = makeInjector2(getNodeRoles(getProperties())); + final Lifecycle lifecycle = initLifecycle(injector); + + try { + lifecycle.join(); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + public Injector makeInjector2(Set nodeRoles) + { + try { + return makeServerInjector11(baseInjector, nodeRoles, getModules()); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + @VisibleForTesting + public static Injector makeServerInjector11( + final Injector baseInjector, + final Set nodeRoles, + final Iterable modules + ) + { + return new ServerInjectorBuilder(baseInjector) + .nodeRoles(nodeRoles) + .serviceModules(modules) + .build(); + } + + } diff --git a/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java b/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java index e20d64da51e1..4dd2420256b8 100644 --- a/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java +++ b/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java @@ -44,7 +44,7 @@ public abstract class GuiceRunnable implements Runnable private final Logger log; private Properties properties; - private Injector baseInjector; + protected Injector baseInjector; public GuiceRunnable(Logger log) { From 4a47b0229e4fec35b37d7f7c47afab0114e65bba Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 09:31:21 +0000 Subject: [PATCH 014/122] no roles --- services/src/main/java/org/apache/druid/cli/CliBroker2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker2.java b/services/src/main/java/org/apache/druid/cli/CliBroker2.java index 856cc9dc0e47..1faf2f329385 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker2.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker2.java @@ -312,7 +312,7 @@ public static Injector makeServerInjector11( ) { return new ServerInjectorBuilder(baseInjector) - .nodeRoles(nodeRoles) + .nodeRoles(null) .serviceModules(modules) .build(); } From 7e10df1ffaccdf14d8f1938eb14547bc4c6fb277 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 09:33:51 +0000 Subject: [PATCH 015/122] ... --- .../java/org/apache/druid/cli/CliBroker2.java | 34 ++++--------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker2.java b/services/src/main/java/org/apache/druid/cli/CliBroker2.java index 1faf2f329385..40d3d6ec33ea 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker2.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker2.java @@ -20,7 +20,6 @@ package org.apache.druid.cli; import com.github.rvesse.airline.annotations.Command; -import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Injector; @@ -283,39 +282,18 @@ protected List getModules1() public void run2() { - final Injector injector = makeInjector2(getNodeRoles(getProperties())); - final Lifecycle lifecycle = initLifecycle(injector); - try { - lifecycle.join(); - } - catch (Exception e) { - throw new RuntimeException(e); - } - } + Injector injector = new ServerInjectorBuilder(baseInjector) + .nodeRoles(null) + .serviceModules(getModules()) + .build(); - public Injector makeInjector2(Set nodeRoles) - { - try { - return makeServerInjector11(baseInjector, nodeRoles, getModules()); + Lifecycle lifecycle = initLifecycle(injector); + lifecycle.join(); } catch (Exception e) { throw new RuntimeException(e); } } - @VisibleForTesting - public static Injector makeServerInjector11( - final Injector baseInjector, - final Set nodeRoles, - final Iterable modules - ) - { - return new ServerInjectorBuilder(baseInjector) - .nodeRoles(null) - .serviceModules(modules) - .build(); - } - - } From c9638b78361d9e4e6cbae66828a466695cd76fab Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 09:44:16 +0000 Subject: [PATCH 016/122] update --- .../org/apache/druid/quidem/Launcher.java | 77 ++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 54a81d99105e..3119139c1649 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -37,35 +37,67 @@ import com.google.inject.util.Providers; import org.apache.calcite.avatica.server.AbstractAvaticaHandler; import org.apache.druid.cli.CliBroker2; +import org.apache.druid.curator.CuratorModule; +import org.apache.druid.curator.discovery.DiscoveryModule; import org.apache.druid.discovery.DiscoveryDruidNode; import org.apache.druid.discovery.DruidNodeDiscovery; import org.apache.druid.discovery.DruidNodeDiscoveryProvider; import org.apache.druid.discovery.NodeRole; +import org.apache.druid.guice.AnnouncerModule; import org.apache.druid.guice.BrokerProcessingModule; import org.apache.druid.guice.BrokerServiceModule; +import org.apache.druid.guice.CoordinatorDiscoveryModule; import org.apache.druid.guice.DruidInjectorBuilder; +import org.apache.druid.guice.ExpressionModule; +import org.apache.druid.guice.FirehoseModule; +import org.apache.druid.guice.JacksonConfigManagerModule; +import org.apache.druid.guice.JavaScriptModule; import org.apache.druid.guice.JoinableFactoryModule; import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; +import org.apache.druid.guice.LifecycleModule; +import org.apache.druid.guice.LocalDataStorageDruidModule; +import org.apache.druid.guice.MetadataConfigModule; +import org.apache.druid.guice.NestedDataModule; import org.apache.druid.guice.QueryRunnerFactoryModule; import org.apache.druid.guice.SegmentWranglerModule; +import org.apache.druid.guice.ServerModule; +import org.apache.druid.guice.ServerViewModule; import org.apache.druid.guice.StartupInjectorBuilder; +import org.apache.druid.guice.StartupLoggingModule; +import org.apache.druid.guice.StorageNodeModule; +import org.apache.druid.guice.annotations.Client; +import org.apache.druid.guice.annotations.EscalatedClient; import org.apache.druid.guice.annotations.Json; +import org.apache.druid.guice.http.HttpClientModule; +import org.apache.druid.guice.security.AuthenticatorModule; +import org.apache.druid.guice.security.AuthorizerModule; +import org.apache.druid.guice.security.DruidAuthModule; +import org.apache.druid.guice.security.EscalatorModule; import org.apache.druid.initialization.DruidModule; +import org.apache.druid.initialization.Log4jShutterDownerModule; +import org.apache.druid.initialization.TombstoneDataStorageModule; import org.apache.druid.java.util.common.FileUtils; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.java.util.common.io.Closer; import org.apache.druid.java.util.emitter.service.ServiceEmitter; +import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; import org.apache.druid.query.DefaultQueryConfig; import org.apache.druid.query.QueryRunnerFactoryConglomerate; import org.apache.druid.query.QuerySegmentWalker; import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; +import org.apache.druid.rpc.guice.ServiceClientModule; import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; import org.apache.druid.server.DruidNode; import org.apache.druid.server.QueryLifecycleFactory; import org.apache.druid.server.QueryScheduler; import org.apache.druid.server.QuerySchedulerProvider; import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.server.initialization.AuthenticatorMapperModule; +import org.apache.druid.server.initialization.AuthorizerMapperModule; +import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; +import org.apache.druid.server.initialization.jetty.JettyServerModule; import org.apache.druid.server.log.RequestLogger; import org.apache.druid.server.log.TestRequestLogger; import org.apache.druid.server.metrics.NoopServiceEmitter; @@ -93,6 +125,7 @@ import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.apache.druid.sql.guice.SqlModule; +import org.apache.druid.storage.StorageConnectorModule; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; import org.apache.http.client.utils.URLEncodedUtils; @@ -656,7 +689,6 @@ public void configureGuice(DruidInjectorBuilder builder) builder.addModule(discoverModule()); builder.addModule(binder -> binder.bind(BrokerSegmentMetadataCache.class).toProvider(Providers.of(null))); - // builder.addModule(propOverrideModuel()); if(false) { @@ -669,6 +701,49 @@ public void configureGuice(DruidInjectorBuilder builder) builder.addModule(new BrokerServiceModule()); } + if(false) { + builder.addModules( + new Log4jShutterDownerModule(), + new LifecycleModule(), +// ExtensionsModule.SecondaryModule.class, + new DruidAuthModule(), +// TLSCertificateCheckerModule.class, +// EmitterModule.class, + HttpClientModule.global(), + HttpClientModule.escalatedGlobal(), + new HttpClientModule("druid.broker.http", Client.class, true), + new HttpClientModule("druid.broker.http", EscalatedClient.class, true), + new CuratorModule(), + new AnnouncerModule(), +// new MetricsModule(), + new SegmentWriteOutMediumModule(), + new ServerModule(), + new StorageNodeModule(), + new JettyServerModule(), + new ExpressionModule(), + new NestedDataModule(), + new DiscoveryModule(), + new ServerViewModule(), + new MetadataConfigModule(), + new DerbyMetadataStorageDruidModule(), + new JacksonConfigManagerModule(), + new CoordinatorDiscoveryModule(), + new LocalDataStorageDruidModule(), + new TombstoneDataStorageModule(), + new FirehoseModule(), + new JavaScriptModule(), + new AuthenticatorModule(), + new AuthenticatorMapperModule(), + new EscalatorModule(), + new AuthorizerModule(), + new AuthorizerMapperModule(), + new StartupLoggingModule(), + new ExternalStorageAccessSecurityModule(), + new ServiceClientModule(), + new StorageConnectorModule() +); + } + // builder.addModule(new StorageNodeModule()); // builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); From cab3d945beb36db85ca32bfff5ed5089b3b5ba89 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 09:48:18 +0000 Subject: [PATCH 017/122] up --- .../org/apache/druid/quidem/Launcher.java | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 3119139c1649..c107586ae541 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -34,7 +34,6 @@ import com.google.inject.TypeLiteral; import com.google.inject.name.Names; import com.google.inject.util.Modules; -import com.google.inject.util.Providers; import org.apache.calcite.avatica.server.AbstractAvaticaHandler; import org.apache.druid.cli.CliBroker2; import org.apache.druid.curator.CuratorModule; @@ -445,7 +444,7 @@ public void runIt() throws Exception Launcher.main3(null); } - private static Module propOverrideModuel() + private static Module propOverrideModuel1() { Properties localProps = new Properties(); localProps.put("druid.enableTlsPort", "false"); @@ -466,6 +465,24 @@ public static class DiscovertModule extends AbstractModule { @Override protected void configure() { +// builder.addModule(propOverrideModuel()); + } + + @Provides + @LazySingleton + public BrokerSegmentMetadataCache provideCache() { + return null; + } + + @Provides + @LazySingleton + public Properties getProps() { + Properties localProps = new Properties(); + localProps.put("druid.enableTlsPort", "false"); + localProps.put("druid.zk.service.enabled", "false"); + localProps.put("druid.plaintextPort", "12345"); + localProps.put("druid.host", "localhost"); + return localProps; } @Provides @@ -558,15 +575,6 @@ public void registerListener(Listener listener) - } - - private static DiscovertModule discoverModule() - { - -// DruidNodeDiscoveryProvider instance = ; -// Module m = binder -> binder.bind(DruidNodeDiscoveryProvider.class).toInstance(instance); - return new DiscovertModule(); - } static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { @@ -575,8 +583,8 @@ static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { public CustomStartupInjectorBuilder() { - Module m = propOverrideModuel(); - addOverride(m); +// Module m = propOverrideModuel(); +// addOverride(m); // addOverride(binder -> { // binder.bind(SSLClientConfig.class).toProvider(Providers.of(null)); // binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null)); @@ -615,9 +623,7 @@ private static void main1(Object object) throws Exception SqlTestFramework framework = getCI().extracted( - propOverrideModuel(), - discoverModule(), - binder -> binder.bind(BrokerSegmentMetadataCache.class).toProvider(Providers.of(null)) + new DiscovertModule() ) @@ -631,8 +637,8 @@ private static void main1(Object object) throws Exception CliBroker2 c = new CliBroker2() { protected List getModules() { List ret = new ArrayList<>(); - ret.add(discoverModule()); - ret.add(propOverrideModuel()); + ret.add(new DiscovertModule()); +// ret.add(propOverrideModuel()); ret.add(framework.testSetupModule()); // ret.add(new AvaticaBasedConnectionModule()); ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); @@ -687,9 +693,7 @@ public void configureGuice(DruidInjectorBuilder builder) TestRequestLogger testRequestLogger = new TestRequestLogger(); // builder.addModule(connectionModule); - builder.addModule(discoverModule()); - builder.addModule(binder -> binder.bind(BrokerSegmentMetadataCache.class).toProvider(Providers.of(null))); -// builder.addModule(propOverrideModuel()); +// builder.addModule(new DiscovertModule()); if(false) { builder.addModule(new LegacyBrokerParallelMergeConfigModule()); @@ -843,8 +847,8 @@ private static void main3(Object object) throws Exception CliBroker2 c = new CliBroker2() { protected List getModules() { List ret = new ArrayList<>(); - ret.add(discoverModule()); - ret.add(propOverrideModuel()); + ret.add(new DiscovertModule()); +// ret.add(propOverrideModuel()); ret.add(framework.testSetupModule()); // ret.add(new AvaticaBasedConnectionModule()); ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); From 27735f2621c46051c0995e07e1ff11bd132b9635 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 09:50:10 +0000 Subject: [PATCH 018/122] move disco --- .../apache/druid/quidem/DiscovertModule.java | 167 ++++++++++++++++++ .../org/apache/druid/quidem/Launcher.java | 135 +------------- .../calcite/util/CacheTestHelperModule2.java | 121 +++++++++++++ 3 files changed, 289 insertions(+), 134 deletions(-) create mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java create mode 100644 server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java new file mode 100644 index 000000000000..47caef82e32b --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Sets; +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import org.apache.druid.discovery.DiscoveryDruidNode; +import org.apache.druid.discovery.DruidNodeDiscovery; +import org.apache.druid.discovery.DruidNodeDiscoveryProvider; +import org.apache.druid.discovery.NodeRole; +import org.apache.druid.discovery.DruidNodeDiscovery.Listener; +import org.apache.druid.guice.LazySingleton; +import org.apache.druid.guice.annotations.Json; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.QuerySegmentWalker; +import org.apache.druid.server.DruidNode; +import org.apache.druid.sql.calcite.run.NativeSqlEngine; +import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; +import org.apache.druid.sql.calcite.util.CalciteTests; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.function.BooleanSupplier; + +public class DiscovertModule extends AbstractModule { + + DiscovertModule() { + } + + @Override + protected void configure() + { +// builder.addModule(propOverrideModuel()); + } + + @Provides + @LazySingleton + public BrokerSegmentMetadataCache provideCache() { + return null; + } + + @Provides + @LazySingleton + public Properties getProps() { + Properties localProps = new Properties(); + localProps.put("druid.enableTlsPort", "false"); + localProps.put("druid.zk.service.enabled", "false"); + localProps.put("druid.plaintextPort", "12345"); + localProps.put("druid.host", "localhost"); + return localProps; + } + + @Provides + @LazySingleton + public SqlEngine createMockSqlEngine( + final QuerySegmentWalker walker, + final QueryRunnerFactoryConglomerate conglomerate, + @Json ObjectMapper jsonMapper ) + { + return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); + } + + + @Provides + @LazySingleton + DruidNodeDiscoveryProvider getProvider() { + final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); + DiscovertModule.FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( + ImmutableMap.of( + NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode)) + ) + ); + return provider; + } + + /** + * A fake {@link DruidNodeDiscoveryProvider} for {@link #createMockSystemSchema}. + */ + private static class FakeDruidNodeDiscoveryProvider extends DruidNodeDiscoveryProvider + { + private final Map nodeDiscoveries; + + public FakeDruidNodeDiscoveryProvider(Map nodeDiscoveries) + { + this.nodeDiscoveries = nodeDiscoveries; + } + + @Override + public BooleanSupplier getForNode(DruidNode node, NodeRole nodeRole) + { + boolean get = nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()) + .getAllNodes() + .stream() + .anyMatch(x -> x.getDruidNode().equals(node)); + return () -> get; + } + + @Override + public DruidNodeDiscovery getForNodeRole(NodeRole nodeRole) + { + return nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()); + } + } + + private static class FakeDruidNodeDiscovery implements DruidNodeDiscovery + { + private final Set nodes; + + FakeDruidNodeDiscovery() + { + this.nodes = new HashSet<>(); + } + + FakeDruidNodeDiscovery(Map nodes) + { + this.nodes = Sets.newHashSetWithExpectedSize(nodes.size()); + nodes.forEach((k, v) -> { + addNode(v, k); + }); + } + + @Override + public Collection getAllNodes() + { + return nodes; + } + + void addNode(DruidNode node, NodeRole role) + { + final DiscoveryDruidNode discoveryNode = new DiscoveryDruidNode(node, role, ImmutableMap.of()); + this.nodes.add(discoveryNode); + } + + @Override + public void registerListener(Listener listener) + { + + } + } + + + + } \ No newline at end of file diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index c107586ae541..124a956198e5 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -24,8 +24,6 @@ import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; -import com.google.inject.AbstractModule; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; @@ -38,10 +36,6 @@ import org.apache.druid.cli.CliBroker2; import org.apache.druid.curator.CuratorModule; import org.apache.druid.curator.discovery.DiscoveryModule; -import org.apache.druid.discovery.DiscoveryDruidNode; -import org.apache.druid.discovery.DruidNodeDiscovery; -import org.apache.druid.discovery.DruidNodeDiscoveryProvider; -import org.apache.druid.discovery.NodeRole; import org.apache.druid.guice.AnnouncerModule; import org.apache.druid.guice.BrokerProcessingModule; import org.apache.druid.guice.BrokerServiceModule; @@ -67,7 +61,6 @@ import org.apache.druid.guice.StorageNodeModule; import org.apache.druid.guice.annotations.Client; import org.apache.druid.guice.annotations.EscalatedClient; -import org.apache.druid.guice.annotations.Json; import org.apache.druid.guice.http.HttpClientModule; import org.apache.druid.guice.security.AuthenticatorModule; import org.apache.druid.guice.security.AuthorizerModule; @@ -83,7 +76,6 @@ import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; import org.apache.druid.query.DefaultQueryConfig; import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.query.QuerySegmentWalker; import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; import org.apache.druid.rpc.guice.ServiceClientModule; import org.apache.druid.segment.join.JoinableFactoryWrapper; @@ -112,9 +104,7 @@ import org.apache.druid.sql.calcite.planner.CalciteRulesManager; import org.apache.druid.sql.calcite.planner.CatalogResolver; import org.apache.druid.sql.calcite.planner.PlannerConfig; -import org.apache.druid.sql.calcite.run.NativeSqlEngine; import org.apache.druid.sql.calcite.run.SqlEngine; -import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.schema.DruidSchemaName; import org.apache.druid.sql.calcite.util.CacheTestHelperModule; @@ -141,14 +131,10 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.Set; -import java.util.function.BooleanSupplier; public class Launcher { @@ -457,126 +443,6 @@ private static Module propOverrideModuel1() return m; } - public static class DiscovertModule extends AbstractModule { - - DiscovertModule() { - } - - @Override - protected void configure() - { -// builder.addModule(propOverrideModuel()); - } - - @Provides - @LazySingleton - public BrokerSegmentMetadataCache provideCache() { - return null; - } - - @Provides - @LazySingleton - public Properties getProps() { - Properties localProps = new Properties(); - localProps.put("druid.enableTlsPort", "false"); - localProps.put("druid.zk.service.enabled", "false"); - localProps.put("druid.plaintextPort", "12345"); - localProps.put("druid.host", "localhost"); - return localProps; - } - - @Provides - @LazySingleton - public SqlEngine createMockSqlEngine( - final QuerySegmentWalker walker, - final QueryRunnerFactoryConglomerate conglomerate, - @Json ObjectMapper jsonMapper ) - { - return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); - } - - - @Provides - @LazySingleton - DruidNodeDiscoveryProvider getProvider() { - final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); - FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( - ImmutableMap.of( - NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode)) - ) - ); - return provider; - } - - /** - * A fake {@link DruidNodeDiscoveryProvider} for {@link #createMockSystemSchema}. - */ - private static class FakeDruidNodeDiscoveryProvider extends DruidNodeDiscoveryProvider - { - private final Map nodeDiscoveries; - - public FakeDruidNodeDiscoveryProvider(Map nodeDiscoveries) - { - this.nodeDiscoveries = nodeDiscoveries; - } - - @Override - public BooleanSupplier getForNode(DruidNode node, NodeRole nodeRole) - { - boolean get = nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()) - .getAllNodes() - .stream() - .anyMatch(x -> x.getDruidNode().equals(node)); - return () -> get; - } - - @Override - public DruidNodeDiscovery getForNodeRole(NodeRole nodeRole) - { - return nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()); - } - } - - private static class FakeDruidNodeDiscovery implements DruidNodeDiscovery - { - private final Set nodes; - - FakeDruidNodeDiscovery() - { - this.nodes = new HashSet<>(); - } - - FakeDruidNodeDiscovery(Map nodes) - { - this.nodes = Sets.newHashSetWithExpectedSize(nodes.size()); - nodes.forEach((k, v) -> { - addNode(v, k); - }); - } - - @Override - public Collection getAllNodes() - { - return nodes; - } - - void addNode(DruidNode node, NodeRole role) - { - final DiscoveryDruidNode discoveryNode = new DiscoveryDruidNode(node, role, ImmutableMap.of()); - this.nodes.add(discoveryNode); - } - - @Override - public void registerListener(Listener listener) - { - - } - } - - - - } - static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { private List overrideModules =new ArrayList<>(); @@ -853,6 +719,7 @@ protected List getModules() { // ret.add(new AvaticaBasedConnectionModule()); ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); +// ret.add(CacheTestHelperModule2.ResultCacheMode.DISABLED.makeModule()); ret.add(new QuidemCaptureModule()); ret.addAll(super.getModules()); return ret; diff --git a/server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java b/server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java new file mode 100644 index 000000000000..0b47e63a6c87 --- /dev/null +++ b/server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.sql.calcite.util; + +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.Provides; +import org.apache.druid.client.cache.Cache; +import org.apache.druid.client.cache.CacheConfig; +import org.apache.druid.client.cache.MapCache; +import org.apache.druid.server.EtagProvider; + +public class CacheTestHelperModule2 extends AbstractModule +{ + + public enum ResultCacheMode + { + DISABLED, + ENABLED; + + public Module makeModule() + { + return new CacheTestHelperModule2(this); + } + + public boolean isPopulateResultLevelCache() + { + return this != DISABLED; + } + + public boolean isUseResultLevelCache() + { + return this != DISABLED; + } + } + + protected final Cache cache; + private CacheConfig cacheConfig; + private EtagProvider etagProvider; + + static class TestCacheConfig extends CacheConfig + { + private ResultCacheMode resultLevelCache; + + public TestCacheConfig(ResultCacheMode resultCacheMode) + { + this.resultLevelCache = resultCacheMode; + } + + @Override + public boolean isPopulateResultLevelCache() + { + return resultLevelCache.isPopulateResultLevelCache(); + } + + @Override + public boolean isUseResultLevelCache() + { + return resultLevelCache.isUseResultLevelCache(); + } + + } + + public CacheTestHelperModule2(ResultCacheMode resultCacheMode) + { + cacheConfig = new TestCacheConfig(resultCacheMode); + + switch (resultCacheMode) { + case ENABLED: + etagProvider = new EtagProvider.ProvideEtagBasedOnDatasource(); + cache = MapCache.create(1_000_000L); + break; + case DISABLED: + etagProvider = new EtagProvider.EmptyEtagProvider(); + cache = null; + break; + default: + throw new RuntimeException(); + } + } + + @Provides + EtagProvider etagProvider() + { + return etagProvider; + } + + @Provides + CacheConfig getCacheConfig() + { + return cacheConfig; + } + + @Provides + Cache getCache() + { + return cache; + } + + @Override + public void configure() + { + } +} From 28ea884e19dbbc6053e8d559d670499a6df5c222 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 10:01:22 +0000 Subject: [PATCH 019/122] almost ready? --- .../org/apache/druid/quidem/Launcher.java | 82 ++++++++++--------- .../sql/calcite/util/SqlTestFramework.java | 14 +++- 2 files changed, 53 insertions(+), 43 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 124a956198e5..4883cf5dbd6c 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -65,7 +65,7 @@ import org.apache.druid.guice.security.AuthenticatorModule; import org.apache.druid.guice.security.AuthorizerModule; import org.apache.druid.guice.security.DruidAuthModule; -import org.apache.druid.guice.security.EscalatorModule; +import org.apache.druid.initialization.CoreInjectorBuilder; import org.apache.druid.initialization.DruidModule; import org.apache.druid.initialization.Log4jShutterDownerModule; import org.apache.druid.initialization.TombstoneDataStorageModule; @@ -85,8 +85,6 @@ import org.apache.druid.server.QueryScheduler; import org.apache.druid.server.QuerySchedulerProvider; import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; -import org.apache.druid.server.initialization.AuthenticatorMapperModule; -import org.apache.druid.server.initialization.AuthorizerMapperModule; import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; import org.apache.druid.server.initialization.jetty.JettyServerModule; import org.apache.druid.server.log.RequestLogger; @@ -554,12 +552,18 @@ public void gatherProperties(Properties properties) @Override public void configureGuice(DruidInjectorBuilder builder) + { + throw new RuntimeException("f"); + } + + @Override + public void configureGuice(CoreInjectorBuilder builder, List overrideModules) { delegate.configureGuice(builder); TestRequestLogger testRequestLogger = new TestRequestLogger(); // builder.addModule(connectionModule); -// builder.addModule(new DiscovertModule()); + overrideModules.add(new DiscovertModule()); if(false) { builder.addModule(new LegacyBrokerParallelMergeConfigModule()); @@ -571,7 +575,38 @@ public void configureGuice(DruidInjectorBuilder builder) builder.addModule(new BrokerServiceModule()); } - if(false) { + +// builder.addModule(new StorageNodeModule()); + +// builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); + + builder.addModule( + binder -> { + binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); + binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); + binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); + binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); + binder.bind(RequestLogger.class).toInstance(testRequestLogger); + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); + binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); + binder.bind(QueryScheduler.class) + .toProvider(QuerySchedulerProvider.class) + .in(LazySingleton.class); + binder.install(new SqlModule.SqlStatementFactoryModule()); + binder.bind(new TypeLiteral>() + { + }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); + binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); + binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); + } + ); + + if(true) { builder.addModules( new Log4jShutterDownerModule(), new LifecycleModule(), @@ -603,47 +638,16 @@ public void configureGuice(DruidInjectorBuilder builder) new FirehoseModule(), new JavaScriptModule(), new AuthenticatorModule(), - new AuthenticatorMapperModule(), - new EscalatorModule(), +// new AuthenticatorMapperModule(), +// new EscalatorModule(), new AuthorizerModule(), - new AuthorizerMapperModule(), +// new AuthorizerMapperModule(), new StartupLoggingModule(), new ExternalStorageAccessSecurityModule(), new ServiceClientModule(), new StorageConnectorModule() ); } - -// builder.addModule(new StorageNodeModule()); - -// builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); - - builder.addModule( - binder -> { - binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); - binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); - binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); - binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); - binder.bind(RequestLogger.class).toInstance(testRequestLogger); - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); - binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); - binder.bind(QueryScheduler.class) - .toProvider(QuerySchedulerProvider.class) - .in(LazySingleton.class); - binder.install(new SqlModule.SqlStatementFactoryModule()); - binder.bind(new TypeLiteral>() - { - }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); - binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); - binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); - } - ); - } @Override diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index dfd946a0b436..fc4df291d7ef 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -184,6 +184,10 @@ default CatalogResolver createCatalogResolver() default void close() throws IOException { } + + default void configureGuice(CoreInjectorBuilder injectorBuilder, List overrideModules) { + configureGuice(injectorBuilder); + } } public interface PlannerComponentSupplier @@ -646,13 +650,15 @@ private SqlTestFramework(Builder builder) .addModule(new LookylooModule()) .addModule(new SegmentWranglerModule()) .addModule(new SqlAggregationModule()) - .addModule(new ExpressionModule()) - .addModule(testSetupModule()); + .addModule(new ExpressionModule()); +// .addModule(testSetupModule()); - builder.componentSupplier.configureGuice(injectorBuilder); + List overrideModules = new ArrayList<>(builder.overrideModules); + overrideModules.add(testSetupModule()); + builder.componentSupplier.configureGuice(injectorBuilder, overrideModules); ServiceInjectorBuilder serviceInjector = new ServiceInjectorBuilder(injectorBuilder); - serviceInjector.addAll(builder.overrideModules); + serviceInjector.addAll(overrideModules); this.injector = serviceInjector.build(); this.engine = builder.componentSupplier.createEngine(queryLifecycleFactory(), queryJsonMapper(), injector); From 118eb61939788311b28afae246719af018d9331c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 10:31:38 +0000 Subject: [PATCH 020/122] there - with 1 boot --- .../org/apache/druid/quidem/Launcher.java | 48 +++++++++++++++---- .../java/org/apache/druid/cli/CliBroker2.java | 2 +- .../sql/calcite/util/LookylooModule.java | 3 ++ 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 4883cf5dbd6c..767002c857b2 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -34,6 +34,7 @@ import com.google.inject.util.Modules; import org.apache.calcite.avatica.server.AbstractAvaticaHandler; import org.apache.druid.cli.CliBroker2; +import org.apache.druid.cli.GuiceRunnable; import org.apache.druid.curator.CuratorModule; import org.apache.druid.curator.discovery.DiscoveryModule; import org.apache.druid.guice.AnnouncerModule; @@ -42,6 +43,7 @@ import org.apache.druid.guice.CoordinatorDiscoveryModule; import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.ExpressionModule; +import org.apache.druid.guice.ExtensionsModule; import org.apache.druid.guice.FirehoseModule; import org.apache.druid.guice.JacksonConfigManagerModule; import org.apache.druid.guice.JavaScriptModule; @@ -68,10 +70,13 @@ import org.apache.druid.initialization.CoreInjectorBuilder; import org.apache.druid.initialization.DruidModule; import org.apache.druid.initialization.Log4jShutterDownerModule; +import org.apache.druid.initialization.ServerInjectorBuilder; import org.apache.druid.initialization.TombstoneDataStorageModule; import org.apache.druid.java.util.common.FileUtils; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.java.util.common.io.Closer; +import org.apache.druid.java.util.common.lifecycle.Lifecycle; +import org.apache.druid.java.util.common.logger.Logger; import org.apache.druid.java.util.emitter.service.ServiceEmitter; import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; import org.apache.druid.query.DefaultQueryConfig; @@ -93,6 +98,7 @@ import org.apache.druid.server.security.AuthenticatorMapper; import org.apache.druid.server.security.AuthorizerMapper; import org.apache.druid.server.security.Escalator; +import org.apache.druid.server.security.TLSCertificateCheckerModule; import org.apache.druid.sql.avatica.AvaticaMonitor; import org.apache.druid.sql.avatica.DruidAvaticaJsonHandler; import org.apache.druid.sql.avatica.DruidMeta; @@ -141,6 +147,7 @@ public class Launcher public static final String DEFAULT_URI = URI_PREFIX + "/"; static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); + private static Logger log = new Logger(Launcher.class); public Launcher() { @@ -429,16 +436,22 @@ public void runIt() throws Exception } private static Module propOverrideModuel1() + { + Properties localProps = makeLocalProps(); + + + Module m = binder -> binder.bind(Properties.class).toInstance(localProps); + return m; + } + + private static Properties makeLocalProps() { Properties localProps = new Properties(); localProps.put("druid.enableTlsPort", "false"); localProps.put("druid.zk.service.enabled", "false"); localProps.put("druid.plaintextPort","12345"); localProps.put("druid.host", "localhost"); - - - Module m = binder -> binder.bind(Properties.class).toInstance(localProps); - return m; + return localProps; } static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { @@ -578,10 +591,12 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod // builder.addModule(new StorageNodeModule()); -// builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); + builder.addModule( binder -> { + // why need to add this? +// binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); @@ -607,12 +622,13 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod ); if(true) { - builder.addModules( + + builder.add( new Log4jShutterDownerModule(), new LifecycleModule(), -// ExtensionsModule.SecondaryModule.class, + ExtensionsModule.SecondaryModule.class, new DruidAuthModule(), -// TLSCertificateCheckerModule.class, + TLSCertificateCheckerModule.class, // EmitterModule.class, HttpClientModule.global(), HttpClientModule.escalatedGlobal(), @@ -647,7 +663,17 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod new ServiceClientModule(), new StorageConnectorModule() ); +// builder.addModules(); +// builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); + + CliBroker2 cliBroker2 = new CliBroker2(); + cliBroker2.configure(makeLocalProps(), null); + overrideModules.addAll(cliBroker2.getmodules2()); + + builder.add(ServerInjectorBuilder.registerNodeRoleModule(ImmutableSet.of())); + } + } @Override @@ -713,7 +739,10 @@ private static void main3(Object object) throws Exception // SSLContextProvider u = injector.getInstance(SSLContextProvider.class); // System.out.println(u); - + if(true) { +Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); +lifecycle.join(); + }else { CliBroker2 c = new CliBroker2() { protected List getModules() { List ret = new ArrayList<>(); @@ -735,6 +764,7 @@ protected List getModules() { // c.configure(new Properties()); c.run2(); + } } diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker2.java b/services/src/main/java/org/apache/druid/cli/CliBroker2.java index 40d3d6ec33ea..3d014047d545 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker2.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker2.java @@ -198,7 +198,7 @@ protected List getModules() LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); }, // new LookupModule(), - new LookylooModule(), +// new LookylooModule(), new SqlModule() ); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/LookylooModule.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/LookylooModule.java index 4fab6a4a2322..35a519cc5fca 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/LookylooModule.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/LookylooModule.java @@ -45,6 +45,9 @@ */ public class LookylooModule implements DruidModule { + public LookylooModule() { + int asd1=1; + } private static final String LOOKYLOO_INJECTIVE = "lookyloo121"; private static final String LOOKYLOO_CHAINED = "lookyloo-chain"; From b63a80e5b74691ff554925070a010a9f508646b1 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 11:01:39 +0000 Subject: [PATCH 021/122] passes basic test --- .../org/apache/druid/quidem/Launcher.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 767002c857b2..6898b8dbe09a 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -130,6 +130,10 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.sql.Connection; import java.sql.DriverManager; @@ -140,6 +144,8 @@ import java.util.Map; import java.util.Properties; +import static org.junit.Assert.assertNotEquals; + public class Launcher { @@ -740,8 +746,21 @@ private static void main3(Object object) throws Exception // System.out.println(u); if(true) { -Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); -lifecycle.join(); + Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:12345/druid/v2/sql")) + .header("Content-Type", "application/json") + .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) + .build(); + System.out.println(request); +// request. + HttpClient hc = HttpClient.newHttpClient(); + HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); + System.out.println(a); + assertNotEquals(400, a.statusCode()); + + lifecycle.stop(); }else { CliBroker2 c = new CliBroker2() { protected List getModules() { From 93892b65240cf8406c512fc71b199a02863be099 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 11:11:03 +0000 Subject: [PATCH 022/122] undo some --- .../src/main/java/org/apache/druid/quidem/DiscovertModule.java | 2 +- .../org/apache/druid/client/BrokerSegmentWatcherConfig.java | 2 +- .../druid/sql/calcite/schema/BrokerSegmentMetadataCache.java | 2 ++ sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java | 2 -- .../java/org/apache/druid/sql/calcite/util/LookylooModule.java | 3 --- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java index 47caef82e32b..2ddd959ff8c5 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java @@ -28,7 +28,6 @@ import org.apache.druid.discovery.DruidNodeDiscovery; import org.apache.druid.discovery.DruidNodeDiscoveryProvider; import org.apache.druid.discovery.NodeRole; -import org.apache.druid.discovery.DruidNodeDiscovery.Listener; import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.annotations.Json; import org.apache.druid.query.QueryRunnerFactoryConglomerate; @@ -71,6 +70,7 @@ public Properties getProps() { localProps.put("druid.zk.service.enabled", "false"); localProps.put("druid.plaintextPort", "12345"); localProps.put("druid.host", "localhost"); + localProps.put("druid.broker.segment.awaitInitializationOnStart","false"); return localProps; } diff --git a/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java b/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java index 9136c7d34586..5f3dbd3abe7d 100644 --- a/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java +++ b/server/src/main/java/org/apache/druid/client/BrokerSegmentWatcherConfig.java @@ -40,7 +40,7 @@ public class BrokerSegmentWatcherConfig private boolean watchRealtimeTasks = true; @JsonProperty - private boolean awaitInitializationOnStart = false; + private boolean awaitInitializationOnStart = true; public Set getWatchedTiers() { diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java b/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java index 838143f30e7a..0573d8d49ee1 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java @@ -21,6 +21,7 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.Sets; +import com.google.inject.Inject; import org.apache.druid.client.InternalQueryConfig; import org.apache.druid.client.ServerView; import org.apache.druid.client.TimelineServerView; @@ -76,6 +77,7 @@ public class BrokerSegmentMetadataCache extends AbstractSegmentMetadataCache Date: Thu, 16 May 2024 11:11:55 +0000 Subject: [PATCH 023/122] undo --- .../schema/DruidCalciteSchemaModule.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidCalciteSchemaModule.java b/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidCalciteSchemaModule.java index 5417a8b8df4f..26d038ef4a3b 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidCalciteSchemaModule.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidCalciteSchemaModule.java @@ -21,8 +21,11 @@ import com.google.inject.Binder; import com.google.inject.Module; +import com.google.inject.Provides; import com.google.inject.Scopes; +import com.google.inject.name.Named; import com.google.inject.name.Names; +import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.LifecycleModule; import org.apache.druid.sql.guice.SqlBindings; @@ -31,9 +34,6 @@ */ public class DruidCalciteSchemaModule implements Module { - public DruidCalciteSchemaModule(){ - - } private static final String DRUID_SCHEMA_NAME = "druid"; private static final String INFORMATION_SCHEMA_NAME = "INFORMATION_SCHEMA"; static final String INCOMPLETE_SCHEMA = "INCOMPLETE_SCHEMA"; @@ -44,7 +44,7 @@ public void configure(Binder binder) binder.bind(String.class).annotatedWith(DruidSchemaName.class).toInstance(DRUID_SCHEMA_NAME); // Should only be used by the information schema - binder.bind(DruidSchemaCatalog.class) + binder.bind(DruidSchemaCatalog.class) .annotatedWith(Names.named(INCOMPLETE_SCHEMA)) .toProvider(RootSchemaProvider.class) .in(Scopes.SINGLETON); @@ -64,11 +64,11 @@ public void configure(Binder binder) SqlBindings.addSchema(binder, NamedViewSchema.class); } -// @Provides -// @LazySingleton -// private DruidSchemaCatalog getRootSchema(@Named(INCOMPLETE_SCHEMA) DruidSchemaCatalog rootSchema, InformationSchema informationSchema) -// { -// rootSchema.getRootSchema().add(INFORMATION_SCHEMA_NAME, informationSchema); -// return rootSchema; -// } + @Provides + @LazySingleton + private DruidSchemaCatalog getRootSchema(@Named(INCOMPLETE_SCHEMA) DruidSchemaCatalog rootSchema, InformationSchema informationSchema) + { + rootSchema.getRootSchema().add(INFORMATION_SCHEMA_NAME, informationSchema); + return rootSchema; + } } From bec1f38a0e14f8cc7d2657f8e4f9e7591acab505 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 11:17:05 +0000 Subject: [PATCH 024/122] move sqlmodule down --- .../src/main/java/org/apache/druid/quidem/Launcher.java | 6 ++++-- services/src/main/java/org/apache/druid/cli/CliBroker2.java | 5 ++--- sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java | 3 ++- .../org/apache/druid/sql/calcite/util/SqlTestFramework.java | 3 +-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 6898b8dbe09a..830f9b919f18 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -618,7 +618,7 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod binder.bind(QueryScheduler.class) .toProvider(QuerySchedulerProvider.class) .in(LazySingleton.class); - binder.install(new SqlModule.SqlStatementFactoryModule()); +// binder.install(new SqlModule.SqlStatementFactoryModule()); binder.bind(new TypeLiteral>() { }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); @@ -667,7 +667,9 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod new StartupLoggingModule(), new ExternalStorageAccessSecurityModule(), new ServiceClientModule(), - new StorageConnectorModule() + new StorageConnectorModule(), + new SqlModule() + ); // builder.addModules(); // builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker2.java b/services/src/main/java/org/apache/druid/cli/CliBroker2.java index 3d014047d545..6b314ab5b67b 100644 --- a/services/src/main/java/org/apache/druid/cli/CliBroker2.java +++ b/services/src/main/java/org/apache/druid/cli/CliBroker2.java @@ -77,7 +77,6 @@ import org.apache.druid.sql.calcite.schema.DruidSchemaName; import org.apache.druid.sql.calcite.schema.MetadataSegmentView; import org.apache.druid.sql.calcite.util.CalciteTests; -import org.apache.druid.sql.calcite.util.LookylooModule; import org.apache.druid.sql.guice.SqlModule; import org.apache.druid.timeline.PruneLoadSpec; import org.eclipse.jetty.server.Server; @@ -196,10 +195,10 @@ protected List getModules() Jerseys.addResource(binder, SelfDiscoveryResource.class); LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); - }, + } // new LookupModule(), // new LookylooModule(), - new SqlModule() +// new SqlModule() ); } diff --git a/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java b/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java index d20c2411c57d..b6a9f4e15aec 100644 --- a/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java +++ b/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java @@ -44,6 +44,7 @@ import org.apache.druid.sql.calcite.planner.CatalogResolver; import org.apache.druid.sql.calcite.planner.PlannerFactory; import org.apache.druid.sql.calcite.run.NativeSqlEngine; +import org.apache.druid.sql.calcite.schema.DruidCalciteSchemaModule; import org.apache.druid.sql.calcite.schema.DruidSchemaManager; import org.apache.druid.sql.calcite.schema.NoopDruidSchemaManager; import org.apache.druid.sql.calcite.view.DruidViewModule; @@ -106,7 +107,7 @@ public void configure(Binder binder) binder.bind(TableDefnRegistry.class).in(LazySingleton.class); -// binder.install(new DruidCalciteSchemaModule()); + binder.install(new DruidCalciteSchemaModule()); binder.install(new CalcitePlannerModule()); binder.install(new SqlAggregationModule()); binder.install(new DruidViewModule()); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index fc4df291d7ef..a9061432bf33 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -53,7 +53,6 @@ import org.apache.druid.sql.SqlStatementFactory; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; import org.apache.druid.sql.calcite.TempDirProducer; -import org.apache.druid.sql.calcite.aggregation.SqlAggregationModule; import org.apache.druid.sql.calcite.planner.CalciteRulesManager; import org.apache.druid.sql.calcite.planner.CatalogResolver; import org.apache.druid.sql.calcite.planner.DruidOperatorTable; @@ -649,7 +648,7 @@ private SqlTestFramework(Builder builder) .ignoreLoadScopes() .addModule(new LookylooModule()) .addModule(new SegmentWranglerModule()) - .addModule(new SqlAggregationModule()) +// .addModule(new SqlAggregationModule()) .addModule(new ExpressionModule()); // .addModule(testSetupModule()); From 3658ab24c3d36dc3397ca85b0f387dcce64f1985 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 11:18:24 +0000 Subject: [PATCH 025/122] remove f --- sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java b/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java index b6a9f4e15aec..349d83e25ac1 100644 --- a/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java +++ b/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java @@ -83,14 +83,12 @@ public void configure(Binder binder) .to(NoopViewManager.class) .in(LazySingleton.class); - if(false) { PolyBind.createChoiceWithDefault( binder, PROPERTY_SQL_VIEW_MANAGER_TYPE, Key.get(ViewManager.class), NoopViewManager.TYPE ); - } PolyBind.optionBinder(binder, Key.get(DruidSchemaManager.class)) From 607ef174c5ab28dadfe0d646920cbbb5195ffa01 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 11:18:54 +0000 Subject: [PATCH 026/122] indent --- .../org/apache/druid/sql/guice/SqlModule.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java b/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java index 349d83e25ac1..56d0d2d5d41f 100644 --- a/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java +++ b/sql/src/main/java/org/apache/druid/sql/guice/SqlModule.java @@ -78,18 +78,17 @@ public void configure(Binder binder) return; } - PolyBind.optionBinder(binder, Key.get(ViewManager.class)) - .addBinding(NoopViewManager.TYPE) - .to(NoopViewManager.class) - .in(LazySingleton.class); - - PolyBind.createChoiceWithDefault( - binder, - PROPERTY_SQL_VIEW_MANAGER_TYPE, - Key.get(ViewManager.class), - NoopViewManager.TYPE - ); + PolyBind.optionBinder(binder, Key.get(ViewManager.class)) + .addBinding(NoopViewManager.TYPE) + .to(NoopViewManager.class) + .in(LazySingleton.class); + PolyBind.createChoiceWithDefault( + binder, + PROPERTY_SQL_VIEW_MANAGER_TYPE, + Key.get(ViewManager.class), + NoopViewManager.TYPE + ); PolyBind.optionBinder(binder, Key.get(DruidSchemaManager.class)) .addBinding(NoopDruidSchemaManager.TYPE) From 59be71c0684e2a639e54d97c977a61505d0b05e4 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 11:23:26 +0000 Subject: [PATCH 027/122] add other --- .../druid/sql/calcite/util/SqlTestFramework.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index a9061432bf33..74cb4dbdaa29 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -53,6 +53,7 @@ import org.apache.druid.sql.SqlStatementFactory; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; import org.apache.druid.sql.calcite.TempDirProducer; +import org.apache.druid.sql.calcite.aggregation.SqlAggregationModule; import org.apache.druid.sql.calcite.planner.CalciteRulesManager; import org.apache.druid.sql.calcite.planner.CatalogResolver; import org.apache.druid.sql.calcite.planner.DruidOperatorTable; @@ -569,7 +570,14 @@ public JoinableFactoryWrapper joinableFactoryWrapper(final Injector injector) @Provides @LazySingleton - public QuerySegmentWalker segmentsQuerySegmentWalker(final Injector injector) + public QuerySegmentWalker querySegmentWalker(final Injector injector) + { + return injector.getInstance(SpecificSegmentsQuerySegmentWalker.class); + } + + @Provides + @LazySingleton + public SpecificSegmentsQuerySegmentWalker specificSegmentsQuerySegmentWalker(final Injector injector) { SpecificSegmentsQuerySegmentWalker walker = componentSupplier.createQuerySegmentWalker( injector.getInstance(QueryRunnerFactoryConglomerate.class), @@ -648,7 +656,8 @@ private SqlTestFramework(Builder builder) .ignoreLoadScopes() .addModule(new LookylooModule()) .addModule(new SegmentWranglerModule()) -// .addModule(new SqlAggregationModule()) + .addModule(new SqlAggregationModule()) +// .addModule(new SqlModule()) .addModule(new ExpressionModule()); // .addModule(testSetupModule()); From f4c73e149984ea25113e204b2aae0abd811334f5 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 11:31:28 +0000 Subject: [PATCH 028/122] make old defaults to overides --- .../druid/sql/calcite/util/SqlTestFramework.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index 74cb4dbdaa29..d4b6026d8f48 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -654,14 +654,20 @@ private SqlTestFramework(Builder builder) // test pulls in a module, then pull in that module, even though we are // not the Druid node to which the module is scoped. .ignoreLoadScopes() - .addModule(new LookylooModule()) - .addModule(new SegmentWranglerModule()) - .addModule(new SqlAggregationModule()) +// .addModule(new LookylooModule()) +// .addModule(new SegmentWranglerModule()) +// .addModule(new SqlAggregationModule()) // .addModule(new SqlModule()) - .addModule(new ExpressionModule()); +// .addModule(new ExpressionModule()); // .addModule(testSetupModule()); + ; List overrideModules = new ArrayList<>(builder.overrideModules); + overrideModules.add(new LookylooModule()); + overrideModules.add(new SqlAggregationModule()); + overrideModules.add(new SegmentWranglerModule()); + overrideModules.add(new ExpressionModule()); + overrideModules.add(testSetupModule()); builder.componentSupplier.configureGuice(injectorBuilder, overrideModules); From e2986ae6120399e7282a89f9b00666e36367a881 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 12:49:10 +0000 Subject: [PATCH 029/122] cleanup --- .../org/apache/druid/quidem/Launcher.java | 49 +++++-- .../druid/guice/http/HttpClientModule.java | 2 +- .../apache/druid/server/StatusResource.java | 5 +- .../calcite/util/CacheTestHelperModule2.java | 121 ------------------ 4 files changed, 40 insertions(+), 137 deletions(-) delete mode 100644 server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 830f9b919f18..cefff1029486 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -90,6 +90,7 @@ import org.apache.druid.server.QueryScheduler; import org.apache.druid.server.QuerySchedulerProvider; import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.server.initialization.AuthorizerMapperModule; import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; import org.apache.druid.server.initialization.jetty.JettyServerModule; import org.apache.druid.server.log.RequestLogger; @@ -607,7 +608,7 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); - binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); +// binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); binder.bind(RequestLogger.class).toInstance(testRequestLogger); binder.bind(String.class) @@ -663,7 +664,7 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod // new AuthenticatorMapperModule(), // new EscalatorModule(), new AuthorizerModule(), -// new AuthorizerMapperModule(), + new AuthorizerMapperModule(), new StartupLoggingModule(), new ExternalStorageAccessSecurityModule(), new ServiceClientModule(), @@ -750,17 +751,9 @@ private static void main3(Object object) throws Exception if(true) { Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/druid/v2/sql")) - .header("Content-Type", "application/json") - .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) - .build(); - System.out.println(request); -// request. - HttpClient hc = HttpClient.newHttpClient(); - HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println(a); - assertNotEquals(400, a.statusCode()); + chk1(); + chkStatus(); + lifecycle.stop(); }else { @@ -789,5 +782,35 @@ protected List getModules() { } + private static void chk1() throws IOException, InterruptedException + { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:12345/druid/v2/sql")) + .header("Content-Type", "application/json") + .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) + .build(); + System.out.println(request); +// request. + HttpClient hc = HttpClient.newHttpClient(); + HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); + System.out.println(a); + assertNotEquals(400, a.statusCode()); + } + private static void chkStatus() throws IOException, InterruptedException + { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:12345/status")) + .header("Content-Type", "application/json") + .GET() + .build(); + System.out.println(request); +// request. + HttpClient hc = HttpClient.newHttpClient(); + HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); + System.out.println(a); + assertNotEquals(400, a.statusCode()); + + } + } diff --git a/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java b/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java index 7c6b4e99d36c..2aaf30a469f2 100644 --- a/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java +++ b/server/src/main/java/org/apache/druid/guice/http/HttpClientModule.java @@ -120,7 +120,7 @@ public HttpClient get() final Binding sslContextBinding = getSslContextBinding(); if (sslContextBinding != null) { -// builder.withSslContext(sslContextBinding.getProvider().get()); + builder.withSslContext(sslContextBinding.getProvider().get()); } HttpClient client = HttpClientInit.createClient( diff --git a/server/src/main/java/org/apache/druid/server/StatusResource.java b/server/src/main/java/org/apache/druid/server/StatusResource.java index f1680f7503e9..cf0ed113c47c 100644 --- a/server/src/main/java/org/apache/druid/server/StatusResource.java +++ b/server/src/main/java/org/apache/druid/server/StatusResource.java @@ -24,6 +24,7 @@ import com.google.common.collect.Maps; import com.sun.jersey.spi.container.ResourceFilters; import org.apache.druid.client.DruidServerConfig; +import org.apache.druid.common.guava.GuavaUtils; import org.apache.druid.guice.ExtensionsLoader; import org.apache.druid.initialization.DruidModule; import org.apache.druid.java.util.common.StringUtils; @@ -137,14 +138,14 @@ public static class Status public Status(Collection modules) { - this.version = "30.0.0-asd1";//getDruidVersion(); + this.version = getDruidVersion(); this.modules = getExtensionVersions(modules); this.memory = new Memory(JvmUtils.getRuntimeInfo()); } private String getDruidVersion() { - return Status.class.getPackage().getImplementationVersion(); + return GuavaUtils.firstNonNull(Status.class.getPackage().getImplementationVersion(), "unknown"); } @JsonProperty diff --git a/server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java b/server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java deleted file mode 100644 index 0b47e63a6c87..000000000000 --- a/server/src/test/java/org/apache/druid/sql/calcite/util/CacheTestHelperModule2.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.sql.calcite.util; - -import com.google.inject.AbstractModule; -import com.google.inject.Module; -import com.google.inject.Provides; -import org.apache.druid.client.cache.Cache; -import org.apache.druid.client.cache.CacheConfig; -import org.apache.druid.client.cache.MapCache; -import org.apache.druid.server.EtagProvider; - -public class CacheTestHelperModule2 extends AbstractModule -{ - - public enum ResultCacheMode - { - DISABLED, - ENABLED; - - public Module makeModule() - { - return new CacheTestHelperModule2(this); - } - - public boolean isPopulateResultLevelCache() - { - return this != DISABLED; - } - - public boolean isUseResultLevelCache() - { - return this != DISABLED; - } - } - - protected final Cache cache; - private CacheConfig cacheConfig; - private EtagProvider etagProvider; - - static class TestCacheConfig extends CacheConfig - { - private ResultCacheMode resultLevelCache; - - public TestCacheConfig(ResultCacheMode resultCacheMode) - { - this.resultLevelCache = resultCacheMode; - } - - @Override - public boolean isPopulateResultLevelCache() - { - return resultLevelCache.isPopulateResultLevelCache(); - } - - @Override - public boolean isUseResultLevelCache() - { - return resultLevelCache.isUseResultLevelCache(); - } - - } - - public CacheTestHelperModule2(ResultCacheMode resultCacheMode) - { - cacheConfig = new TestCacheConfig(resultCacheMode); - - switch (resultCacheMode) { - case ENABLED: - etagProvider = new EtagProvider.ProvideEtagBasedOnDatasource(); - cache = MapCache.create(1_000_000L); - break; - case DISABLED: - etagProvider = new EtagProvider.EmptyEtagProvider(); - cache = null; - break; - default: - throw new RuntimeException(); - } - } - - @Provides - EtagProvider etagProvider() - { - return etagProvider; - } - - @Provides - CacheConfig getCacheConfig() - { - return cacheConfig; - } - - @Provides - Cache getCache() - { - return cache; - } - - @Override - public void configure() - { - } -} From 76ffbfb7cf896779f7cf0e452c3c5c09c13a0b0f Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 12:50:38 +0000 Subject: [PATCH 030/122] cl --- .../src/main/java/org/apache/druid/quidem/Launcher.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index cefff1029486..c2f82c79692e 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -741,13 +741,8 @@ private static void main3(Object object) throws Exception { SqlTestFramework framework = getCI2().framework - // builder.addModule(propOverrideModuel()); - ; -// SSLContextProvider u = injector.getInstance(SSLContextProvider.class); -// System.out.println(u); - if(true) { Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); @@ -790,7 +785,6 @@ private static void chk1() throws IOException, InterruptedException .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) .build(); System.out.println(request); -// request. HttpClient hc = HttpClient.newHttpClient(); HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(a); From 1fb9fac1592c98177f90a0a2d5c4ab38dbfa97e1 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 12:59:20 +0000 Subject: [PATCH 031/122] remove cl --- .../org/apache/druid/quidem/Launcher.java | 148 +++-- .../org/apache/druid/quidem/Launcher2.java | 613 ------------------ .../java/org/apache/druid/cli/CliBroker2.java | 298 --------- 3 files changed, 103 insertions(+), 956 deletions(-) delete mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java delete mode 100644 services/src/main/java/org/apache/druid/cli/CliBroker2.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index c2f82c79692e..021767bcf8d0 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -22,19 +22,28 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; +import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; import com.google.inject.util.Modules; import org.apache.calcite.avatica.server.AbstractAvaticaHandler; -import org.apache.druid.cli.CliBroker2; import org.apache.druid.cli.GuiceRunnable; +import org.apache.druid.cli.QueryJettyServerInitializer; +import org.apache.druid.client.BrokerSegmentWatcherConfig; +import org.apache.druid.client.BrokerServerView; +import org.apache.druid.client.InternalQueryConfig; +import org.apache.druid.client.TimelineServerView; +import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; +import org.apache.druid.client.selector.ServerSelectorStrategy; +import org.apache.druid.client.selector.TierSelectorStrategy; import org.apache.druid.curator.CuratorModule; import org.apache.druid.curator.discovery.DiscoveryModule; import org.apache.druid.guice.AnnouncerModule; @@ -47,7 +56,9 @@ import org.apache.druid.guice.FirehoseModule; import org.apache.druid.guice.JacksonConfigManagerModule; import org.apache.druid.guice.JavaScriptModule; +import org.apache.druid.guice.Jerseys; import org.apache.druid.guice.JoinableFactoryModule; +import org.apache.druid.guice.JsonConfigProvider; import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; import org.apache.druid.guice.LifecycleModule; @@ -57,6 +68,7 @@ import org.apache.druid.guice.QueryRunnerFactoryModule; import org.apache.druid.guice.SegmentWranglerModule; import org.apache.druid.guice.ServerModule; +import org.apache.druid.guice.ServerTypeConfig; import org.apache.druid.guice.ServerViewModule; import org.apache.druid.guice.StartupInjectorBuilder; import org.apache.druid.guice.StartupLoggingModule; @@ -81,21 +93,30 @@ import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; import org.apache.druid.query.DefaultQueryConfig; import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.RetryQueryRunnerConfig; import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; import org.apache.druid.rpc.guice.ServiceClientModule; import org.apache.druid.segment.join.JoinableFactoryWrapper; import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; +import org.apache.druid.server.BrokerQueryResource; +import org.apache.druid.server.ClientInfoResource; import org.apache.druid.server.DruidNode; import org.apache.druid.server.QueryLifecycleFactory; import org.apache.druid.server.QueryScheduler; import org.apache.druid.server.QuerySchedulerProvider; +import org.apache.druid.server.ResponseContextConfig; import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.server.coordination.ServerType; +import org.apache.druid.server.http.BrokerResource; +import org.apache.druid.server.http.SelfDiscoveryResource; import org.apache.druid.server.initialization.AuthorizerMapperModule; import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; +import org.apache.druid.server.initialization.jetty.JettyServerInitializer; import org.apache.druid.server.initialization.jetty.JettyServerModule; import org.apache.druid.server.log.RequestLogger; import org.apache.druid.server.log.TestRequestLogger; import org.apache.druid.server.metrics.NoopServiceEmitter; +import org.apache.druid.server.router.TieredBrokerConfig; import org.apache.druid.server.security.AuthenticatorMapper; import org.apache.druid.server.security.AuthorizerMapper; import org.apache.druid.server.security.Escalator; @@ -112,7 +133,6 @@ import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.schema.DruidSchemaName; -import org.apache.druid.sql.calcite.util.CacheTestHelperModule; import org.apache.druid.sql.calcite.util.CalciteTests; import org.apache.druid.sql.calcite.util.SqlTestFramework; import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; @@ -120,6 +140,7 @@ import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.apache.druid.sql.guice.SqlModule; import org.apache.druid.storage.StorageConnectorModule; +import org.apache.druid.timeline.PruneLoadSpec; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; import org.apache.http.client.utils.URLEncodedUtils; @@ -518,26 +539,6 @@ private static void main1(Object object) throws Exception - CliBroker2 c = new CliBroker2() { - protected List getModules() { - List ret = new ArrayList<>(); - ret.add(new DiscovertModule()); -// ret.add(propOverrideModuel()); - ret.add(framework.testSetupModule()); -// ret.add(new AvaticaBasedConnectionModule()); - ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); - ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); - ret.add(new QuidemCaptureModule()); - ret.addAll(super.getModules()); - return ret; - } - - - }; - framework.injector().injectMembers(c); - // c.configure(new Properties()); - - c.run(); } @@ -675,9 +676,7 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod // builder.addModules(); // builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); - CliBroker2 cliBroker2 = new CliBroker2(); - cliBroker2.configure(makeLocalProps(), null); - overrideModules.addAll(cliBroker2.getmodules2()); + overrideModules.addAll(brokerModules()); builder.add(ServerInjectorBuilder.registerNodeRoleModule(ImmutableSet.of())); @@ -752,27 +751,7 @@ private static void main3(Object object) throws Exception lifecycle.stop(); }else { - CliBroker2 c = new CliBroker2() { - protected List getModules() { - List ret = new ArrayList<>(); - ret.add(new DiscovertModule()); -// ret.add(propOverrideModuel()); - ret.add(framework.testSetupModule()); -// ret.add(new AvaticaBasedConnectionModule()); - ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); - ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); -// ret.add(CacheTestHelperModule2.ResultCacheMode.DISABLED.makeModule()); - ret.add(new QuidemCaptureModule()); - ret.addAll(super.getModules()); - return ret; - } - - - }; - framework.injector().injectMembers(c); -// c.configure(new Properties()); - c.run2(); } } @@ -807,4 +786,83 @@ private static void chkStatus() throws IOException, InterruptedException } + private static List brokerModules() + { + return ImmutableList.of( + new LegacyBrokerParallelMergeConfigModule(), + new BrokerProcessingModule(), +// new QueryableModule(), + new QueryRunnerFactoryModule(), + new SegmentWranglerModule(), + new JoinableFactoryModule(), + new BrokerServiceModule(), + binder -> { + + binder.bindConstant().annotatedWith(Names.named("serviceName")).to( + TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME + ); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); + binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); + binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); + +// binder.bind(CachingClusteredClient.class).in(LazySingleton.class); +// LifecycleModule.register(binder, BrokerServerView.class); +// LifecycleModule.register(binder, MetadataSegmentView.class); + binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); +// +// JsonConfigProvider.bind(binder, "druid.broker.cache", CacheConfig.class); +// binder.install(new CacheModule()); +// + JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); + +// binder.bind(QuerySegmentWalker.class).to(ClientQuerySegmentWalker.class).in(LazySingleton.class); + + binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); + +// binder.bind(BrokerQueryResource.class).in(LazySingleton.class); + Jerseys.addResource(binder, BrokerQueryResource.class); +// binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); +// binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); +// binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); + Jerseys.addResource(binder, BrokerResource.class); + Jerseys.addResource(binder, ClientInfoResource.class); + + LifecycleModule.register(binder, BrokerQueryResource.class); + +// Jerseys.addResource(binder, HttpServerInventoryViewResource.class); + + LifecycleModule.register(binder, Server.class); +// binder.bind(SegmentManager.class).in(LazySingleton.class); +// binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); + binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); +// Jerseys.addResource(binder, HistoricalResource.class); +// Jerseys.addResource(binder, SegmentListerResource.class); + +// if (isZkEnabled) { +// LifecycleModule.register(binder, ZkCoordinator.class); +// } + +// bindAnnouncer( +// binder, +// DiscoverySideEffectsProvider.withLegacyAnnouncer() +// ); + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + + Jerseys.addResource(binder, SelfDiscoveryResource.class); + LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); + } +// new LookupModule(), +// new LookylooModule(), +// new SqlModule() + ); + } + } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java deleted file mode 100644 index 0dcc30db5cf3..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher2.java +++ /dev/null @@ -1,613 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; -import com.google.inject.AbstractModule; -import com.google.inject.Binder; -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.Module; -import com.google.inject.Provides; -import com.google.inject.TypeLiteral; -import com.google.inject.name.Names; -import com.google.inject.util.Modules; -import com.google.inject.util.Providers; -import org.apache.calcite.avatica.server.AbstractAvaticaHandler; -import org.apache.druid.cli.CliBroker2; -import org.apache.druid.discovery.DiscoveryDruidNode; -import org.apache.druid.discovery.DruidNodeDiscovery; -import org.apache.druid.discovery.DruidNodeDiscoveryProvider; -import org.apache.druid.discovery.NodeRole; -import org.apache.druid.guice.DruidInjectorBuilder; -import org.apache.druid.guice.LazySingleton; -import org.apache.druid.guice.StartupInjectorBuilder; -import org.apache.druid.guice.annotations.Json; -import org.apache.druid.initialization.DruidModule; -import org.apache.druid.java.util.common.FileUtils; -import org.apache.druid.java.util.common.StringUtils; -import org.apache.druid.java.util.common.io.Closer; -import org.apache.druid.java.util.emitter.service.ServiceEmitter; -import org.apache.druid.query.DefaultQueryConfig; -import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.query.QuerySegmentWalker; -import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; -import org.apache.druid.segment.join.JoinableFactoryWrapper; -import org.apache.druid.server.DruidNode; -import org.apache.druid.server.QueryLifecycleFactory; -import org.apache.druid.server.QueryScheduler; -import org.apache.druid.server.QuerySchedulerProvider; -import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; -import org.apache.druid.server.log.RequestLogger; -import org.apache.druid.server.log.TestRequestLogger; -import org.apache.druid.server.metrics.NoopServiceEmitter; -import org.apache.druid.server.security.AuthenticatorMapper; -import org.apache.druid.server.security.AuthorizerMapper; -import org.apache.druid.server.security.Escalator; -import org.apache.druid.sql.avatica.AvaticaMonitor; -import org.apache.druid.sql.avatica.DruidAvaticaJsonHandler; -import org.apache.druid.sql.avatica.DruidMeta; -import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; -import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; -import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; -import org.apache.druid.sql.calcite.planner.CalciteRulesManager; -import org.apache.druid.sql.calcite.planner.CatalogResolver; -import org.apache.druid.sql.calcite.planner.PlannerConfig; -import org.apache.druid.sql.calcite.run.NativeSqlEngine; -import org.apache.druid.sql.calcite.run.SqlEngine; -import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; -import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; -import org.apache.druid.sql.calcite.schema.DruidSchemaName; -import org.apache.druid.sql.calcite.util.CacheTestHelperModule; -import org.apache.druid.sql.calcite.util.CalciteTests; -import org.apache.druid.sql.calcite.util.SqlTestFramework; -import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; -import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; -import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; -import org.apache.druid.sql.guice.SqlModule; -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URIBuilder; -import org.apache.http.client.utils.URLEncodedUtils; -import org.eclipse.jetty.server.Server; -import org.junit.Test; - -import java.io.Closeable; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.function.BooleanSupplier; - -public class Launcher2 -{ - - public static final String URI_PREFIX = "druidtest://"; - public static final String DEFAULT_URI = URI_PREFIX + "/"; - - static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); - - public Launcher2() - { - } - - public Connection connect(String url, Properties info) throws SQLException - { - try { - SqlTestFrameworkConfig config = buildConfigfromURIParams(url); - - ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( - config, - x -> new AvaticaBasedTestConnectionSupplier(x) - ); - - AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); - return server.getConnection(info); - } - catch (Exception e) { - throw new SQLException("Can't create testconnection", e); - } - } - - static class AvaticaBasedConnectionModule implements DruidModule, Closeable - { - Closer closer = Closer.create(); - - @Provides - @LazySingleton - public DruidSchemaCatalog getLookupNodeService(QueryRunnerFactoryConglomerate conglomerate, - SpecificSegmentsQuerySegmentWalker walker, PlannerConfig plannerConfig) - { - return CalciteTests.createMockRootSchema( - conglomerate, - walker, - plannerConfig, - CalciteTests.TEST_AUTHORIZER_MAPPER - ); - } - - @Provides - @LazySingleton - public DruidConnectionExtras getConnectionExtras(ObjectMapper objectMapper) - { - return new DruidConnectionExtras.DruidConnectionExtrasImpl(objectMapper); - } - - @Provides - @LazySingleton - public AvaticaJettyServer getAvaticaServer(DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) - throws Exception - { - AvaticaJettyServer avaticaJettyServer = new AvaticaJettyServer(druidMeta, druidConnectionExtras); - closer.register(avaticaJettyServer); - return avaticaJettyServer; - } - - @Override - public void configure(Binder binder) - { - } - - @Override - public void close() throws IOException - { - closer.close(); - } - - } - - static class AvaticaJettyServer implements Closeable - { - final DruidMeta druidMeta; - final Server server; - final String url; - final DruidConnectionExtras connectionExtras; - - AvaticaJettyServer(final DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) throws Exception - { - this.druidMeta = druidMeta; - server = new Server(0); - server.setHandler(getAvaticaHandler(druidMeta)); - server.start(); - url = StringUtils.format( - "jdbc:avatica:remote:url=%s", - new URIBuilder(server.getURI()).setPath(DruidAvaticaJsonHandler.AVATICA_PATH).build() - ); - connectionExtras = druidConnectionExtras; - } - - public Connection getConnection(Properties info) throws SQLException - { - Connection realConnection = DriverManager.getConnection(url, info); - Connection proxyConnection = DynamicComposite.make( - realConnection, - Connection.class, - connectionExtras, - DruidConnectionExtras.class - ); - return proxyConnection; - } - - @Override - public void close() - { - druidMeta.closeAllConnections(); - try { - server.stop(); - } - catch (Exception e) { - throw new RuntimeException("Can't stop server", e); - } - } - - protected AbstractAvaticaHandler getAvaticaHandler(final DruidMeta druidMeta) - { - return new DruidAvaticaJsonHandler( - druidMeta, - new DruidNode("dummy", "dummy", false, 1, null, true, false), - new AvaticaMonitor() - ); - } - } - - static class AvaticaBasedTestConnectionSupplier implements QueryComponentSupplier - { - private QueryComponentSupplier delegate; - private AvaticaBasedConnectionModule connectionModule; - - public AvaticaBasedTestConnectionSupplier(QueryComponentSupplier delegate) - { - this.delegate = delegate; - this.connectionModule = new AvaticaBasedConnectionModule(); - } - - @Override - public void gatherProperties(Properties properties) - { - delegate.gatherProperties(properties); - } - - @Override - public void configureGuice(DruidInjectorBuilder builder) - { - delegate.configureGuice(builder); - TestRequestLogger testRequestLogger = new TestRequestLogger(); -// builder.addModule(connectionModule); - builder.addModule( - binder -> { - binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); - binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); - binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); - binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); - binder.bind(RequestLogger.class).toInstance(testRequestLogger); - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); - binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); - binder.bind(QueryScheduler.class) - .toProvider(QuerySchedulerProvider.class) - .in(LazySingleton.class); - binder.install(new SqlModule.SqlStatementFactoryModule()); - binder.bind(new TypeLiteral>() - { - }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); - binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); - binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); - } - ); - } - - @Override - public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) - { - return delegate.createCongolmerate(builder, closer); - } - - @Override - public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, - JoinableFactoryWrapper joinableFactory, Injector injector) - { - return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); - } - - @Override - public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) - { - return delegate.createEngine(qlf, objectMapper, injector); - } - - @Override - public void configureJsonMapper(ObjectMapper mapper) - { - delegate.configureJsonMapper(mapper); - } - - @Override - public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) - { - return delegate.createJoinableFactoryWrapper(lookupProvider); - } - - @Override - public void finalizeTestFramework(SqlTestFramework sqlTestFramework) - { - delegate.finalizeTestFramework(sqlTestFramework); - } - - @Override - public void close() throws IOException - { - connectionModule.close(); - delegate.close(); - } - - @Override - public PlannerComponentSupplier getPlannerComponentSupplier() - { - return delegate.getPlannerComponentSupplier(); - } - } - - protected File createTempFolder(String prefix) - { - File tempDir = FileUtils.createTempDir(prefix); - Runtime.getRuntime().addShutdownHook(new Thread() - { - @Override - public void run() - { - try { - FileUtils.deleteDirectory(tempDir); - } - catch (IOException ex) { - ex.printStackTrace(); - } - } - }); - return tempDir; - } - - public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws SQLException - { - Map queryParams; - queryParams = new HashMap<>(); - try { - List params = URLEncodedUtils.parse(new URI(url), StandardCharsets.UTF_8); - for (NameValuePair pair : params) { - queryParams.put(pair.getName(), pair.getValue()); - } - // possible caveat: duplicate entries overwrite earlier ones - } - catch (URISyntaxException e) { - throw new SQLException("Can't decode URI", e); - } - - return new SqlTestFrameworkConfig(queryParams); - } - - public static void main(String[] args) throws Exception - { - ConfigurationInstance ci = getCI(); - - AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); - - } - - private static ConfigurationInstance getCI() throws SQLException, Exception - { - SqlTestFrameworkConfig config = buildConfigfromURIParams("druidtest:///"); - - ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( - config, - x -> new AvaticaBasedTestConnectionSupplier(x) - ); - return ci; - } - - @Test - public void runIt() throws Exception - { - Launcher2.main1(null); - } - - private static Module propOverrideModuel() - { - Properties localProps = new Properties(); - localProps.put("druid.enableTlsPort", "false"); - localProps.put("druid.zk.service.enabled", "false"); - localProps.put("druid.plaintextPort","12345"); - localProps.put("druid.host", "localhost"); - - - Module m = binder -> binder.bind(Properties.class).toInstance(localProps); - return m; - } - - public static class DiscovertModule extends AbstractModule { - - DiscovertModule() { - } - - @Override - protected void configure() - { - } - - @Provides - @LazySingleton - public SqlEngine createMockSqlEngine( - final QuerySegmentWalker walker, - final QueryRunnerFactoryConglomerate conglomerate, - @Json ObjectMapper jsonMapper ) - { - return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); - } - - - @Provides - @LazySingleton - DruidNodeDiscoveryProvider getProvider() { - final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); - FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( - ImmutableMap.of( - NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode)) - ) - ); - return provider; - } - - /** - * A fake {@link DruidNodeDiscoveryProvider} for {@link #createMockSystemSchema}. - */ - private static class FakeDruidNodeDiscoveryProvider extends DruidNodeDiscoveryProvider - { - private final Map nodeDiscoveries; - - public FakeDruidNodeDiscoveryProvider(Map nodeDiscoveries) - { - this.nodeDiscoveries = nodeDiscoveries; - } - - @Override - public BooleanSupplier getForNode(DruidNode node, NodeRole nodeRole) - { - boolean get = nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()) - .getAllNodes() - .stream() - .anyMatch(x -> x.getDruidNode().equals(node)); - return () -> get; - } - - @Override - public DruidNodeDiscovery getForNodeRole(NodeRole nodeRole) - { - return nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()); - } - } - - private static class FakeDruidNodeDiscovery implements DruidNodeDiscovery - { - private final Set nodes; - - FakeDruidNodeDiscovery() - { - this.nodes = new HashSet<>(); - } - - FakeDruidNodeDiscovery(Map nodes) - { - this.nodes = Sets.newHashSetWithExpectedSize(nodes.size()); - nodes.forEach((k, v) -> { - addNode(v, k); - }); - } - - @Override - public Collection getAllNodes() - { - return nodes; - } - - void addNode(DruidNode node, NodeRole role) - { - final DiscoveryDruidNode discoveryNode = new DiscoveryDruidNode(node, role, ImmutableMap.of()); - this.nodes.add(discoveryNode); - } - - @Override - public void registerListener(Listener listener) - { - - } - } - - - - } - - private static DiscovertModule discoverModule() - { - -// DruidNodeDiscoveryProvider instance = ; -// Module m = binder -> binder.bind(DruidNodeDiscoveryProvider.class).toInstance(instance); - return new DiscovertModule(); - - } - - static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { - - private List overrideModules =new ArrayList<>(); - - public CustomStartupInjectorBuilder() - { - Module m = propOverrideModuel(); - addOverride(m); -// addOverride(binder -> { -// binder.bind(SSLClientConfig.class).toProvider(Providers.of(null)); -// binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null)); -// binder.bind(SSLClientConfig.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); -// binder.bind(SSLContext.class).toProvider(Providers.of(null)); -// binder.bind(SSLContextProvider.class).annotatedWith(Global.class).toProvider(Providers.of(null)); -// binder.bind(SSLContextProvider.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); -// binder.bind(SSLContext.class).annotatedWith(Global.class).toProvider(Providers.of(null)); -// binder.bind(SSLContext.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); -// } -// ); - - } - - private void addOverride(com.google.inject.Module m) - { - overrideModules.add(m); - } - - @Override - public Injector build() - { - return Guice.createInjector( - Modules.override(modules) - .with( overrideModules.toArray(new com.google.inject.Module[0]))); - - } - - } - - private static void main1(Object object) throws Exception - { - final Injector injector = new CustomStartupInjectorBuilder() - .forTests() - .build(); - - - SqlTestFramework framework = getCI().extracted( - propOverrideModuel(), - discoverModule(), - binder -> binder.bind(BrokerSegmentMetadataCache.class).toProvider(Providers.of(null)) - - ) - - ; - -// SSLContextProvider u = injector.getInstance(SSLContextProvider.class); -// System.out.println(u); - - - - CliBroker2 c = new CliBroker2() { - protected List getModules() { - List ret = new ArrayList<>(); - ret.add(discoverModule()); - ret.add(propOverrideModuel()); - ret.add(framework.testSetupModule()); -// ret.add(new AvaticaBasedConnectionModule()); - ret.add(binder -> binder.bind(RequestLogger.class).toInstance(new TestRequestLogger())); - ret.add(CacheTestHelperModule.ResultCacheMode.DISABLED.makeModule()); - ret.addAll(super.getModules()); - return ret; - } - - - }; - framework.injector().injectMembers(c); - // c.configure(new Properties()); - c.run(); - - } - -} diff --git a/services/src/main/java/org/apache/druid/cli/CliBroker2.java b/services/src/main/java/org/apache/druid/cli/CliBroker2.java deleted file mode 100644 index 6b314ab5b67b..000000000000 --- a/services/src/main/java/org/apache/druid/cli/CliBroker2.java +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.cli; - -import com.github.rvesse.airline.annotations.Command; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.Module; -import com.google.inject.name.Names; -import org.apache.druid.client.BrokerSegmentWatcherConfig; -import org.apache.druid.client.BrokerServerView; -import org.apache.druid.client.CachingClusteredClient; -import org.apache.druid.client.HttpServerInventoryViewResource; -import org.apache.druid.client.InternalQueryConfig; -import org.apache.druid.client.TimelineServerView; -import org.apache.druid.client.cache.CacheConfig; -import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; -import org.apache.druid.client.selector.ServerSelectorStrategy; -import org.apache.druid.client.selector.TierSelectorStrategy; -import org.apache.druid.discovery.NodeRole; -import org.apache.druid.guice.BrokerProcessingModule; -import org.apache.druid.guice.BrokerServiceModule; -import org.apache.druid.guice.CacheModule; -import org.apache.druid.guice.Jerseys; -import org.apache.druid.guice.JoinableFactoryModule; -import org.apache.druid.guice.JsonConfigProvider; -import org.apache.druid.guice.LazySingleton; -import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; -import org.apache.druid.guice.LifecycleModule; -import org.apache.druid.guice.ManageLifecycle; -import org.apache.druid.guice.QueryRunnerFactoryModule; -import org.apache.druid.guice.QueryableModule; -import org.apache.druid.guice.SegmentWranglerModule; -import org.apache.druid.guice.ServerTypeConfig; -import org.apache.druid.initialization.ServerInjectorBuilder; -import org.apache.druid.java.util.common.lifecycle.Lifecycle; -import org.apache.druid.java.util.common.logger.Logger; -import org.apache.druid.query.QuerySegmentWalker; -import org.apache.druid.query.RetryQueryRunnerConfig; -import org.apache.druid.query.lookup.LookupModule; -import org.apache.druid.server.BrokerQueryResource; -import org.apache.druid.server.ClientInfoResource; -import org.apache.druid.server.ClientQuerySegmentWalker; -import org.apache.druid.server.ResponseContextConfig; -import org.apache.druid.server.SegmentManager; -import org.apache.druid.server.SubqueryGuardrailHelper; -import org.apache.druid.server.SubqueryGuardrailHelperProvider; -import org.apache.druid.server.coordination.ServerType; -import org.apache.druid.server.coordination.ZkCoordinator; -import org.apache.druid.server.http.BrokerResource; -import org.apache.druid.server.http.HistoricalResource; -import org.apache.druid.server.http.SegmentListerResource; -import org.apache.druid.server.http.SelfDiscoveryResource; -import org.apache.druid.server.initialization.jetty.JettyServerInitializer; -import org.apache.druid.server.metrics.QueryCountStatsProvider; -import org.apache.druid.server.metrics.SubqueryCountStatsProvider; -import org.apache.druid.server.router.TieredBrokerConfig; -import org.apache.druid.sql.calcite.schema.DruidSchemaName; -import org.apache.druid.sql.calcite.schema.MetadataSegmentView; -import org.apache.druid.sql.calcite.util.CalciteTests; -import org.apache.druid.sql.guice.SqlModule; -import org.apache.druid.timeline.PruneLoadSpec; -import org.eclipse.jetty.server.Server; - -import java.util.List; -import java.util.Properties; -import java.util.Set; - -@Command( - name = "broker", - description = "Runs a broker node, see https://druid.apache.org/docs/latest/Broker.html for a description" -) -public class CliBroker2 extends ServerRunnable -{ - private static final Logger log = new Logger(CliBroker2.class); - - private boolean isZkEnabled = false; - - public CliBroker2() - { - super(log); - } - - - public List getmodules2() - { - return getModules(); - } - - @Override - protected Set getNodeRoles(Properties properties) - { - return ImmutableSet.of( - NodeRole.BROKER, - NodeRole.COORDINATOR, - NodeRole.HISTORICAL, - NodeRole.INDEXER, - NodeRole.MIDDLE_MANAGER, - NodeRole.ROUTER, - NodeRole.OVERLORD - - ); - } - - @Override - protected List getModules() - { - return ImmutableList.of( - new LegacyBrokerParallelMergeConfigModule(), - new BrokerProcessingModule(), -// new QueryableModule(), - new QueryRunnerFactoryModule(), - new SegmentWranglerModule(), - new JoinableFactoryModule(), - new BrokerServiceModule(), - binder -> { - validateCentralizedDatasourceSchemaConfig(getProperties()); - - binder.bindConstant().annotatedWith(Names.named("serviceName")).to( - TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME - ); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); - binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); - binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); - -// binder.bind(CachingClusteredClient.class).in(LazySingleton.class); -// LifecycleModule.register(binder, BrokerServerView.class); -// LifecycleModule.register(binder, MetadataSegmentView.class); - binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); -// -// JsonConfigProvider.bind(binder, "druid.broker.cache", CacheConfig.class); -// binder.install(new CacheModule()); -// - JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); - -// binder.bind(QuerySegmentWalker.class).to(ClientQuerySegmentWalker.class).in(LazySingleton.class); - - binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); - -// binder.bind(BrokerQueryResource.class).in(LazySingleton.class); - Jerseys.addResource(binder, BrokerQueryResource.class); -// binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); -// binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); -// binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); - Jerseys.addResource(binder, BrokerResource.class); - Jerseys.addResource(binder, ClientInfoResource.class); - - LifecycleModule.register(binder, BrokerQueryResource.class); - -// Jerseys.addResource(binder, HttpServerInventoryViewResource.class); - - LifecycleModule.register(binder, Server.class); -// binder.bind(SegmentManager.class).in(LazySingleton.class); -// binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); - binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); -// Jerseys.addResource(binder, HistoricalResource.class); -// Jerseys.addResource(binder, SegmentListerResource.class); - -// if (isZkEnabled) { -// LifecycleModule.register(binder, ZkCoordinator.class); -// } - -// bindAnnouncer( -// binder, -// DiscoverySideEffectsProvider.withLegacyAnnouncer() -// ); - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - - Jerseys.addResource(binder, SelfDiscoveryResource.class); - LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); - } -// new LookupModule(), -// new LookylooModule(), -// new SqlModule() - ); - } - - protected List getModules1() - { - return ImmutableList.of( - new LegacyBrokerParallelMergeConfigModule(), - new BrokerProcessingModule(), - new QueryableModule(), - new QueryRunnerFactoryModule(), - new SegmentWranglerModule(), - new JoinableFactoryModule(), - new BrokerServiceModule(), - binder -> { - validateCentralizedDatasourceSchemaConfig(getProperties()); - - binder.bindConstant().annotatedWith(Names.named("serviceName")).to( - TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME - ); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); - binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); - binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); - - binder.bind(CachingClusteredClient.class).in(LazySingleton.class); - LifecycleModule.register(binder, BrokerServerView.class); - LifecycleModule.register(binder, MetadataSegmentView.class); - binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); - - JsonConfigProvider.bind(binder, "druid.broker.cache", CacheConfig.class); - binder.install(new CacheModule()); - - JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); - - binder.bind(QuerySegmentWalker.class).to(ClientQuerySegmentWalker.class).in(LazySingleton.class); - - binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); - - binder.bind(BrokerQueryResource.class).in(LazySingleton.class); - Jerseys.addResource(binder, BrokerQueryResource.class); - binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); - binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); - binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); - Jerseys.addResource(binder, BrokerResource.class); - Jerseys.addResource(binder, ClientInfoResource.class); - - LifecycleModule.register(binder, BrokerQueryResource.class); - - Jerseys.addResource(binder, HttpServerInventoryViewResource.class); - - LifecycleModule.register(binder, Server.class); - binder.bind(SegmentManager.class).in(LazySingleton.class); - binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); - binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); - Jerseys.addResource(binder, HistoricalResource.class); - Jerseys.addResource(binder, SegmentListerResource.class); - - if (isZkEnabled) { - LifecycleModule.register(binder, ZkCoordinator.class); - } - - bindAnnouncer( - binder, - DiscoverySideEffectsProvider.withLegacyAnnouncer() - ); - - Jerseys.addResource(binder, SelfDiscoveryResource.class); - LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); - }, - new LookupModule(), - new SqlModule() - ); - } - - - public void run2() - { - try { - Injector injector = new ServerInjectorBuilder(baseInjector) - .nodeRoles(null) - .serviceModules(getModules()) - .build(); - - Lifecycle lifecycle = initLifecycle(injector); - lifecycle.join(); - } - catch (Exception e) { - throw new RuntimeException(e); - } - } - -} From 1d2a79f5becbc081a4972a652b853a68ae55ff5f Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 13:01:53 +0000 Subject: [PATCH 032/122] cleanup --- .../org/apache/druid/quidem/Launcher.java | 379 ------------------ 1 file changed, 379 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 021767bcf8d0..fd9153a6ed89 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -25,16 +25,11 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.inject.Binder; -import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; -import com.google.inject.Provides; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; -import com.google.inject.util.Modules; -import org.apache.calcite.avatica.server.AbstractAvaticaHandler; import org.apache.druid.cli.GuiceRunnable; import org.apache.druid.cli.QueryJettyServerInitializer; import org.apache.druid.client.BrokerSegmentWatcherConfig; @@ -70,7 +65,6 @@ import org.apache.druid.guice.ServerModule; import org.apache.druid.guice.ServerTypeConfig; import org.apache.druid.guice.ServerViewModule; -import org.apache.druid.guice.StartupInjectorBuilder; import org.apache.druid.guice.StartupLoggingModule; import org.apache.druid.guice.StorageNodeModule; import org.apache.druid.guice.annotations.Client; @@ -80,12 +74,9 @@ import org.apache.druid.guice.security.AuthorizerModule; import org.apache.druid.guice.security.DruidAuthModule; import org.apache.druid.initialization.CoreInjectorBuilder; -import org.apache.druid.initialization.DruidModule; import org.apache.druid.initialization.Log4jShutterDownerModule; import org.apache.druid.initialization.ServerInjectorBuilder; import org.apache.druid.initialization.TombstoneDataStorageModule; -import org.apache.druid.java.util.common.FileUtils; -import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.java.util.common.io.Closer; import org.apache.druid.java.util.common.lifecycle.Lifecycle; import org.apache.druid.java.util.common.logger.Logger; @@ -100,7 +91,6 @@ import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; import org.apache.druid.server.BrokerQueryResource; import org.apache.druid.server.ClientInfoResource; -import org.apache.druid.server.DruidNode; import org.apache.druid.server.QueryLifecycleFactory; import org.apache.druid.server.QueryScheduler; import org.apache.druid.server.QuerySchedulerProvider; @@ -118,20 +108,14 @@ import org.apache.druid.server.metrics.NoopServiceEmitter; import org.apache.druid.server.router.TieredBrokerConfig; import org.apache.druid.server.security.AuthenticatorMapper; -import org.apache.druid.server.security.AuthorizerMapper; import org.apache.druid.server.security.Escalator; import org.apache.druid.server.security.TLSCertificateCheckerModule; -import org.apache.druid.sql.avatica.AvaticaMonitor; -import org.apache.druid.sql.avatica.DruidAvaticaJsonHandler; -import org.apache.druid.sql.avatica.DruidMeta; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; import org.apache.druid.sql.calcite.planner.CalciteRulesManager; import org.apache.druid.sql.calcite.planner.CatalogResolver; -import org.apache.druid.sql.calcite.planner.PlannerConfig; import org.apache.druid.sql.calcite.run.SqlEngine; -import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.schema.DruidSchemaName; import org.apache.druid.sql.calcite.util.CalciteTests; import org.apache.druid.sql.calcite.util.SqlTestFramework; @@ -142,13 +126,10 @@ import org.apache.druid.storage.StorageConnectorModule; import org.apache.druid.timeline.PruneLoadSpec; import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URIBuilder; import org.apache.http.client.utils.URLEncodedUtils; import org.eclipse.jetty.server.Server; import org.junit.Test; -import java.io.Closeable; -import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -157,10 +138,7 @@ import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; -import java.sql.Connection; -import java.sql.DriverManager; import java.sql.SQLException; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -181,245 +159,6 @@ public Launcher() { } - public Connection connect(String url, Properties info) throws SQLException - { - try { - SqlTestFrameworkConfig config = buildConfigfromURIParams(url); - - ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( - config, - x -> new AvaticaBasedTestConnectionSupplier(x) - ); - - AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); - return server.getConnection(info); - } - catch (Exception e) { - throw new SQLException("Can't create testconnection", e); - } - } - - static class AvaticaBasedConnectionModule implements DruidModule, Closeable - { - Closer closer = Closer.create(); - - @Provides - @LazySingleton - public DruidSchemaCatalog getLookupNodeService(QueryRunnerFactoryConglomerate conglomerate, - SpecificSegmentsQuerySegmentWalker walker, PlannerConfig plannerConfig) - { - return CalciteTests.createMockRootSchema( - conglomerate, - walker, - plannerConfig, - CalciteTests.TEST_AUTHORIZER_MAPPER - ); - } - - @Provides - @LazySingleton - public DruidConnectionExtras getConnectionExtras(ObjectMapper objectMapper) - { - return new DruidConnectionExtras.DruidConnectionExtrasImpl(objectMapper); - } - - @Provides - @LazySingleton - public AvaticaJettyServer getAvaticaServer(DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) - throws Exception - { - AvaticaJettyServer avaticaJettyServer = new AvaticaJettyServer(druidMeta, druidConnectionExtras); - closer.register(avaticaJettyServer); - return avaticaJettyServer; - } - - @Override - public void configure(Binder binder) - { - } - - @Override - public void close() throws IOException - { - closer.close(); - } - - } - - static class AvaticaJettyServer implements Closeable - { - final DruidMeta druidMeta; - final Server server; - final String url; - final DruidConnectionExtras connectionExtras; - - AvaticaJettyServer(final DruidMeta druidMeta, DruidConnectionExtras druidConnectionExtras) throws Exception - { - this.druidMeta = druidMeta; - server = new Server(0); - server.setHandler(getAvaticaHandler(druidMeta)); - server.start(); - url = StringUtils.format( - "jdbc:avatica:remote:url=%s", - new URIBuilder(server.getURI()).setPath(DruidAvaticaJsonHandler.AVATICA_PATH).build() - ); - connectionExtras = druidConnectionExtras; - } - - public Connection getConnection(Properties info) throws SQLException - { - Connection realConnection = DriverManager.getConnection(url, info); - Connection proxyConnection = DynamicComposite.make( - realConnection, - Connection.class, - connectionExtras, - DruidConnectionExtras.class - ); - return proxyConnection; - } - - @Override - public void close() - { - druidMeta.closeAllConnections(); - try { - server.stop(); - } - catch (Exception e) { - throw new RuntimeException("Can't stop server", e); - } - } - - protected AbstractAvaticaHandler getAvaticaHandler(final DruidMeta druidMeta) - { - return new DruidAvaticaJsonHandler( - druidMeta, - new DruidNode("dummy", "dummy", false, 1, null, true, false), - new AvaticaMonitor() - ); - } - } - - static class AvaticaBasedTestConnectionSupplier implements QueryComponentSupplier - { - private QueryComponentSupplier delegate; - private AvaticaBasedConnectionModule connectionModule; - - public AvaticaBasedTestConnectionSupplier(QueryComponentSupplier delegate) - { - this.delegate = delegate; - this.connectionModule = new AvaticaBasedConnectionModule(); - } - - @Override - public void gatherProperties(Properties properties) - { - delegate.gatherProperties(properties); - } - - @Override - public void configureGuice(DruidInjectorBuilder builder) - { - delegate.configureGuice(builder); - TestRequestLogger testRequestLogger = new TestRequestLogger(); -// builder.addModule(connectionModule); - builder.addModule( - binder -> { - binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); - binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); - binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); - binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); - binder.bind(RequestLogger.class).toInstance(testRequestLogger); - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); - binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); - binder.bind(QueryScheduler.class) - .toProvider(QuerySchedulerProvider.class) - .in(LazySingleton.class); - binder.install(new SqlModule.SqlStatementFactoryModule()); - binder.bind(new TypeLiteral>() - { - }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); - binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); - binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); - } - ); - } - - @Override - public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) - { - return delegate.createCongolmerate(builder, closer); - } - - @Override - public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, - JoinableFactoryWrapper joinableFactory, Injector injector) - { - return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); - } - - @Override - public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) - { - return delegate.createEngine(qlf, objectMapper, injector); - } - - @Override - public void configureJsonMapper(ObjectMapper mapper) - { - delegate.configureJsonMapper(mapper); - } - - @Override - public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) - { - return delegate.createJoinableFactoryWrapper(lookupProvider); - } - - @Override - public void finalizeTestFramework(SqlTestFramework sqlTestFramework) - { - delegate.finalizeTestFramework(sqlTestFramework); - } - - @Override - public void close() throws IOException - { - connectionModule.close(); - delegate.close(); - } - - @Override - public PlannerComponentSupplier getPlannerComponentSupplier() - { - return delegate.getPlannerComponentSupplier(); - } - } - - protected File createTempFolder(String prefix) - { - File tempDir = FileUtils.createTempDir(prefix); - Runtime.getRuntime().addShutdownHook(new Thread() - { - @Override - public void run() - { - try { - FileUtils.deleteDirectory(tempDir); - } - catch (IOException ex) { - ex.printStackTrace(); - } - } - }); - return tempDir; - } - public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws SQLException { Map queryParams; @@ -438,111 +177,12 @@ public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws return new SqlTestFrameworkConfig(queryParams); } - public static void main(String[] args) throws Exception - { - ConfigurationInstance ci = getCI(); - - AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); - - } - - private static ConfigurationInstance getCI() throws SQLException, Exception - { - SqlTestFrameworkConfig config = buildConfigfromURIParams("druidtest:///"); - - ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( - config, - x -> new AvaticaBasedTestConnectionSupplier(x) - ); - return ci; - } - @Test public void runIt() throws Exception { Launcher.main3(null); } - private static Module propOverrideModuel1() - { - Properties localProps = makeLocalProps(); - - - Module m = binder -> binder.bind(Properties.class).toInstance(localProps); - return m; - } - - private static Properties makeLocalProps() - { - Properties localProps = new Properties(); - localProps.put("druid.enableTlsPort", "false"); - localProps.put("druid.zk.service.enabled", "false"); - localProps.put("druid.plaintextPort","12345"); - localProps.put("druid.host", "localhost"); - return localProps; - } - - static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { - - private List overrideModules =new ArrayList<>(); - - public CustomStartupInjectorBuilder() - { -// Module m = propOverrideModuel(); -// addOverride(m); -// addOverride(binder -> { -// binder.bind(SSLClientConfig.class).toProvider(Providers.of(null)); -// binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null)); -// binder.bind(SSLClientConfig.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); -// binder.bind(SSLContext.class).toProvider(Providers.of(null)); -// binder.bind(SSLContextProvider.class).annotatedWith(Global.class).toProvider(Providers.of(null)); -// binder.bind(SSLContextProvider.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); -// binder.bind(SSLContext.class).annotatedWith(Global.class).toProvider(Providers.of(null)); -// binder.bind(SSLContext.class).annotatedWith(EscalatedGlobal.class).toProvider(Providers.of(null)); -// } -// ); - - } - - private void addOverride(com.google.inject.Module m) - { - overrideModules.add(m); - } - - @Override - public Injector build() - { - return Guice.createInjector( - Modules.override(modules) - .with( overrideModules.toArray(new com.google.inject.Module[0]))); - - } - - } - - private static void main1(Object object) throws Exception - { - final Injector injector = new CustomStartupInjectorBuilder() - .forTests() - .build(); - - - SqlTestFramework framework = getCI().extracted( - new DiscovertModule() - - ) - - ; - -// SSLContextProvider u = injector.getInstance(SSLContextProvider.class); -// System.out.println(u); - - - - - } - - private static ConfigurationInstance getCI2() throws SQLException, Exception { SqlTestFrameworkConfig config = buildConfigfromURIParams("druidtest:///"); @@ -557,12 +197,10 @@ private static ConfigurationInstance getCI2() throws SQLException, Exception static class AvaticaBasedTestConnectionSupplier2 implements QueryComponentSupplier { private QueryComponentSupplier delegate; - private AvaticaBasedConnectionModule connectionModule; public AvaticaBasedTestConnectionSupplier2(QueryComponentSupplier delegate) { this.delegate = delegate; - this.connectionModule = new AvaticaBasedConnectionModule(); } @Override @@ -582,25 +220,9 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod { delegate.configureGuice(builder); TestRequestLogger testRequestLogger = new TestRequestLogger(); -// builder.addModule(connectionModule); overrideModules.add(new DiscovertModule()); - if(false) { - builder.addModule(new LegacyBrokerParallelMergeConfigModule()); - builder.addModule(new BrokerProcessingModule()); -// new QueryableModule(), - builder.addModule(new QueryRunnerFactoryModule()); - builder.addModule(new SegmentWranglerModule()); - builder.addModule(new JoinableFactoryModule()); - builder.addModule(new BrokerServiceModule()); - } - - -// builder.addModule(new StorageNodeModule()); - - - builder.addModule( binder -> { // why need to add this? @@ -724,7 +346,6 @@ public void finalizeTestFramework(SqlTestFramework sqlTestFramework) @Override public void close() throws IOException { - connectionModule.close(); delegate.close(); } From cabf2a31c3ebfed34f44a26e5ad61e5c905f8022 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 13:19:30 +0000 Subject: [PATCH 033/122] fix --- .../quidem/BrokerBasedTestConnection.java | 336 +++++++++++++++ .../apache/druid/quidem/DiscovertModule.java | 1 - .../org/apache/druid/quidem/Launcher.java | 391 +----------------- 3 files changed, 356 insertions(+), 372 deletions(-) create mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/BrokerBasedTestConnection.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/BrokerBasedTestConnection.java b/integration-tests/src/main/java/org/apache/druid/quidem/BrokerBasedTestConnection.java new file mode 100644 index 000000000000..339b2f66ed71 --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/quidem/BrokerBasedTestConnection.java @@ -0,0 +1,336 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.Module; +import com.google.inject.TypeLiteral; +import com.google.inject.name.Names; +import org.apache.druid.cli.CliBroker; +import org.apache.druid.cli.QueryJettyServerInitializer; +import org.apache.druid.client.BrokerSegmentWatcherConfig; +import org.apache.druid.client.BrokerServerView; +import org.apache.druid.client.InternalQueryConfig; +import org.apache.druid.client.TimelineServerView; +import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; +import org.apache.druid.client.selector.ServerSelectorStrategy; +import org.apache.druid.client.selector.TierSelectorStrategy; +import org.apache.druid.curator.CuratorModule; +import org.apache.druid.curator.discovery.DiscoveryModule; +import org.apache.druid.guice.AnnouncerModule; +import org.apache.druid.guice.BrokerProcessingModule; +import org.apache.druid.guice.BrokerServiceModule; +import org.apache.druid.guice.CoordinatorDiscoveryModule; +import org.apache.druid.guice.DruidInjectorBuilder; +import org.apache.druid.guice.ExpressionModule; +import org.apache.druid.guice.ExtensionsModule; +import org.apache.druid.guice.FirehoseModule; +import org.apache.druid.guice.JacksonConfigManagerModule; +import org.apache.druid.guice.JavaScriptModule; +import org.apache.druid.guice.Jerseys; +import org.apache.druid.guice.JoinableFactoryModule; +import org.apache.druid.guice.JsonConfigProvider; +import org.apache.druid.guice.LazySingleton; +import org.apache.druid.guice.LifecycleModule; +import org.apache.druid.guice.LocalDataStorageDruidModule; +import org.apache.druid.guice.MetadataConfigModule; +import org.apache.druid.guice.NestedDataModule; +import org.apache.druid.guice.QueryRunnerFactoryModule; +import org.apache.druid.guice.SegmentWranglerModule; +import org.apache.druid.guice.ServerModule; +import org.apache.druid.guice.ServerTypeConfig; +import org.apache.druid.guice.ServerViewModule; +import org.apache.druid.guice.StartupLoggingModule; +import org.apache.druid.guice.StorageNodeModule; +import org.apache.druid.guice.annotations.Client; +import org.apache.druid.guice.annotations.EscalatedClient; +import org.apache.druid.guice.http.HttpClientModule; +import org.apache.druid.guice.security.AuthenticatorModule; +import org.apache.druid.guice.security.AuthorizerModule; +import org.apache.druid.guice.security.DruidAuthModule; +import org.apache.druid.initialization.CoreInjectorBuilder; +import org.apache.druid.initialization.Log4jShutterDownerModule; +import org.apache.druid.initialization.ServerInjectorBuilder; +import org.apache.druid.initialization.TombstoneDataStorageModule; +import org.apache.druid.java.util.common.io.Closer; +import org.apache.druid.java.util.emitter.service.ServiceEmitter; +import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; +import org.apache.druid.query.DefaultQueryConfig; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.RetryQueryRunnerConfig; +import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; +import org.apache.druid.rpc.guice.ServiceClientModule; +import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; +import org.apache.druid.server.BrokerQueryResource; +import org.apache.druid.server.ClientInfoResource; +import org.apache.druid.server.QueryLifecycleFactory; +import org.apache.druid.server.QueryScheduler; +import org.apache.druid.server.QuerySchedulerProvider; +import org.apache.druid.server.ResponseContextConfig; +import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.server.SubqueryGuardrailHelper; +import org.apache.druid.server.SubqueryGuardrailHelperProvider; +import org.apache.druid.server.coordination.ServerType; +import org.apache.druid.server.http.BrokerResource; +import org.apache.druid.server.http.SelfDiscoveryResource; +import org.apache.druid.server.initialization.AuthorizerMapperModule; +import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; +import org.apache.druid.server.initialization.jetty.JettyServerInitializer; +import org.apache.druid.server.initialization.jetty.JettyServerModule; +import org.apache.druid.server.log.NoopRequestLogger; +import org.apache.druid.server.log.RequestLogger; +import org.apache.druid.server.metrics.NoopServiceEmitter; +import org.apache.druid.server.metrics.QueryCountStatsProvider; +import org.apache.druid.server.metrics.SubqueryCountStatsProvider; +import org.apache.druid.server.router.TieredBrokerConfig; +import org.apache.druid.server.security.AuthenticatorMapper; +import org.apache.druid.server.security.Escalator; +import org.apache.druid.server.security.TLSCertificateCheckerModule; +import org.apache.druid.sql.calcite.planner.CalciteRulesManager; +import org.apache.druid.sql.calcite.planner.CatalogResolver; +import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.calcite.schema.DruidSchemaName; +import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.calcite.util.SqlTestFramework; +import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; +import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; +import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; +import org.apache.druid.sql.guice.SqlModule; +import org.apache.druid.storage.StorageConnectorModule; +import org.apache.druid.timeline.PruneLoadSpec; +import org.eclipse.jetty.server.Server; + +import java.io.IOException; +import java.util.List; +import java.util.Properties; + +class BrokerBasedTestConnection implements QueryComponentSupplier +{ + private QueryComponentSupplier delegate; + + public BrokerBasedTestConnection(QueryComponentSupplier delegate) + { + this.delegate = delegate; + } + + @Override + public void gatherProperties(Properties properties) + { + delegate.gatherProperties(properties); + } + + @Override + public void configureGuice(DruidInjectorBuilder builder) + { + } + + @Override + public void configureGuice(CoreInjectorBuilder builder, List overrideModules) + { + delegate.configureGuice(builder); + + builder.addModule( + binder -> { + binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); + binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); + binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); + binder.bind(RequestLogger.class).toInstance(new NoopRequestLogger()); + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); + binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); + binder.bind(QueryScheduler.class) + .toProvider(QuerySchedulerProvider.class) + .in(LazySingleton.class); + binder.bind(new TypeLiteral>() + { + }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); + binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); + binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); + } + ); + + installForServerModules(builder); + + overrideModules.addAll(BrokerBasedTestConnection.brokerModules()); + overrideModules.add(new DiscovertModule()); + + } + + @Override + public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) + { + return delegate.createCongolmerate(builder, closer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + } + + @Override + public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) + { + return delegate.createEngine(qlf, objectMapper, injector); + } + + @Override + public void configureJsonMapper(ObjectMapper mapper) + { + delegate.configureJsonMapper(mapper); + } + + @Override + public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) + { + return delegate.createJoinableFactoryWrapper(lookupProvider); + } + + @Override + public void finalizeTestFramework(SqlTestFramework sqlTestFramework) + { + delegate.finalizeTestFramework(sqlTestFramework); + } + + @Override + public void close() throws IOException + { + delegate.close(); + } + + @Override + public PlannerComponentSupplier getPlannerComponentSupplier() + { + return delegate.getPlannerComponentSupplier(); + } + + /** + * Closely related to {@link CoreInjectorBuilder#forServer()} + */ + private void installForServerModules(CoreInjectorBuilder builder) + { + builder.add( + new Log4jShutterDownerModule(), + new LifecycleModule(), + ExtensionsModule.SecondaryModule.class, + new DruidAuthModule(), + TLSCertificateCheckerModule.class, + // EmitterModule.class, + HttpClientModule.global(), + HttpClientModule.escalatedGlobal(), + new HttpClientModule("druid.broker.http", Client.class, true), + new HttpClientModule("druid.broker.http", EscalatedClient.class, true), + new CuratorModule(), + new AnnouncerModule(), + new SegmentWriteOutMediumModule(), + new ServerModule(), + new StorageNodeModule(), + new JettyServerModule(), + new ExpressionModule(), + new NestedDataModule(), + new DiscoveryModule(), + new ServerViewModule(), + new MetadataConfigModule(), + new DerbyMetadataStorageDruidModule(), + new JacksonConfigManagerModule(), + new CoordinatorDiscoveryModule(), + new LocalDataStorageDruidModule(), + new TombstoneDataStorageModule(), + new FirehoseModule(), + new JavaScriptModule(), + new AuthenticatorModule(), + new AuthorizerModule(), + new AuthorizerMapperModule(), + new StartupLoggingModule(), + new ExternalStorageAccessSecurityModule(), + new ServiceClientModule(), + new StorageConnectorModule(), + new SqlModule(), + ServerInjectorBuilder.registerNodeRoleModule(ImmutableSet.of()) + ); + } + + /** + * Closely related to {@link CliBroker#getModules}. + */ + static List brokerModules() + { + return ImmutableList.of( + new BrokerProcessingModule(), + new QueryRunnerFactoryModule(), + new SegmentWranglerModule(), + new JoinableFactoryModule(), + new BrokerServiceModule(), + binder -> { + + binder.bindConstant().annotatedWith(Names.named("serviceName")).to( + TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME + ); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); + binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); + binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); + + binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); + + JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); + binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); + + binder.bind(BrokerQueryResource.class).in(LazySingleton.class); + Jerseys.addResource(binder, BrokerQueryResource.class); + binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); + binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); + binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); + Jerseys.addResource(binder, BrokerResource.class); + Jerseys.addResource(binder, ClientInfoResource.class); + + LifecycleModule.register(binder, BrokerQueryResource.class); + + LifecycleModule.register(binder, Server.class); + binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); + + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + + Jerseys.addResource(binder, SelfDiscoveryResource.class); + LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); + } + ); + } +} \ No newline at end of file diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java index 2ddd959ff8c5..fea9b22265b2 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java @@ -53,7 +53,6 @@ public class DiscovertModule extends AbstractModule { @Override protected void configure() { -// builder.addModule(propOverrideModuel()); } @Provides diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index fd9153a6ed89..53a656d4a114 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -19,115 +19,15 @@ package org.apache.druid.quidem; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.Module; -import com.google.inject.TypeLiteral; -import com.google.inject.name.Names; import org.apache.druid.cli.GuiceRunnable; -import org.apache.druid.cli.QueryJettyServerInitializer; -import org.apache.druid.client.BrokerSegmentWatcherConfig; -import org.apache.druid.client.BrokerServerView; -import org.apache.druid.client.InternalQueryConfig; -import org.apache.druid.client.TimelineServerView; -import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; -import org.apache.druid.client.selector.ServerSelectorStrategy; -import org.apache.druid.client.selector.TierSelectorStrategy; -import org.apache.druid.curator.CuratorModule; -import org.apache.druid.curator.discovery.DiscoveryModule; -import org.apache.druid.guice.AnnouncerModule; -import org.apache.druid.guice.BrokerProcessingModule; -import org.apache.druid.guice.BrokerServiceModule; -import org.apache.druid.guice.CoordinatorDiscoveryModule; -import org.apache.druid.guice.DruidInjectorBuilder; -import org.apache.druid.guice.ExpressionModule; -import org.apache.druid.guice.ExtensionsModule; -import org.apache.druid.guice.FirehoseModule; -import org.apache.druid.guice.JacksonConfigManagerModule; -import org.apache.druid.guice.JavaScriptModule; -import org.apache.druid.guice.Jerseys; -import org.apache.druid.guice.JoinableFactoryModule; -import org.apache.druid.guice.JsonConfigProvider; -import org.apache.druid.guice.LazySingleton; -import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; -import org.apache.druid.guice.LifecycleModule; -import org.apache.druid.guice.LocalDataStorageDruidModule; -import org.apache.druid.guice.MetadataConfigModule; -import org.apache.druid.guice.NestedDataModule; -import org.apache.druid.guice.QueryRunnerFactoryModule; -import org.apache.druid.guice.SegmentWranglerModule; -import org.apache.druid.guice.ServerModule; -import org.apache.druid.guice.ServerTypeConfig; -import org.apache.druid.guice.ServerViewModule; -import org.apache.druid.guice.StartupLoggingModule; -import org.apache.druid.guice.StorageNodeModule; -import org.apache.druid.guice.annotations.Client; -import org.apache.druid.guice.annotations.EscalatedClient; -import org.apache.druid.guice.http.HttpClientModule; -import org.apache.druid.guice.security.AuthenticatorModule; -import org.apache.druid.guice.security.AuthorizerModule; -import org.apache.druid.guice.security.DruidAuthModule; -import org.apache.druid.initialization.CoreInjectorBuilder; -import org.apache.druid.initialization.Log4jShutterDownerModule; -import org.apache.druid.initialization.ServerInjectorBuilder; -import org.apache.druid.initialization.TombstoneDataStorageModule; -import org.apache.druid.java.util.common.io.Closer; import org.apache.druid.java.util.common.lifecycle.Lifecycle; import org.apache.druid.java.util.common.logger.Logger; -import org.apache.druid.java.util.emitter.service.ServiceEmitter; -import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; -import org.apache.druid.query.DefaultQueryConfig; -import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.query.RetryQueryRunnerConfig; -import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; -import org.apache.druid.rpc.guice.ServiceClientModule; -import org.apache.druid.segment.join.JoinableFactoryWrapper; -import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; -import org.apache.druid.server.BrokerQueryResource; -import org.apache.druid.server.ClientInfoResource; -import org.apache.druid.server.QueryLifecycleFactory; -import org.apache.druid.server.QueryScheduler; -import org.apache.druid.server.QuerySchedulerProvider; -import org.apache.druid.server.ResponseContextConfig; -import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; -import org.apache.druid.server.coordination.ServerType; -import org.apache.druid.server.http.BrokerResource; -import org.apache.druid.server.http.SelfDiscoveryResource; -import org.apache.druid.server.initialization.AuthorizerMapperModule; -import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; -import org.apache.druid.server.initialization.jetty.JettyServerInitializer; -import org.apache.druid.server.initialization.jetty.JettyServerModule; -import org.apache.druid.server.log.RequestLogger; -import org.apache.druid.server.log.TestRequestLogger; -import org.apache.druid.server.metrics.NoopServiceEmitter; -import org.apache.druid.server.router.TieredBrokerConfig; -import org.apache.druid.server.security.AuthenticatorMapper; -import org.apache.druid.server.security.Escalator; -import org.apache.druid.server.security.TLSCertificateCheckerModule; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; -import org.apache.druid.sql.calcite.planner.CalciteRulesManager; -import org.apache.druid.sql.calcite.planner.CatalogResolver; -import org.apache.druid.sql.calcite.run.SqlEngine; -import org.apache.druid.sql.calcite.schema.DruidSchemaName; -import org.apache.druid.sql.calcite.util.CalciteTests; import org.apache.druid.sql.calcite.util.SqlTestFramework; -import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; -import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; -import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; -import org.apache.druid.sql.guice.SqlModule; -import org.apache.druid.storage.StorageConnectorModule; -import org.apache.druid.timeline.PruneLoadSpec; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; -import org.eclipse.jetty.server.Server; import org.junit.Test; import java.io.IOException; @@ -142,22 +42,16 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Properties; import static org.junit.Assert.assertNotEquals; public class Launcher { - public static final String URI_PREFIX = "druidtest://"; public static final String DEFAULT_URI = URI_PREFIX + "/"; - static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); - private static Logger log = new Logger(Launcher.class); - public Launcher() - { - } + private static Logger log = new Logger(Launcher.class); public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws SQLException { @@ -189,189 +83,24 @@ private static ConfigurationInstance getCI2() throws SQLException, Exception ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( config, - x -> new AvaticaBasedTestConnectionSupplier2(x) + x -> new BrokerBasedTestConnection(x) ); return ci; } - static class AvaticaBasedTestConnectionSupplier2 implements QueryComponentSupplier - { - private QueryComponentSupplier delegate; - - public AvaticaBasedTestConnectionSupplier2(QueryComponentSupplier delegate) - { - this.delegate = delegate; - } - - @Override - public void gatherProperties(Properties properties) - { - delegate.gatherProperties(properties); - } - - @Override - public void configureGuice(DruidInjectorBuilder builder) - { - throw new RuntimeException("f"); - } - - @Override - public void configureGuice(CoreInjectorBuilder builder, List overrideModules) - { - delegate.configureGuice(builder); - TestRequestLogger testRequestLogger = new TestRequestLogger(); - - overrideModules.add(new DiscovertModule()); - - builder.addModule( - binder -> { - // why need to add this? -// binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); - binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); - binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); -// binder.bind(AuthorizerMapper.class).toInstance(CalciteTests.TEST_AUTHORIZER_MAPPER); - binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); - binder.bind(RequestLogger.class).toInstance(testRequestLogger); - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); - binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); - binder.bind(QueryScheduler.class) - .toProvider(QuerySchedulerProvider.class) - .in(LazySingleton.class); -// binder.install(new SqlModule.SqlStatementFactoryModule()); - binder.bind(new TypeLiteral>() - { - }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); - binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); - binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); - } - ); - - if(true) { - - builder.add( - new Log4jShutterDownerModule(), - new LifecycleModule(), - ExtensionsModule.SecondaryModule.class, - new DruidAuthModule(), - TLSCertificateCheckerModule.class, -// EmitterModule.class, - HttpClientModule.global(), - HttpClientModule.escalatedGlobal(), - new HttpClientModule("druid.broker.http", Client.class, true), - new HttpClientModule("druid.broker.http", EscalatedClient.class, true), - new CuratorModule(), - new AnnouncerModule(), -// new MetricsModule(), - new SegmentWriteOutMediumModule(), - new ServerModule(), - new StorageNodeModule(), - new JettyServerModule(), - new ExpressionModule(), - new NestedDataModule(), - new DiscoveryModule(), - new ServerViewModule(), - new MetadataConfigModule(), - new DerbyMetadataStorageDruidModule(), - new JacksonConfigManagerModule(), - new CoordinatorDiscoveryModule(), - new LocalDataStorageDruidModule(), - new TombstoneDataStorageModule(), - new FirehoseModule(), - new JavaScriptModule(), - new AuthenticatorModule(), -// new AuthenticatorMapperModule(), -// new EscalatorModule(), - new AuthorizerModule(), - new AuthorizerMapperModule(), - new StartupLoggingModule(), - new ExternalStorageAccessSecurityModule(), - new ServiceClientModule(), - new StorageConnectorModule(), - new SqlModule() - -); -// builder.addModules(); -// builder.addModules(new CliBroker2().getmodules2().toArray(new Module[0])); - - overrideModules.addAll(brokerModules()); - - builder.add(ServerInjectorBuilder.registerNodeRoleModule(ImmutableSet.of())); - - } - - } - - @Override - public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) - { - return delegate.createCongolmerate(builder, closer); - } - - @Override - public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, - JoinableFactoryWrapper joinableFactory, Injector injector) - { - return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); - } - - @Override - public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) - { - return delegate.createEngine(qlf, objectMapper, injector); - } - - @Override - public void configureJsonMapper(ObjectMapper mapper) - { - delegate.configureJsonMapper(mapper); - } - - @Override - public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) - { - return delegate.createJoinableFactoryWrapper(lookupProvider); - } - - @Override - public void finalizeTestFramework(SqlTestFramework sqlTestFramework) - { - delegate.finalizeTestFramework(sqlTestFramework); - } - - @Override - public void close() throws IOException - { - delegate.close(); - } - - @Override - public PlannerComponentSupplier getPlannerComponentSupplier() - { - return delegate.getPlannerComponentSupplier(); - } - } - - private static void main3(Object object) throws Exception - { - - SqlTestFramework framework = getCI2().framework - ; + { - if(true) { - Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); + SqlTestFramework framework = getCI2().framework; - chk1(); - chkStatus(); + if (true) { + Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); + chk1(); + chkStatus(); - lifecycle.stop(); - }else { + lifecycle.stop(); + } else { } @@ -380,110 +109,30 @@ private static void main3(Object object) throws Exception private static void chk1() throws IOException, InterruptedException { HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/druid/v2/sql")) - .header("Content-Type", "application/json") - .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) - .build(); + .uri(URI.create("http://localhost:12345/druid/v2/sql")) + .header("Content-Type", "application/json") + .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) + .build(); System.out.println(request); HttpClient hc = HttpClient.newHttpClient(); HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(a); assertNotEquals(400, a.statusCode()); } + private static void chkStatus() throws IOException, InterruptedException { HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/status")) - .header("Content-Type", "application/json") - .GET() - .build(); + .uri(URI.create("http://localhost:12345/status")) + .header("Content-Type", "application/json") + .GET() + .build(); System.out.println(request); -// request. + // request. HttpClient hc = HttpClient.newHttpClient(); HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(a); assertNotEquals(400, a.statusCode()); - - } - - - private static List brokerModules() - { - return ImmutableList.of( - new LegacyBrokerParallelMergeConfigModule(), - new BrokerProcessingModule(), -// new QueryableModule(), - new QueryRunnerFactoryModule(), - new SegmentWranglerModule(), - new JoinableFactoryModule(), - new BrokerServiceModule(), - binder -> { - - binder.bindConstant().annotatedWith(Names.named("serviceName")).to( - TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME - ); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); - binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); - binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); - -// binder.bind(CachingClusteredClient.class).in(LazySingleton.class); -// LifecycleModule.register(binder, BrokerServerView.class); -// LifecycleModule.register(binder, MetadataSegmentView.class); - binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); -// -// JsonConfigProvider.bind(binder, "druid.broker.cache", CacheConfig.class); -// binder.install(new CacheModule()); -// - JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); - -// binder.bind(QuerySegmentWalker.class).to(ClientQuerySegmentWalker.class).in(LazySingleton.class); - - binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); - -// binder.bind(BrokerQueryResource.class).in(LazySingleton.class); - Jerseys.addResource(binder, BrokerQueryResource.class); -// binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); -// binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); -// binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); - Jerseys.addResource(binder, BrokerResource.class); - Jerseys.addResource(binder, ClientInfoResource.class); - - LifecycleModule.register(binder, BrokerQueryResource.class); - -// Jerseys.addResource(binder, HttpServerInventoryViewResource.class); - - LifecycleModule.register(binder, Server.class); -// binder.bind(SegmentManager.class).in(LazySingleton.class); -// binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); - binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); -// Jerseys.addResource(binder, HistoricalResource.class); -// Jerseys.addResource(binder, SegmentListerResource.class); - -// if (isZkEnabled) { -// LifecycleModule.register(binder, ZkCoordinator.class); -// } - -// bindAnnouncer( -// binder, -// DiscoverySideEffectsProvider.withLegacyAnnouncer() -// ); - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - - Jerseys.addResource(binder, SelfDiscoveryResource.class); - LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); - } -// new LookupModule(), -// new LookylooModule(), -// new SqlModule() - ); } } From fc9a6c7740231a5c429b0e7b05c04af948219de7 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 13:23:45 +0000 Subject: [PATCH 034/122] move/etc --- ...=> ExposedAsBrokerQueryComponentSupplierWrapper.java} | 9 ++++++--- .../src/main/java/org/apache/druid/quidem/Launcher.java | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) rename integration-tests/src/main/java/org/apache/druid/quidem/{BrokerBasedTestConnection.java => ExposedAsBrokerQueryComponentSupplierWrapper.java} (97%) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/BrokerBasedTestConnection.java b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java similarity index 97% rename from integration-tests/src/main/java/org/apache/druid/quidem/BrokerBasedTestConnection.java rename to integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index 339b2f66ed71..329c169aad7d 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/BrokerBasedTestConnection.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -129,11 +129,14 @@ import java.util.List; import java.util.Properties; -class BrokerBasedTestConnection implements QueryComponentSupplier +/** + * A wrapper class to expose a {@link QueryComponentSupplier} as a Broker service. + */ +public class ExposedAsBrokerQueryComponentSupplierWrapper implements QueryComponentSupplier { private QueryComponentSupplier delegate; - public BrokerBasedTestConnection(QueryComponentSupplier delegate) + public ExposedAsBrokerQueryComponentSupplierWrapper(QueryComponentSupplier delegate) { this.delegate = delegate; } @@ -180,7 +183,7 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod installForServerModules(builder); - overrideModules.addAll(BrokerBasedTestConnection.brokerModules()); + overrideModules.addAll(ExposedAsBrokerQueryComponentSupplierWrapper.brokerModules()); overrideModules.add(new DiscovertModule()); } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 53a656d4a114..f63f2bfe9e27 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -83,7 +83,7 @@ private static ConfigurationInstance getCI2() throws SQLException, Exception ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( config, - x -> new BrokerBasedTestConnection(x) + x -> new ExposedAsBrokerQueryComponentSupplierWrapper(x) ); return ci; } From e7e119b55920307f03a7d0e05c1864daa75cf080 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 16 May 2024 13:33:27 +0000 Subject: [PATCH 035/122] reduce copypaste --- .../apache/druid/quidem/DiscovertModule.java | 89 +------------------ .../druid/sql/calcite/util/CalciteTests.java | 24 +++-- 2 files changed, 21 insertions(+), 92 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java index fea9b22265b2..94bb2b1d2a5e 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java @@ -20,14 +20,9 @@ package org.apache.druid.quidem; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Sets; import com.google.inject.AbstractModule; import com.google.inject.Provides; -import org.apache.druid.discovery.DiscoveryDruidNode; -import org.apache.druid.discovery.DruidNodeDiscovery; import org.apache.druid.discovery.DruidNodeDiscoveryProvider; -import org.apache.druid.discovery.NodeRole; import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.annotations.Json; import org.apache.druid.query.QueryRunnerFactoryConglomerate; @@ -38,12 +33,7 @@ import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; import org.apache.druid.sql.calcite.util.CalciteTests; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; import java.util.Properties; -import java.util.Set; -import java.util.function.BooleanSupplier; public class DiscovertModule extends AbstractModule { @@ -83,84 +73,11 @@ public SqlEngine createMockSqlEngine( return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); } - @Provides @LazySingleton - DruidNodeDiscoveryProvider getProvider() { - final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); - DiscovertModule.FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( - ImmutableMap.of( - NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode)) - ) - ); - return provider; - } - - /** - * A fake {@link DruidNodeDiscoveryProvider} for {@link #createMockSystemSchema}. - */ - private static class FakeDruidNodeDiscoveryProvider extends DruidNodeDiscoveryProvider - { - private final Map nodeDiscoveries; - - public FakeDruidNodeDiscoveryProvider(Map nodeDiscoveries) - { - this.nodeDiscoveries = nodeDiscoveries; - } - - @Override - public BooleanSupplier getForNode(DruidNode node, NodeRole nodeRole) - { - boolean get = nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()) - .getAllNodes() - .stream() - .anyMatch(x -> x.getDruidNode().equals(node)); - return () -> get; - } - - @Override - public DruidNodeDiscovery getForNodeRole(NodeRole nodeRole) - { - return nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery()); - } - } - - private static class FakeDruidNodeDiscovery implements DruidNodeDiscovery + DruidNodeDiscoveryProvider getProvider() { - private final Set nodes; - - FakeDruidNodeDiscovery() - { - this.nodes = new HashSet<>(); - } - - FakeDruidNodeDiscovery(Map nodes) - { - this.nodes = Sets.newHashSetWithExpectedSize(nodes.size()); - nodes.forEach((k, v) -> { - addNode(v, k); - }); - } - - @Override - public Collection getAllNodes() - { - return nodes; - } - - void addNode(DruidNode node, NodeRole role) - { - final DiscoveryDruidNode discoveryNode = new DiscoveryDruidNode(node, role, ImmutableMap.of()); - this.nodes.add(discoveryNode); - } - - @Override - public void registerListener(Listener listener) - { - - } + final DruidNode coordinatorNode = CalciteTests.mockCoordinatorNode(); + return CalciteTests.mockDruidNodeDiscoveryProvider(coordinatorNode); } - - - } \ No newline at end of file diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java index 2594d2e98dce..ddd853d97bef 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java @@ -360,18 +360,30 @@ public static DruidOperatorTable createOperatorTable() return QueryFrameworkUtils.createOperatorTable(INJECTOR); } - public static SystemSchema createMockSystemSchema( - final DruidSchema druidSchema, - final SpecificSegmentsQuerySegmentWalker walker, - final AuthorizerMapper authorizerMapper - ) + + public static DruidNode mockCoordinatorNode() + { + return new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); + } + + public static FakeDruidNodeDiscoveryProvider mockDruidNodeDiscoveryProvider(final DruidNode coordinatorNode) { - final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false); FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider( ImmutableMap.of( NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode)) ) ); + return provider; + } + + public static SystemSchema createMockSystemSchema( + final DruidSchema druidSchema, + final SpecificSegmentsQuerySegmentWalker walker, + final AuthorizerMapper authorizerMapper + ) + { + final DruidNode coordinatorNode = mockCoordinatorNode(); + FakeDruidNodeDiscoveryProvider provider = mockDruidNodeDiscoveryProvider(coordinatorNode); final DruidNode overlordNode = new DruidNode("test-overlord", "dummy", false, 8090, null, true, false); From 652cc20597cff33270b03e59f535d897bd4235f8 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 17 May 2024 07:00:57 +0000 Subject: [PATCH 036/122] use lower_camel for config names --- .../sql/calcite/SqlTestFrameworkConfig.java | 16 +++++++++++----- .../decoupled.iq | 2 +- .../join.iq | 2 +- .../numMerge.iq | 2 +- .../supplier.iq | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 2e136d525001..b7c4cd363df5 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -19,6 +19,7 @@ package org.apache.druid.sql.calcite; +import com.google.common.base.CaseFormat; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.cache.CacheBuilder; @@ -156,10 +157,10 @@ public Class fromString(String name) throws Ex } private static final Set KNOWN_CONFIG_KEYS = ImmutableSet.builder() - .add(NumMergeBuffers.class.getSimpleName()) - .add(MinTopNThreshold.class.getSimpleName()) - .add(ResultCache.class.getSimpleName()) - .add(ComponentSupplier.class.getSimpleName()) + .add(NumMergeBuffers.PROCESSOR.getConfigName()) + .add(MinTopNThreshold.PROCESSOR.getConfigName()) + .add(ResultCache.PROCESSOR.getConfigName()) + .add(ComponentSupplier.PROCESSOR.getConfigName()) .build(); public final int numMergeBuffers; @@ -408,6 +409,11 @@ public ConfigOptionProcessor(Class annotationClass) this.annotationClass = annotationClass; } + public final String getConfigName() + { + return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, annotationClass.getSimpleName()); + } + @SuppressWarnings("unchecked") public final T fromAnnotations(List annotations) throws Exception { @@ -436,7 +442,7 @@ public final T defaultValue() throws Exception public final T fromMap(Map map) throws Exception { - String key = annotationClass.getSimpleName(); + String key = getConfigName(); String value = map.get(key); if (value == null) { return defaultValue(); diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq index 049d8d9d4d7e..be52c7c4c65b 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq @@ -1,5 +1,5 @@ !set plannerStrategy DECOUPLED -!use druidtest://?NumMergeBuffers=3 +!use druidtest://?numMergeBuffers=3 !set outputformat mysql select cityName, count(case when delta > 0 then channel end) as cnt, count(1) as aall diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq index b48f587db246..e1ae27eef0d2 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/join.iq @@ -1,4 +1,4 @@ -!use druidtest://?NumMergeBuffers=3 +!use druidtest://?numMergeBuffers=3 !set outputformat mysql with v as ( diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/numMerge.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/numMerge.iq index 4862d3425d44..2c42ea49c782 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/numMerge.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/numMerge.iq @@ -1,4 +1,4 @@ -!use druidtest://?NumMergeBuffers=3 +!use druidtest://?numMergeBuffers=3 !set outputformat mysql SELECT diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/supplier.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/supplier.iq index 2825903dd7fc..97c76bf297eb 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/supplier.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/supplier.iq @@ -1,4 +1,4 @@ -!use druidtest://?ComponentSupplier=NestedComponentSupplier +!use druidtest://?componentSupplier=NestedComponentSupplier !set outputformat mysql select count(1) from nested; From 453c11f9f56d1a6c633cb19a3352f93dc88ac732 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 17 May 2024 07:12:12 +0000 Subject: [PATCH 037/122] update exceptions;test output --- .../druid/sql/calcite/planner/PlannerConfig.java | 13 +++++++++++-- .../druid/sql/calcite/SqlTestFrameworkConfig.java | 4 ++-- ...TopNOnInnerJoinWithLimit@NullHandling=default.iq | 4 ++-- ...xactTopNOnInnerJoinWithLimit@NullHandling=sql.iq | 4 ++-- .../testGroupByWithLiteralInSubqueryGrouping.iq | 2 +- ...tityProjectDoesNotRename@NullHandling=default.iq | 4 ++-- ...IdentityProjectDoesNotRename@NullHandling=sql.iq | 4 ++-- 7 files changed, 22 insertions(+), 13 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java index 6f2a97b24823..6e2e6685a08b 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerConfig.java @@ -20,7 +20,7 @@ package org.apache.druid.sql.calcite.planner; import com.fasterxml.jackson.annotation.JsonProperty; -import org.apache.druid.java.util.common.IAE; +import org.apache.druid.error.DruidException; import org.apache.druid.java.util.common.UOE; import org.apache.druid.query.QueryContexts; import org.joda.time.DateTimeZone; @@ -431,6 +431,11 @@ public PlannerConfig build() } } + /** + * Translates {@link PlannerConfig} settings into its equivalent QueryContext map. + * + * @throws DruidException if the translation is not possible. + */ public Map getNonDefaultAsQueryContext() { Map overrides = new HashMap<>(); @@ -450,7 +455,11 @@ public Map getNonDefaultAsQueryContext() PlannerConfig newConfig = PlannerConfig.builder().withOverrides(overrides).build(); if (!equals(newConfig)) { - throw new IAE("Some configs are not handled in this method or not persistable as QueryContext keys!\nold: %s\nnew: %s", this, newConfig); + throw DruidException.defensive( + "Not all PlannerConfig options are not persistable as QueryContext keys!\nold: %s\nnew: %s", + this, + newConfig + ); } return overrides; } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index b7c4cd363df5..a3311d32c87e 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -389,10 +389,10 @@ private Map getNonDefaultMap() Map map = new HashMap<>(); SqlTestFrameworkConfig def = new SqlTestFrameworkConfig(Collections.emptyList()); if (def.numMergeBuffers != numMergeBuffers) { - map.put("NumMergeBuffers", String.valueOf(numMergeBuffers)); + map.put("numMergeBuffers", String.valueOf(numMergeBuffers)); } if (def.minTopNThreshold != minTopNThreshold) { - map.put("MinTopNThreshold", String.valueOf(minTopNThreshold)); + map.put("minTopNThreshold", String.valueOf(minTopNThreshold)); } if (!equals(new SqlTestFrameworkConfig(map))) { throw new IAE("Can't reproduce config via map!"); diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq index b3c4475391ce..655e998e70c9 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=default.iq @@ -1,4 +1,4 @@ -# testExactTopNOnInnerJoinWithLimit@NullHandling=default case-crc:d28d4632 +# testExactTopNOnInnerJoinWithLimit@NullHandling=default case-crc:1b8b1878 # quidem testcase reason: EQUIV_PLAN !set debug true !set defaultTimeout 300000 @@ -8,7 +8,7 @@ !set sqlQueryId dummy !set useApproximateTopN false !set outputformat mysql -!use druidtest:///?MinTopNThreshold=1 +!use druidtest:///?minTopNThreshold=1 select f1."dim4", sum("m1") from numfoo f1 inner join ( select "dim4" from numfoo where dim4 <> 'a' group by 1 ) f2 on f1."dim4" = f2."dim4" group by 1 limit 1; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq index 23f6365d1fed..f7f6ae51c54e 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteJoinQueryTest/testExactTopNOnInnerJoinWithLimit@NullHandling=sql.iq @@ -1,4 +1,4 @@ -# testExactTopNOnInnerJoinWithLimit@NullHandling=sql case-crc:d28d4632 +# testExactTopNOnInnerJoinWithLimit@NullHandling=sql case-crc:1b8b1878 # quidem testcase reason: EQUIV_PLAN !set debug true !set defaultTimeout 300000 @@ -8,7 +8,7 @@ !set sqlQueryId dummy !set useApproximateTopN false !set outputformat mysql -!use druidtest:///?MinTopNThreshold=1 +!use druidtest:///?minTopNThreshold=1 select f1."dim4", sum("m1") from numfoo f1 inner join ( select "dim4" from numfoo where dim4 <> 'a' group by 1 ) f2 on f1."dim4" = f2."dim4" group by 1 limit 1; diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq index b5d2c682643b..85c1b392c49a 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testGroupByWithLiteralInSubqueryGrouping.iq @@ -30,8 +30,8 @@ SELECT +-------+----+ | t1 | t2 | +-------+----+ -| dummy | | | dummy | b | +| dummy | | +-------+----+ (2 rows) diff --git a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq index 847896ebe132..dd7cb19cb201 100644 --- a/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq +++ b/sql/src/test/quidem/org.apache.druid.sql.calcite.DecoupledPlanningCalciteQueryTest/testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default.iq @@ -1,4 +1,4 @@ -# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default case-crc:d6c371b5 +# testQueryWithSelectProjectAndIdentityProjectDoesNotRename@NullHandling=default case-crc:5a66a3be # quidem testcase reason: SLIGHTLY_WORSE_PLAN !set debug true !set defaultTimeout 300000 @@ -9,7 +9,7 @@ !set useApproximateCountDistinct false !set useGroupingSetForExactDistinct true !set outputformat mysql -!use druidtest:///?NumMergeBuffers=3 +!use druidtest:///?numMergeBuffers=3 SELECT (SUM(CASE WHEN (TIMESTAMP '2000-01-04 17:00:00'<=__time AND __time Date: Tue, 21 May 2024 06:57:26 +0000 Subject: [PATCH 038/122] fix test expectation --- .../apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java index 175dbb1649d4..3a7dd2d22d3b 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java @@ -132,8 +132,9 @@ public void testInvalidConfigKeySpecified() IAE.class, () -> new SqlTestFrameworkConfig(configMap) ); + assertEquals( - "Invalid configuration key(s) specified [[nonExistent]]; valid options are [[NumMergeBuffers, MinTopNThreshold, ResultCache, ComponentSupplier]]", + "Invalid configuration key(s) specified [[nonExistent]]; valid options are [[numMergeBuffers, minTopNThreshold, resultCache, componentSupplier]]", e.getMessage() ); } From 52598d3bca3c63a9563dba2e5b2fa775cc2e9cbd Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 21 May 2024 12:02:44 +0000 Subject: [PATCH 039/122] some stuff --- .../java/org/apache/druid/storage/s3/S3StorageDruidModule.java | 3 +++ .../src/main/java/org/apache/druid/quidem/DiscovertModule.java | 1 + .../src/main/java/org/apache/druid/quidem/Launcher.java | 3 ++- .../main/java/org/apache/druid/quidem/QuidemCaptureModule.java | 1 + .../org/apache/druid/sql/calcite/planner/PlannerFactory.java | 2 +- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java index 3747088aeb6e..7eaceb223644 100644 --- a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java +++ b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java @@ -24,6 +24,7 @@ import com.amazonaws.Protocol; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration; +import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.fasterxml.jackson.core.Version; @@ -141,8 +142,10 @@ public ServerSideEncryptingAmazonS3.Builder getServerSideEncryptingAmazonS3Build .withClientConfiguration(S3Utils.setProxyConfig(configuration, proxyConfig).withProtocol(protocol)) .withChunkedEncodingDisabled(clientConfig.isDisableChunkedEncoding()) .withPathStyleAccessEnabled(clientConfig.isEnablePathStyleAccess()) + .withRegion(Regions.US_WEST_2) .withForceGlobalBucketAccessEnabled(clientConfig.isForceGlobalBucketAccessEnabled()); + if (StringUtils.isNotEmpty(endpointConfig.getUrl())) { amazonS3ClientBuilder.setEndpointConfiguration( new EndpointConfiguration(endpointConfig.getUrl(), endpointConfig.getSigningRegion()) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java index 94bb2b1d2a5e..d4de2cd0c8b6 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java @@ -51,6 +51,7 @@ public BrokerSegmentMetadataCache provideCache() { return null; } + @Provides @LazySingleton public Properties getProps() { diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index f63f2bfe9e27..8068974b539e 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -99,7 +99,8 @@ private static void main3(Object object) throws Exception chk1(); chkStatus(); - lifecycle.stop(); + lifecycle.join(); +// lifecycle.stop(); } else { } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java index f041bc286b5a..5e2f2c0f139d 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java @@ -30,5 +30,6 @@ public class QuidemCaptureModule implements Module public void configure(Binder binder) { Jerseys.addResource(binder, QuidemCapture.class); +// Hook.CONVERTED.add(null) } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java index a5cdc028e7fc..e862394ce77a 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java @@ -112,7 +112,7 @@ public DruidPlanner createPlanner( queryContext, hook ); - + return new DruidPlanner(buildFrameworkConfig(context), context, engine, hook); } From 08b73d196973f44622316fd0ec5b4087d89c870b Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 21 May 2024 12:02:46 +0000 Subject: [PATCH 040/122] Revert "some stuff" This reverts commit 52598d3bca3c63a9563dba2e5b2fa775cc2e9cbd. --- .../java/org/apache/druid/storage/s3/S3StorageDruidModule.java | 3 --- .../src/main/java/org/apache/druid/quidem/DiscovertModule.java | 1 - .../src/main/java/org/apache/druid/quidem/Launcher.java | 3 +-- .../main/java/org/apache/druid/quidem/QuidemCaptureModule.java | 1 - .../org/apache/druid/sql/calcite/planner/PlannerFactory.java | 2 +- 5 files changed, 2 insertions(+), 8 deletions(-) diff --git a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java index 7eaceb223644..3747088aeb6e 100644 --- a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java +++ b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java @@ -24,7 +24,6 @@ import com.amazonaws.Protocol; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration; -import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.fasterxml.jackson.core.Version; @@ -142,10 +141,8 @@ public ServerSideEncryptingAmazonS3.Builder getServerSideEncryptingAmazonS3Build .withClientConfiguration(S3Utils.setProxyConfig(configuration, proxyConfig).withProtocol(protocol)) .withChunkedEncodingDisabled(clientConfig.isDisableChunkedEncoding()) .withPathStyleAccessEnabled(clientConfig.isEnablePathStyleAccess()) - .withRegion(Regions.US_WEST_2) .withForceGlobalBucketAccessEnabled(clientConfig.isForceGlobalBucketAccessEnabled()); - if (StringUtils.isNotEmpty(endpointConfig.getUrl())) { amazonS3ClientBuilder.setEndpointConfiguration( new EndpointConfiguration(endpointConfig.getUrl(), endpointConfig.getSigningRegion()) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java index d4de2cd0c8b6..94bb2b1d2a5e 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java @@ -51,7 +51,6 @@ public BrokerSegmentMetadataCache provideCache() { return null; } - @Provides @LazySingleton public Properties getProps() { diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 8068974b539e..f63f2bfe9e27 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -99,8 +99,7 @@ private static void main3(Object object) throws Exception chk1(); chkStatus(); - lifecycle.join(); -// lifecycle.stop(); + lifecycle.stop(); } else { } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java index 5e2f2c0f139d..f041bc286b5a 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java @@ -30,6 +30,5 @@ public class QuidemCaptureModule implements Module public void configure(Binder binder) { Jerseys.addResource(binder, QuidemCapture.class); -// Hook.CONVERTED.add(null) } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java index e862394ce77a..a5cdc028e7fc 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java @@ -112,7 +112,7 @@ public DruidPlanner createPlanner( queryContext, hook ); - + return new DruidPlanner(buildFrameworkConfig(context), context, engine, hook); } From ba09e7d1ded45fdf3600831340ad42892f7ceba7 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 21 May 2024 14:00:02 +0000 Subject: [PATCH 041/122] add --- .../apache/druid/quidem/QuidemCapture.java | 24 +++- .../apache/druid/quidem/QuidemRecorder.java | 42 +++++++ .../sql/calcite/planner/PlannerFactory.java | 2 + .../org/apache/druid/quidem/DruidHook.java | 108 ++++++++++++++++++ 4 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java create mode 100644 sql/src/test/java/org/apache/druid/quidem/DruidHook.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java index 3b29be13ade5..b9719922e047 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java @@ -28,6 +28,8 @@ public class QuidemCapture { + private QuidemRecorder recorder = null; + @GET @Path("/") @Produces(MediaType.TEXT_PLAIN) @@ -37,10 +39,26 @@ public String getSome() } @GET - @Path("/asd") + @Path("/start") @Produces(MediaType.TEXT_PLAIN) - public String getSome1() + public synchronized String getSome1() { - return "Asd"; + stopIfRunning(); + start(); + return null; + } + + private void start() + { + recorder = new QuidemRecorder(); + } + + private void stopIfRunning() + { + if (recorder != null) { + recorder.close(); + recorder = null; + } + } } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java new file mode 100644 index 000000000000..45659722cd08 --- /dev/null +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +public class QuidemRecorder implements AutoCloseable, DruidHook +{ + public QuidemRecorder() + { + DruidHook.register(DruidHook.SQL, this); + DruidHook.register(DruidHook.RESULTSET, this); + } + + @Override + public void close() + { + DruidHook.unregister(DruidHook.SQL, this); + DruidHook.unregister(DruidHook.RESULTSET, this); + } + + @Override + public void dispatch1(HookKey key, T object) + { + System.out.println(object); + } +} diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java index a5cdc028e7fc..ba3424cc65bc 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java @@ -39,6 +39,7 @@ import org.apache.calcite.tools.Frameworks; import org.apache.druid.guice.annotations.Json; import org.apache.druid.math.expr.ExprMacroTable; +import org.apache.druid.quidem.DruidHook; import org.apache.druid.segment.join.JoinableFactoryWrapper; import org.apache.druid.server.security.Access; import org.apache.druid.server.security.AuthConfig; @@ -112,6 +113,7 @@ public DruidPlanner createPlanner( queryContext, hook ); + DruidHook.dispatch(DruidHook.SQL, sql); return new DruidPlanner(buildFrameworkConfig(context), context, engine, hook); } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java new file mode 100644 index 000000000000..d9686cb05814 --- /dev/null +++ b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import org.apache.calcite.rel.RelNode; +import java.io.Closeable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public interface DruidHook +{ + static class HookKey + { + private String label; + private Class type; + + public HookKey(String label, Class type) + { + this.label = label; + this.type = type; + } + + @Override + public int hashCode() + { + return Objects.hash(label, type); + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + HookKey other = (HookKey) obj; + return Objects.equals(label, other.label) && Objects.equals(type, other.type); + } + + } + + public static final HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); + public static final HookKey SQL = new HookKey<>("sql", String.class); + public static final HookKey RESULTSET = new HookKey<>("resultSet", String.class); + + void dispatch1(HookKey key, T object); + + static Map, List> GLOBAL = new HashMap<>(); + + public static void register(HookKey label, DruidHook hook) + { + GLOBAL.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); + } + + public static void unregister(HookKey key, DruidHook hook) + { + GLOBAL.get(key).remove(hook); + } + + public static Closeable withHook(HookKey key, DruidHook hook) + { + register(key, hook); + return new Closeable() + { + @Override + public void close() + { + unregister(key, hook); + } + }; + } + + public static void dispatch(HookKey key, T object) + { + List hooks = GLOBAL.get(key); + if (hooks != null) { + for (DruidHook hook : hooks) { + hook.dispatch1(key, object); + } + } + } + +} From 4595b0c128ab12c6154874c9a4627f921ac33610 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 21 May 2024 14:18:55 +0000 Subject: [PATCH 042/122] u[pdate --- ...AsBrokerQueryComponentSupplierWrapper.java | 1 + .../org/apache/druid/quidem/Launcher.java | 2 +- .../druid/quidem/QuidemCaptureModule.java | 2 +- ...apture.java => QuidemCaptureResource.java} | 14 ++++++++------ .../apache/druid/quidem/QuidemRecorder.java | 19 +++++++++++++++++-- .../org/apache/druid/quidem/DruidHook.java | 1 - 6 files changed, 28 insertions(+), 11 deletions(-) rename integration-tests/src/main/java/org/apache/druid/quidem/{QuidemCapture.java => QuidemCaptureResource.java} (82%) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index 329c169aad7d..17f30a7d82ac 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -185,6 +185,7 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod overrideModules.addAll(ExposedAsBrokerQueryComponentSupplierWrapper.brokerModules()); overrideModules.add(new DiscovertModule()); + builder.add(QuidemCaptureModule.class); } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index f63f2bfe9e27..951d59f809d0 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -99,7 +99,7 @@ private static void main3(Object object) throws Exception chk1(); chkStatus(); - lifecycle.stop(); + lifecycle.join(); } else { } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java index f041bc286b5a..17d9009994e7 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java @@ -29,6 +29,6 @@ public class QuidemCaptureModule implements Module @Override public void configure(Binder binder) { - Jerseys.addResource(binder, QuidemCapture.class); + Jerseys.addResource(binder, QuidemCaptureResource.class); } } diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java similarity index 82% rename from integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java rename to integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index b9719922e047..ded57a3fccf4 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCapture.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -24,10 +24,12 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import java.io.IOException; +import java.io.PrintStream; + @Path("/quidem") -public class QuidemCapture +public class QuidemCaptureResource { - private QuidemRecorder recorder = null; @GET @@ -41,16 +43,16 @@ public String getSome() @GET @Path("/start") @Produces(MediaType.TEXT_PLAIN) - public synchronized String getSome1() + public synchronized String getSome1() throws IOException { stopIfRunning(); start(); - return null; + return recorder.toString(); } - private void start() + private void start() throws IOException { - recorder = new QuidemRecorder(); + recorder = new QuidemRecorder(new PrintStream("/tmp/new.iq")); } private void stopIfRunning() diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 45659722cd08..9df46bd41e23 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -19,10 +19,16 @@ package org.apache.druid.quidem; +import java.io.PrintStream; + public class QuidemRecorder implements AutoCloseable, DruidHook { - public QuidemRecorder() + private PrintStream printStream; + + public QuidemRecorder(PrintStream printStream) { + this.printStream = printStream; + printStream.println("#started"); DruidHook.register(DruidHook.SQL, this); DruidHook.register(DruidHook.RESULTSET, this); } @@ -37,6 +43,15 @@ public void close() @Override public void dispatch1(HookKey key, T object) { - System.out.println(object); + if(DruidHook.SQL.equals(key)) { + printStream.println(object); + printStream.print(";"); + return; + } + if (DruidHook.RESULTSET.equals(key)) { + printStream.println(object); + printStream.println("!ok"); + return; + } } } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java index d9686cb05814..d6322109c59e 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java @@ -104,5 +104,4 @@ public static void dispatch(HookKey key, T object) } } } - } From ec2ecde2351befd51645014f9dd4ae7b5ffa11b1 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 27 May 2024 10:49:38 +0000 Subject: [PATCH 043/122] updates --- .../org/apache/druid/quidem/Launcher.java | 2 + .../apache/druid/quidem/QuidemRecorder.java | 11 +- .../segment/data/CompressionStrategy.java | 1 + .../org/apache/druid/quidem/DruidHook.java | 1 - .../decoupled.iq | 421 +++++++++++++++++- 5 files changed, 425 insertions(+), 11 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 951d59f809d0..48ff2daf0017 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -99,6 +99,8 @@ private static void main3(Object object) throws Exception chk1(); chkStatus(); + System.out.println("-------------------booted up-------------------"); + lifecycle.join(); } else { diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 9df46bd41e23..0178ab9797ff 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -29,27 +29,22 @@ public QuidemRecorder(PrintStream printStream) { this.printStream = printStream; printStream.println("#started"); + printStream.println("!connect druidtest:///"); DruidHook.register(DruidHook.SQL, this); - DruidHook.register(DruidHook.RESULTSET, this); } @Override public void close() { DruidHook.unregister(DruidHook.SQL, this); - DruidHook.unregister(DruidHook.RESULTSET, this); } @Override public void dispatch1(HookKey key, T object) { if(DruidHook.SQL.equals(key)) { - printStream.println(object); - printStream.print(";"); - return; - } - if (DruidHook.RESULTSET.equals(key)) { - printStream.println(object); + printStream.print(object); + printStream.println(";"); printStream.println("!ok"); return; } diff --git a/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java b/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java index 96550329a84c..6dd3c6efaf87 100644 --- a/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java +++ b/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java @@ -20,6 +20,7 @@ package org.apache.druid.segment.data; import com.fasterxml.jackson.annotation.JsonCreator; + import com.fasterxml.jackson.annotation.JsonValue; import com.github.luben.zstd.Zstd; import com.ning.compress.BufferRecycler; diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java index d6322109c59e..51d6775a6853 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java @@ -66,7 +66,6 @@ public boolean equals(Object obj) public static final HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); public static final HookKey SQL = new HookKey<>("sql", String.class); - public static final HookKey RESULTSET = new HookKey<>("resultSet", String.class); void dispatch1(HookKey key, T object); diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq index 049d8d9d4d7e..9b3c444b7d0d 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq @@ -91,6 +91,423 @@ DruidAggregate(group=[{0}], cnt=[COUNT($1) FILTER $2], aall=[COUNT()], druid=[lo "limitSpec" : { "type" : "NoopLimitSpec" } -} -!nativePlan +}; +org.apache.calcite.avatica.AvaticaSqlException: Error -1 (00000) : Error while executing SQL "{ + "queryType" : "groupBy", + "dataSource" : { + "type" : "table", + "name" : "wikipedia" + }, + "intervals" : { + "type" : "intervals", + "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] + }, + "filter" : { + "type" : "inType", + "column" : "cityName", + "matchValueType" : "STRING", + "sortedValues" : [ "Aarhus", "New York" ] + }, + "granularity" : { + "type" : "all" + }, + "dimensions" : [ { + "type" : "default", + "dimension" : "cityName", + "outputName" : "d0", + "outputType" : "STRING" + } ], + "aggregations" : [ { + "type" : "filtered", + "aggregator" : { + "type" : "count", + "name" : "a0" + }, + "filter" : { + "type" : "and", + "fields" : [ { + "type" : "not", + "field" : { + "type" : "null", + "column" : "channel" + } + }, { + "type" : "range", + "column" : "delta", + "matchValueType" : "LONG", + "lower" : 0, + "lowerOpen" : true + } ] + }, + "name" : "a0" + }, { + "type" : "count", + "name" : "a1" + } ], + "limitSpec" : { + "type" : "NoopLimitSpec" + } +}": Remote driver error: QueryInterruptedException: Received an unexpected token [{] (line [1], column [1]), acceptable options: ["INSERT", "UPSERT", "EXPLAIN", "SET", "RESET", "ALTER", "WITH", "SELECT", "VALUES", "VALUE", "TABLE", "+", "-", "NOT", "EXISTS", "UNIQUE", "INTERVAL", , , , , , , , , , , "TRUE", "FALSE", "UNKNOWN", "NULL", , , , "DATE", "DATETIME", "TIME", "TIMESTAMP", "?", "CAST", "SAFE_CAST", "TRY_CAST", "EXTRACT", "POSITION", "CONVERT", "TRANSLATE", "OVERLAY", "FLOOR", "CEIL", "CEILING", "SUBSTRING", "TRIM", "CLASSIFIER", "MATCH_NUMBER", "RUNNING", "PREV", "NEXT", "JSON_EXISTS", "JSON_VALUE", "JSON_QUERY", "JSON_OBJECT", "JSON_OBJECTAGG", "JSON_ARRAY", "JSON_ARRAYAGG", , "MULTISET", "ARRAY", "PERIOD", "SPECIFIC", , , , , , , , "ABS", "AVG", "CARDINALITY", "CHAR", "CHAR_LENGTH", "CHARACTER_LENGTH", "COALESCE", "COLLECT", "COVAR_POP", "COVAR_SAMP", "CUME_DIST", "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DENSE_RANK", "ELEMENT", "EVERY", "EXP", "FIRST_VALUE", "FUSION", "INTERSECTION", "GROUPING", "HOUR", "LAG", "LEAD", "LEFT", "LAST_VALUE", "LN", "LOCALTIME", "LOCALTIMESTAMP", "LOWER", "MAX", "MIN", "MINUTE", "MOD", "MONTH", "NTH_VALUE", "NTILE", "NULLIF", "OCTET_LENGTH", "PERCENT_RANK", "POWER", "RANK", "REGR_COUNT", "REGR_SXX", "REGR_SYY", "RIGHT", "ROW_NUMBER", "SECOND", "SOME", "SQRT", "STDDEV_POP", "STDDEV_SAMP", "SUM", "UPPER", "TRUNCATE", "USER", "VAR_POP", "VAR_SAMP", "YEAR", "CURRENT_CATALOG", "CURRENT_DEFAULT_TRANSFORM_GROUP", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_USER", "SESSION_USER", "SYSTEM_USER", "NEW", "CASE", "CURRENT", "CURSOR", "ROW", "(", "DESCRIBE", "DELETE", "UPDATE", "MERGE", "CALL"] -> DruidException: Received an unexpected token [{] (line [1], column [1]), acceptable options: ["INSERT", "UPSERT", "EXPLAIN", "SET", "RESET", "ALTER", "WITH", "SELECT", "VALUES", "VALUE", "TABLE", "+", "-", "NOT", "EXISTS", "UNIQUE", "INTERVAL", , , , , , , , , , , "TRUE", "FALSE", "UNKNOWN", "NULL", , , , "DATE", "DATETIME", "TIME", "TIMESTAMP", "?", "CAST", "SAFE_CAST", "TRY_CAST", "EXTRACT", "POSITION", "CONVERT", "TRANSLATE", "OVERLAY", "FLOOR", "CEIL", "CEILING", "SUBSTRING", "TRIM", "CLASSIFIER", "MATCH_NUMBER", "RUNNING", "PREV", "NEXT", "JSON_EXISTS", "JSON_VALUE", "JSON_QUERY", "JSON_OBJECT", "JSON_OBJECTAGG", "JSON_ARRAY", "JSON_ARRAYAGG", , "MULTISET", "ARRAY", "PERIOD", "SPECIFIC", , , , , , , , "ABS", "AVG", "CARDINALITY", "CHAR", "CHAR_LENGTH", "CHARACTER_LENGTH", "COALESCE", "COLLECT", "COVAR_POP", "COVAR_SAMP", "CUME_DIST", "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DENSE_RANK", "ELEMENT", "EVERY", "EXP", "FIRST_VALUE", "FUSION", "INTERSECTION", "GROUPING", "HOUR", "LAG", "LEAD", "LEFT", "LAST_VALUE", "LN", "LOCALTIME", "LOCALTIMESTAMP", "LOWER", "MAX", "MIN", "MINUTE", "MOD", "MONTH", "NTH_VALUE", "NTILE", "NULLIF", "OCTET_LENGTH", "PERCENT_RANK", "POWER", "RANK", "REGR_COUNT", "REGR_SXX", "REGR_SYY", "RIGHT", "ROW_NUMBER", "SECOND", "SOME", "SQRT", "STDDEV_POP", "STDDEV_SAMP", "SUM", "UPPER", "TRUNCATE", "USER", "VAR_POP", "VAR_SAMP", "YEAR", "CURRENT_CATALOG", "CURRENT_DEFAULT_TRANSFORM_GROUP", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_USER", "SESSION_USER", "SYSTEM_USER", "NEW", "CASE", "CURRENT", "CURSOR", "ROW", "(", "DESCRIBE", "DELETE", "UPDATE", "MERGE", "CALL"] -> SqlParseException: Encountered "{" at line 1, column 1. +Was expecting one of: + "INSERT" ... + "UPSERT" ... + "EXPLAIN" ... + "SET" ... + "RESET" ... + "ALTER" ... + "WITH" ... + "SELECT" ... + "VALUES" ... + "VALUE" ... + "TABLE" ... + "+" ... + "-" ... + "NOT" ... + "EXISTS" ... + "UNIQUE" ... + "INTERVAL" ... + ... + ... + ... + ... + ... + ... + ... + ... + ... + ... + "TRUE" ... + "FALSE" ... + "UNKNOWN" ... + "NULL" ... + ... + ... + ... + "DATE" ... + "DATETIME" ... + "TIME" ... + "TIMESTAMP" ... + "?" ... + "CAST" ... + "SAFE_CAST" ... + "TRY_CAST" ... + "EXTRACT" ... + "POSITION" ... + "CONVERT" ... + "TRANSLATE" ... + "OVERLAY" ... + "FLOOR" ... + "CEIL" ... + "CEILING" ... + "SUBSTRING" ... + "TRIM" ... + "CLASSIFIER" ... + "MATCH_NUMBER" ... + "RUNNING" ... + "PREV" ... + "NEXT" ... + "JSON_EXISTS" ... + "JSON_VALUE" ... + "JSON_QUERY" ... + "JSON_OBJECT" ... + "JSON_OBJECTAGG" ... + "JSON_ARRAY" ... + "JSON_ARRAYAGG" ... + ... + "MULTISET" ... + "ARRAY" ... + "PERIOD" ... + "SPECIFIC" ... + ... + ... + ... + ... + ... + ... + ... + "ABS" ... + "AVG" ... + "CARDINALITY" ... + "CHAR" ... + "CHAR_LENGTH" ... + "CHARACTER_LENGTH" ... + "COALESCE" ... + "COLLECT" ... + "COVAR_POP" ... + "COVAR_SAMP" ... + "CUME_DIST" ... + "COUNT" ... + "CURRENT_DATE" ... + "CURRENT_TIME" ... + "CURRENT_TIMESTAMP" ... + "DENSE_RANK" ... + "ELEMENT" ... + "EVERY" ... + "EXP" ... + "FIRST_VALUE" ... + "FUSION" ... + "INTERSECTION" ... + "GROUPING" ... + "HOUR" ... + "LAG" ... + "LEAD" ... + "LEFT" ... + "LAST_VALUE" ... + "LN" ... + "LOCALTIME" ... + "LOCALTIMESTAMP" ... + "LOWER" ... + "MAX" ... + "MIN" ... + "MINUTE" ... + "MOD" ... + "MONTH" ... + "NTH_VALUE" ... + "NTILE" ... + "NULLIF" ... + "OCTET_LENGTH" ... + "PERCENT_RANK" ... + "POWER" ... + "RANK" ... + "REGR_COUNT" ... + "REGR_SXX" ... + "REGR_SYY" ... + "RIGHT" ... + "ROW_NUMBER" ... + "SECOND" ... + "SOME" ... + "SQRT" ... + "STDDEV_POP" ... + "STDDEV_SAMP" ... + "SUM" ... + "UPPER" ... + "TRUNCATE" ... + "USER" ... + "VAR_POP" ... + "VAR_SAMP" ... + "YEAR" ... + "CURRENT_CATALOG" ... + "CURRENT_DEFAULT_TRANSFORM_GROUP" ... + "CURRENT_PATH" ... + "CURRENT_ROLE" ... + "CURRENT_SCHEMA" ... + "CURRENT_USER" ... + "SESSION_USER" ... + "SYSTEM_USER" ... + "NEW" ... + "CASE" ... + "CURRENT" ... + "CURSOR" ... + "ROW" ... + "(" ... + "DESCRIBE" ... + "DELETE" ... + "UPDATE" ... + "MERGE" ... + "CALL" ... + -> ParseException: Encountered "{" at line 1, column 1. +Was expecting one of: + "INSERT" ... + "UPSERT" ... + "EXPLAIN" ... + "SET" ... + "RESET" ... + "ALTER" ... + "WITH" ... + "SELECT" ... + "VALUES" ... + "VALUE" ... + "TABLE" ... + "+" ... + "-" ... + "NOT" ... + "EXISTS" ... + "UNIQUE" ... + "INTERVAL" ... + ... + ... + ... + ... + ... + ... + ... + ... + ... + ... + "TRUE" ... + "FALSE" ... + "UNKNOWN" ... + "NULL" ... + ... + ... + ... + "DATE" ... + "DATETIME" ... + "TIME" ... + "TIMESTAMP" ... + "?" ... + "CAST" ... + "SAFE_CAST" ... + "TRY_CAST" ... + "EXTRACT" ... + "POSITION" ... + "CONVERT" ... + "TRANSLATE" ... + "OVERLAY" ... + "FLOOR" ... + "CEIL" ... + "CEILING" ... + "SUBSTRING" ... + "TRIM" ... + "CLASSIFIER" ... + "MATCH_NUMBER" ... + "RUNNING" ... + "PREV" ... + "NEXT" ... + "JSON_EXISTS" ... + "JSON_VALUE" ... + "JSON_QUERY" ... + "JSON_OBJECT" ... + "JSON_OBJECTAGG" ... + "JSON_ARRAY" ... + "JSON_ARRAYAGG" ... + ... + "MULTISET" ... + "ARRAY" ... + "PERIOD" ... + "SPECIFIC" ... + ... + ... + ... + ... + ... + ... + ... + "ABS" ... + "AVG" ... + "CARDINALITY" ... + "CHAR" ... + "CHAR_LENGTH" ... + "CHARACTER_LENGTH" ... + "COALESCE" ... + "COLLECT" ... + "COVAR_POP" ... + "COVAR_SAMP" ... + "CUME_DIST" ... + "COUNT" ... + "CURRENT_DATE" ... + "CURRENT_TIME" ... + "CURRENT_TIMESTAMP" ... + "DENSE_RANK" ... + "ELEMENT" ... + "EVERY" ... + "EXP" ... + "FIRST_VALUE" ... + "FUSION" ... + "INTERSECTION" ... + "GROUPING" ... + "HOUR" ... + "LAG" ... + "LEAD" ... + "LEFT" ... + "LAST_VALUE" ... + "LN" ... + "LOCALTIME" ... + "LOCALTIMESTAMP" ... + "LOWER" ... + "MAX" ... + "MIN" ... + "MINUTE" ... + "MOD" ... + "MONTH" ... + "NTH_VALUE" ... + "NTILE" ... + "NULLIF" ... + "OCTET_LENGTH" ... + "PERCENT_RANK" ... + "POWER" ... + "RANK" ... + "REGR_COUNT" ... + "REGR_SXX" ... + "REGR_SYY" ... + "RIGHT" ... + "ROW_NUMBER" ... + "SECOND" ... + "SOME" ... + "SQRT" ... + "STDDEV_POP" ... + "STDDEV_SAMP" ... + "SUM" ... + "UPPER" ... + "TRUNCATE" ... + "USER" ... + "VAR_POP" ... + "VAR_SAMP" ... + "YEAR" ... + "CURRENT_CATALOG" ... + "CURRENT_DEFAULT_TRANSFORM_GROUP" ... + "CURRENT_PATH" ... + "CURRENT_ROLE" ... + "CURRENT_SCHEMA" ... + "CURRENT_USER" ... + "SESSION_USER" ... + "SYSTEM_USER" ... + "NEW" ... + "CASE" ... + "CURRENT" ... + "CURSOR" ... + "ROW" ... + "(" ... + "DESCRIBE" ... + "DELETE" ... + "UPDATE" ... + "MERGE" ... + "CALL" ... + + at org.apache.calcite.avatica.Helper.createException(Helper.java:54) + at org.apache.calcite.avatica.Helper.createException(Helper.java:41) + at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:164) + at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:228) + at net.hydromatic.quidem.Quidem.checkResult(Quidem.java:299) + at net.hydromatic.quidem.Quidem.access$2600(Quidem.java:57) + at net.hydromatic.quidem.Quidem$ContextImpl.checkResult(Quidem.java:1636) + at net.hydromatic.quidem.Quidem$CheckResultCommand.execute(Quidem.java:941) + at net.hydromatic.quidem.Quidem$CompositeCommand.execute(Quidem.java:1437) + at net.hydromatic.quidem.Quidem.execute(Quidem.java:190) + at org.apache.druid.quidem.DruidQuidemTestBase$DruidQuidemRunner.run(DruidQuidemTestBase.java:152) + at org.apache.druid.quidem.DruidQuidemTestBase.test(DruidQuidemTestBase.java:120) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728) + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestTemplateMethod(TimeoutExtension.java:94) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecut (stack truncated) +!ok From b20ee99371b87a7fc488054089d2a4d35bb395fe Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:07:09 +0000 Subject: [PATCH 044/122] clean --- .../src/main/java/org/apache/druid/quidem/Launcher.java | 2 -- .../main/java/org/apache/druid/quidem/QuidemRecorder.java | 4 ++-- sql/src/test/java/org/apache/druid/quidem/DruidHook.java | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 48ff2daf0017..5cc9009c4270 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -47,8 +47,6 @@ public class Launcher { - public static final String URI_PREFIX = "druidtest://"; - public static final String DEFAULT_URI = URI_PREFIX + "/"; static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); private static Logger log = new Logger(Launcher.class); diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 0178ab9797ff..a5df03ef990e 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -40,9 +40,9 @@ public void close() } @Override - public void dispatch1(HookKey key, T object) + public void invoke(HookKey key, T object) { - if(DruidHook.SQL.equals(key)) { + if (DruidHook.SQL.equals(key)) { printStream.print(object); printStream.println(";"); printStream.println("!ok"); diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java index 51d6775a6853..8e955c6ec32c 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidHook.java @@ -58,7 +58,7 @@ public boolean equals(Object obj) if (getClass() != obj.getClass()) { return false; } - HookKey other = (HookKey) obj; + HookKey other = (HookKey) obj; return Objects.equals(label, other.label) && Objects.equals(type, other.type); } @@ -67,7 +67,7 @@ public boolean equals(Object obj) public static final HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); public static final HookKey SQL = new HookKey<>("sql", String.class); - void dispatch1(HookKey key, T object); + void invoke(HookKey key, T object); static Map, List> GLOBAL = new HashMap<>(); @@ -99,7 +99,7 @@ public static void dispatch(HookKey key, T object) List hooks = GLOBAL.get(key); if (hooks != null) { for (DruidHook hook : hooks) { - hook.dispatch1(key, object); + hook.invoke(key, object); } } } From a1b7f981fbf4cad000da0f361939440dd773b9e1 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:09:42 +0000 Subject: [PATCH 045/122] cleanup --- .../org/apache/druid/quidem/Launcher.java | 42 +++---------------- .../druid/quidem/DruidAvaticaDriverTest.java | 3 +- .../druid/quidem/DruidAvaticaTestDriver.java | 28 +------------ .../sql/calcite/SqlTestFrameworkConfig.java | 22 ++++++++++ 4 files changed, 31 insertions(+), 64 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 5cc9009c4270..712f5d8ff060 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -26,23 +26,15 @@ import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; import org.apache.druid.sql.calcite.util.SqlTestFramework; -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; import org.junit.Test; import java.io.IOException; import java.net.URI; -import java.net.URISyntaxException; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse; -import java.nio.charset.StandardCharsets; import java.sql.SQLException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import static org.junit.Assert.assertNotEquals; public class Launcher @@ -51,24 +43,6 @@ public class Launcher private static Logger log = new Logger(Launcher.class); - public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws SQLException - { - Map queryParams; - queryParams = new HashMap<>(); - try { - List params = URLEncodedUtils.parse(new URI(url), StandardCharsets.UTF_8); - for (NameValuePair pair : params) { - queryParams.put(pair.getName(), pair.getValue()); - } - // possible caveat: duplicate entries overwrite earlier ones - } - catch (URISyntaxException e) { - throw new SQLException("Can't decode URI", e); - } - - return new SqlTestFrameworkConfig(queryParams); - } - @Test public void runIt() throws Exception { @@ -77,7 +51,7 @@ public void runIt() throws Exception private static ConfigurationInstance getCI2() throws SQLException, Exception { - SqlTestFrameworkConfig config = buildConfigfromURIParams("druidtest:///"); + SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL("druidtest:///"); ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( config, @@ -91,18 +65,14 @@ private static void main3(Object object) throws Exception SqlTestFramework framework = getCI2().framework; - if (true) { - Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); - - chk1(); - chkStatus(); + Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); - System.out.println("-------------------booted up-------------------"); + chk1(); + chkStatus(); - lifecycle.join(); - } else { + System.out.println("-------------------booted up-------------------"); - } + lifecycle.join(); } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaDriverTest.java b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaDriverTest.java index efdf782d147f..3f039814c0f5 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaDriverTest.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaDriverTest.java @@ -19,6 +19,7 @@ package org.apache.druid.quidem; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; import org.junit.jupiter.api.Test; import java.sql.Connection; @@ -51,6 +52,6 @@ public void testSelect() throws SQLException @Test public void testURIParse() throws SQLException { - DruidAvaticaTestDriver.buildConfigfromURIParams("druidtest:///"); + SqlTestFrameworkConfig.fromURL("druidtest:///"); } } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java index 74888c89607c..a10c9015ec0d 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java @@ -70,25 +70,17 @@ import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.apache.druid.sql.guice.SqlModule; -import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; -import org.apache.http.client.utils.URLEncodedUtils; import org.eclipse.jetty.server.Server; import java.io.Closeable; import java.io.File; import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.DriverPropertyInfo; import java.sql.SQLException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.Properties; import java.util.logging.Logger; @@ -114,7 +106,7 @@ public Connection connect(String url, Properties info) throws SQLException return null; } try { - SqlTestFrameworkConfig config = buildConfigfromURIParams(url); + SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL(url); ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( config, @@ -349,24 +341,6 @@ public void run() return tempDir; } - public static SqlTestFrameworkConfig buildConfigfromURIParams(String url) throws SQLException - { - Map queryParams; - queryParams = new HashMap<>(); - try { - List params = URLEncodedUtils.parse(new URI(url), StandardCharsets.UTF_8); - for (NameValuePair pair : params) { - queryParams.put(pair.getName(), pair.getValue()); - } - // possible caveat: duplicate entries overwrite earlier ones - } - catch (URISyntaxException e) { - throw new SQLException("Can't decode URI", e); - } - - return new SqlTestFrameworkConfig(queryParams); - } - private void register() { try { diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 4ff8796b74b8..6aee6d4084be 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -35,7 +35,9 @@ import org.apache.druid.sql.calcite.util.SqlTestFramework; import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; +import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; +import org.apache.http.client.utils.URLEncodedUtils; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; @@ -53,6 +55,8 @@ import java.lang.reflect.Method; import java.net.URI; import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -417,6 +421,24 @@ private Map getNonDefaultMap() return map; } + public static SqlTestFrameworkConfig fromURL(String url) throws SQLException + { + Map queryParams; + queryParams = new HashMap<>(); + try { + List params = URLEncodedUtils.parse(new URI(url), StandardCharsets.UTF_8); + for (NameValuePair pair : params) { + queryParams.put(pair.getName(), pair.getValue()); + } + // possible caveat: duplicate entries overwrite earlier ones + } + catch (URISyntaxException e) { + throw new SQLException("Can't decode URI", e); + } + + return new SqlTestFrameworkConfig(queryParams); + } + abstract static class ConfigOptionProcessor { final Class annotationClass; From ee195719b7873035a8b09d43ef722821c062dbfd Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:17:07 +0000 Subject: [PATCH 046/122] inline class --- .../apache/druid/quidem/DiscovertModule.java | 83 ------------------- ...AsBrokerQueryComponentSupplierWrapper.java | 56 ++++++++++++- 2 files changed, 55 insertions(+), 84 deletions(-) delete mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java deleted file mode 100644 index 94bb2b1d2a5e..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/quidem/DiscovertModule.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.inject.AbstractModule; -import com.google.inject.Provides; -import org.apache.druid.discovery.DruidNodeDiscoveryProvider; -import org.apache.druid.guice.LazySingleton; -import org.apache.druid.guice.annotations.Json; -import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.query.QuerySegmentWalker; -import org.apache.druid.server.DruidNode; -import org.apache.druid.sql.calcite.run.NativeSqlEngine; -import org.apache.druid.sql.calcite.run.SqlEngine; -import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; -import org.apache.druid.sql.calcite.util.CalciteTests; - -import java.util.Properties; - -public class DiscovertModule extends AbstractModule { - - DiscovertModule() { - } - - @Override - protected void configure() - { - } - - @Provides - @LazySingleton - public BrokerSegmentMetadataCache provideCache() { - return null; - } - - @Provides - @LazySingleton - public Properties getProps() { - Properties localProps = new Properties(); - localProps.put("druid.enableTlsPort", "false"); - localProps.put("druid.zk.service.enabled", "false"); - localProps.put("druid.plaintextPort", "12345"); - localProps.put("druid.host", "localhost"); - localProps.put("druid.broker.segment.awaitInitializationOnStart","false"); - return localProps; - } - - @Provides - @LazySingleton - public SqlEngine createMockSqlEngine( - final QuerySegmentWalker walker, - final QueryRunnerFactoryConglomerate conglomerate, - @Json ObjectMapper jsonMapper ) - { - return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); - } - - @Provides - @LazySingleton - DruidNodeDiscoveryProvider getProvider() - { - final DruidNode coordinatorNode = CalciteTests.mockCoordinatorNode(); - return CalciteTests.mockDruidNodeDiscoveryProvider(coordinatorNode); - } - } \ No newline at end of file diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index 17f30a7d82ac..9e18ce7cece1 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -25,9 +25,11 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.inject.AbstractModule; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; +import com.google.inject.Provides; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; import org.apache.druid.cli.CliBroker; @@ -41,6 +43,7 @@ import org.apache.druid.client.selector.TierSelectorStrategy; import org.apache.druid.curator.CuratorModule; import org.apache.druid.curator.discovery.DiscoveryModule; +import org.apache.druid.discovery.DruidNodeDiscoveryProvider; import org.apache.druid.guice.AnnouncerModule; import org.apache.druid.guice.BrokerProcessingModule; import org.apache.druid.guice.BrokerServiceModule; @@ -68,6 +71,7 @@ import org.apache.druid.guice.StorageNodeModule; import org.apache.druid.guice.annotations.Client; import org.apache.druid.guice.annotations.EscalatedClient; +import org.apache.druid.guice.annotations.Json; import org.apache.druid.guice.http.HttpClientModule; import org.apache.druid.guice.security.AuthenticatorModule; import org.apache.druid.guice.security.AuthorizerModule; @@ -81,6 +85,7 @@ import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; import org.apache.druid.query.DefaultQueryConfig; import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.QuerySegmentWalker; import org.apache.druid.query.RetryQueryRunnerConfig; import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; import org.apache.druid.rpc.guice.ServiceClientModule; @@ -88,6 +93,7 @@ import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; import org.apache.druid.server.BrokerQueryResource; import org.apache.druid.server.ClientInfoResource; +import org.apache.druid.server.DruidNode; import org.apache.druid.server.QueryLifecycleFactory; import org.apache.druid.server.QueryScheduler; import org.apache.druid.server.QuerySchedulerProvider; @@ -113,7 +119,9 @@ import org.apache.druid.server.security.TLSCertificateCheckerModule; import org.apache.druid.sql.calcite.planner.CalciteRulesManager; import org.apache.druid.sql.calcite.planner.CatalogResolver; +import org.apache.druid.sql.calcite.run.NativeSqlEngine; import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; import org.apache.druid.sql.calcite.schema.DruidSchemaName; import org.apache.druid.sql.calcite.util.CalciteTests; import org.apache.druid.sql.calcite.util.SqlTestFramework; @@ -184,7 +192,7 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod installForServerModules(builder); overrideModules.addAll(ExposedAsBrokerQueryComponentSupplierWrapper.brokerModules()); - overrideModules.add(new DiscovertModule()); + overrideModules.add(new BrokerTestModule()); builder.add(QuidemCaptureModule.class); } @@ -238,6 +246,52 @@ public PlannerComponentSupplier getPlannerComponentSupplier() return delegate.getPlannerComponentSupplier(); } + public class BrokerTestModule extends AbstractModule + { + @Override + protected void configure() + { + } + + @Provides + @LazySingleton + public BrokerSegmentMetadataCache provideCache() + { + return null; + } + + @Provides + @LazySingleton + public Properties getProps() + { + Properties localProps = new Properties(); + localProps.put("druid.enableTlsPort", "false"); + localProps.put("druid.zk.service.enabled", "false"); + localProps.put("druid.plaintextPort", "12345"); + localProps.put("druid.host", "localhost"); + localProps.put("druid.broker.segment.awaitInitializationOnStart", "false"); + return localProps; + } + + @Provides + @LazySingleton + public SqlEngine createMockSqlEngine( + final QuerySegmentWalker walker, + final QueryRunnerFactoryConglomerate conglomerate, + @Json ObjectMapper jsonMapper) + { + return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); + } + + @Provides + @LazySingleton + DruidNodeDiscoveryProvider getDruidNodeDiscoveryProvider() + { + final DruidNode coordinatorNode = CalciteTests.mockCoordinatorNode(); + return CalciteTests.mockDruidNodeDiscoveryProvider(coordinatorNode); + } + } + /** * Closely related to {@link CoreInjectorBuilder#forServer()} */ From 6c264f29776fa6d9b99dba6bbaaabd100ae7c471 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:22:42 +0000 Subject: [PATCH 047/122] move stuff --- ...AsBrokerQueryComponentSupplierWrapper.java | 41 +++++-------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index 9e18ce7cece1..9f4c8bb59844 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -20,17 +20,13 @@ package org.apache.druid.quidem; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.inject.AbstractModule; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.Provides; -import com.google.inject.TypeLiteral; import com.google.inject.name.Names; import org.apache.druid.cli.CliBroker; import org.apache.druid.cli.QueryJettyServerInitializer; @@ -83,7 +79,6 @@ import org.apache.druid.java.util.common.io.Closer; import org.apache.druid.java.util.emitter.service.ServiceEmitter; import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; -import org.apache.druid.query.DefaultQueryConfig; import org.apache.druid.query.QueryRunnerFactoryConglomerate; import org.apache.druid.query.QuerySegmentWalker; import org.apache.druid.query.RetryQueryRunnerConfig; @@ -95,7 +90,6 @@ import org.apache.druid.server.ClientInfoResource; import org.apache.druid.server.DruidNode; import org.apache.druid.server.QueryLifecycleFactory; -import org.apache.druid.server.QueryScheduler; import org.apache.druid.server.QuerySchedulerProvider; import org.apache.druid.server.ResponseContextConfig; import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; @@ -165,36 +159,11 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod { delegate.configureGuice(builder); - builder.addModule( - binder -> { - binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test"); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1); - binder.bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); - binder.bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); - binder.bind(RequestLogger.class).toInstance(new NoopRequestLogger()); - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - binder.bind(ServiceEmitter.class).to(NoopServiceEmitter.class); - binder.bind(QuerySchedulerProvider.class).in(LazySingleton.class); - binder.bind(QueryScheduler.class) - .toProvider(QuerySchedulerProvider.class) - .in(LazySingleton.class); - binder.bind(new TypeLiteral>() - { - }).toInstance(Suppliers.ofInstance(new DefaultQueryConfig(ImmutableMap.of()))); - binder.bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); - binder.bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); - } - ); - installForServerModules(builder); overrideModules.addAll(ExposedAsBrokerQueryComponentSupplierWrapper.brokerModules()); overrideModules.add(new BrokerTestModule()); builder.add(QuidemCaptureModule.class); - } @Override @@ -251,6 +220,16 @@ public class BrokerTestModule extends AbstractModule @Override protected void configure() { + bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); + bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); + bind(RequestLogger.class).toInstance(new NoopRequestLogger()); + bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + bind(ServiceEmitter.class).to(NoopServiceEmitter.class); + bind(QuerySchedulerProvider.class).in(LazySingleton.class); + bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); + bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); } @Provides From a713b663b010e8a901adc32fe490fc6d0964a53d Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:23:04 +0000 Subject: [PATCH 048/122] undo --- .../decoupled.iq | 421 +----------------- 1 file changed, 2 insertions(+), 419 deletions(-) diff --git a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq index d9b22a085c59..be52c7c4c65b 100644 --- a/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq +++ b/sql/src/test/quidem/org.apache.druid.quidem.SqlQuidemTest/decoupled.iq @@ -91,423 +91,6 @@ DruidAggregate(group=[{0}], cnt=[COUNT($1) FILTER $2], aall=[COUNT()], druid=[lo "limitSpec" : { "type" : "NoopLimitSpec" } -}; -org.apache.calcite.avatica.AvaticaSqlException: Error -1 (00000) : Error while executing SQL "{ - "queryType" : "groupBy", - "dataSource" : { - "type" : "table", - "name" : "wikipedia" - }, - "intervals" : { - "type" : "intervals", - "intervals" : [ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z" ] - }, - "filter" : { - "type" : "inType", - "column" : "cityName", - "matchValueType" : "STRING", - "sortedValues" : [ "Aarhus", "New York" ] - }, - "granularity" : { - "type" : "all" - }, - "dimensions" : [ { - "type" : "default", - "dimension" : "cityName", - "outputName" : "d0", - "outputType" : "STRING" - } ], - "aggregations" : [ { - "type" : "filtered", - "aggregator" : { - "type" : "count", - "name" : "a0" - }, - "filter" : { - "type" : "and", - "fields" : [ { - "type" : "not", - "field" : { - "type" : "null", - "column" : "channel" - } - }, { - "type" : "range", - "column" : "delta", - "matchValueType" : "LONG", - "lower" : 0, - "lowerOpen" : true - } ] - }, - "name" : "a0" - }, { - "type" : "count", - "name" : "a1" - } ], - "limitSpec" : { - "type" : "NoopLimitSpec" - } -}": Remote driver error: QueryInterruptedException: Received an unexpected token [{] (line [1], column [1]), acceptable options: ["INSERT", "UPSERT", "EXPLAIN", "SET", "RESET", "ALTER", "WITH", "SELECT", "VALUES", "VALUE", "TABLE", "+", "-", "NOT", "EXISTS", "UNIQUE", "INTERVAL", , , , , , , , , , , "TRUE", "FALSE", "UNKNOWN", "NULL", , , , "DATE", "DATETIME", "TIME", "TIMESTAMP", "?", "CAST", "SAFE_CAST", "TRY_CAST", "EXTRACT", "POSITION", "CONVERT", "TRANSLATE", "OVERLAY", "FLOOR", "CEIL", "CEILING", "SUBSTRING", "TRIM", "CLASSIFIER", "MATCH_NUMBER", "RUNNING", "PREV", "NEXT", "JSON_EXISTS", "JSON_VALUE", "JSON_QUERY", "JSON_OBJECT", "JSON_OBJECTAGG", "JSON_ARRAY", "JSON_ARRAYAGG", , "MULTISET", "ARRAY", "PERIOD", "SPECIFIC", , , , , , , , "ABS", "AVG", "CARDINALITY", "CHAR", "CHAR_LENGTH", "CHARACTER_LENGTH", "COALESCE", "COLLECT", "COVAR_POP", "COVAR_SAMP", "CUME_DIST", "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DENSE_RANK", "ELEMENT", "EVERY", "EXP", "FIRST_VALUE", "FUSION", "INTERSECTION", "GROUPING", "HOUR", "LAG", "LEAD", "LEFT", "LAST_VALUE", "LN", "LOCALTIME", "LOCALTIMESTAMP", "LOWER", "MAX", "MIN", "MINUTE", "MOD", "MONTH", "NTH_VALUE", "NTILE", "NULLIF", "OCTET_LENGTH", "PERCENT_RANK", "POWER", "RANK", "REGR_COUNT", "REGR_SXX", "REGR_SYY", "RIGHT", "ROW_NUMBER", "SECOND", "SOME", "SQRT", "STDDEV_POP", "STDDEV_SAMP", "SUM", "UPPER", "TRUNCATE", "USER", "VAR_POP", "VAR_SAMP", "YEAR", "CURRENT_CATALOG", "CURRENT_DEFAULT_TRANSFORM_GROUP", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_USER", "SESSION_USER", "SYSTEM_USER", "NEW", "CASE", "CURRENT", "CURSOR", "ROW", "(", "DESCRIBE", "DELETE", "UPDATE", "MERGE", "CALL"] -> DruidException: Received an unexpected token [{] (line [1], column [1]), acceptable options: ["INSERT", "UPSERT", "EXPLAIN", "SET", "RESET", "ALTER", "WITH", "SELECT", "VALUES", "VALUE", "TABLE", "+", "-", "NOT", "EXISTS", "UNIQUE", "INTERVAL", , , , , , , , , , , "TRUE", "FALSE", "UNKNOWN", "NULL", , , , "DATE", "DATETIME", "TIME", "TIMESTAMP", "?", "CAST", "SAFE_CAST", "TRY_CAST", "EXTRACT", "POSITION", "CONVERT", "TRANSLATE", "OVERLAY", "FLOOR", "CEIL", "CEILING", "SUBSTRING", "TRIM", "CLASSIFIER", "MATCH_NUMBER", "RUNNING", "PREV", "NEXT", "JSON_EXISTS", "JSON_VALUE", "JSON_QUERY", "JSON_OBJECT", "JSON_OBJECTAGG", "JSON_ARRAY", "JSON_ARRAYAGG", , "MULTISET", "ARRAY", "PERIOD", "SPECIFIC", , , , , , , , "ABS", "AVG", "CARDINALITY", "CHAR", "CHAR_LENGTH", "CHARACTER_LENGTH", "COALESCE", "COLLECT", "COVAR_POP", "COVAR_SAMP", "CUME_DIST", "COUNT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DENSE_RANK", "ELEMENT", "EVERY", "EXP", "FIRST_VALUE", "FUSION", "INTERSECTION", "GROUPING", "HOUR", "LAG", "LEAD", "LEFT", "LAST_VALUE", "LN", "LOCALTIME", "LOCALTIMESTAMP", "LOWER", "MAX", "MIN", "MINUTE", "MOD", "MONTH", "NTH_VALUE", "NTILE", "NULLIF", "OCTET_LENGTH", "PERCENT_RANK", "POWER", "RANK", "REGR_COUNT", "REGR_SXX", "REGR_SYY", "RIGHT", "ROW_NUMBER", "SECOND", "SOME", "SQRT", "STDDEV_POP", "STDDEV_SAMP", "SUM", "UPPER", "TRUNCATE", "USER", "VAR_POP", "VAR_SAMP", "YEAR", "CURRENT_CATALOG", "CURRENT_DEFAULT_TRANSFORM_GROUP", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_USER", "SESSION_USER", "SYSTEM_USER", "NEW", "CASE", "CURRENT", "CURSOR", "ROW", "(", "DESCRIBE", "DELETE", "UPDATE", "MERGE", "CALL"] -> SqlParseException: Encountered "{" at line 1, column 1. -Was expecting one of: - "INSERT" ... - "UPSERT" ... - "EXPLAIN" ... - "SET" ... - "RESET" ... - "ALTER" ... - "WITH" ... - "SELECT" ... - "VALUES" ... - "VALUE" ... - "TABLE" ... - "+" ... - "-" ... - "NOT" ... - "EXISTS" ... - "UNIQUE" ... - "INTERVAL" ... - ... - ... - ... - ... - ... - ... - ... - ... - ... - ... - "TRUE" ... - "FALSE" ... - "UNKNOWN" ... - "NULL" ... - ... - ... - ... - "DATE" ... - "DATETIME" ... - "TIME" ... - "TIMESTAMP" ... - "?" ... - "CAST" ... - "SAFE_CAST" ... - "TRY_CAST" ... - "EXTRACT" ... - "POSITION" ... - "CONVERT" ... - "TRANSLATE" ... - "OVERLAY" ... - "FLOOR" ... - "CEIL" ... - "CEILING" ... - "SUBSTRING" ... - "TRIM" ... - "CLASSIFIER" ... - "MATCH_NUMBER" ... - "RUNNING" ... - "PREV" ... - "NEXT" ... - "JSON_EXISTS" ... - "JSON_VALUE" ... - "JSON_QUERY" ... - "JSON_OBJECT" ... - "JSON_OBJECTAGG" ... - "JSON_ARRAY" ... - "JSON_ARRAYAGG" ... - ... - "MULTISET" ... - "ARRAY" ... - "PERIOD" ... - "SPECIFIC" ... - ... - ... - ... - ... - ... - ... - ... - "ABS" ... - "AVG" ... - "CARDINALITY" ... - "CHAR" ... - "CHAR_LENGTH" ... - "CHARACTER_LENGTH" ... - "COALESCE" ... - "COLLECT" ... - "COVAR_POP" ... - "COVAR_SAMP" ... - "CUME_DIST" ... - "COUNT" ... - "CURRENT_DATE" ... - "CURRENT_TIME" ... - "CURRENT_TIMESTAMP" ... - "DENSE_RANK" ... - "ELEMENT" ... - "EVERY" ... - "EXP" ... - "FIRST_VALUE" ... - "FUSION" ... - "INTERSECTION" ... - "GROUPING" ... - "HOUR" ... - "LAG" ... - "LEAD" ... - "LEFT" ... - "LAST_VALUE" ... - "LN" ... - "LOCALTIME" ... - "LOCALTIMESTAMP" ... - "LOWER" ... - "MAX" ... - "MIN" ... - "MINUTE" ... - "MOD" ... - "MONTH" ... - "NTH_VALUE" ... - "NTILE" ... - "NULLIF" ... - "OCTET_LENGTH" ... - "PERCENT_RANK" ... - "POWER" ... - "RANK" ... - "REGR_COUNT" ... - "REGR_SXX" ... - "REGR_SYY" ... - "RIGHT" ... - "ROW_NUMBER" ... - "SECOND" ... - "SOME" ... - "SQRT" ... - "STDDEV_POP" ... - "STDDEV_SAMP" ... - "SUM" ... - "UPPER" ... - "TRUNCATE" ... - "USER" ... - "VAR_POP" ... - "VAR_SAMP" ... - "YEAR" ... - "CURRENT_CATALOG" ... - "CURRENT_DEFAULT_TRANSFORM_GROUP" ... - "CURRENT_PATH" ... - "CURRENT_ROLE" ... - "CURRENT_SCHEMA" ... - "CURRENT_USER" ... - "SESSION_USER" ... - "SYSTEM_USER" ... - "NEW" ... - "CASE" ... - "CURRENT" ... - "CURSOR" ... - "ROW" ... - "(" ... - "DESCRIBE" ... - "DELETE" ... - "UPDATE" ... - "MERGE" ... - "CALL" ... - -> ParseException: Encountered "{" at line 1, column 1. -Was expecting one of: - "INSERT" ... - "UPSERT" ... - "EXPLAIN" ... - "SET" ... - "RESET" ... - "ALTER" ... - "WITH" ... - "SELECT" ... - "VALUES" ... - "VALUE" ... - "TABLE" ... - "+" ... - "-" ... - "NOT" ... - "EXISTS" ... - "UNIQUE" ... - "INTERVAL" ... - ... - ... - ... - ... - ... - ... - ... - ... - ... - ... - "TRUE" ... - "FALSE" ... - "UNKNOWN" ... - "NULL" ... - ... - ... - ... - "DATE" ... - "DATETIME" ... - "TIME" ... - "TIMESTAMP" ... - "?" ... - "CAST" ... - "SAFE_CAST" ... - "TRY_CAST" ... - "EXTRACT" ... - "POSITION" ... - "CONVERT" ... - "TRANSLATE" ... - "OVERLAY" ... - "FLOOR" ... - "CEIL" ... - "CEILING" ... - "SUBSTRING" ... - "TRIM" ... - "CLASSIFIER" ... - "MATCH_NUMBER" ... - "RUNNING" ... - "PREV" ... - "NEXT" ... - "JSON_EXISTS" ... - "JSON_VALUE" ... - "JSON_QUERY" ... - "JSON_OBJECT" ... - "JSON_OBJECTAGG" ... - "JSON_ARRAY" ... - "JSON_ARRAYAGG" ... - ... - "MULTISET" ... - "ARRAY" ... - "PERIOD" ... - "SPECIFIC" ... - ... - ... - ... - ... - ... - ... - ... - "ABS" ... - "AVG" ... - "CARDINALITY" ... - "CHAR" ... - "CHAR_LENGTH" ... - "CHARACTER_LENGTH" ... - "COALESCE" ... - "COLLECT" ... - "COVAR_POP" ... - "COVAR_SAMP" ... - "CUME_DIST" ... - "COUNT" ... - "CURRENT_DATE" ... - "CURRENT_TIME" ... - "CURRENT_TIMESTAMP" ... - "DENSE_RANK" ... - "ELEMENT" ... - "EVERY" ... - "EXP" ... - "FIRST_VALUE" ... - "FUSION" ... - "INTERSECTION" ... - "GROUPING" ... - "HOUR" ... - "LAG" ... - "LEAD" ... - "LEFT" ... - "LAST_VALUE" ... - "LN" ... - "LOCALTIME" ... - "LOCALTIMESTAMP" ... - "LOWER" ... - "MAX" ... - "MIN" ... - "MINUTE" ... - "MOD" ... - "MONTH" ... - "NTH_VALUE" ... - "NTILE" ... - "NULLIF" ... - "OCTET_LENGTH" ... - "PERCENT_RANK" ... - "POWER" ... - "RANK" ... - "REGR_COUNT" ... - "REGR_SXX" ... - "REGR_SYY" ... - "RIGHT" ... - "ROW_NUMBER" ... - "SECOND" ... - "SOME" ... - "SQRT" ... - "STDDEV_POP" ... - "STDDEV_SAMP" ... - "SUM" ... - "UPPER" ... - "TRUNCATE" ... - "USER" ... - "VAR_POP" ... - "VAR_SAMP" ... - "YEAR" ... - "CURRENT_CATALOG" ... - "CURRENT_DEFAULT_TRANSFORM_GROUP" ... - "CURRENT_PATH" ... - "CURRENT_ROLE" ... - "CURRENT_SCHEMA" ... - "CURRENT_USER" ... - "SESSION_USER" ... - "SYSTEM_USER" ... - "NEW" ... - "CASE" ... - "CURRENT" ... - "CURSOR" ... - "ROW" ... - "(" ... - "DESCRIBE" ... - "DELETE" ... - "UPDATE" ... - "MERGE" ... - "CALL" ... - - at org.apache.calcite.avatica.Helper.createException(Helper.java:54) - at org.apache.calcite.avatica.Helper.createException(Helper.java:41) - at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:164) - at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:228) - at net.hydromatic.quidem.Quidem.checkResult(Quidem.java:299) - at net.hydromatic.quidem.Quidem.access$2600(Quidem.java:57) - at net.hydromatic.quidem.Quidem$ContextImpl.checkResult(Quidem.java:1636) - at net.hydromatic.quidem.Quidem$CheckResultCommand.execute(Quidem.java:941) - at net.hydromatic.quidem.Quidem$CompositeCommand.execute(Quidem.java:1437) - at net.hydromatic.quidem.Quidem.execute(Quidem.java:190) - at org.apache.druid.quidem.DruidQuidemTestBase$DruidQuidemRunner.run(DruidQuidemTestBase.java:152) - at org.apache.druid.quidem.DruidQuidemTestBase.test(DruidQuidemTestBase.java:120) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:566) - at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728) - at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) - at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) - at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) - at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestTemplateMethod(TimeoutExtension.java:94) - at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) - at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) - at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) - at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecut (stack truncated) -!ok +} +!nativePlan From ff31c14dbafdbf0746b48310aa7a8ce1428373b9 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:27:18 +0000 Subject: [PATCH 049/122] clkeaup --- integration-tests/src/main/resources/log4j2.xml | 2 +- .../apache/druid/guice/BaseInjectorBuilder.java | 2 +- .../sql/calcite/SqlTestFrameworkConfig.java | 17 +++-------------- .../sql/calcite/util/SqlTestFramework.java | 6 ------ 4 files changed, 5 insertions(+), 22 deletions(-) diff --git a/integration-tests/src/main/resources/log4j2.xml b/integration-tests/src/main/resources/log4j2.xml index 6325d9cf51d7..405619e31801 100644 --- a/integration-tests/src/main/resources/log4j2.xml +++ b/integration-tests/src/main/resources/log4j2.xml @@ -25,7 +25,7 @@ - + diff --git a/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java b/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java index c979efb9048c..40bbc5a0f8ec 100644 --- a/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java +++ b/processing/src/main/java/org/apache/druid/guice/BaseInjectorBuilder.java @@ -33,7 +33,7 @@ */ public class BaseInjectorBuilder> { - protected final List modules = new ArrayList<>(); + private final List modules = new ArrayList<>(); @SuppressWarnings("unchecked") public T add(Module... modules) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 6aee6d4084be..4b8137349ca0 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -341,20 +341,10 @@ public String testName() public static class ConfigurationInstance { public SqlTestFramework framework; - private SqlTestFrameworkConfig config; - private QueryComponentSupplier testHost; ConfigurationInstance(SqlTestFrameworkConfig config, QueryComponentSupplier testHost) { - this.config = config; - this.testHost = testHost; - SqlTestFramework framework1 = extracted(); - framework=framework1; - } - - //FIXME remove - public SqlTestFramework extracted(Module ...modules) - { + Module[] modules = {}; SqlTestFramework.Builder builder = new SqlTestFramework.Builder(testHost) .withConfig(config) .catalogResolver(testHost.createCatalogResolver()) @@ -365,8 +355,7 @@ public SqlTestFramework extracted(Module ...modules) builder.withOverrideModule(m); } - SqlTestFramework framework1 = builder.build(); - return framework1; + framework = builder.build(); } public ConfigurationInstance( @@ -435,7 +424,7 @@ public static SqlTestFrameworkConfig fromURL(String url) throws SQLException catch (URISyntaxException e) { throw new SQLException("Can't decode URI", e); } - + return new SqlTestFrameworkConfig(queryParams); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index d4b6026d8f48..00d78f1a633a 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -654,12 +654,6 @@ private SqlTestFramework(Builder builder) // test pulls in a module, then pull in that module, even though we are // not the Druid node to which the module is scoped. .ignoreLoadScopes() -// .addModule(new LookylooModule()) -// .addModule(new SegmentWranglerModule()) -// .addModule(new SqlAggregationModule()) -// .addModule(new SqlModule()) -// .addModule(new ExpressionModule()); -// .addModule(testSetupModule()); ; List overrideModules = new ArrayList<>(builder.overrideModules); From 07e05a664d76a8bafacdf32c193ffd512a8b2c62 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:30:06 +0000 Subject: [PATCH 050/122] cleasnup --- .../org/apache/druid/segment/data/CompressionStrategy.java | 1 - .../apache/druid/sql/calcite/util/SqlTestFramework.java | 7 +++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java b/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java index 6dd3c6efaf87..96550329a84c 100644 --- a/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java +++ b/processing/src/main/java/org/apache/druid/segment/data/CompressionStrategy.java @@ -20,7 +20,6 @@ package org.apache.druid.segment.data; import com.fasterxml.jackson.annotation.JsonCreator; - import com.fasterxml.jackson.annotation.JsonValue; import com.github.luben.zstd.Zstd; import com.ning.compress.BufferRecycler; diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index 00d78f1a633a..c0a0a8c42d9a 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -600,8 +600,9 @@ public QueryLifecycleFactory queryLifecycleFactory(final Injector injector) @Provides @LazySingleton - ViewManager createViewManager() { -return componentSupplier.getPlannerComponentSupplier().createViewManager(); + ViewManager createViewManager() + { + return componentSupplier.getPlannerComponentSupplier().createViewManager(); } @Provides @@ -626,9 +627,7 @@ public DruidSchemaCatalog makeCatalog( builder.catalogResolver ); return rootSchema; - } - } public static final DruidViewMacroFactory DRUID_VIEW_MACRO_FACTORY = new TestDruidViewMacroFactory(); From 295c09a03cdcb7dffbf558e0ecd4616977ec4817 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:44:22 +0000 Subject: [PATCH 051/122] launcher-x --- .../org/apache/druid/quidem/Launcher.java | 77 ++++-------------- .../druid/quidem/LauncherSmokeTest.java | 78 +++++++++++++++++++ 2 files changed, 95 insertions(+), 60 deletions(-) create mode 100644 integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 712f5d8ff060..2d7ec784a4e8 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -26,83 +26,40 @@ import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; import org.apache.druid.sql.calcite.util.SqlTestFramework; -import org.junit.Test; - -import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpRequest.BodyPublishers; -import java.net.http.HttpResponse; import java.sql.SQLException; -import static org.junit.Assert.assertNotEquals; public class Launcher { static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); - private static Logger log = new Logger(Launcher.class); + private final SqlTestFramework framework; + private final ConfigurationInstance configurationInstance; + private Lifecycle lifecycle; - @Test - public void runIt() throws Exception + public Launcher() throws Exception { - Launcher.main3(null); + configurationInstance = getConfigurationInstance(); + framework = configurationInstance.framework; } - private static ConfigurationInstance getCI2() throws SQLException, Exception + public void start() { - SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL("druidtest:///"); - - ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( - config, - x -> new ExposedAsBrokerQueryComponentSupplierWrapper(x) - ); - return ci; + lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); } - private static void main3(Object object) throws Exception + public void shutdown() { - - SqlTestFramework framework = getCI2().framework; - - Lifecycle lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); - - chk1(); - chkStatus(); - - System.out.println("-------------------booted up-------------------"); - - lifecycle.join(); - + lifecycle.stop(); } - private static void chk1() throws IOException, InterruptedException + private static ConfigurationInstance getConfigurationInstance() throws SQLException, Exception { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/druid/v2/sql")) - .header("Content-Type", "application/json") - .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) - .build(); - System.out.println(request); - HttpClient hc = HttpClient.newHttpClient(); - HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println(a); - assertNotEquals(400, a.statusCode()); - } + SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL("druidtest:///"); - private static void chkStatus() throws IOException, InterruptedException - { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/status")) - .header("Content-Type", "application/json") - .GET() - .build(); - System.out.println(request); - // request. - HttpClient hc = HttpClient.newHttpClient(); - HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println(a); - assertNotEquals(400, a.statusCode()); + ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( + config, + x -> new ExposedAsBrokerQueryComponentSupplierWrapper(x) + ); + return ci; } - } diff --git a/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java new file mode 100644 index 000000000000..62a01d2c15ee --- /dev/null +++ b/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.druid.quidem; + +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse; +import static org.testng.Assert.assertEquals; + +public class LauncherSmokeTest +{ + static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); + + private static Launcher launcher; + + @BeforeClass + public static void setUp() throws Exception + { + launcher = new Launcher(); + launcher.start(); + } + + @AfterClass + public static void tearDown() + { + launcher.shutdown(); + } + + @Test + public void chkSelectFromFoo() throws IOException, InterruptedException + { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:12345/druid/v2/sql")) + .header("Content-Type", "application/json") + .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) + .build(); + HttpClient hc = HttpClient.newHttpClient(); + HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); + assertEquals(200, a.statusCode()); + } + + @Test + public void chkStatusWorks() throws IOException, InterruptedException + { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:12345/status")) + .header("Content-Type", "application/json") + .GET() + .build(); + HttpClient hc = HttpClient.newHttpClient(); + HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); + assertEquals(200, a.statusCode()); + } +} From ff7abeb0f16126c64c308fa26e0efa68689a16c0 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 15:54:29 +0000 Subject: [PATCH 052/122] small cleanup --- .../org/apache/druid/quidem/Launcher.java | 23 ++++++++++--------- .../druid/quidem/LauncherSmokeTest.java | 5 +--- .../druid/quidem/DruidAvaticaTestDriver.java | 11 ++++----- .../sql/calcite/SqlTestFrameworkConfig.java | 15 ++++++++---- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index 2d7ec784a4e8..f797d92789fb 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -26,19 +26,22 @@ import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; import org.apache.druid.sql.calcite.util.SqlTestFramework; -import java.sql.SQLException; public class Launcher { - static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); + static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore( + x -> new ExposedAsBrokerQueryComponentSupplierWrapper(x) + ); + private static final String QUIDEM_URI = "quidem.uri"; private static Logger log = new Logger(Launcher.class); private final SqlTestFramework framework; private final ConfigurationInstance configurationInstance; private Lifecycle lifecycle; - public Launcher() throws Exception + public Launcher(String uri) throws Exception { - configurationInstance = getConfigurationInstance(); + SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL(uri); + configurationInstance = CONFIG_STORE.getConfigurationInstance(config); framework = configurationInstance.framework; } @@ -52,14 +55,12 @@ public void shutdown() lifecycle.stop(); } - private static ConfigurationInstance getConfigurationInstance() throws SQLException, Exception + public static void main(String[] args) throws Exception { - SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL("druidtest:///"); + String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); - ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( - config, - x -> new ExposedAsBrokerQueryComponentSupplierWrapper(x) - ); - return ci; + Launcher launcher = new Launcher(quidemUri ); + launcher.start(); + launcher.lifecycle.join(); } } diff --git a/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java index 62a01d2c15ee..25f031cfc6ce 100644 --- a/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java +++ b/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java @@ -18,7 +18,6 @@ */ package org.apache.druid.quidem; -import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -33,14 +32,12 @@ public class LauncherSmokeTest { - static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); - private static Launcher launcher; @BeforeClass public static void setUp() throws Exception { - launcher = new Launcher(); + launcher = new Launcher("druidtest:///"); launcher.start(); } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java index a10c9015ec0d..ff1db3b6cfd9 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java @@ -93,7 +93,9 @@ public class DruidAvaticaTestDriver implements Driver public static final String URI_PREFIX = "druidtest://"; public static final String DEFAULT_URI = URI_PREFIX + "/"; - static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore(); + static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore( + x -> new AvaticaBasedTestConnectionSupplier(x) + ); public DruidAvaticaTestDriver() { @@ -107,12 +109,7 @@ public Connection connect(String url, Properties info) throws SQLException } try { SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL(url); - - ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance( - config, - x -> new AvaticaBasedTestConnectionSupplier(x) - ); - + ConfigurationInstance ci = CONFIG_STORE.getConfigurationInstance(config); AvaticaJettyServer server = ci.framework.injector().getInstance(AvaticaJettyServer.class); return server.getConnection(info); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 4b8137349ca0..29e0a878ccbf 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -230,11 +230,18 @@ public boolean equals(Object obj) public static class SqlTestFrameworkConfigStore implements Closeable { + private final Function queryComponentSupplierWrapper; + + public SqlTestFrameworkConfigStore( + Function queryComponentSupplierWrapper) + { + this.queryComponentSupplierWrapper = queryComponentSupplierWrapper; + } + Map configMap = new HashMap<>(); public ConfigurationInstance getConfigurationInstance( - SqlTestFrameworkConfig config, - Function queryComponentSupplierWrapper) throws Exception + SqlTestFrameworkConfig config) throws Exception { ConfigurationInstance ret = configMap.get(config); if (!configMap.containsKey(config)) { @@ -273,7 +280,7 @@ public static List collectAnnotations(Class testClass, Method met */ public static class Rule implements AfterAllCallback, BeforeEachCallback { - SqlTestFrameworkConfigStore configStore = new SqlTestFrameworkConfigStore(); + SqlTestFrameworkConfigStore configStore = new SqlTestFrameworkConfigStore(Function.identity()); private SqlTestFrameworkConfig config; private Method method; private String testName; @@ -324,7 +331,7 @@ public SqlTestFrameworkConfig getConfig() public SqlTestFramework get() throws Exception { - return configStore.getConfigurationInstance(config, Function.identity()).framework; + return configStore.getConfigurationInstance(config).framework; } public T getAnnotation(Class annotationType) From 88da8d96598edfe55d48dff4d13804ba2b2d6230 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 16:21:04 +0000 Subject: [PATCH 053/122] rename --- .../org/apache/druid/sql/calcite/planner/PlannerFactory.java | 2 +- .../java/org/apache/druid/sql/calcite/run}/DruidHook.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename sql/src/{test/java/org/apache/druid/quidem => main/java/org/apache/druid/sql/calcite/run}/DruidHook.java (98%) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java index ba3424cc65bc..61bf4ec8f7e7 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java @@ -39,7 +39,6 @@ import org.apache.calcite.tools.Frameworks; import org.apache.druid.guice.annotations.Json; import org.apache.druid.math.expr.ExprMacroTable; -import org.apache.druid.quidem.DruidHook; import org.apache.druid.segment.join.JoinableFactoryWrapper; import org.apache.druid.server.security.Access; import org.apache.druid.server.security.AuthConfig; @@ -47,6 +46,7 @@ import org.apache.druid.server.security.NoopEscalator; import org.apache.druid.sql.calcite.parser.DruidSqlParserImplFactory; import org.apache.druid.sql.calcite.planner.convertlet.DruidConvertletTable; +import org.apache.druid.sql.calcite.run.DruidHook; import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.schema.DruidSchemaName; diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java similarity index 98% rename from sql/src/test/java/org/apache/druid/quidem/DruidHook.java rename to sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index 8e955c6ec32c..809f2d2ea794 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.druid.quidem; +package org.apache.druid.sql.calcite.run; import org.apache.calcite.rel.RelNode; import java.io.Closeable; From d1b4587eaedfd8469c0f2405d60dc6b978507bb7 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 28 May 2024 16:38:47 +0000 Subject: [PATCH 054/122] uu --- integration-tests/pom.xml | 17 +- .../apache/druid/quidem/QuidemRecorder.java | 2 + pom.xml | 4 +- quidem-it/pom.xml | 499 ++++++++++++++++++ ...AsBrokerQueryComponentSupplierWrapper.java | 373 +++++++++++++ .../org/apache/druid/quidem/Launcher.java | 66 +++ .../druid/quidem/QuidemCaptureModule.java | 34 ++ .../druid/quidem/QuidemCaptureResource.java | 66 +++ .../apache/druid/quidem/QuidemRecorder.java | 54 ++ .../druid/quidem/LauncherSmokeTest.java | 75 +++ 10 files changed, 1188 insertions(+), 2 deletions(-) create mode 100644 quidem-it/pom.xml create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java create mode 100644 quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index a6600df02b76..cedf354b9517 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -562,7 +562,22 @@ - + + + + org.codehaus.mojo + exec-maven-plugin + + java + + -classpath + + org.apache.druid.quidem.Launcher + + + + + diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index a5df03ef990e..5c1813b81e4a 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -19,6 +19,8 @@ package org.apache.druid.quidem; +import org.apache.druid.sql.calcite.run.DruidHook; + import java.io.PrintStream; public class QuidemRecorder implements AutoCloseable, DruidHook diff --git a/pom.xml b/pom.xml index f4dd5f0d4512..03486d8fdc60 100644 --- a/pom.xml +++ b/pom.xml @@ -72,7 +72,8 @@ 1.8 1.8 - 8 + + 11 UTF-8 0.9.0.M2 5.3.0 @@ -243,6 +244,7 @@ integration-tests-ex/tools integration-tests-ex/image integration-tests-ex/cases + quidem-it diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml new file mode 100644 index 000000000000..71c19a3adcd1 --- /dev/null +++ b/quidem-it/pom.xml @@ -0,0 +1,499 @@ + + + + + 4.0.0 + + druid-quidem-it + druid-quidem-it + druid-quidem-it + + + org.apache.druid + druid + 31.0.0-SNAPSHOT + + + + + confluent + https://packages.confluent.io/maven/ + + + + + + com.amazonaws + amazon-kinesis-producer + 0.13.1 + + + org.apache.avro + avro + + + com.opencsv + opencsv + + + org.apache.commons + commons-lang3 + + + com.github.rvesse + airline + + + com.amazonaws + aws-java-sdk-kinesis + ${aws.sdk.version} + + + + com.amazonaws + aws-java-sdk-core + + + + + com.amazonaws + aws-java-sdk-core + ${aws.sdk.version} + + + commons-codec + commons-codec + + + com.amazonaws + aws-java-sdk-s3 + ${aws.sdk.version} + provided + + + org.apache.druid.extensions + druid-orc-extensions + ${project.parent.version} + provided + + + javax.servlet + servlet-api + + + com.squareup.okhttp + okhttp + + + + + org.apache.druid.extensions + druid-parquet-extensions + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-avro-extensions + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-protobuf-extensions + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-s3-extensions + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-kinesis-indexing-service + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-azure-extensions + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-google-extensions + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-hdfs-storage + ${project.parent.version} + provided + + + com.amazonaws + aws-java-sdk-bundle + + + + + org.apache.druid.extensions + druid-datasketches + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-histogram + ${project.parent.version} + provided + + + org.apache.druid + druid-aws-common + ${project.parent.version} + provided + + + org.apache.druid + druid-processing + ${project.parent.version} + + + org.apache.druid + druid-sql + ${project.parent.version} + + + org.apache.druid + druid-indexing-service + ${project.parent.version} + + + org.apache.druid.extensions + mysql-metadata-storage + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-kafka-indexing-service + ${project.parent.version} + + + org.apache.kafka + kafka-clients + + + + + org.apache.druid.extensions + druid-basic-security + ${project.parent.version} + + + org.apache.druid.extensions + druid-lookups-cached-global + ${project.parent.version} + provided + + + org.apache.druid.extensions + druid-testing-tools + ${project.parent.version} + provided + + + org.apache.druid.extensions + simple-client-sslcontext + ${project.parent.version} + + + org.apache.druid.extensions + druid-multi-stage-query + ${project.parent.version} + + + org.apache.druid + druid-services + ${project.parent.version} + + + org.apache.druid + druid-server + ${project.parent.version} + + + commons-io + commons-io + + + joda-time + joda-time + + + com.fasterxml.jackson.core + jackson-annotations + + + com.google.inject + guice + + + com.google.inject.extensions + guice-multibindings + + + com.fasterxml.jackson.core + jackson-databind + + + org.apache.kafka + kafka-clients + ${apache.kafka.version} + + + javax.ws.rs + jsr311-api + + + io.netty + netty + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-smile-provider + + + com.google.guava + guava + + + jakarta.validation + jakarta.validation-api + + + org.apache.logging.log4j + log4j-slf4j-impl + provided + + + com.google.code.findbugs + jsr305 + + + com.github.docker-java + docker-java + + + com.github.docker-java + docker-java-transport-jersey + + + + + com.github.docker-java + docker-java-transport-netty + + + com.github.docker-java + docker-java-api + + + com.github.docker-java + docker-java-core + + + io.netty + netty-transport-native-kqueue + osx-x86_64 + runtime + + + io.netty + netty-transport-native-kqueue + osx-aarch_64 + runtime + + + org.eclipse.jetty + jetty-servlet + ${jetty.version} + + + org.eclipse.jetty + jetty-server + ${jetty.version} + + + com.google.inject.extensions + guice-servlet + ${guice.version} + + + io.confluent + kafka-schema-registry-client + 6.2.12 + + + org.slf4j + slf4j-log4j12 + + + org.apache.avro + avro + + + com.fasterxml.jackson.core + jackson-databind + + + javax.ws.rs + javax.ws.rs-api + + + javax.ws.rs + javax.ws.rs-api + + + javax.ws.rs + jsr311-api + + + jakarta.ws.rs + jakarta.ws.rs-api + + + + + io.confluent + kafka-protobuf-provider + 6.2.12 + provided + + + com.google.protobuf + protobuf-java + + + + org.apache.druid + druid-sql + test-jar + ${project.parent.version} + + + + org.apache.druid + druid-processing + test-jar + ${project.parent.version} + + + org.apache.druid + druid-server + test-jar + ${project.parent.version} + + + + org.easymock + easymock + test + + + + + + org.junit.jupiter + junit-jupiter + test + + + org.junit.vintage + junit-vintage-engine + test + + + junit + junit + test + + + org.apache.calcite.avatica + avatica + test + + + org.apache.calcite.avatica + avatica-core + test + + + com.github.os72 + protobuf-dynamic + 0.9.3 + compile + + + com.amazonaws + aws-java-sdk-sts + ${aws.sdk.version} + runtime + + + org.apache.datasketches + datasketches-java + runtime + + + + + + + org.owasp + dependency-check-maven + + true + + + + org.codehaus.mojo + exec-maven-plugin + + java + + -classpath + + org.apache.druid.quidem.Launcher + + + + + + diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java new file mode 100644 index 000000000000..9f4c8bb59844 --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -0,0 +1,373 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.inject.AbstractModule; +import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.Module; +import com.google.inject.Provides; +import com.google.inject.name.Names; +import org.apache.druid.cli.CliBroker; +import org.apache.druid.cli.QueryJettyServerInitializer; +import org.apache.druid.client.BrokerSegmentWatcherConfig; +import org.apache.druid.client.BrokerServerView; +import org.apache.druid.client.InternalQueryConfig; +import org.apache.druid.client.TimelineServerView; +import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; +import org.apache.druid.client.selector.ServerSelectorStrategy; +import org.apache.druid.client.selector.TierSelectorStrategy; +import org.apache.druid.curator.CuratorModule; +import org.apache.druid.curator.discovery.DiscoveryModule; +import org.apache.druid.discovery.DruidNodeDiscoveryProvider; +import org.apache.druid.guice.AnnouncerModule; +import org.apache.druid.guice.BrokerProcessingModule; +import org.apache.druid.guice.BrokerServiceModule; +import org.apache.druid.guice.CoordinatorDiscoveryModule; +import org.apache.druid.guice.DruidInjectorBuilder; +import org.apache.druid.guice.ExpressionModule; +import org.apache.druid.guice.ExtensionsModule; +import org.apache.druid.guice.FirehoseModule; +import org.apache.druid.guice.JacksonConfigManagerModule; +import org.apache.druid.guice.JavaScriptModule; +import org.apache.druid.guice.Jerseys; +import org.apache.druid.guice.JoinableFactoryModule; +import org.apache.druid.guice.JsonConfigProvider; +import org.apache.druid.guice.LazySingleton; +import org.apache.druid.guice.LifecycleModule; +import org.apache.druid.guice.LocalDataStorageDruidModule; +import org.apache.druid.guice.MetadataConfigModule; +import org.apache.druid.guice.NestedDataModule; +import org.apache.druid.guice.QueryRunnerFactoryModule; +import org.apache.druid.guice.SegmentWranglerModule; +import org.apache.druid.guice.ServerModule; +import org.apache.druid.guice.ServerTypeConfig; +import org.apache.druid.guice.ServerViewModule; +import org.apache.druid.guice.StartupLoggingModule; +import org.apache.druid.guice.StorageNodeModule; +import org.apache.druid.guice.annotations.Client; +import org.apache.druid.guice.annotations.EscalatedClient; +import org.apache.druid.guice.annotations.Json; +import org.apache.druid.guice.http.HttpClientModule; +import org.apache.druid.guice.security.AuthenticatorModule; +import org.apache.druid.guice.security.AuthorizerModule; +import org.apache.druid.guice.security.DruidAuthModule; +import org.apache.druid.initialization.CoreInjectorBuilder; +import org.apache.druid.initialization.Log4jShutterDownerModule; +import org.apache.druid.initialization.ServerInjectorBuilder; +import org.apache.druid.initialization.TombstoneDataStorageModule; +import org.apache.druid.java.util.common.io.Closer; +import org.apache.druid.java.util.emitter.service.ServiceEmitter; +import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.query.QuerySegmentWalker; +import org.apache.druid.query.RetryQueryRunnerConfig; +import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; +import org.apache.druid.rpc.guice.ServiceClientModule; +import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; +import org.apache.druid.server.BrokerQueryResource; +import org.apache.druid.server.ClientInfoResource; +import org.apache.druid.server.DruidNode; +import org.apache.druid.server.QueryLifecycleFactory; +import org.apache.druid.server.QuerySchedulerProvider; +import org.apache.druid.server.ResponseContextConfig; +import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.server.SubqueryGuardrailHelper; +import org.apache.druid.server.SubqueryGuardrailHelperProvider; +import org.apache.druid.server.coordination.ServerType; +import org.apache.druid.server.http.BrokerResource; +import org.apache.druid.server.http.SelfDiscoveryResource; +import org.apache.druid.server.initialization.AuthorizerMapperModule; +import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; +import org.apache.druid.server.initialization.jetty.JettyServerInitializer; +import org.apache.druid.server.initialization.jetty.JettyServerModule; +import org.apache.druid.server.log.NoopRequestLogger; +import org.apache.druid.server.log.RequestLogger; +import org.apache.druid.server.metrics.NoopServiceEmitter; +import org.apache.druid.server.metrics.QueryCountStatsProvider; +import org.apache.druid.server.metrics.SubqueryCountStatsProvider; +import org.apache.druid.server.router.TieredBrokerConfig; +import org.apache.druid.server.security.AuthenticatorMapper; +import org.apache.druid.server.security.Escalator; +import org.apache.druid.server.security.TLSCertificateCheckerModule; +import org.apache.druid.sql.calcite.planner.CalciteRulesManager; +import org.apache.druid.sql.calcite.planner.CatalogResolver; +import org.apache.druid.sql.calcite.run.NativeSqlEngine; +import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; +import org.apache.druid.sql.calcite.schema.DruidSchemaName; +import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.calcite.util.SqlTestFramework; +import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; +import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; +import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; +import org.apache.druid.sql.guice.SqlModule; +import org.apache.druid.storage.StorageConnectorModule; +import org.apache.druid.timeline.PruneLoadSpec; +import org.eclipse.jetty.server.Server; + +import java.io.IOException; +import java.util.List; +import java.util.Properties; + +/** + * A wrapper class to expose a {@link QueryComponentSupplier} as a Broker service. + */ +public class ExposedAsBrokerQueryComponentSupplierWrapper implements QueryComponentSupplier +{ + private QueryComponentSupplier delegate; + + public ExposedAsBrokerQueryComponentSupplierWrapper(QueryComponentSupplier delegate) + { + this.delegate = delegate; + } + + @Override + public void gatherProperties(Properties properties) + { + delegate.gatherProperties(properties); + } + + @Override + public void configureGuice(DruidInjectorBuilder builder) + { + } + + @Override + public void configureGuice(CoreInjectorBuilder builder, List overrideModules) + { + delegate.configureGuice(builder); + + installForServerModules(builder); + + overrideModules.addAll(ExposedAsBrokerQueryComponentSupplierWrapper.brokerModules()); + overrideModules.add(new BrokerTestModule()); + builder.add(QuidemCaptureModule.class); + } + + @Override + public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) + { + return delegate.createCongolmerate(builder, closer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + } + + @Override + public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) + { + return delegate.createEngine(qlf, objectMapper, injector); + } + + @Override + public void configureJsonMapper(ObjectMapper mapper) + { + delegate.configureJsonMapper(mapper); + } + + @Override + public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) + { + return delegate.createJoinableFactoryWrapper(lookupProvider); + } + + @Override + public void finalizeTestFramework(SqlTestFramework sqlTestFramework) + { + delegate.finalizeTestFramework(sqlTestFramework); + } + + @Override + public void close() throws IOException + { + delegate.close(); + } + + @Override + public PlannerComponentSupplier getPlannerComponentSupplier() + { + return delegate.getPlannerComponentSupplier(); + } + + public class BrokerTestModule extends AbstractModule + { + @Override + protected void configure() + { + bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); + bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); + bind(RequestLogger.class).toInstance(new NoopRequestLogger()); + bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + bind(ServiceEmitter.class).to(NoopServiceEmitter.class); + bind(QuerySchedulerProvider.class).in(LazySingleton.class); + bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); + bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); + } + + @Provides + @LazySingleton + public BrokerSegmentMetadataCache provideCache() + { + return null; + } + + @Provides + @LazySingleton + public Properties getProps() + { + Properties localProps = new Properties(); + localProps.put("druid.enableTlsPort", "false"); + localProps.put("druid.zk.service.enabled", "false"); + localProps.put("druid.plaintextPort", "12345"); + localProps.put("druid.host", "localhost"); + localProps.put("druid.broker.segment.awaitInitializationOnStart", "false"); + return localProps; + } + + @Provides + @LazySingleton + public SqlEngine createMockSqlEngine( + final QuerySegmentWalker walker, + final QueryRunnerFactoryConglomerate conglomerate, + @Json ObjectMapper jsonMapper) + { + return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); + } + + @Provides + @LazySingleton + DruidNodeDiscoveryProvider getDruidNodeDiscoveryProvider() + { + final DruidNode coordinatorNode = CalciteTests.mockCoordinatorNode(); + return CalciteTests.mockDruidNodeDiscoveryProvider(coordinatorNode); + } + } + + /** + * Closely related to {@link CoreInjectorBuilder#forServer()} + */ + private void installForServerModules(CoreInjectorBuilder builder) + { + builder.add( + new Log4jShutterDownerModule(), + new LifecycleModule(), + ExtensionsModule.SecondaryModule.class, + new DruidAuthModule(), + TLSCertificateCheckerModule.class, + // EmitterModule.class, + HttpClientModule.global(), + HttpClientModule.escalatedGlobal(), + new HttpClientModule("druid.broker.http", Client.class, true), + new HttpClientModule("druid.broker.http", EscalatedClient.class, true), + new CuratorModule(), + new AnnouncerModule(), + new SegmentWriteOutMediumModule(), + new ServerModule(), + new StorageNodeModule(), + new JettyServerModule(), + new ExpressionModule(), + new NestedDataModule(), + new DiscoveryModule(), + new ServerViewModule(), + new MetadataConfigModule(), + new DerbyMetadataStorageDruidModule(), + new JacksonConfigManagerModule(), + new CoordinatorDiscoveryModule(), + new LocalDataStorageDruidModule(), + new TombstoneDataStorageModule(), + new FirehoseModule(), + new JavaScriptModule(), + new AuthenticatorModule(), + new AuthorizerModule(), + new AuthorizerMapperModule(), + new StartupLoggingModule(), + new ExternalStorageAccessSecurityModule(), + new ServiceClientModule(), + new StorageConnectorModule(), + new SqlModule(), + ServerInjectorBuilder.registerNodeRoleModule(ImmutableSet.of()) + ); + } + + /** + * Closely related to {@link CliBroker#getModules}. + */ + static List brokerModules() + { + return ImmutableList.of( + new BrokerProcessingModule(), + new QueryRunnerFactoryModule(), + new SegmentWranglerModule(), + new JoinableFactoryModule(), + new BrokerServiceModule(), + binder -> { + + binder.bindConstant().annotatedWith(Names.named("serviceName")).to( + TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME + ); + binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); + binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); + binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); + binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); + + binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); + + JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); + JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); + JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); + binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); + + binder.bind(BrokerQueryResource.class).in(LazySingleton.class); + Jerseys.addResource(binder, BrokerQueryResource.class); + binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); + binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); + binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); + Jerseys.addResource(binder, BrokerResource.class); + Jerseys.addResource(binder, ClientInfoResource.class); + + LifecycleModule.register(binder, BrokerQueryResource.class); + + LifecycleModule.register(binder, Server.class); + binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); + + binder.bind(String.class) + .annotatedWith(DruidSchemaName.class) + .toInstance(CalciteTests.DRUID_SCHEMA_NAME); + + Jerseys.addResource(binder, SelfDiscoveryResource.class); + LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); + } + ); + } +} \ No newline at end of file diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java new file mode 100644 index 000000000000..f797d92789fb --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import org.apache.druid.cli.GuiceRunnable; +import org.apache.druid.java.util.common.lifecycle.Lifecycle; +import org.apache.druid.java.util.common.logger.Logger; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; +import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; +import org.apache.druid.sql.calcite.util.SqlTestFramework; + +public class Launcher +{ + static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore( + x -> new ExposedAsBrokerQueryComponentSupplierWrapper(x) + ); + private static final String QUIDEM_URI = "quidem.uri"; + private static Logger log = new Logger(Launcher.class); + private final SqlTestFramework framework; + private final ConfigurationInstance configurationInstance; + private Lifecycle lifecycle; + + public Launcher(String uri) throws Exception + { + SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL(uri); + configurationInstance = CONFIG_STORE.getConfigurationInstance(config); + framework = configurationInstance.framework; + } + + public void start() + { + lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); + } + + public void shutdown() + { + lifecycle.stop(); + } + + public static void main(String[] args) throws Exception + { + String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); + + Launcher launcher = new Launcher(quidemUri ); + launcher.start(); + launcher.lifecycle.join(); + } +} diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java new file mode 100644 index 000000000000..17d9009994e7 --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.google.inject.Binder; +import com.google.inject.Module; +import org.apache.druid.guice.Jerseys; + +public class QuidemCaptureModule implements Module +{ + + @Override + public void configure(Binder binder) + { + Jerseys.addResource(binder, QuidemCaptureResource.class); + } +} diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java new file mode 100644 index 000000000000..ded57a3fccf4 --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import java.io.IOException; +import java.io.PrintStream; + +@Path("/quidem") +public class QuidemCaptureResource +{ + private QuidemRecorder recorder = null; + + @GET + @Path("/") + @Produces(MediaType.TEXT_PLAIN) + public String getSome() + { + return "Asd"; + } + + @GET + @Path("/start") + @Produces(MediaType.TEXT_PLAIN) + public synchronized String getSome1() throws IOException + { + stopIfRunning(); + start(); + return recorder.toString(); + } + + private void start() throws IOException + { + recorder = new QuidemRecorder(new PrintStream("/tmp/new.iq")); + } + + private void stopIfRunning() + { + if (recorder != null) { + recorder.close(); + recorder = null; + } + + } +} diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java new file mode 100644 index 000000000000..5c1813b81e4a --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import org.apache.druid.sql.calcite.run.DruidHook; + +import java.io.PrintStream; + +public class QuidemRecorder implements AutoCloseable, DruidHook +{ + private PrintStream printStream; + + public QuidemRecorder(PrintStream printStream) + { + this.printStream = printStream; + printStream.println("#started"); + printStream.println("!connect druidtest:///"); + DruidHook.register(DruidHook.SQL, this); + } + + @Override + public void close() + { + DruidHook.unregister(DruidHook.SQL, this); + } + + @Override + public void invoke(HookKey key, T object) + { + if (DruidHook.SQL.equals(key)) { + printStream.print(object); + printStream.println(";"); + printStream.println("!ok"); + return; + } + } +} diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java new file mode 100644 index 000000000000..3f640f07d534 --- /dev/null +++ b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.druid.quidem; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse; +import static org.junit.Assert.assertEquals; + +public class LauncherSmokeTest +{ + private static Launcher launcher; + + @BeforeClass + public static void setUp() throws Exception + { + launcher = new Launcher("druidtest:///"); + launcher.start(); + } + + @AfterClass + public static void tearDown() + { + launcher.shutdown(); + } + + @Test + public void chkSelectFromFoo() throws IOException, InterruptedException + { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:12345/druid/v2/sql")) + .header("Content-Type", "application/json") + .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) + .build(); + HttpClient hc = HttpClient.newHttpClient(); + HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); + assertEquals(200, a.statusCode()); + } + + @Test + public void chkStatusWorks() throws IOException, InterruptedException + { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:12345/status")) + .header("Content-Type", "application/json") + .GET() + .build(); + HttpClient hc = HttpClient.newHttpClient(); + HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); + assertEquals(200, a.statusCode()); + } +} From fb4b32e5b7d93ff41c82344e89d68df6e7474dd2 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 29 May 2024 16:10:38 +0000 Subject: [PATCH 055/122] updates --- .../org/apache/druid/quidem/Launcher.java | 3 ++ quidem-it/pom.xml | 19 +++++++--- .../org/apache/druid/quidem/Launcher.java | 3 +- quidem-it/src/main/resources/log4j2.xml | 35 +++++++++++++++++++ 4 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 quidem-it/src/main/resources/log4j2.xml diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java index f797d92789fb..2bdfa2aa0386 100644 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java @@ -57,6 +57,9 @@ public void shutdown() public static void main(String[] args) throws Exception { + if(true) { + throw new RuntimeException("Asd"); + } String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); Launcher launcher = new Launcher(quidemUri ); diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 71c19a3adcd1..8a2427fc3137 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -421,6 +421,12 @@ ${project.parent.version} + + org.slf4j + slf4j-simple + true + + org.easymock easymock @@ -432,7 +438,6 @@ org.junit.jupiter junit-jupiter - test org.junit.vintage @@ -442,17 +447,14 @@ junit junit - test org.apache.calcite.avatica avatica - test org.apache.calcite.avatica avatica-core - test com.github.os72 @@ -471,6 +473,15 @@ datasketches-java runtime + + org.hamcrest + hamcrest-all + + + org.hamcrest + hamcrest-core + + diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index f797d92789fb..36d276571b23 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -58,8 +58,9 @@ public void shutdown() public static void main(String[] args) throws Exception { String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); + log.info("Starting Quidem with URI[%s]", quidemUri); - Launcher launcher = new Launcher(quidemUri ); + Launcher launcher = new Launcher(quidemUri); launcher.start(); launcher.lifecycle.join(); } diff --git a/quidem-it/src/main/resources/log4j2.xml b/quidem-it/src/main/resources/log4j2.xml new file mode 100644 index 000000000000..03d56b214004 --- /dev/null +++ b/quidem-it/src/main/resources/log4j2.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + From 90c88aeab062469a899a7e3b0b62cc5e8eb6e35f Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 4 Jun 2024 10:16:10 +0000 Subject: [PATCH 056/122] some pom --- quidem-it/pom.xml | 8 +++++ .../org/apache/druid/quidem/Launcher.java | 11 ++++++ quidem-it/src/main/resources/log4j2.xml | 35 ------------------- 3 files changed, 19 insertions(+), 35 deletions(-) delete mode 100644 quidem-it/src/main/resources/log4j2.xml diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 8a2427fc3137..199778ccb5b3 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -501,8 +501,16 @@ -classpath + -Dquidem.uri=Xa org.apache.druid.quidem.Launcher + + + + quidem.uri + myvalue + + diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index 36d276571b23..2f32fba39cdb 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -27,6 +27,8 @@ import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; import org.apache.druid.sql.calcite.util.SqlTestFramework; +import java.util.Properties; + public class Launcher { static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore( @@ -57,11 +59,20 @@ public void shutdown() public static void main(String[] args) throws Exception { + try { String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); + Properties p = System.getProperties(); + for ( Object string : p.keySet()) { + log.info("[%s] -> %s", string, p.get(string)); + } log.info("Starting Quidem with URI[%s]", quidemUri); Launcher launcher = new Launcher(quidemUri); launcher.start(); launcher.lifecycle.join(); + } catch (Exception e) { + e.printStackTrace(); + + } } } diff --git a/quidem-it/src/main/resources/log4j2.xml b/quidem-it/src/main/resources/log4j2.xml deleted file mode 100644 index 03d56b214004..000000000000 --- a/quidem-it/src/main/resources/log4j2.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - From d75dcea4dc7a4d55c74a04cc911b9609ea8b1f8e Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 10 Jun 2024 08:44:08 +0000 Subject: [PATCH 057/122] undo integration-tests module changes --- integration-tests/pom.xml | 17 +- ...AsBrokerQueryComponentSupplierWrapper.java | 373 ------------------ .../org/apache/druid/quidem/Launcher.java | 69 ---- .../druid/quidem/QuidemCaptureModule.java | 34 -- .../druid/quidem/QuidemCaptureResource.java | 66 ---- .../apache/druid/quidem/QuidemRecorder.java | 54 --- .../druid/quidem/LauncherSmokeTest.java | 75 ---- 7 files changed, 1 insertion(+), 687 deletions(-) delete mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java delete mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java delete mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java delete mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java delete mode 100644 integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java delete mode 100644 integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index cedf354b9517..a6600df02b76 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -562,22 +562,7 @@ - - - - org.codehaus.mojo - exec-maven-plugin - - java - - -classpath - - org.apache.druid.quidem.Launcher - - - - - + diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java deleted file mode 100644 index 9f4c8bb59844..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ /dev/null @@ -1,373 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.inject.AbstractModule; -import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.Module; -import com.google.inject.Provides; -import com.google.inject.name.Names; -import org.apache.druid.cli.CliBroker; -import org.apache.druid.cli.QueryJettyServerInitializer; -import org.apache.druid.client.BrokerSegmentWatcherConfig; -import org.apache.druid.client.BrokerServerView; -import org.apache.druid.client.InternalQueryConfig; -import org.apache.druid.client.TimelineServerView; -import org.apache.druid.client.selector.CustomTierSelectorStrategyConfig; -import org.apache.druid.client.selector.ServerSelectorStrategy; -import org.apache.druid.client.selector.TierSelectorStrategy; -import org.apache.druid.curator.CuratorModule; -import org.apache.druid.curator.discovery.DiscoveryModule; -import org.apache.druid.discovery.DruidNodeDiscoveryProvider; -import org.apache.druid.guice.AnnouncerModule; -import org.apache.druid.guice.BrokerProcessingModule; -import org.apache.druid.guice.BrokerServiceModule; -import org.apache.druid.guice.CoordinatorDiscoveryModule; -import org.apache.druid.guice.DruidInjectorBuilder; -import org.apache.druid.guice.ExpressionModule; -import org.apache.druid.guice.ExtensionsModule; -import org.apache.druid.guice.FirehoseModule; -import org.apache.druid.guice.JacksonConfigManagerModule; -import org.apache.druid.guice.JavaScriptModule; -import org.apache.druid.guice.Jerseys; -import org.apache.druid.guice.JoinableFactoryModule; -import org.apache.druid.guice.JsonConfigProvider; -import org.apache.druid.guice.LazySingleton; -import org.apache.druid.guice.LifecycleModule; -import org.apache.druid.guice.LocalDataStorageDruidModule; -import org.apache.druid.guice.MetadataConfigModule; -import org.apache.druid.guice.NestedDataModule; -import org.apache.druid.guice.QueryRunnerFactoryModule; -import org.apache.druid.guice.SegmentWranglerModule; -import org.apache.druid.guice.ServerModule; -import org.apache.druid.guice.ServerTypeConfig; -import org.apache.druid.guice.ServerViewModule; -import org.apache.druid.guice.StartupLoggingModule; -import org.apache.druid.guice.StorageNodeModule; -import org.apache.druid.guice.annotations.Client; -import org.apache.druid.guice.annotations.EscalatedClient; -import org.apache.druid.guice.annotations.Json; -import org.apache.druid.guice.http.HttpClientModule; -import org.apache.druid.guice.security.AuthenticatorModule; -import org.apache.druid.guice.security.AuthorizerModule; -import org.apache.druid.guice.security.DruidAuthModule; -import org.apache.druid.initialization.CoreInjectorBuilder; -import org.apache.druid.initialization.Log4jShutterDownerModule; -import org.apache.druid.initialization.ServerInjectorBuilder; -import org.apache.druid.initialization.TombstoneDataStorageModule; -import org.apache.druid.java.util.common.io.Closer; -import org.apache.druid.java.util.emitter.service.ServiceEmitter; -import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; -import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.query.QuerySegmentWalker; -import org.apache.druid.query.RetryQueryRunnerConfig; -import org.apache.druid.query.lookup.LookupExtractorFactoryContainerProvider; -import org.apache.druid.rpc.guice.ServiceClientModule; -import org.apache.druid.segment.join.JoinableFactoryWrapper; -import org.apache.druid.segment.writeout.SegmentWriteOutMediumModule; -import org.apache.druid.server.BrokerQueryResource; -import org.apache.druid.server.ClientInfoResource; -import org.apache.druid.server.DruidNode; -import org.apache.druid.server.QueryLifecycleFactory; -import org.apache.druid.server.QuerySchedulerProvider; -import org.apache.druid.server.ResponseContextConfig; -import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; -import org.apache.druid.server.SubqueryGuardrailHelper; -import org.apache.druid.server.SubqueryGuardrailHelperProvider; -import org.apache.druid.server.coordination.ServerType; -import org.apache.druid.server.http.BrokerResource; -import org.apache.druid.server.http.SelfDiscoveryResource; -import org.apache.druid.server.initialization.AuthorizerMapperModule; -import org.apache.druid.server.initialization.ExternalStorageAccessSecurityModule; -import org.apache.druid.server.initialization.jetty.JettyServerInitializer; -import org.apache.druid.server.initialization.jetty.JettyServerModule; -import org.apache.druid.server.log.NoopRequestLogger; -import org.apache.druid.server.log.RequestLogger; -import org.apache.druid.server.metrics.NoopServiceEmitter; -import org.apache.druid.server.metrics.QueryCountStatsProvider; -import org.apache.druid.server.metrics.SubqueryCountStatsProvider; -import org.apache.druid.server.router.TieredBrokerConfig; -import org.apache.druid.server.security.AuthenticatorMapper; -import org.apache.druid.server.security.Escalator; -import org.apache.druid.server.security.TLSCertificateCheckerModule; -import org.apache.druid.sql.calcite.planner.CalciteRulesManager; -import org.apache.druid.sql.calcite.planner.CatalogResolver; -import org.apache.druid.sql.calcite.run.NativeSqlEngine; -import org.apache.druid.sql.calcite.run.SqlEngine; -import org.apache.druid.sql.calcite.schema.BrokerSegmentMetadataCache; -import org.apache.druid.sql.calcite.schema.DruidSchemaName; -import org.apache.druid.sql.calcite.util.CalciteTests; -import org.apache.druid.sql.calcite.util.SqlTestFramework; -import org.apache.druid.sql.calcite.util.SqlTestFramework.Builder; -import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; -import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; -import org.apache.druid.sql.guice.SqlModule; -import org.apache.druid.storage.StorageConnectorModule; -import org.apache.druid.timeline.PruneLoadSpec; -import org.eclipse.jetty.server.Server; - -import java.io.IOException; -import java.util.List; -import java.util.Properties; - -/** - * A wrapper class to expose a {@link QueryComponentSupplier} as a Broker service. - */ -public class ExposedAsBrokerQueryComponentSupplierWrapper implements QueryComponentSupplier -{ - private QueryComponentSupplier delegate; - - public ExposedAsBrokerQueryComponentSupplierWrapper(QueryComponentSupplier delegate) - { - this.delegate = delegate; - } - - @Override - public void gatherProperties(Properties properties) - { - delegate.gatherProperties(properties); - } - - @Override - public void configureGuice(DruidInjectorBuilder builder) - { - } - - @Override - public void configureGuice(CoreInjectorBuilder builder, List overrideModules) - { - delegate.configureGuice(builder); - - installForServerModules(builder); - - overrideModules.addAll(ExposedAsBrokerQueryComponentSupplierWrapper.brokerModules()); - overrideModules.add(new BrokerTestModule()); - builder.add(QuidemCaptureModule.class); - } - - @Override - public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) - { - return delegate.createCongolmerate(builder, closer); - } - - @Override - public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, - JoinableFactoryWrapper joinableFactory, Injector injector) - { - return delegate.createQuerySegmentWalker(conglomerate, joinableFactory, injector); - } - - @Override - public SqlEngine createEngine(QueryLifecycleFactory qlf, ObjectMapper objectMapper, Injector injector) - { - return delegate.createEngine(qlf, objectMapper, injector); - } - - @Override - public void configureJsonMapper(ObjectMapper mapper) - { - delegate.configureJsonMapper(mapper); - } - - @Override - public JoinableFactoryWrapper createJoinableFactoryWrapper(LookupExtractorFactoryContainerProvider lookupProvider) - { - return delegate.createJoinableFactoryWrapper(lookupProvider); - } - - @Override - public void finalizeTestFramework(SqlTestFramework sqlTestFramework) - { - delegate.finalizeTestFramework(sqlTestFramework); - } - - @Override - public void close() throws IOException - { - delegate.close(); - } - - @Override - public PlannerComponentSupplier getPlannerComponentSupplier() - { - return delegate.getPlannerComponentSupplier(); - } - - public class BrokerTestModule extends AbstractModule - { - @Override - protected void configure() - { - bind(AuthenticatorMapper.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_MAPPER); - bind(Escalator.class).toInstance(CalciteTests.TEST_AUTHENTICATOR_ESCALATOR); - bind(RequestLogger.class).toInstance(new NoopRequestLogger()); - bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - bind(ServiceEmitter.class).to(NoopServiceEmitter.class); - bind(QuerySchedulerProvider.class).in(LazySingleton.class); - bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); - bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); - } - - @Provides - @LazySingleton - public BrokerSegmentMetadataCache provideCache() - { - return null; - } - - @Provides - @LazySingleton - public Properties getProps() - { - Properties localProps = new Properties(); - localProps.put("druid.enableTlsPort", "false"); - localProps.put("druid.zk.service.enabled", "false"); - localProps.put("druid.plaintextPort", "12345"); - localProps.put("druid.host", "localhost"); - localProps.put("druid.broker.segment.awaitInitializationOnStart", "false"); - return localProps; - } - - @Provides - @LazySingleton - public SqlEngine createMockSqlEngine( - final QuerySegmentWalker walker, - final QueryRunnerFactoryConglomerate conglomerate, - @Json ObjectMapper jsonMapper) - { - return new NativeSqlEngine(CalciteTests.createMockQueryLifecycleFactory(walker, conglomerate), jsonMapper); - } - - @Provides - @LazySingleton - DruidNodeDiscoveryProvider getDruidNodeDiscoveryProvider() - { - final DruidNode coordinatorNode = CalciteTests.mockCoordinatorNode(); - return CalciteTests.mockDruidNodeDiscoveryProvider(coordinatorNode); - } - } - - /** - * Closely related to {@link CoreInjectorBuilder#forServer()} - */ - private void installForServerModules(CoreInjectorBuilder builder) - { - builder.add( - new Log4jShutterDownerModule(), - new LifecycleModule(), - ExtensionsModule.SecondaryModule.class, - new DruidAuthModule(), - TLSCertificateCheckerModule.class, - // EmitterModule.class, - HttpClientModule.global(), - HttpClientModule.escalatedGlobal(), - new HttpClientModule("druid.broker.http", Client.class, true), - new HttpClientModule("druid.broker.http", EscalatedClient.class, true), - new CuratorModule(), - new AnnouncerModule(), - new SegmentWriteOutMediumModule(), - new ServerModule(), - new StorageNodeModule(), - new JettyServerModule(), - new ExpressionModule(), - new NestedDataModule(), - new DiscoveryModule(), - new ServerViewModule(), - new MetadataConfigModule(), - new DerbyMetadataStorageDruidModule(), - new JacksonConfigManagerModule(), - new CoordinatorDiscoveryModule(), - new LocalDataStorageDruidModule(), - new TombstoneDataStorageModule(), - new FirehoseModule(), - new JavaScriptModule(), - new AuthenticatorModule(), - new AuthorizerModule(), - new AuthorizerMapperModule(), - new StartupLoggingModule(), - new ExternalStorageAccessSecurityModule(), - new ServiceClientModule(), - new StorageConnectorModule(), - new SqlModule(), - ServerInjectorBuilder.registerNodeRoleModule(ImmutableSet.of()) - ); - } - - /** - * Closely related to {@link CliBroker#getModules}. - */ - static List brokerModules() - { - return ImmutableList.of( - new BrokerProcessingModule(), - new QueryRunnerFactoryModule(), - new SegmentWranglerModule(), - new JoinableFactoryModule(), - new BrokerServiceModule(), - binder -> { - - binder.bindConstant().annotatedWith(Names.named("serviceName")).to( - TieredBrokerConfig.DEFAULT_BROKER_SERVICE_NAME - ); - binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8082); - binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8282); - binder.bindConstant().annotatedWith(PruneLoadSpec.class).to(true); - binder.bind(ResponseContextConfig.class).toInstance(ResponseContextConfig.newConfig(false)); - - binder.bind(TimelineServerView.class).to(BrokerServerView.class).in(LazySingleton.class); - - JsonConfigProvider.bind(binder, "druid.broker.select", TierSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.select.tier.custom", CustomTierSelectorStrategyConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.balancer", ServerSelectorStrategy.class); - JsonConfigProvider.bind(binder, "druid.broker.retryPolicy", RetryQueryRunnerConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.segment", BrokerSegmentWatcherConfig.class); - JsonConfigProvider.bind(binder, "druid.broker.internal.query.config", InternalQueryConfig.class); - binder.bind(JettyServerInitializer.class).to(QueryJettyServerInitializer.class).in(LazySingleton.class); - - binder.bind(BrokerQueryResource.class).in(LazySingleton.class); - Jerseys.addResource(binder, BrokerQueryResource.class); - binder.bind(SubqueryGuardrailHelper.class).toProvider(SubqueryGuardrailHelperProvider.class); - binder.bind(QueryCountStatsProvider.class).to(BrokerQueryResource.class).in(LazySingleton.class); - binder.bind(SubqueryCountStatsProvider.class).toInstance(new SubqueryCountStatsProvider()); - Jerseys.addResource(binder, BrokerResource.class); - Jerseys.addResource(binder, ClientInfoResource.class); - - LifecycleModule.register(binder, BrokerQueryResource.class); - - LifecycleModule.register(binder, Server.class); - binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); - - binder.bind(String.class) - .annotatedWith(DruidSchemaName.class) - .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - - Jerseys.addResource(binder, SelfDiscoveryResource.class); - LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class)); - } - ); - } -} \ No newline at end of file diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java b/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java deleted file mode 100644 index 2bdfa2aa0386..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/quidem/Launcher.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import org.apache.druid.cli.GuiceRunnable; -import org.apache.druid.java.util.common.lifecycle.Lifecycle; -import org.apache.druid.java.util.common.logger.Logger; -import org.apache.druid.sql.calcite.SqlTestFrameworkConfig; -import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; -import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; -import org.apache.druid.sql.calcite.util.SqlTestFramework; - -public class Launcher -{ - static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore( - x -> new ExposedAsBrokerQueryComponentSupplierWrapper(x) - ); - private static final String QUIDEM_URI = "quidem.uri"; - private static Logger log = new Logger(Launcher.class); - private final SqlTestFramework framework; - private final ConfigurationInstance configurationInstance; - private Lifecycle lifecycle; - - public Launcher(String uri) throws Exception - { - SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL(uri); - configurationInstance = CONFIG_STORE.getConfigurationInstance(config); - framework = configurationInstance.framework; - } - - public void start() - { - lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); - } - - public void shutdown() - { - lifecycle.stop(); - } - - public static void main(String[] args) throws Exception - { - if(true) { - throw new RuntimeException("Asd"); - } - String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); - - Launcher launcher = new Launcher(quidemUri ); - launcher.start(); - launcher.lifecycle.join(); - } -} diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java deleted file mode 100644 index 17d9009994e7..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import com.google.inject.Binder; -import com.google.inject.Module; -import org.apache.druid.guice.Jerseys; - -public class QuidemCaptureModule implements Module -{ - - @Override - public void configure(Binder binder) - { - Jerseys.addResource(binder, QuidemCaptureResource.class); - } -} diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java deleted file mode 100644 index ded57a3fccf4..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -import java.io.IOException; -import java.io.PrintStream; - -@Path("/quidem") -public class QuidemCaptureResource -{ - private QuidemRecorder recorder = null; - - @GET - @Path("/") - @Produces(MediaType.TEXT_PLAIN) - public String getSome() - { - return "Asd"; - } - - @GET - @Path("/start") - @Produces(MediaType.TEXT_PLAIN) - public synchronized String getSome1() throws IOException - { - stopIfRunning(); - start(); - return recorder.toString(); - } - - private void start() throws IOException - { - recorder = new QuidemRecorder(new PrintStream("/tmp/new.iq")); - } - - private void stopIfRunning() - { - if (recorder != null) { - recorder.close(); - recorder = null; - } - - } -} diff --git a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java deleted file mode 100644 index 5c1813b81e4a..000000000000 --- a/integration-tests/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import org.apache.druid.sql.calcite.run.DruidHook; - -import java.io.PrintStream; - -public class QuidemRecorder implements AutoCloseable, DruidHook -{ - private PrintStream printStream; - - public QuidemRecorder(PrintStream printStream) - { - this.printStream = printStream; - printStream.println("#started"); - printStream.println("!connect druidtest:///"); - DruidHook.register(DruidHook.SQL, this); - } - - @Override - public void close() - { - DruidHook.unregister(DruidHook.SQL, this); - } - - @Override - public void invoke(HookKey key, T object) - { - if (DruidHook.SQL.equals(key)) { - printStream.print(object); - printStream.println(";"); - printStream.println("!ok"); - return; - } - } -} diff --git a/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java deleted file mode 100644 index 25f031cfc6ce..000000000000 --- a/integration-tests/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.druid.quidem; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpRequest.BodyPublishers; -import java.net.http.HttpResponse; -import static org.testng.Assert.assertEquals; - -public class LauncherSmokeTest -{ - private static Launcher launcher; - - @BeforeClass - public static void setUp() throws Exception - { - launcher = new Launcher("druidtest:///"); - launcher.start(); - } - - @AfterClass - public static void tearDown() - { - launcher.shutdown(); - } - - @Test - public void chkSelectFromFoo() throws IOException, InterruptedException - { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/druid/v2/sql")) - .header("Content-Type", "application/json") - .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) - .build(); - HttpClient hc = HttpClient.newHttpClient(); - HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); - assertEquals(200, a.statusCode()); - } - - @Test - public void chkStatusWorks() throws IOException, InterruptedException - { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/status")) - .header("Content-Type", "application/json") - .GET() - .build(); - HttpClient hc = HttpClient.newHttpClient(); - HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); - assertEquals(200, a.statusCode()); - } -} From 0bcfec4c533934ca7124a3f0286c003a8f71a2b5 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 10 Jun 2024 14:05:03 +0000 Subject: [PATCH 058/122] trial --- quidem-it/pom.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 199778ccb5b3..c5312bc34b27 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -501,15 +501,18 @@ -classpath - -Dquidem.uri=Xa + -Dquidem.uriXXX=Xa + + + org.apache.druid.quidem.Launcher - + - quidem.uri - myvalue - + quidem.uri1 + myvalue + From 2fbd7fe47b9005993655d90066178ce8b46ab2af Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 11 Jun 2024 14:08:36 +0000 Subject: [PATCH 059/122] add --- pom.xml | 5 +- quidem-it/pom.xml | 15 +- .../druid/quidem/LauncherSmokeTest.java | 150 +++++++++--------- 3 files changed, 85 insertions(+), 85 deletions(-) diff --git a/pom.xml b/pom.xml index 03486d8fdc60..25b13aaa63a9 100644 --- a/pom.xml +++ b/pom.xml @@ -72,8 +72,7 @@ 1.8 1.8 - - 11 + 8 UTF-8 0.9.0.M2 5.3.0 @@ -98,7 +97,7 @@ 2.20.0 8.5.4 32.0.1-jre - 4.1.0 + 4.2.3 1.3 9.4.54.v20240208 1.19.4 diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index c5312bc34b27..f936aeb705ed 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -353,7 +353,6 @@ com.google.inject.extensions guice-servlet - ${guice.version} io.confluent @@ -427,11 +426,11 @@ true - - org.easymock - easymock - test - + + org.easymock + easymock + compile + @@ -473,13 +472,15 @@ datasketches-java runtime - + org.hamcrest hamcrest-all + compile org.hamcrest hamcrest-core + compile diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java index 3f640f07d534..ecfc9c4cb841 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java @@ -1,75 +1,75 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.druid.quidem; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpRequest.BodyPublishers; -import java.net.http.HttpResponse; -import static org.junit.Assert.assertEquals; - -public class LauncherSmokeTest -{ - private static Launcher launcher; - - @BeforeClass - public static void setUp() throws Exception - { - launcher = new Launcher("druidtest:///"); - launcher.start(); - } - - @AfterClass - public static void tearDown() - { - launcher.shutdown(); - } - - @Test - public void chkSelectFromFoo() throws IOException, InterruptedException - { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/druid/v2/sql")) - .header("Content-Type", "application/json") - .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) - .build(); - HttpClient hc = HttpClient.newHttpClient(); - HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); - assertEquals(200, a.statusCode()); - } - - @Test - public void chkStatusWorks() throws IOException, InterruptedException - { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("http://localhost:12345/status")) - .header("Content-Type", "application/json") - .GET() - .build(); - HttpClient hc = HttpClient.newHttpClient(); - HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); - assertEquals(200, a.statusCode()); - } -} +///* +// * Licensed to the Apache Software Foundation (ASF) under one +// * or more contributor license agreements. See the NOTICE file +// * distributed with this work for additional information +// * regarding copyright ownership. The ASF licenses this file +// * to you under the Apache License, Version 2.0 (the +// * "License"); you may not use this file except in compliance +// * with the License. You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, +// * software distributed under the License is distributed on an +// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// * KIND, either express or implied. See the License for the +// * specific language governing permissions and limitations +// * under the License. +// */ +//package org.apache.druid.quidem; +// +//import org.junit.AfterClass; +//import org.junit.BeforeClass; +//import org.junit.Test; +// +//import java.io.IOException; +//import java.net.URI; +//import java.net.http.HttpClient; +//import java.net.http.HttpRequest; +//import java.net.http.HttpRequest.BodyPublishers; +//import java.net.http.HttpResponse; +//import static org.junit.Assert.assertEquals; +// +//public class LauncherSmokeTest +//{ +// private static Launcher launcher; +// +// @BeforeClass +// public static void setUp() throws Exception +// { +// launcher = new Launcher("druidtest:///"); +// launcher.start(); +// } +// +// @AfterClass +// public static void tearDown() +// { +// launcher.shutdown(); +// } +// +// @Test +// public void chkSelectFromFoo() throws IOException, InterruptedException +// { +// HttpRequest request = HttpRequest.newBuilder() +// .uri(URI.create("http://localhost:12345/druid/v2/sql")) +// .header("Content-Type", "application/json") +// .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) +// .build(); +// HttpClient hc = HttpClient.newHttpClient(); +// HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); +// assertEquals(200, a.statusCode()); +// } +// +// @Test +// public void chkStatusWorks() throws IOException, InterruptedException +// { +// HttpRequest request = HttpRequest.newBuilder() +// .uri(URI.create("http://localhost:12345/status")) +// .header("Content-Type", "application/json") +// .GET() +// .build(); +// HttpClient hc = HttpClient.newHttpClient(); +// HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); +// assertEquals(200, a.statusCode()); +// } +//} From 298a470713e5ae1f33e7d2c80e4af25b17c692e3 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 11 Jun 2024 14:18:47 +0000 Subject: [PATCH 060/122] try w/o upgrade guice --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 25b13aaa63a9..2fa06f8e817b 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ 2.20.0 8.5.4 32.0.1-jre - 4.2.3 + 4.1.0 1.3 9.4.54.v20240208 1.19.4 From 002c3056d47ad58d1dcb72a4775ed201a0eb5e55 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 11 Jun 2024 15:14:08 +0000 Subject: [PATCH 061/122] make test indep from java11 --- .../druid/quidem/LauncherSmokeTest.java | 151 +++++++++--------- 1 file changed, 76 insertions(+), 75 deletions(-) diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java index ecfc9c4cb841..4e6757637aa0 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java @@ -1,75 +1,76 @@ -///* -// * Licensed to the Apache Software Foundation (ASF) under one -// * or more contributor license agreements. See the NOTICE file -// * distributed with this work for additional information -// * regarding copyright ownership. The ASF licenses this file -// * to you under the Apache License, Version 2.0 (the -// * "License"); you may not use this file except in compliance -// * with the License. You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, -// * software distributed under the License is distributed on an -// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// * KIND, either express or implied. See the License for the -// * specific language governing permissions and limitations -// * under the License. -// */ -//package org.apache.druid.quidem; -// -//import org.junit.AfterClass; -//import org.junit.BeforeClass; -//import org.junit.Test; -// -//import java.io.IOException; -//import java.net.URI; -//import java.net.http.HttpClient; -//import java.net.http.HttpRequest; -//import java.net.http.HttpRequest.BodyPublishers; -//import java.net.http.HttpResponse; -//import static org.junit.Assert.assertEquals; -// -//public class LauncherSmokeTest -//{ -// private static Launcher launcher; -// -// @BeforeClass -// public static void setUp() throws Exception -// { -// launcher = new Launcher("druidtest:///"); -// launcher.start(); -// } -// -// @AfterClass -// public static void tearDown() -// { -// launcher.shutdown(); -// } -// -// @Test -// public void chkSelectFromFoo() throws IOException, InterruptedException -// { -// HttpRequest request = HttpRequest.newBuilder() -// .uri(URI.create("http://localhost:12345/druid/v2/sql")) -// .header("Content-Type", "application/json") -// .POST(BodyPublishers.ofString("{\"query\":\"Select * from foo\"}")) -// .build(); -// HttpClient hc = HttpClient.newHttpClient(); -// HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); -// assertEquals(200, a.statusCode()); -// } -// -// @Test -// public void chkStatusWorks() throws IOException, InterruptedException -// { -// HttpRequest request = HttpRequest.newBuilder() -// .uri(URI.create("http://localhost:12345/status")) -// .header("Content-Type", "application/json") -// .GET() -// .build(); -// HttpClient hc = HttpClient.newHttpClient(); -// HttpResponse a = hc.send(request, HttpResponse.BodyHandlers.ofString()); -// assertEquals(200, a.statusCode()); -// } -//} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.druid.quidem; + +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.IOException; +import static org.junit.Assert.assertEquals; + +public class LauncherSmokeTest +{ + private static Launcher launcher; + + @BeforeClass + public static void setUp() throws Exception + { + launcher = new Launcher("druidtest:///"); + launcher.start(); + } + + @AfterClass + public static void tearDown() + { + launcher.shutdown(); + } + + @Test + public void chkSelectFromFoo() throws IOException, InterruptedException + { + CloseableHttpClient client = HttpClients.createDefault(); + HttpPost request = new HttpPost("http://localhost:12345/druid/v2/sql"); + request.addHeader("Content-Type", "application/json"); + request.setEntity(new StringEntity("{\"query\":\"Select * from foo\"}")); + CloseableHttpResponse response = client.execute(request); + assertEquals(200, response.getStatusLine().getStatusCode()); + } + + @Test + public void chkStatusWorks() throws IOException, InterruptedException + { + CloseableHttpClient client = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:12345/status"); + request.addHeader("Content-Type", "application/json"); + CloseableHttpResponse response = client.execute(request); + assertEquals(200, response.getStatusLine().getStatusCode()); + String responseStr = EntityUtils.toString(response.getEntity()); + MatcherAssert.assertThat(responseStr, Matchers.containsString("\"version\":\"")); + } +} From 6c6053eee06dc974b9389c7ca58850c71849c946 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 11 Jun 2024 15:22:52 +0000 Subject: [PATCH 062/122] cleanup --- .../ExposedAsBrokerQueryComponentSupplierWrapper.java | 2 +- .../src/main/java/org/apache/druid/quidem/Launcher.java | 7 +------ .../java/org/apache/druid/quidem/LauncherSmokeTest.java | 2 ++ 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index 9f4c8bb59844..b1a8ea63796c 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -370,4 +370,4 @@ static List brokerModules() } ); } -} \ No newline at end of file +} diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index 2f32fba39cdb..f5245e68aba6 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -59,10 +59,9 @@ public void shutdown() public static void main(String[] args) throws Exception { - try { String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); Properties p = System.getProperties(); - for ( Object string : p.keySet()) { + for (Object string : p.keySet()) { log.info("[%s] -> %s", string, p.get(string)); } log.info("Starting Quidem with URI[%s]", quidemUri); @@ -70,9 +69,5 @@ public static void main(String[] args) throws Exception Launcher launcher = new Launcher(quidemUri); launcher.start(); launcher.lifecycle.join(); - } catch (Exception e) { - e.printStackTrace(); - - } } } diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java index 4e6757637aa0..c00f72b7fe3b 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.druid.quidem; import org.apache.http.client.methods.CloseableHttpResponse; @@ -32,6 +33,7 @@ import org.junit.Test; import java.io.IOException; + import static org.junit.Assert.assertEquals; public class LauncherSmokeTest From 7a65938fd6ce27aea63817734cbd10c465758d69 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 11 Jun 2024 15:55:55 +0000 Subject: [PATCH 063/122] use druidhook instead Hook --- .../apache/druid/quidem/QuidemRecorder.java | 6 ++--- .../calcite/planner/CalciteRulesManager.java | 4 +-- .../sql/calcite/planner/QueryHandler.java | 8 +++--- .../druid/sql/calcite/run/DruidHook.java | 10 +++++--- .../quidem/DruidQuidemCommandHandler.java | 25 +++++++++++-------- 5 files changed, 30 insertions(+), 23 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 5c1813b81e4a..5e3267225bbe 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -23,7 +23,7 @@ import java.io.PrintStream; -public class QuidemRecorder implements AutoCloseable, DruidHook +public class QuidemRecorder implements AutoCloseable, DruidHook { private PrintStream printStream; @@ -42,10 +42,10 @@ public void close() } @Override - public void invoke(HookKey key, T object) + public void invoke(HookKey key, String query) { if (DruidHook.SQL.equals(key)) { - printStream.print(object); + printStream.print(query); printStream.println(";"); printStream.println("!ok"); return; diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java index 829c44b18c60..8b0fc163174e 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java @@ -40,7 +40,6 @@ import org.apache.calcite.rel.rules.JoinPushThroughJoinRule; import org.apache.calcite.rel.rules.ProjectMergeRule; import org.apache.calcite.rel.rules.PruneEmptyRules; -import org.apache.calcite.runtime.Hook; import org.apache.calcite.sql.SqlExplainFormat; import org.apache.calcite.sql.SqlExplainLevel; import org.apache.calcite.sql2rel.RelDecorrelator; @@ -68,6 +67,7 @@ import org.apache.druid.sql.calcite.rule.SortCollapseRule; import org.apache.druid.sql.calcite.rule.logical.DruidAggregateRemoveRedundancyRule; import org.apache.druid.sql.calcite.rule.logical.DruidLogicalRules; +import org.apache.druid.sql.calcite.run.DruidHook; import org.apache.druid.sql.calcite.run.EngineFeature; import java.util.ArrayList; @@ -386,7 +386,7 @@ private static class SaveLogicalPlanProgram implements Program public RelNode run(RelOptPlanner planner, RelNode rel, RelTraitSet requiredOutputTraits, List materializations, List lattices) { - Hook.TRIMMED.run(rel); + DruidHook.dispatch(DruidHook.LOGICAL_PLAN, rel); return rel; } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java index 9f15d3822866..41b03760c1c4 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java @@ -47,7 +47,6 @@ import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexNode; -import org.apache.calcite.runtime.Hook; import org.apache.calcite.schema.ScannableTable; import org.apache.calcite.sql.SqlExplain; import org.apache.calcite.sql.SqlNode; @@ -73,6 +72,7 @@ import org.apache.druid.sql.calcite.rel.DruidUnionRel; import org.apache.druid.sql.calcite.rel.logical.DruidLogicalConvention; import org.apache.druid.sql.calcite.rel.logical.DruidLogicalNode; +import org.apache.druid.sql.calcite.run.DruidHook; import org.apache.druid.sql.calcite.run.EngineFeature; import org.apache.druid.sql.calcite.run.QueryMaker; import org.apache.druid.sql.calcite.table.DruidTable; @@ -155,7 +155,7 @@ public void prepare() isPrepared = true; SqlNode validatedQueryNode = validatedQueryNode(); rootQueryRel = handlerContext.planner().rel(validatedQueryNode); - Hook.CONVERTED.run(rootQueryRel.rel); + DruidHook.dispatch(DruidHook.CONVERTED_PLAN, rootQueryRel.rel); handlerContext.hook().captureQueryRel(rootQueryRel); final RelDataTypeFactory typeFactory = rootQueryRel.rel.getCluster().getTypeFactory(); final SqlValidator validator = handlerContext.planner().getValidator(); @@ -563,7 +563,7 @@ protected PlannerResult planWithDruidConvention() throws ValidationException .plus(DruidLogicalConvention.instance()), newRoot ); - Hook.JAVA_PLAN.run(newRoot); + DruidHook.dispatch(DruidHook.DRUID_PLAN, newRoot); DruidQueryGenerator generator = new DruidQueryGenerator(plannerContext, (DruidLogicalNode) newRoot, rexBuilder); DruidQuery baseQuery = generator.buildQuery(); @@ -591,7 +591,7 @@ protected PlannerResult planWithDruidConvention() throws ValidationException handlerContext.hook().captureDruidRel(druidRel); - Hook.JAVA_PLAN.run(druidRel); + DruidHook.dispatch(DruidHook.DRUID_PLAN, druidRel); if (explain != null) { return planExplanation(possiblyLimitedRoot, druidRel, true); diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index 809f2d2ea794..b4c6572ecfe3 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -27,7 +27,9 @@ import java.util.Map; import java.util.Objects; -public interface DruidHook +@FunctionalInterface + +public interface DruidHook { static class HookKey { @@ -64,10 +66,12 @@ public boolean equals(Object obj) } + public static final HookKey CONVERTED_PLAN = new HookKey<>("converted", RelNode.class); + public static final HookKey LOGICAL_PLAN = new HookKey<>("logicalPlan", RelNode.class); public static final HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); public static final HookKey SQL = new HookKey<>("sql", String.class); - void invoke(HookKey key, T object); + void invoke(HookKey key, T object); static Map, List> GLOBAL = new HashMap<>(); @@ -81,7 +85,7 @@ public static void unregister(HookKey key, DruidHook hook) GLOBAL.get(key).remove(hook); } - public static Closeable withHook(HookKey key, DruidHook hook) + public static Closeable withHook(HookKey key, DruidHook hook) { register(key, hook); return new Closeable() diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java index 8c2b99d80b6b..dbcd1a9dcafc 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java @@ -34,13 +34,16 @@ import org.apache.druid.query.Query; import org.apache.druid.sql.calcite.BaseCalciteQueryTest; import org.apache.druid.sql.calcite.rel.DruidRel; +import org.apache.druid.sql.calcite.run.DruidHook; +import org.apache.druid.sql.calcite.run.DruidHook.HookKey; import org.apache.druid.sql.calcite.util.QueryLogHook; +import java.io.Closeable; +import java.io.IOException; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; import java.util.stream.Collectors; public class DruidQuidemCommandHandler implements CommandHandler @@ -56,7 +59,7 @@ public Command parseCommand(List lines, List content, String lin return new LogicalPlanCommand(lines, content); } if (line.startsWith("druidPlan")) { - return new PhysicalPlanCommand(lines, content); + return new DruidPlanCommand(lines, content); } if (line.startsWith("nativePlan")) { return new NativePlanCommand(lines, content); @@ -155,19 +158,19 @@ protected void executeExplain(Context x) throws Exception */ abstract static class AbstractRelPlanCommand extends AbstractPlanCommand { - Hook hook; + HookKey hook; - AbstractRelPlanCommand(List lines, List content, Hook hook) + AbstractRelPlanCommand(List lines, List content, DruidHook.HookKey hook) { super(lines, content); this.hook = hook; } @Override - protected final void executeExplain(Context x) + protected final void executeExplain(Context x) throws IOException { List logged = new ArrayList<>(); - try (final Hook.Closeable unhook = hook.add((Consumer) logged::add)) { + try (Closeable unhook = DruidHook.withHook(hook, (key, relNode) -> { logged.add(relNode);})) { executeQuery(x); } @@ -185,15 +188,15 @@ static class LogicalPlanCommand extends AbstractRelPlanCommand { LogicalPlanCommand(List lines, List content) { - super(lines, content, Hook.TRIMMED); + super(lines, content, DruidHook.LOGICAL_PLAN); } } - static class PhysicalPlanCommand extends AbstractRelPlanCommand + static class DruidPlanCommand extends AbstractRelPlanCommand { - PhysicalPlanCommand(List lines, List content) + DruidPlanCommand(List lines, List content) { - super(lines, content, Hook.JAVA_PLAN); + super(lines, content, DruidHook.DRUID_PLAN); } } @@ -201,7 +204,7 @@ static class ConvertedPlanCommand extends AbstractRelPlanCommand { ConvertedPlanCommand(List lines, List content) { - super(lines, content, Hook.CONVERTED); + super(lines, content, DruidHook.CONVERTED_PLAN); } } } From 47696a610821d13e064612dd4a711bc3761ca465 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 17 Jun 2024 13:05:11 +0000 Subject: [PATCH 064/122] updates --- .../druid/quidem/QuidemCaptureResource.java | 14 +++++++++++++- .../org/apache/druid/quidem/QuidemRecorder.java | 5 +++-- .../druid/sql/calcite/util/SqlTestFramework.java | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index ded57a3fccf4..1358254d7600 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -19,6 +19,9 @@ package org.apache.druid.quidem; +import com.google.inject.Inject; + +import javax.inject.Named; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -26,10 +29,19 @@ import java.io.IOException; import java.io.PrintStream; +import java.net.URI; @Path("/quidem") public class QuidemCaptureResource { + private URI quidemURI; + + @Inject + public QuidemCaptureResource(@Named("quidem") URI quidemURI) + { + this.quidemURI = quidemURI; + } + private QuidemRecorder recorder = null; @GET @@ -52,7 +64,7 @@ public synchronized String getSome1() throws IOException private void start() throws IOException { - recorder = new QuidemRecorder(new PrintStream("/tmp/new.iq")); + recorder = new QuidemRecorder(quidemURI, new PrintStream("/tmp/new.iq")); } private void stopIfRunning() diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 5e3267225bbe..38898ca66850 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -22,16 +22,17 @@ import org.apache.druid.sql.calcite.run.DruidHook; import java.io.PrintStream; +import java.net.URI; public class QuidemRecorder implements AutoCloseable, DruidHook { private PrintStream printStream; - public QuidemRecorder(PrintStream printStream) + public QuidemRecorder(URI quidemURI, PrintStream printStream) { this.printStream = printStream; printStream.println("#started"); - printStream.println("!connect druidtest:///"); + printStream.println("!connect " + quidemURI.toString()); DruidHook.register(DruidHook.SQL, this); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index c0a0a8c42d9a..ed6b680567d8 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -70,6 +70,8 @@ import org.apache.druid.sql.calcite.view.ViewManager; import org.apache.druid.timeline.DataSegment; +import javax.inject.Named; + import java.io.Closeable; import java.io.IOException; import java.net.URI; @@ -628,6 +630,19 @@ public DruidSchemaCatalog makeCatalog( ); return rootSchema; } + + @Provides + SqlTestFrameworkConfig getTestConfig() + { + return builder.config; + } + + @Provides + @Named("quidem") + public URI getDruidTestURI() + { + return getTestConfig().getDruidTestURI(); + } } public static final DruidViewMacroFactory DRUID_VIEW_MACRO_FACTORY = new TestDruidViewMacroFactory(); From a9952292f2b85c4d00ab78f5f3c22f47f4216e72 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 17 Jun 2024 13:44:01 +0000 Subject: [PATCH 065/122] cleanup --- .../druid/quidem/QuidemCaptureResource.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index 1358254d7600..c50dbb219a48 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -35,39 +35,38 @@ public class QuidemCaptureResource { private URI quidemURI; + private QuidemRecorder recorder = null; @Inject public QuidemCaptureResource(@Named("quidem") URI quidemURI) { this.quidemURI = quidemURI; + if (withAutoStart()) { + try { + start(); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } } - private QuidemRecorder recorder = null; - - @GET - @Path("/") - @Produces(MediaType.TEXT_PLAIN) - public String getSome() + private boolean withAutoStart() { - return "Asd"; + return Boolean.valueOf(System.getProperty("quidem.autostart", "false")); } @GET @Path("/start") @Produces(MediaType.TEXT_PLAIN) - public synchronized String getSome1() throws IOException + public synchronized String start() throws IOException { stopIfRunning(); - start(); - return recorder.toString(); - } - - private void start() throws IOException - { recorder = new QuidemRecorder(quidemURI, new PrintStream("/tmp/new.iq")); + return recorder.toString(); } - private void stopIfRunning() + private synchronized void stopIfRunning() { if (recorder != null) { recorder.close(); From e06e54631e4b25ca3678d53a9c47216f814269ef Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 17 Jun 2024 14:26:48 +0000 Subject: [PATCH 066/122] fix style; emitter --- ...ExposedAsBrokerQueryComponentSupplierWrapper.java | 6 ++---- .../apache/druid/quidem/QuidemCaptureResource.java | 7 +++++-- .../java/org/apache/druid/quidem/QuidemRecorder.java | 12 ++++++++++-- .../org/apache/druid/sql/calcite/run/DruidHook.java | 9 ++++----- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index b1a8ea63796c..097b7df95c20 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -77,7 +77,6 @@ import org.apache.druid.initialization.ServerInjectorBuilder; import org.apache.druid.initialization.TombstoneDataStorageModule; import org.apache.druid.java.util.common.io.Closer; -import org.apache.druid.java.util.emitter.service.ServiceEmitter; import org.apache.druid.metadata.storage.derby.DerbyMetadataStorageDruidModule; import org.apache.druid.query.QueryRunnerFactoryConglomerate; import org.apache.druid.query.QuerySegmentWalker; @@ -96,6 +95,7 @@ import org.apache.druid.server.SubqueryGuardrailHelper; import org.apache.druid.server.SubqueryGuardrailHelperProvider; import org.apache.druid.server.coordination.ServerType; +import org.apache.druid.server.emitter.EmitterModule; import org.apache.druid.server.http.BrokerResource; import org.apache.druid.server.http.SelfDiscoveryResource; import org.apache.druid.server.initialization.AuthorizerMapperModule; @@ -104,7 +104,6 @@ import org.apache.druid.server.initialization.jetty.JettyServerModule; import org.apache.druid.server.log.NoopRequestLogger; import org.apache.druid.server.log.RequestLogger; -import org.apache.druid.server.metrics.NoopServiceEmitter; import org.apache.druid.server.metrics.QueryCountStatsProvider; import org.apache.druid.server.metrics.SubqueryCountStatsProvider; import org.apache.druid.server.router.TieredBrokerConfig; @@ -226,7 +225,6 @@ protected void configure() bind(String.class) .annotatedWith(DruidSchemaName.class) .toInstance(CalciteTests.DRUID_SCHEMA_NAME); - bind(ServiceEmitter.class).to(NoopServiceEmitter.class); bind(QuerySchedulerProvider.class).in(LazySingleton.class); bind(CalciteRulesManager.class).toInstance(new CalciteRulesManager(ImmutableSet.of())); bind(CatalogResolver.class).toInstance(CatalogResolver.NULL_RESOLVER); @@ -282,7 +280,7 @@ private void installForServerModules(CoreInjectorBuilder builder) ExtensionsModule.SecondaryModule.class, new DruidAuthModule(), TLSCertificateCheckerModule.class, - // EmitterModule.class, + EmitterModule.class, HttpClientModule.global(), HttpClientModule.escalatedGlobal(), new HttpClientModule("druid.broker.http", Client.class, true), diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index c50dbb219a48..d6bf48e8836d 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -27,8 +27,8 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import java.io.FileOutputStream; import java.io.IOException; -import java.io.PrintStream; import java.net.URI; @Path("/quidem") @@ -62,7 +62,10 @@ private boolean withAutoStart() public synchronized String start() throws IOException { stopIfRunning(); - recorder = new QuidemRecorder(quidemURI, new PrintStream("/tmp/new.iq")); + recorder = new QuidemRecorder( + quidemURI, + new FileOutputStream("/tmp/new.iq") + ); return recorder.toString(); } diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 38898ca66850..ec75d6cef0b0 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -21,16 +21,24 @@ import org.apache.druid.sql.calcite.run.DruidHook; +import java.io.FileOutputStream; import java.io.PrintStream; +import java.io.UnsupportedEncodingException; import java.net.URI; +import java.nio.charset.StandardCharsets; public class QuidemRecorder implements AutoCloseable, DruidHook { private PrintStream printStream; - public QuidemRecorder(URI quidemURI, PrintStream printStream) + public QuidemRecorder(URI quidemURI, FileOutputStream fileOutputStream) { - this.printStream = printStream; + try { + this.printStream = new PrintStream(fileOutputStream, true, StandardCharsets.UTF_8.name()); + } + catch (UnsupportedEncodingException e) { + throw new RuntimeException(); + } printStream.println("#started"); printStream.println("!connect " + quidemURI.toString()); DruidHook.register(DruidHook.SQL, this); diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index b4c6572ecfe3..077c803829f9 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -28,7 +28,6 @@ import java.util.Objects; @FunctionalInterface - public interface DruidHook { static class HookKey @@ -73,14 +72,14 @@ public boolean equals(Object obj) void invoke(HookKey key, T object); - static Map, List> GLOBAL = new HashMap<>(); + static Map, List>> GLOBAL = new HashMap<>(); - public static void register(HookKey label, DruidHook hook) + static void register(HookKey label, DruidHook hook) { GLOBAL.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); } - public static void unregister(HookKey key, DruidHook hook) + static void unregister(HookKey key, DruidHook hook) { GLOBAL.get(key).remove(hook); } @@ -100,7 +99,7 @@ public void close() public static void dispatch(HookKey key, T object) { - List hooks = GLOBAL.get(key); + List> hooks = GLOBAL.get(key); if (hooks != null) { for (DruidHook hook : hooks) { hook.invoke(key, object); From 7eccf5b5184e697b896b6d4d9e8cdeddcfc28456 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 17 Jun 2024 15:42:48 +0000 Subject: [PATCH 067/122] add some validation/etc --- quidem-it/pom.xml | 68 ++++++++----------- .../org/apache/druid/quidem/Launcher.java | 8 ++- .../druid/quidem/QuidemCaptureResource.java | 2 +- .../druid/quidem/DruidAvaticaTestDriver.java | 3 +- .../sql/calcite/SqlTestFrameworkConfig.java | 13 +++- 5 files changed, 51 insertions(+), 43 deletions(-) diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index f936aeb705ed..889b454cd686 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -18,7 +18,9 @@ ~ under the License. --> - + 4.0.0 druid-quidem-it @@ -420,24 +422,24 @@ ${project.parent.version} - - org.slf4j - slf4j-simple - true - + + org.slf4j + slf4j-simple + true + - org.easymock - easymock - compile + org.easymock + easymock + compile - - org.junit.jupiter - junit-jupiter - + + org.junit.jupiter + junit-jupiter + org.junit.vintage junit-vintage-engine @@ -472,16 +474,16 @@ datasketches-java runtime - - org.hamcrest - hamcrest-all - compile - - - org.hamcrest - hamcrest-core - compile - + + org.hamcrest + hamcrest-all + compile + + + org.hamcrest + hamcrest-core + compile + @@ -500,23 +502,13 @@ java - -classpath - - -Dquidem.uriXXX=Xa - - - - org.apache.druid.quidem.Launcher + -classpath + + -Dquidem.uri=${quidem.uri} + org.apache.druid.quidem.Launcher - - - - quidem.uri1 - myvalue - - - + \ No newline at end of file diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index f5245e68aba6..47dc1fe8e52f 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -43,7 +43,9 @@ public class Launcher public Launcher(String uri) throws Exception { SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL(uri); + System.out.println("Config: " + config); configurationInstance = CONFIG_STORE.getConfigurationInstance(config); + System.out.println("Configuration instance: " + configurationInstance); framework = configurationInstance.framework; } @@ -62,11 +64,13 @@ public static void main(String[] args) throws Exception String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); Properties p = System.getProperties(); for (Object string : p.keySet()) { - log.info("[%s] -> %s", string, p.get(string)); + if (string.toString().startsWith("quidem")) { + log.info("[%s] -> %s", string, p.get(string)); + } } log.info("Starting Quidem with URI[%s]", quidemUri); - Launcher launcher = new Launcher(quidemUri); + System.exit(1); launcher.start(); launcher.lifecycle.join(); } diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index d6bf48e8836d..87cd8dfc54d9 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -64,7 +64,7 @@ public synchronized String start() throws IOException stopIfRunning(); recorder = new QuidemRecorder( quidemURI, - new FileOutputStream("/tmp/new.iq") + new FileOutputStream("new1.iq") ); return recorder.toString(); } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java index ff1db3b6cfd9..7f6da23005a5 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java @@ -90,7 +90,8 @@ public class DruidAvaticaTestDriver implements Driver new DruidAvaticaTestDriver().register(); } - public static final String URI_PREFIX = "druidtest://"; + public static final String SCHEME = "druidtest"; + public static final String URI_PREFIX = SCHEME + "://"; public static final String DEFAULT_URI = URI_PREFIX + "/"; static final SqlTestFrameworkConfigStore CONFIG_STORE = new SqlTestFrameworkConfigStore( diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 29e0a878ccbf..f4e075440fe2 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -31,6 +31,7 @@ import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.query.topn.TopNQueryConfig; +import org.apache.druid.quidem.DruidAvaticaTestDriver; import org.apache.druid.sql.calcite.util.CacheTestHelperModule.ResultCacheMode; import org.apache.druid.sql.calcite.util.SqlTestFramework; import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; @@ -419,10 +420,20 @@ private Map getNonDefaultMap() public static SqlTestFrameworkConfig fromURL(String url) throws SQLException { + Map queryParams; queryParams = new HashMap<>(); try { - List params = URLEncodedUtils.parse(new URI(url), StandardCharsets.UTF_8); + URI uri = new URI(url); + if (!DruidAvaticaTestDriver.SCHEME.equals(uri.getScheme())) { + throw new SQLException( + StringUtils.format("URI [%s] is invalid ; only scheme [%s] is supported.", url, DruidAvaticaTestDriver.SCHEME) + ); + } + if (uri.getHost() != null || uri.getPort() != -1) { + throw new SQLException(StringUtils.format("URI [%s] is invalid ; only query parameters are supported.", url)); + } + List params = URLEncodedUtils.parse(uri, StandardCharsets.UTF_8); for (NameValuePair pair : params) { queryParams.put(pair.getName(), pair.getValue()); } From f5720ce97d90dd5a055910c7bcb883e2514567c4 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 17 Jun 2024 16:05:29 +0000 Subject: [PATCH 068/122] u --- quidem-it/new1.iq | 2 + quidem-it/pom.xml | 6 ++- .../druid/quidem/QuidemCaptureResource.java | 22 +++++++++- .../java/org/apache/druid/quidem/QTest.java | 41 +++++++++++++++++++ .../druid/quidem/DruidQuidemTestBase.java | 8 ++++ .../apache/druid/quidem/SqlQuidemTest.java | 10 ----- 6 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 quidem-it/new1.iq create mode 100644 quidem-it/src/test/java/org/apache/druid/quidem/QTest.java diff --git a/quidem-it/new1.iq b/quidem-it/new1.iq new file mode 100644 index 000000000000..24a6bf6bc419 --- /dev/null +++ b/quidem-it/new1.iq @@ -0,0 +1,2 @@ +#started +!connect druidtest:/// diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 889b454cd686..cb6192cc3f9f 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -330,6 +330,11 @@ com.github.docker-java docker-java-core + + com.github.javafaker + javafaker + 1.0.2 + io.netty netty-transport-native-kqueue @@ -484,7 +489,6 @@ hamcrest-core compile - diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index 87cd8dfc54d9..cd1001132b66 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -19,7 +19,10 @@ package org.apache.druid.quidem; +import com.github.javafaker.Faker; +import com.github.javafaker.Pokemon; import com.google.inject.Inject; +import org.apache.hadoop.util.StringUtils; import javax.inject.Named; import javax.ws.rs.GET; @@ -27,6 +30,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; @@ -53,7 +57,7 @@ public QuidemCaptureResource(@Named("quidem") URI quidemURI) private boolean withAutoStart() { - return Boolean.valueOf(System.getProperty("quidem.autostart", "false")); + return Boolean.valueOf(System.getProperty("quidem.record.autostart", "false")); } @GET @@ -64,11 +68,25 @@ public synchronized String start() throws IOException stopIfRunning(); recorder = new QuidemRecorder( quidemURI, - new FileOutputStream("new1.iq") + new FileOutputStream(extracted()) ); return recorder.toString(); } + private File extracted() + { + File dir = QTest.testRoot(); + Pokemon pokemon = Faker.instance().pokemon(); + String fileName = StringUtils.format("quidem-%s.txt", pokemon.name()); + return new File(dir, fileName); + } + public static void main(String[] args) + { + Pokemon pokemon = Faker.instance().pokemon(); + System.out.println(Faker.instance().aviation().aircraft()); + + } + private synchronized void stopIfRunning() { if (recorder != null) { diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java new file mode 100644 index 000000000000..3d04fbe166df --- /dev/null +++ b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import java.io.File; + +public class QTest extends DruidQuidemTestBase +{ + public QTest() + { + super(); + } + + @Override + protected File getTestRoot() + { + return testRoot(); + } + + public static File testRoot() + { + return ProjectPathUtils.getPathFromProjectRoot("quidem-it/src/test/quidem/" + QTest.class.getName()); + } +} diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java index 6058cb2a8bdb..703806d22444 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java @@ -29,12 +29,14 @@ import org.apache.calcite.util.Util; import org.apache.commons.io.filefilter.TrueFileFilter; import org.apache.commons.io.filefilter.WildcardFileFilter; +import org.apache.druid.common.config.NullHandling; import org.apache.druid.java.util.common.FileUtils; import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.RE; import org.apache.druid.java.util.common.StringUtils; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.condition.EnabledIf; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -76,8 +78,14 @@ * */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) +@EnabledIf(value = "enabled", disabledReason = "These tests are only run in SqlCompatible mode!") public abstract class DruidQuidemTestBase { + public static boolean enabled() + { + NullHandling.initializeForTests(); + return NullHandling.sqlCompatible(); + } public static final String IQ_SUFFIX = ".iq"; /** diff --git a/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java b/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java index d1922472d7f3..9e6a965891ce 100644 --- a/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java +++ b/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java @@ -19,20 +19,10 @@ package org.apache.druid.quidem; -import org.apache.druid.common.config.NullHandling; -import org.junit.jupiter.api.condition.EnabledIf; - import java.io.File; -@EnabledIf(value = "enabled", disabledReason = "These tests are only run in SqlCompatible mode!") public class SqlQuidemTest extends DruidQuidemTestBase { - public static boolean enabled() - { - NullHandling.initializeForTests(); - return NullHandling.sqlCompatible(); - } - public SqlQuidemTest() { super(); From 6dd62fb7c6bb122fbdbf0537f50cf1a9a8b847ee Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 17 Jun 2024 16:25:03 +0000 Subject: [PATCH 069/122] updates --- quidem-it/pom.xml | 5 --- .../org/apache/druid/quidem/Launcher.java | 1 - .../druid/quidem/QuidemCaptureResource.java | 33 +++++-------------- .../apache/druid/quidem/QuidemRecorder.java | 13 +++++--- .../java/org/apache/druid/quidem/QTest.java | 14 ++++---- .../record-1718641409720.txt | 4 +++ 6 files changed, 29 insertions(+), 41 deletions(-) create mode 100644 quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index cb6192cc3f9f..6cd43fbb0e71 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -330,11 +330,6 @@ com.github.docker-java docker-java-core - - com.github.javafaker - javafaker - 1.0.2 - io.netty netty-transport-native-kqueue diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index 47dc1fe8e52f..13ac09232ae5 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -70,7 +70,6 @@ public static void main(String[] args) throws Exception } log.info("Starting Quidem with URI[%s]", quidemUri); Launcher launcher = new Launcher(quidemUri); - System.exit(1); launcher.start(); launcher.lifecycle.join(); } diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index cd1001132b66..174dac226644 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -19,10 +19,8 @@ package org.apache.druid.quidem; -import com.github.javafaker.Faker; -import com.github.javafaker.Pokemon; import com.google.inject.Inject; -import org.apache.hadoop.util.StringUtils; +import org.apache.druid.java.util.common.StringUtils; import javax.inject.Named; import javax.ws.rs.GET; @@ -31,13 +29,13 @@ import javax.ws.rs.core.MediaType; import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; import java.net.URI; @Path("/quidem") public class QuidemCaptureResource { + public static final File RECORD_PATH = ProjectPathUtils + .getPathFromProjectRoot("quidem-it/src/test/quidem/org.apache.druid.quidem.QTest"); private URI quidemURI; private QuidemRecorder recorder = null; @@ -46,12 +44,7 @@ public QuidemCaptureResource(@Named("quidem") URI quidemURI) { this.quidemURI = quidemURI; if (withAutoStart()) { - try { - start(); - } - catch (IOException e) { - throw new RuntimeException(e); - } + start(); } } @@ -63,28 +56,20 @@ private boolean withAutoStart() @GET @Path("/start") @Produces(MediaType.TEXT_PLAIN) - public synchronized String start() throws IOException + public synchronized String start() { stopIfRunning(); recorder = new QuidemRecorder( quidemURI, - new FileOutputStream(extracted()) + genRecordFilePath() ); return recorder.toString(); } - private File extracted() + private File genRecordFilePath() { - File dir = QTest.testRoot(); - Pokemon pokemon = Faker.instance().pokemon(); - String fileName = StringUtils.format("quidem-%s.txt", pokemon.name()); - return new File(dir, fileName); - } - public static void main(String[] args) - { - Pokemon pokemon = Faker.instance().pokemon(); - System.out.println(Faker.instance().aviation().aircraft()); - + String fileName = StringUtils.format("record-%d.txt", System.currentTimeMillis()); + return new File(RECORD_PATH, fileName); } private synchronized void stopIfRunning() diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index ec75d6cef0b0..7ecf337546c0 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -21,25 +21,28 @@ import org.apache.druid.sql.calcite.run.DruidHook; +import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.net.URI; import java.nio.charset.StandardCharsets; +import java.util.Date; public class QuidemRecorder implements AutoCloseable, DruidHook { private PrintStream printStream; - public QuidemRecorder(URI quidemURI, FileOutputStream fileOutputStream) + public QuidemRecorder(URI quidemURI, File file) { try { - this.printStream = new PrintStream(fileOutputStream, true, StandardCharsets.UTF_8.name()); + this.printStream = new PrintStream(new FileOutputStream(file), true, StandardCharsets.UTF_8.name()); } - catch (UnsupportedEncodingException e) { - throw new RuntimeException(); + catch (UnsupportedEncodingException | FileNotFoundException e) { + throw new RuntimeException(e); } - printStream.println("#started"); + printStream.println("#started " + new Date()); printStream.println("!connect " + quidemURI.toString()); DruidHook.register(DruidHook.SQL, this); } diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java index 3d04fbe166df..006e1e8f72d4 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java @@ -21,21 +21,23 @@ import java.io.File; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class QTest extends DruidQuidemTestBase { public QTest() { super(); + + assertEquals( + QuidemCaptureResource.RECORD_PATH + , getTestRoot()); + } @Override protected File getTestRoot() { - return testRoot(); - } - - public static File testRoot() - { - return ProjectPathUtils.getPathFromProjectRoot("quidem-it/src/test/quidem/" + QTest.class.getName()); + return ProjectPathUtils.getPathFromProjectRoot("quidem-it/src/test/quidem/" + getClass().getName()); } } diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt new file mode 100644 index 000000000000..7c4e4db66d79 --- /dev/null +++ b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt @@ -0,0 +1,4 @@ +#started +!connect druidtest:/// +select * from numfoo; +!ok From e81591499cbdeaf925a4e77e613def27a727db49 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 08:18:32 +0000 Subject: [PATCH 070/122] update/etc --- quidem-it/pom.xml | 10 ++++ .../org/apache/druid/quidem/Launcher.java | 7 ++- .../druid/quidem/QuidemCaptureResource.java | 2 +- .../apache/druid/quidem/QuidemRecorder.java | 2 +- .../java/org/apache/druid/quidem/QTest.java | 18 ++++++-- .../record-1718641409720.iq | 46 +++++++++++++++++++ .../record-1718641409720.txt | 4 -- 7 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.iq delete mode 100644 quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 6cd43fbb0e71..5ca20043c370 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -330,6 +330,11 @@ com.github.docker-java docker-java-core + + net.hydromatic + quidem + test + io.netty netty-transport-native-kqueue @@ -457,6 +462,11 @@ org.apache.calcite.avatica avatica-core + + org.apache.calcite + calcite-testkit + test + com.github.os72 protobuf-dynamic diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index 13ac09232ae5..f437144a332f 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -19,6 +19,7 @@ package org.apache.druid.quidem; +import com.google.common.base.Stopwatch; import org.apache.druid.cli.GuiceRunnable; import org.apache.druid.java.util.common.lifecycle.Lifecycle; import org.apache.druid.java.util.common.logger.Logger; @@ -28,6 +29,7 @@ import org.apache.druid.sql.calcite.util.SqlTestFramework; import java.util.Properties; +import java.util.concurrent.TimeUnit; public class Launcher { @@ -43,9 +45,7 @@ public class Launcher public Launcher(String uri) throws Exception { SqlTestFrameworkConfig config = SqlTestFrameworkConfig.fromURL(uri); - System.out.println("Config: " + config); configurationInstance = CONFIG_STORE.getConfigurationInstance(config); - System.out.println("Configuration instance: " + configurationInstance); framework = configurationInstance.framework; } @@ -69,8 +69,11 @@ public static void main(String[] args) throws Exception } } log.info("Starting Quidem with URI[%s]", quidemUri); + Stopwatch stopwatch = Stopwatch.createStarted(); Launcher launcher = new Launcher(quidemUri); + log.info("Framework creation time: %d ms", stopwatch.elapsed(TimeUnit.MILLISECONDS)); launcher.start(); + log.info("Total time to launch: %d ms", stopwatch.elapsed(TimeUnit.MILLISECONDS)); launcher.lifecycle.join(); } } diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index 174dac226644..7686a5d6da80 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -68,7 +68,7 @@ public synchronized String start() private File genRecordFilePath() { - String fileName = StringUtils.format("record-%d.txt", System.currentTimeMillis()); + String fileName = StringUtils.format("record-%d.iq", System.currentTimeMillis()); return new File(RECORD_PATH, fileName); } diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 7ecf337546c0..2b8175b0f6e6 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -43,7 +43,7 @@ public QuidemRecorder(URI quidemURI, File file) throw new RuntimeException(e); } printStream.println("#started " + new Date()); - printStream.println("!connect " + quidemURI.toString()); + printStream.println("!use " + quidemURI.toString()); DruidHook.register(DruidHook.SQL, this); } diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java index 006e1e8f72d4..7f3244573436 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java @@ -19,7 +19,10 @@ package org.apache.druid.quidem; +import org.junit.jupiter.api.Test; + import java.io.File; +import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -28,11 +31,7 @@ public class QTest extends DruidQuidemTestBase public QTest() { super(); - - assertEquals( - QuidemCaptureResource.RECORD_PATH - , getTestRoot()); - + assertEquals(QuidemCaptureResource.RECORD_PATH, getTestRoot()); } @Override @@ -40,4 +39,13 @@ protected File getTestRoot() { return ProjectPathUtils.getPathFromProjectRoot("quidem-it/src/test/quidem/" + getClass().getName()); } + + @Test + public void aa() { + + List n = getFileNames(); + for(String name : n) { + run(name); + } + } } diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.iq b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.iq new file mode 100644 index 000000000000..ec066b1733e7 --- /dev/null +++ b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.iq @@ -0,0 +1,46 @@ +#started +!use druidtest:/// +!set outputformat mysql + +select * from numfoo; ++---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| __time | dim1 | dim2 | dim3 | dim4 | dim5 | dim6 | d1 | d2 | f1 | f2 | l1 | l2 | cnt | m1 | m2 | unique_dim1 | ++---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| 2000-01-01 00:00:00 | | a | ["a","b"] | a | aa | 1 | 1.0 | | 1.0 | | 7 | | 1 | 1.0 | 1.0 | "AQAAAEAAAA==" | +| 2000-01-02 00:00:00 | 10.1 | | ["b","c"] | a | ab | 2 | 1.7 | 1.7 | 0.1 | 0.1 | 325323 | 325323 | 1 | 2.0 | 2.0 | "AQAAAQAAAAHNBA==" | +| 2000-01-03 00:00:00 | 2 | | d | a | ba | 3 | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | 1 | 3.0 | 3.0 | "AQAAAQAAAAOzAg==" | +| 2001-01-01 00:00:00 | 1 | a | | b | ad | 4 | | | | | | | 1 | 4.0 | 4.0 | "AQAAAQAAAAFREA==" | +| 2001-01-02 00:00:00 | def | abc | | b | aa | 5 | | | | | | | 1 | 5.0 | 5.0 | "AQAAAQAAAACyEA==" | +| 2001-01-03 00:00:00 | abc | | | b | ab | 6 | | | | | | | 1 | 6.0 | 6.0 | "AQAAAQAAAAEkAQ==" | ++---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +(6 rows) + +!ok +select * from numfoo; ++---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| __time | dim1 | dim2 | dim3 | dim4 | dim5 | dim6 | d1 | d2 | f1 | f2 | l1 | l2 | cnt | m1 | m2 | unique_dim1 | ++---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| 2000-01-01 00:00:00 | | a | ["a","b"] | a | aa | 1 | 1.0 | | 1.0 | | 7 | | 1 | 1.0 | 1.0 | "AQAAAEAAAA==" | +| 2000-01-02 00:00:00 | 10.1 | | ["b","c"] | a | ab | 2 | 1.7 | 1.7 | 0.1 | 0.1 | 325323 | 325323 | 1 | 2.0 | 2.0 | "AQAAAQAAAAHNBA==" | +| 2000-01-03 00:00:00 | 2 | | d | a | ba | 3 | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | 1 | 3.0 | 3.0 | "AQAAAQAAAAOzAg==" | +| 2001-01-01 00:00:00 | 1 | a | | b | ad | 4 | | | | | | | 1 | 4.0 | 4.0 | "AQAAAQAAAAFREA==" | +| 2001-01-02 00:00:00 | def | abc | | b | aa | 5 | | | | | | | 1 | 5.0 | 5.0 | "AQAAAQAAAACyEA==" | +| 2001-01-03 00:00:00 | abc | | | b | ab | 6 | | | | | | | 1 | 6.0 | 6.0 | "AQAAAQAAAAEkAQ==" | ++---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +(6 rows) + +!ok +select length(dim1) from numfoo; ++--------+ +| EXPR$0 | ++--------+ +| 0 | +| 1 | +| 1 | +| 3 | +| 3 | +| 4 | ++--------+ +(6 rows) + +!ok diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt deleted file mode 100644 index 7c4e4db66d79..000000000000 --- a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.txt +++ /dev/null @@ -1,4 +0,0 @@ -#started -!connect druidtest:/// -select * from numfoo; -!ok From 75c578ae33a5bd04cffc69579dbff0c841806298 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 12:41:21 +0000 Subject: [PATCH 071/122] cleanup --- quidem-it/new1.iq | 2 -- .../org/apache/druid/quidem/QuidemRecorder.java | 1 + .../java/org/apache/druid/quidem/QTest.java | 17 ++++++++++------- .../{record-1718641409720.iq => example.iq} | 0 4 files changed, 11 insertions(+), 9 deletions(-) delete mode 100644 quidem-it/new1.iq rename quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/{record-1718641409720.iq => example.iq} (100%) diff --git a/quidem-it/new1.iq b/quidem-it/new1.iq deleted file mode 100644 index 24a6bf6bc419..000000000000 --- a/quidem-it/new1.iq +++ /dev/null @@ -1,2 +0,0 @@ -#started -!connect druidtest:/// diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 2b8175b0f6e6..d87edc250896 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -44,6 +44,7 @@ public QuidemRecorder(URI quidemURI, File file) } printStream.println("#started " + new Date()); printStream.println("!use " + quidemURI.toString()); + printStream.println("!set outputformat mysql"); DruidHook.register(DruidHook.SQL, this); } diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java index 7f3244573436..58782af50d58 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java @@ -22,16 +22,16 @@ import org.junit.jupiter.api.Test; import java.io.File; -import java.util.List; +import java.io.IOException; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; public class QTest extends DruidQuidemTestBase { public QTest() { super(); - assertEquals(QuidemCaptureResource.RECORD_PATH, getTestRoot()); } @Override @@ -41,11 +41,14 @@ protected File getTestRoot() } @Test - public void aa() { - - List n = getFileNames(); - for(String name : n) { - run(name); + public void ensureNoRecordFilesPresent() throws IOException + { + // ensure that the captured ones are saved into this test's input path + assertEquals(QuidemCaptureResource.RECORD_PATH, getTestRoot()); + for (String name : getFileNames()) { + if (name.startsWith("record-")) { + fail("Record file found: " + name); + } } } } diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.iq b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq similarity index 100% rename from quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/record-1718641409720.iq rename to quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq From 03661925540fb7da80aecf08a01476d16db0123f Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 13:07:48 +0000 Subject: [PATCH 072/122] updates --- .gitignore | 2 +- dev/quidem | 4 ++-- quidem-it/README.md | 35 +++++++++++++++++++++++++++++++++++ quidem-it/pom.xml | 8 ++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 quidem-it/README.md diff --git a/.gitignore b/.gitignore index 0828365f2a72..adaf4d14c2bd 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,7 @@ README .pmdruleset.xml .java-version integration-tests/gen-scripts/ -/bin/ +**/bin/ *.hprof **/.ipynb_checkpoints/ website/.yarn/ diff --git a/dev/quidem b/dev/quidem index a68e08b3cfc1..dec86fc9553a 100755 --- a/dev/quidem +++ b/dev/quidem @@ -28,13 +28,13 @@ OPTS+=" -Dsurefire.rerunFailingTestsCount=0" OPTS+=" -Dorg.slf4j.simpleLogger.log.org.apache.maven.plugin.surefire.SurefirePlugin=INFO" [[ $@ =~ "-q" ]] && OPTS+=" -Dsurefire.trimStackTrace=true" -OPTS+=" -pl sql -Dtest=SqlQuidemTest" +OPTS+=" -pl quidem-it -Dtest=QTest" OPTS+=" org.apache.maven.plugins:maven-surefire-plugin:test" case "$1" in -h|--help) cat << EOF -Run SqlQuidemTest tests. +Run QTest tests. -q quiet (recommened) -Dquidem.overwrite enables overwrite mode -Dquidem.filter=*join* runs only tests matching path expression diff --git a/quidem-it/README.md b/quidem-it/README.md new file mode 100644 index 000000000000..4d78bbe532f6 --- /dev/null +++ b/quidem-it/README.md @@ -0,0 +1,35 @@ + +# Quidem IT + +Enables to write sql level tests easily. +Can be used to write tests against existing test backends (ComponentSupplier) - by doing so the testcases can be moved closer to the excercised codes. + +## Usage + +### Running these checks + +* CI execution happens by a standard JUnit test `QTest` in this module +* the `dev/quidem` script can be used to run these tests (after the project is built) + +### Launching a test generating Broker + +* make sure to build the project first; one way to do that is: + ``` + mvn install -pl quidem-it/ -am -DskipTests -Pskip-static-checks + ``` +* launch the broker instance with: + ``` + mvn exec:exec -pl quidem-it -Dquidem.url= + ``` + + + + + + + + +### usage: + + * + diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 5ca20043c370..dc9c44fdf363 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -40,6 +40,9 @@ + + druidtest:/// + com.amazonaws @@ -438,6 +441,11 @@ easymock compile + + org.reflections + reflections + compile + From 9df6f3341afac41132a87b99420ff6472453538d Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 14:29:02 +0000 Subject: [PATCH 073/122] add test-jar ref --- quidem-it/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index dc9c44fdf363..318efc8e0e7c 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -429,6 +429,12 @@ test-jar ${project.parent.version} + + org.apache.druid + druid-datasketches + test-jar + ${project.parent.version} + org.slf4j From e725df71100cd1b6334284c6a12150d612e42f10 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 15:43:35 +0000 Subject: [PATCH 074/122] fix loader --- quidem-it/pom.xml | 4 +- .../java/org/apache/druid/quidem/QTest.java | 47 +++++++++++++++++++ .../sql/calcite/SqlTestFrameworkConfig.java | 14 +++++- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 318efc8e0e7c..6d87aae9b7c6 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -429,11 +429,13 @@ test-jar ${project.parent.version} + - org.apache.druid + org.apache.druid.extensions druid-datasketches test-jar ${project.parent.version} + compile diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java index 58782af50d58..9316485a2074 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java @@ -19,10 +19,20 @@ package org.apache.druid.quidem; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.junit.jupiter.api.Test; +import org.reflections.Reflections; +import org.reflections.scanners.SubTypesScanner; +import org.reflections.util.ConfigurationBuilder; +import org.reflections.util.FilterBuilder; import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Set; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; @@ -51,4 +61,41 @@ public void ensureNoRecordFilesPresent() throws IOException } } } + + @Test + public void testQTest() throws Exception + { + LoadingCache>> componentSupplierClassCache = CacheBuilder + .newBuilder() + .build(new CacheLoader>>() + { + @Override + public Set> load(String pkg) throws MalformedURLException + { + return new Reflections( + new ConfigurationBuilder() + // .addUrls(ClasspathHelper.forPackage(pkg, + // getClass().getClassLoader())) + + // .addClassLoaders(getClass().getClassLoader().getParent()) + .setScanners( + new SubTypesScanner(true) + + ) + .filterInputsBy( + new FilterBuilder().includePackage(pkg).and( + s -> s.contains("ComponentSupplier") + ) + + ) + .setUrls(org.reflections.util.ClasspathHelper.forJavaClassPath()) + + ) + .getSubTypesOf(QueryComponentSupplier.class); + } + }); + + Set> a = componentSupplierClassCache.get(""); + throw new RuntimeException("X" + a); + } } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index f4e075440fe2..96864de02186 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -42,7 +42,11 @@ import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; +import org.reflections.Configuration; import org.reflections.Reflections; +import org.reflections.scanners.SubTypesScanner; +import org.reflections.util.ConfigurationBuilder; +import org.reflections.util.FilterBuilder; import javax.annotation.Nonnull; @@ -506,7 +510,15 @@ public final T fromMap(Map map) throws Exception @Override public Set> load(String pkg) { - return new Reflections(pkg).getSubTypesOf(QueryComponentSupplier.class); + Configuration cfg = new ConfigurationBuilder() + .setScanners(new SubTypesScanner(true)) + .setUrls(org.reflections.util.ClasspathHelper.forJavaClassPath()) + .filterInputsBy( + new FilterBuilder() + .includePackage(pkg) + .and(s -> s.contains("ComponentSupplier")) + ); + return new Reflections(cfg).getSubTypesOf(QueryComponentSupplier.class); } }); From 475f5b5830a101ec184015e640ec60f72bf6550c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 15:43:46 +0000 Subject: [PATCH 075/122] cleanup --- .../java/org/apache/druid/quidem/QTest.java | 49 ------------------- 1 file changed, 49 deletions(-) diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java index 9316485a2074..f4de2d63411f 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java @@ -19,21 +19,9 @@ package org.apache.druid.quidem; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.junit.jupiter.api.Test; -import org.reflections.Reflections; -import org.reflections.scanners.SubTypesScanner; -import org.reflections.util.ConfigurationBuilder; -import org.reflections.util.FilterBuilder; - import java.io.File; import java.io.IOException; -import java.net.MalformedURLException; -import java.util.Set; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; @@ -61,41 +49,4 @@ public void ensureNoRecordFilesPresent() throws IOException } } } - - @Test - public void testQTest() throws Exception - { - LoadingCache>> componentSupplierClassCache = CacheBuilder - .newBuilder() - .build(new CacheLoader>>() - { - @Override - public Set> load(String pkg) throws MalformedURLException - { - return new Reflections( - new ConfigurationBuilder() - // .addUrls(ClasspathHelper.forPackage(pkg, - // getClass().getClassLoader())) - - // .addClassLoaders(getClass().getClassLoader().getParent()) - .setScanners( - new SubTypesScanner(true) - - ) - .filterInputsBy( - new FilterBuilder().includePackage(pkg).and( - s -> s.contains("ComponentSupplier") - ) - - ) - .setUrls(org.reflections.util.ClasspathHelper.forJavaClassPath()) - - ) - .getSubTypesOf(QueryComponentSupplier.class); - } - }); - - Set> a = componentSupplierClassCache.get(""); - throw new RuntimeException("X" + a); - } } From 74c488679b7cffa417e38e13e3819be6292cd449 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 15:43:48 +0000 Subject: [PATCH 076/122] cleanup --- quidem-it/src/test/java/org/apache/druid/quidem/QTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java index f4de2d63411f..58782af50d58 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java @@ -20,8 +20,10 @@ package org.apache.druid.quidem; import org.junit.jupiter.api.Test; + import java.io.File; import java.io.IOException; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; From d14b7374babe455f6180bfebfa16726aa81e4404 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 15:59:29 +0000 Subject: [PATCH 077/122] add --- quidem-it/pom.xml | 19 +------------------ .../sql/calcite/SqlTestFrameworkConfig.java | 3 +++ .../calcite/SqlTestFrameworkConfigTest.java | 14 +++++++++++++- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 6d87aae9b7c6..5d703f8f6d7e 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -90,13 +90,11 @@ com.amazonaws aws-java-sdk-s3 ${aws.sdk.version} - provided org.apache.druid.extensions druid-orc-extensions ${project.parent.version} - provided javax.servlet @@ -112,49 +110,41 @@ org.apache.druid.extensions druid-parquet-extensions ${project.parent.version} - provided org.apache.druid.extensions druid-avro-extensions ${project.parent.version} - provided org.apache.druid.extensions druid-protobuf-extensions ${project.parent.version} - provided org.apache.druid.extensions druid-s3-extensions ${project.parent.version} - provided org.apache.druid.extensions druid-kinesis-indexing-service ${project.parent.version} - provided org.apache.druid.extensions druid-azure-extensions ${project.parent.version} - provided org.apache.druid.extensions druid-google-extensions ${project.parent.version} - provided org.apache.druid.extensions druid-hdfs-storage ${project.parent.version} - provided com.amazonaws @@ -166,19 +156,16 @@ org.apache.druid.extensions druid-datasketches ${project.parent.version} - provided org.apache.druid.extensions druid-histogram ${project.parent.version} - provided org.apache.druid druid-aws-common ${project.parent.version} - provided org.apache.druid @@ -199,7 +186,6 @@ org.apache.druid.extensions mysql-metadata-storage ${project.parent.version} - provided org.apache.druid.extensions @@ -221,13 +207,11 @@ org.apache.druid.extensions druid-lookups-cached-global ${project.parent.version} - provided org.apache.druid.extensions druid-testing-tools ${project.parent.version} - provided org.apache.druid.extensions @@ -305,7 +289,6 @@ org.apache.logging.log4j log4j-slf4j-impl - provided com.google.code.findbugs @@ -403,7 +386,6 @@ io.confluent kafka-protobuf-provider 6.2.12 - provided com.google.protobuf @@ -530,6 +512,7 @@ -classpath -Dquidem.uri=${quidem.uri} + -Dquidem.record.autostart=true org.apache.druid.quidem.Launcher diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index 96864de02186..f2b529a2e6af 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -416,6 +416,9 @@ private Map getNonDefaultMap() if (def.minTopNThreshold != minTopNThreshold) { map.put("minTopNThreshold", String.valueOf(minTopNThreshold)); } + if (def.componentSupplier != componentSupplier) { + map.put("componentSupplier", componentSupplier.getSimpleName()); + } if (!equals(new SqlTestFrameworkConfig(map))) { throw new IAE("Can't reproduce config via map!"); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java index 3a7dd2d22d3b..b41db68edde1 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java @@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableMap; import nl.jqno.equalsverifier.EqualsVerifier; import org.apache.druid.java.util.common.IAE; +import org.apache.druid.sql.calcite.DrillWindowQueryTest.DrillComponentSupplier; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.MinTopNThreshold; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.NumMergeBuffers; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ResultCache; @@ -29,8 +30,8 @@ import org.junit.jupiter.api.Test; import java.lang.annotation.Annotation; +import java.net.URI; import java.util.List; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -139,4 +140,15 @@ public void testInvalidConfigKeySpecified() ); } + @Test + public void testURI() + { + SqlTestFrameworkConfig c = new SqlTestFrameworkConfig( + ImmutableMap.of( + "componentSupplier", DrillComponentSupplier.class.getSimpleName() + ) + ); + URI uri = c.getDruidTestURI(); + assertEquals("druidtest:///?componentSupplier=DrillComponentSupplier", uri.toString()); + } } From 64a971f893f489b62a5bfa8be60990f5b25fc4cc Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 16:20:53 +0000 Subject: [PATCH 078/122] fix autostart --- .../org/apache/druid/quidem/Launcher.java | 21 ++++++++++++++++++- .../druid/quidem/QuidemCaptureResource.java | 7 +++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index f437144a332f..a3b8a19eeb9d 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -27,6 +27,9 @@ import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.ConfigurationInstance; import org.apache.druid.sql.calcite.SqlTestFrameworkConfig.SqlTestFrameworkConfigStore; import org.apache.druid.sql.calcite.util.SqlTestFramework; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; import java.util.Properties; import java.util.concurrent.TimeUnit; @@ -49,9 +52,25 @@ public Launcher(String uri) throws Exception framework = configurationInstance.framework; } - public void start() + public void start() throws Exception { lifecycle = GuiceRunnable.initLifecycle(framework.injector(), log); + if (withAutoStart()) { + callQuidemStart(); + } + } + + private void callQuidemStart() throws Exception + { + CloseableHttpClient client = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:12345/quidem/start"); + request.addHeader("Content-Type", "application/json"); + client.execute(request); + } + + private boolean withAutoStart() + { + return Boolean.valueOf(System.getProperty("quidem.record.autostart", "false")); } public void shutdown() diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index 7686a5d6da80..2808f81a224c 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -20,7 +20,9 @@ package org.apache.druid.quidem; import com.google.inject.Inject; +import org.apache.druid.guice.LazySingleton; import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.java.util.common.lifecycle.LifecycleStart; import javax.inject.Named; import javax.ws.rs.GET; @@ -32,6 +34,7 @@ import java.net.URI; @Path("/quidem") +@LazySingleton public class QuidemCaptureResource { public static final File RECORD_PATH = ProjectPathUtils @@ -43,6 +46,10 @@ public class QuidemCaptureResource public QuidemCaptureResource(@Named("quidem") URI quidemURI) { this.quidemURI = quidemURI; + } + + @LifecycleStart + public void autostart() { if (withAutoStart()) { start(); } From dffa3310185627d3379c5f97f3111005e9405b59 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 16:33:22 +0000 Subject: [PATCH 079/122] updates/etc --- quidem-it/README.md | 25 ++++++++----------- .../druid/quidem/QuidemCaptureResource.java | 14 ----------- .../druid/sql/calcite/run/DruidHook.java | 4 +-- .../quidem/DruidQuidemCommandHandler.java | 4 ++- .../calcite/SqlTestFrameworkConfigTest.java | 1 + .../sql/calcite/util/SqlTestFramework.java | 12 ++++----- 6 files changed, 23 insertions(+), 37 deletions(-) diff --git a/quidem-it/README.md b/quidem-it/README.md index 4d78bbe532f6..c800815599d0 100644 --- a/quidem-it/README.md +++ b/quidem-it/README.md @@ -6,12 +6,12 @@ Can be used to write tests against existing test backends (ComponentSupplier) - ## Usage -### Running these checks +### Running these tests * CI execution happens by a standard JUnit test `QTest` in this module * the `dev/quidem` script can be used to run these tests (after the project is built) -### Launching a test generating Broker +### Launching a test generating broker * make sure to build the project first; one way to do that is: ``` @@ -19,17 +19,14 @@ Can be used to write tests against existing test backends (ComponentSupplier) - ``` * launch the broker instance with: ``` - mvn exec:exec -pl quidem-it -Dquidem.url= + mvn exec:exec -pl quidem-it ``` - - - - - - - - -### usage: - - * + * the broker will be running at http://localhost:12345 + * the used test configuration backend can configured by supplying `quidem.uri` + ``` + mvn exec:exec -pl quidem-it -Dquidem.uri=druidtest:///?componentSupplier=ThetaSketchComponentSupplier + ``` + * new record files can be started by calling http://localhost:12345/quidem/start +* after finished with the usage of the broker ; a new `record-123.iq` file will be in the project's worktree - it will contain all the executed statements + * running `dev/quidem -Dquidem.overwrite` adds the resultsets to the `iq` file diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index 2808f81a224c..5d0ad1d52846 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -22,8 +22,6 @@ import com.google.inject.Inject; import org.apache.druid.guice.LazySingleton; import org.apache.druid.java.util.common.StringUtils; -import org.apache.druid.java.util.common.lifecycle.LifecycleStart; - import javax.inject.Named; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -48,18 +46,6 @@ public QuidemCaptureResource(@Named("quidem") URI quidemURI) this.quidemURI = quidemURI; } - @LifecycleStart - public void autostart() { - if (withAutoStart()) { - start(); - } - } - - private boolean withAutoStart() - { - return Boolean.valueOf(System.getProperty("quidem.record.autostart", "false")); - } - @GET @Path("/start") @Produces(MediaType.TEXT_PLAIN) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index 077c803829f9..8802ccdec979 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -84,7 +84,7 @@ static void unregister(HookKey key, DruidHook hook) GLOBAL.get(key).remove(hook); } - public static Closeable withHook(HookKey key, DruidHook hook) + static Closeable withHook(HookKey key, DruidHook hook) { register(key, hook); return new Closeable() @@ -97,7 +97,7 @@ public void close() }; } - public static void dispatch(HookKey key, T object) + static void dispatch(HookKey key, T object) { List> hooks = GLOBAL.get(key); if (hooks != null) { diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java index dbcd1a9dcafc..86876cb90ee7 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java @@ -170,7 +170,9 @@ abstract static class AbstractRelPlanCommand extends AbstractPlanCommand protected final void executeExplain(Context x) throws IOException { List logged = new ArrayList<>(); - try (Closeable unhook = DruidHook.withHook(hook, (key, relNode) -> { logged.add(relNode);})) { + try (Closeable unhook = DruidHook.withHook(hook, (key, relNode) -> { + logged.add(relNode); + })) { executeQuery(x); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java index b41db68edde1..844251e8ac3d 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfigTest.java @@ -32,6 +32,7 @@ import java.lang.annotation.Annotation; import java.net.URI; import java.util.List; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index ed6b680567d8..6c4cf31fa942 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -187,7 +187,8 @@ default void close() throws IOException { } - default void configureGuice(CoreInjectorBuilder injectorBuilder, List overrideModules) { + default void configureGuice(CoreInjectorBuilder injectorBuilder, List overrideModules) + { configureGuice(injectorBuilder); } } @@ -615,9 +616,9 @@ public DruidSchemaCatalog makeCatalog( final AuthConfig authConfig, final ViewManager viewManager, QueryRunnerFactoryConglomerate conglomerate, - QuerySegmentWalker walker - - ) { + QuerySegmentWalker walker + ) + { final DruidSchemaCatalog rootSchema = QueryFrameworkUtils.createMockRootSchema( injector, conglomerate, @@ -667,8 +668,7 @@ private SqlTestFramework(Builder builder) // Ignore load scopes. This is a unit test, not a Druid node. If a // test pulls in a module, then pull in that module, even though we are // not the Druid node to which the module is scoped. - .ignoreLoadScopes() - ; + .ignoreLoadScopes(); List overrideModules = new ArrayList<>(builder.overrideModules); overrideModules.add(new LookylooModule()); From 61dd67078444c593dccfdb736916f47a2d05c337 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 16:36:41 +0000 Subject: [PATCH 080/122] remove not needed --- services/src/main/java/org/apache/druid/cli/GuiceRunnable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java b/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java index 4dd2420256b8..e20d64da51e1 100644 --- a/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java +++ b/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java @@ -44,7 +44,7 @@ public abstract class GuiceRunnable implements Runnable private final Logger log; private Properties properties; - protected Injector baseInjector; + private Injector baseInjector; public GuiceRunnable(Logger log) { From fdf115940bf00ed33c19741538bac76c2474b0da Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 18 Jun 2024 16:43:10 +0000 Subject: [PATCH 081/122] disable record by default --- quidem-it/README.md | 6 ++++-- quidem-it/pom.xml | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/quidem-it/README.md b/quidem-it/README.md index c800815599d0..a53d41647830 100644 --- a/quidem-it/README.md +++ b/quidem-it/README.md @@ -19,7 +19,7 @@ Can be used to write tests against existing test backends (ComponentSupplier) - ``` * launch the broker instance with: ``` - mvn exec:exec -pl quidem-it + mvn exec:exec -pl quidem-it -Dquidem.record.autostart=true ``` * the broker will be running at http://localhost:12345 * the used test configuration backend can configured by supplying `quidem.uri` @@ -27,6 +27,8 @@ Can be used to write tests against existing test backends (ComponentSupplier) - mvn exec:exec -pl quidem-it -Dquidem.uri=druidtest:///?componentSupplier=ThetaSketchComponentSupplier ``` * new record files can be started by calling http://localhost:12345/quidem/start + * if `quidem.record.autostart` is omitted recording will not start * after finished with the usage of the broker ; a new `record-123.iq` file will be in the project's worktree - it will contain all the executed statements - * running `dev/quidem -Dquidem.overwrite` adds the resultsets to the `iq` file + * running `dev/quidem -Dquidem.overwrite` updates the resultsets of all `iq` files around there + * rename the testfile to have a more descriptive name diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 5d703f8f6d7e..cdbaa7b20454 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -42,6 +42,7 @@ druidtest:/// + false @@ -512,7 +513,7 @@ -classpath -Dquidem.uri=${quidem.uri} - -Dquidem.record.autostart=true + -Dquidem.record.autostart=${quidem.record.autostart} org.apache.druid.quidem.Launcher From 4bd80397153b94ac598cc3725ae8cece571ddf64 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 19 Jun 2024 16:49:24 +0000 Subject: [PATCH 082/122] fix delegate --- .../quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index 097b7df95c20..c727de32248a 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -166,9 +166,9 @@ public void configureGuice(CoreInjectorBuilder builder, List overrideMod } @Override - public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer) + public QueryRunnerFactoryConglomerate createCongolmerate(Builder builder, Closer closer, ObjectMapper om) { - return delegate.createCongolmerate(builder, closer); + return delegate.createCongolmerate(builder, closer, om); } @Override From eda48497e2877e267265fe93f0e642daafffc58e Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 12:55:15 +0000 Subject: [PATCH 083/122] add kttm tx --- .../quidem/KttmNestedComponentSupplier.java | 160 ++++++++++++++++++ .../org.apache.druid.quidem.QTest/kttm1.iq | 12 ++ 2 files changed, 172 insertions(+) create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java create mode 100644 quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java new file mode 100644 index 000000000000..813a14ecf706 --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.google.inject.Injector; +import org.apache.druid.data.input.impl.DimensionSchema; +import org.apache.druid.data.input.impl.DimensionsSpec; +import org.apache.druid.data.input.impl.LocalInputSource; +import org.apache.druid.data.input.impl.LongDimensionSchema; +import org.apache.druid.data.input.impl.StringDimensionSchema; +import org.apache.druid.data.input.impl.TimestampSpec; +import org.apache.druid.java.util.common.FileUtils; +import org.apache.druid.java.util.common.Intervals; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.query.NestedDataTestUtils; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.segment.AutoTypeColumnSchema; +import org.apache.druid.segment.IndexBuilder; +import org.apache.druid.segment.IndexSpec; +import org.apache.druid.segment.QueryableIndex; +import org.apache.druid.segment.TestIndex; +import org.apache.druid.segment.incremental.IncrementalIndex; +import org.apache.druid.segment.incremental.IncrementalIndexSchema; +import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory; +import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.sql.calcite.TempDirProducer; +import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; +import org.apache.druid.timeline.DataSegment; +import org.apache.druid.timeline.partition.NumberedShardSpec; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class KttmNestedComponentSupplier extends StandardComponentSupplier +{ + public KttmNestedComponentSupplier(TempDirProducer tempDirProducer) + { + super(tempDirProducer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + SpecificSegmentsQuerySegmentWalker walker = super.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + QueryableIndex idx = makeKttmIndex(tempDirProducer.newTempFolder()); + + walker.add( + DataSegment.builder() + .dataSource("kttm_nested") + .interval(Intervals.of("2019-08-25/2019-08-26")) + .version("1") + .shardSpec(new NumberedShardSpec(0, 0)) + .size(0) + .build(), + idx + ); + + return walker; + + } + + public static QueryableIndex makeKttmIndex(File tmpDir) + { + try { + final File directory = new File(tmpDir, StringUtils.format("kttm-index-%s", UUID.randomUUID())); + final IncrementalIndex index = makeWikipediaIncrementalIndex(); + TestIndex.INDEX_MERGER.persist(index, directory, IndexSpec.DEFAULT, null); + return TestIndex.INDEX_IO.loadIndex(directory); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static IncrementalIndex makeWikipediaIncrementalIndex() + { + final List dimensions = Arrays.asList( + new StringDimensionSchema("session"), + new StringDimensionSchema("number"), + new AutoTypeColumnSchema("event", null), + new AutoTypeColumnSchema("agent", null), + // new StringDimensionSchema("event"), + // new StringDimensionSchema("agent"), + new StringDimensionSchema("client_ip"), + new StringDimensionSchema("geo_ip"), + new StringDimensionSchema("language"), + new StringDimensionSchema("adblock_list"), + new StringDimensionSchema("app_version"), + new StringDimensionSchema("path"), + new StringDimensionSchema("loaded_image"), + new StringDimensionSchema("referrer"), + new StringDimensionSchema("referrer_host"), + new StringDimensionSchema("server_ip"), + new StringDimensionSchema("screen"), + new StringDimensionSchema("window"), + new LongDimensionSchema("session_length"), + new StringDimensionSchema("timezone"), + new LongDimensionSchema("timezone_offset") + ); + + final File tmpDir; + try { + tmpDir = FileUtils.createTempDir("test-index-input-source"); + try { + // InputSource inputSource = ResourceInputSource.of( + // TestIndex.class.getClassLoader(), + // "kttm-nested-v2-2019-08-25.json" + // ); + LocalInputSource inputSource = new LocalInputSource(new File("/home/dev/host/kttm"), "kttm*json"); + for (DimensionSchema dimensionSchema : dimensions) { + + } + return IndexBuilder + .create() + .segmentWriteOutMediumFactory(OffHeapMemorySegmentWriteOutMediumFactory.instance()) + .schema( + new IncrementalIndexSchema.Builder() + .withRollup(false) + .withTimestampSpec(new TimestampSpec("timestamp", null, null)) + .withDimensionsSpec(new DimensionsSpec(dimensions)) + .build() + ) + .inputSource( + inputSource + ) + .inputFormat(NestedDataTestUtils.DEFAULT_JSON_INPUT_FORMAT) + .inputTmpDir(new File(tmpDir, "tmpKttm")) + .buildIncrementalIndex(); + } finally { + FileUtils.deleteDirectory(tmpDir); + } + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq new file mode 100644 index 000000000000..bd3b557a5505 --- /dev/null +++ b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq @@ -0,0 +1,12 @@ +#started Thu Jun 20 12:52:57 UTC 2024 +!use druidtest:///?componentSupplier=KttmNestedComponentSupplier +!set outputformat mysql +select * from kttm_nested where "language" = 'es' +; +!ok +select json_value(event, '$.type') from kttm_nested where "language" = 'es' +; +!ok +select event, json_value(event, '$.type') from kttm_nested where "language" = 'es' +; +!ok From b2be5abdd5574d0ad86a90b89f4593d183b44c5c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 14:21:56 +0000 Subject: [PATCH 084/122] fix md --- quidem-it/README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/quidem-it/README.md b/quidem-it/README.md index a53d41647830..0dd1b3baa58f 100644 --- a/quidem-it/README.md +++ b/quidem-it/README.md @@ -1,3 +1,21 @@ + # Quidem IT From 604910ceadd7ef9b4c0b5cdf87c51032ff16563c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 14:26:48 +0000 Subject: [PATCH 085/122] cleanup --- ...ExposedAsBrokerQueryComponentSupplierWrapper.java | 2 +- .../java/org/apache/druid/quidem/QuidemRecorder.java | 11 ++++++++++- .../org/apache/druid/quidem/LauncherSmokeTest.java | 6 ++---- .../org/apache/druid/sql/calcite/run/DruidHook.java | 12 ++++++------ .../druid/sql/calcite/SqlTestFrameworkConfig.java | 8 ++------ 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index c727de32248a..b7ae4b7decbe 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -214,7 +214,7 @@ public PlannerComponentSupplier getPlannerComponentSupplier() return delegate.getPlannerComponentSupplier(); } - public class BrokerTestModule extends AbstractModule + public static class BrokerTestModule extends AbstractModule { @Override protected void configure() diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index d87edc250896..f40a9f55e01d 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -33,9 +33,11 @@ public class QuidemRecorder implements AutoCloseable, DruidHook { private PrintStream printStream; + private File file; public QuidemRecorder(URI quidemURI, File file) { + this.file = file; try { this.printStream = new PrintStream(new FileOutputStream(file), true, StandardCharsets.UTF_8.name()); } @@ -43,7 +45,7 @@ public QuidemRecorder(URI quidemURI, File file) throw new RuntimeException(e); } printStream.println("#started " + new Date()); - printStream.println("!use " + quidemURI.toString()); + printStream.println("!use " + quidemURI); printStream.println("!set outputformat mysql"); DruidHook.register(DruidHook.SQL, this); } @@ -64,4 +66,11 @@ public void invoke(HookKey key, String query) return; } } + + @Override + public String toString() + { + return "QuidemRecorder [file=" + file + "]"; + } + } diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java index c00f72b7fe3b..6402cd63e433 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java +++ b/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java @@ -32,8 +32,6 @@ import org.junit.BeforeClass; import org.junit.Test; -import java.io.IOException; - import static org.junit.Assert.assertEquals; public class LauncherSmokeTest @@ -54,7 +52,7 @@ public static void tearDown() } @Test - public void chkSelectFromFoo() throws IOException, InterruptedException + public void chkSelectFromFoo() throws Exception { CloseableHttpClient client = HttpClients.createDefault(); HttpPost request = new HttpPost("http://localhost:12345/druid/v2/sql"); @@ -65,7 +63,7 @@ public void chkSelectFromFoo() throws IOException, InterruptedException } @Test - public void chkStatusWorks() throws IOException, InterruptedException + public void chkStatusWorks() throws Exception { CloseableHttpClient client = HttpClients.createDefault(); HttpGet request = new HttpGet("http://localhost:12345/status"); diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index 8802ccdec979..1a1f8e09bfe6 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -30,7 +30,7 @@ @FunctionalInterface public interface DruidHook { - static class HookKey + class HookKey { private String label; private Class type; @@ -65,14 +65,14 @@ public boolean equals(Object obj) } - public static final HookKey CONVERTED_PLAN = new HookKey<>("converted", RelNode.class); - public static final HookKey LOGICAL_PLAN = new HookKey<>("logicalPlan", RelNode.class); - public static final HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); - public static final HookKey SQL = new HookKey<>("sql", String.class); + final HookKey CONVERTED_PLAN = new HookKey<>("converted", RelNode.class); + final HookKey LOGICAL_PLAN = new HookKey<>("logicalPlan", RelNode.class); + final HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); + final HookKey SQL = new HookKey<>("sql", String.class); void invoke(HookKey key, T object); - static Map, List>> GLOBAL = new HashMap<>(); + Map, List>> GLOBAL = new HashMap<>(); static void register(HookKey label, DruidHook hook) { diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java index f2b529a2e6af..7880cea33e2f 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlTestFrameworkConfig.java @@ -27,7 +27,6 @@ import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; -import com.google.inject.Module; import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.query.topn.TopNQueryConfig; @@ -45,6 +44,7 @@ import org.reflections.Configuration; import org.reflections.Reflections; import org.reflections.scanners.SubTypesScanner; +import org.reflections.util.ClasspathHelper; import org.reflections.util.ConfigurationBuilder; import org.reflections.util.FilterBuilder; @@ -356,16 +356,12 @@ public static class ConfigurationInstance ConfigurationInstance(SqlTestFrameworkConfig config, QueryComponentSupplier testHost) { - Module[] modules = {}; SqlTestFramework.Builder builder = new SqlTestFramework.Builder(testHost) .withConfig(config) .catalogResolver(testHost.createCatalogResolver()) .minTopNThreshold(config.minTopNThreshold) .mergeBufferCount(config.numMergeBuffers) .withOverrideModule(config.resultCache.makeModule()); - for (Module m : modules) { - builder.withOverrideModule(m); - } framework = builder.build(); } @@ -515,7 +511,7 @@ public Set> load(String pkg) { Configuration cfg = new ConfigurationBuilder() .setScanners(new SubTypesScanner(true)) - .setUrls(org.reflections.util.ClasspathHelper.forJavaClassPath()) + .setUrls(ClasspathHelper.forJavaClassPath()) .filterInputsBy( new FilterBuilder() .includePackage(pkg) From ebb27cf462fb5d4e4c1de9894d6ed9f67294ea02 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 14:40:44 +0000 Subject: [PATCH 086/122] add extension to disabel when not sql compat --- .../druid/quidem/DruidQuidemTestBase.java | 6 +-- .../EnabledOnlyInSqlCompatibleMode.java | 43 +++++++++++++++++++ .../apache/druid/quidem/SqlQuidemTest.java | 4 ++ 3 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 sql/src/test/java/org/apache/druid/quidem/EnabledOnlyInSqlCompatibleMode.java diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java index 703806d22444..2a57e5fb8567 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java @@ -36,7 +36,6 @@ import org.apache.druid.java.util.common.StringUtils; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.api.condition.EnabledIf; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -78,13 +77,10 @@ * */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) -@EnabledIf(value = "enabled", disabledReason = "These tests are only run in SqlCompatible mode!") public abstract class DruidQuidemTestBase { - public static boolean enabled() - { + static { NullHandling.initializeForTests(); - return NullHandling.sqlCompatible(); } public static final String IQ_SUFFIX = ".iq"; diff --git a/sql/src/test/java/org/apache/druid/quidem/EnabledOnlyInSqlCompatibleMode.java b/sql/src/test/java/org/apache/druid/quidem/EnabledOnlyInSqlCompatibleMode.java new file mode 100644 index 000000000000..96cf0a72acff --- /dev/null +++ b/sql/src/test/java/org/apache/druid/quidem/EnabledOnlyInSqlCompatibleMode.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import org.apache.druid.common.config.NullHandling; +import org.junit.jupiter.api.extension.ConditionEvaluationResult; +import org.junit.jupiter.api.extension.ExecutionCondition; +import org.junit.jupiter.api.extension.ExtensionContext; + +public class EnabledOnlyInSqlCompatibleMode implements ExecutionCondition +{ + static { + NullHandling.initializeForTests(); + } + + @Override + public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) + { + if (NullHandling.sqlCompatible()) { + return ConditionEvaluationResult.enabled("SQL compatible mode is enabled"); + } else { + return ConditionEvaluationResult.disabled("SQL compatible mode is disabled"); + } + } + +} diff --git a/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java b/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java index 9e6a965891ce..786dcfd772da 100644 --- a/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java +++ b/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java @@ -19,8 +19,12 @@ package org.apache.druid.quidem; +import org.junit.jupiter.api.extension.ExtendWith; + import java.io.File; +//@EnabledIf(value = "enabled", disabledReason = "These tests are only run in SqlCompatible mode!") +@ExtendWith(EnabledOnlyInSqlCompatibleMode.class) public class SqlQuidemTest extends DruidQuidemTestBase { public SqlQuidemTest() From 6e48cb86d5b6ae107bce9f5ad80bf79ec074025a Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 14:41:45 +0000 Subject: [PATCH 087/122] move annotation --- .../java/org/apache/druid/quidem/DruidQuidemTestBase.java | 2 ++ sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java index 2a57e5fb8567..650af0880f96 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java @@ -36,6 +36,7 @@ import org.apache.druid.java.util.common.StringUtils; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -77,6 +78,7 @@ * */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) +@ExtendWith(EnabledOnlyInSqlCompatibleMode.class) public abstract class DruidQuidemTestBase { static { diff --git a/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java b/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java index 786dcfd772da..9e6a965891ce 100644 --- a/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java +++ b/sql/src/test/java/org/apache/druid/quidem/SqlQuidemTest.java @@ -19,12 +19,8 @@ package org.apache.druid.quidem; -import org.junit.jupiter.api.extension.ExtendWith; - import java.io.File; -//@EnabledIf(value = "enabled", disabledReason = "These tests are only run in SqlCompatible mode!") -@ExtendWith(EnabledOnlyInSqlCompatibleMode.class) public class SqlQuidemTest extends DruidQuidemTestBase { public SqlQuidemTest() From d329686d5c11752fb884964eb4eed90b51b0ba23 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 15:37:13 +0000 Subject: [PATCH 088/122] fix msq test --- extensions-core/multi-stage-query/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extensions-core/multi-stage-query/pom.xml b/extensions-core/multi-stage-query/pom.xml index 9e637acff009..ab23a26e36fa 100644 --- a/extensions-core/multi-stage-query/pom.xml +++ b/extensions-core/multi-stage-query/pom.xml @@ -233,6 +233,11 @@ junit-jupiter-params test + + org.reflections + reflections + test + org.easymock easymock From 82f24e61f27de8feb41b1cb5b983ea9447cc477c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 16:01:53 +0000 Subject: [PATCH 089/122] Revert "add kttm tx" This reverts commit eda48497e2877e267265fe93f0e642daafffc58e. --- .../quidem/KttmNestedComponentSupplier.java | 160 ------------------ .../org.apache.druid.quidem.QTest/kttm1.iq | 12 -- 2 files changed, 172 deletions(-) delete mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java delete mode 100644 quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java deleted file mode 100644 index 813a14ecf706..000000000000 --- a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import com.google.inject.Injector; -import org.apache.druid.data.input.impl.DimensionSchema; -import org.apache.druid.data.input.impl.DimensionsSpec; -import org.apache.druid.data.input.impl.LocalInputSource; -import org.apache.druid.data.input.impl.LongDimensionSchema; -import org.apache.druid.data.input.impl.StringDimensionSchema; -import org.apache.druid.data.input.impl.TimestampSpec; -import org.apache.druid.java.util.common.FileUtils; -import org.apache.druid.java.util.common.Intervals; -import org.apache.druid.java.util.common.StringUtils; -import org.apache.druid.query.NestedDataTestUtils; -import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.segment.AutoTypeColumnSchema; -import org.apache.druid.segment.IndexBuilder; -import org.apache.druid.segment.IndexSpec; -import org.apache.druid.segment.QueryableIndex; -import org.apache.druid.segment.TestIndex; -import org.apache.druid.segment.incremental.IncrementalIndex; -import org.apache.druid.segment.incremental.IncrementalIndexSchema; -import org.apache.druid.segment.join.JoinableFactoryWrapper; -import org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory; -import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; -import org.apache.druid.sql.calcite.TempDirProducer; -import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; -import org.apache.druid.timeline.DataSegment; -import org.apache.druid.timeline.partition.NumberedShardSpec; - -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -public class KttmNestedComponentSupplier extends StandardComponentSupplier -{ - public KttmNestedComponentSupplier(TempDirProducer tempDirProducer) - { - super(tempDirProducer); - } - - @Override - public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, - JoinableFactoryWrapper joinableFactory, Injector injector) - { - SpecificSegmentsQuerySegmentWalker walker = super.createQuerySegmentWalker(conglomerate, joinableFactory, injector); - QueryableIndex idx = makeKttmIndex(tempDirProducer.newTempFolder()); - - walker.add( - DataSegment.builder() - .dataSource("kttm_nested") - .interval(Intervals.of("2019-08-25/2019-08-26")) - .version("1") - .shardSpec(new NumberedShardSpec(0, 0)) - .size(0) - .build(), - idx - ); - - return walker; - - } - - public static QueryableIndex makeKttmIndex(File tmpDir) - { - try { - final File directory = new File(tmpDir, StringUtils.format("kttm-index-%s", UUID.randomUUID())); - final IncrementalIndex index = makeWikipediaIncrementalIndex(); - TestIndex.INDEX_MERGER.persist(index, directory, IndexSpec.DEFAULT, null); - return TestIndex.INDEX_IO.loadIndex(directory); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static IncrementalIndex makeWikipediaIncrementalIndex() - { - final List dimensions = Arrays.asList( - new StringDimensionSchema("session"), - new StringDimensionSchema("number"), - new AutoTypeColumnSchema("event", null), - new AutoTypeColumnSchema("agent", null), - // new StringDimensionSchema("event"), - // new StringDimensionSchema("agent"), - new StringDimensionSchema("client_ip"), - new StringDimensionSchema("geo_ip"), - new StringDimensionSchema("language"), - new StringDimensionSchema("adblock_list"), - new StringDimensionSchema("app_version"), - new StringDimensionSchema("path"), - new StringDimensionSchema("loaded_image"), - new StringDimensionSchema("referrer"), - new StringDimensionSchema("referrer_host"), - new StringDimensionSchema("server_ip"), - new StringDimensionSchema("screen"), - new StringDimensionSchema("window"), - new LongDimensionSchema("session_length"), - new StringDimensionSchema("timezone"), - new LongDimensionSchema("timezone_offset") - ); - - final File tmpDir; - try { - tmpDir = FileUtils.createTempDir("test-index-input-source"); - try { - // InputSource inputSource = ResourceInputSource.of( - // TestIndex.class.getClassLoader(), - // "kttm-nested-v2-2019-08-25.json" - // ); - LocalInputSource inputSource = new LocalInputSource(new File("/home/dev/host/kttm"), "kttm*json"); - for (DimensionSchema dimensionSchema : dimensions) { - - } - return IndexBuilder - .create() - .segmentWriteOutMediumFactory(OffHeapMemorySegmentWriteOutMediumFactory.instance()) - .schema( - new IncrementalIndexSchema.Builder() - .withRollup(false) - .withTimestampSpec(new TimestampSpec("timestamp", null, null)) - .withDimensionsSpec(new DimensionsSpec(dimensions)) - .build() - ) - .inputSource( - inputSource - ) - .inputFormat(NestedDataTestUtils.DEFAULT_JSON_INPUT_FORMAT) - .inputTmpDir(new File(tmpDir, "tmpKttm")) - .buildIncrementalIndex(); - } finally { - FileUtils.deleteDirectory(tmpDir); - } - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - -} diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq deleted file mode 100644 index bd3b557a5505..000000000000 --- a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq +++ /dev/null @@ -1,12 +0,0 @@ -#started Thu Jun 20 12:52:57 UTC 2024 -!use druidtest:///?componentSupplier=KttmNestedComponentSupplier -!set outputformat mysql -select * from kttm_nested where "language" = 'es' -; -!ok -select json_value(event, '$.type') from kttm_nested where "language" = 'es' -; -!ok -select event, json_value(event, '$.type') from kttm_nested where "language" = 'es' -; -!ok From 26a16fb4febc9348c496497d78be03b5d81c30c9 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 16:02:09 +0000 Subject: [PATCH 090/122] Revert "Revert "add kttm tx"" This reverts commit 82f24e61f27de8feb41b1cb5b983ea9447cc477c. --- .../quidem/KttmNestedComponentSupplier.java | 160 ++++++++++++++++++ .../org.apache.druid.quidem.QTest/kttm1.iq | 12 ++ 2 files changed, 172 insertions(+) create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java create mode 100644 quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java new file mode 100644 index 000000000000..813a14ecf706 --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.google.inject.Injector; +import org.apache.druid.data.input.impl.DimensionSchema; +import org.apache.druid.data.input.impl.DimensionsSpec; +import org.apache.druid.data.input.impl.LocalInputSource; +import org.apache.druid.data.input.impl.LongDimensionSchema; +import org.apache.druid.data.input.impl.StringDimensionSchema; +import org.apache.druid.data.input.impl.TimestampSpec; +import org.apache.druid.java.util.common.FileUtils; +import org.apache.druid.java.util.common.Intervals; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.query.NestedDataTestUtils; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.segment.AutoTypeColumnSchema; +import org.apache.druid.segment.IndexBuilder; +import org.apache.druid.segment.IndexSpec; +import org.apache.druid.segment.QueryableIndex; +import org.apache.druid.segment.TestIndex; +import org.apache.druid.segment.incremental.IncrementalIndex; +import org.apache.druid.segment.incremental.IncrementalIndexSchema; +import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory; +import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.sql.calcite.TempDirProducer; +import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; +import org.apache.druid.timeline.DataSegment; +import org.apache.druid.timeline.partition.NumberedShardSpec; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class KttmNestedComponentSupplier extends StandardComponentSupplier +{ + public KttmNestedComponentSupplier(TempDirProducer tempDirProducer) + { + super(tempDirProducer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + SpecificSegmentsQuerySegmentWalker walker = super.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + QueryableIndex idx = makeKttmIndex(tempDirProducer.newTempFolder()); + + walker.add( + DataSegment.builder() + .dataSource("kttm_nested") + .interval(Intervals.of("2019-08-25/2019-08-26")) + .version("1") + .shardSpec(new NumberedShardSpec(0, 0)) + .size(0) + .build(), + idx + ); + + return walker; + + } + + public static QueryableIndex makeKttmIndex(File tmpDir) + { + try { + final File directory = new File(tmpDir, StringUtils.format("kttm-index-%s", UUID.randomUUID())); + final IncrementalIndex index = makeWikipediaIncrementalIndex(); + TestIndex.INDEX_MERGER.persist(index, directory, IndexSpec.DEFAULT, null); + return TestIndex.INDEX_IO.loadIndex(directory); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static IncrementalIndex makeWikipediaIncrementalIndex() + { + final List dimensions = Arrays.asList( + new StringDimensionSchema("session"), + new StringDimensionSchema("number"), + new AutoTypeColumnSchema("event", null), + new AutoTypeColumnSchema("agent", null), + // new StringDimensionSchema("event"), + // new StringDimensionSchema("agent"), + new StringDimensionSchema("client_ip"), + new StringDimensionSchema("geo_ip"), + new StringDimensionSchema("language"), + new StringDimensionSchema("adblock_list"), + new StringDimensionSchema("app_version"), + new StringDimensionSchema("path"), + new StringDimensionSchema("loaded_image"), + new StringDimensionSchema("referrer"), + new StringDimensionSchema("referrer_host"), + new StringDimensionSchema("server_ip"), + new StringDimensionSchema("screen"), + new StringDimensionSchema("window"), + new LongDimensionSchema("session_length"), + new StringDimensionSchema("timezone"), + new LongDimensionSchema("timezone_offset") + ); + + final File tmpDir; + try { + tmpDir = FileUtils.createTempDir("test-index-input-source"); + try { + // InputSource inputSource = ResourceInputSource.of( + // TestIndex.class.getClassLoader(), + // "kttm-nested-v2-2019-08-25.json" + // ); + LocalInputSource inputSource = new LocalInputSource(new File("/home/dev/host/kttm"), "kttm*json"); + for (DimensionSchema dimensionSchema : dimensions) { + + } + return IndexBuilder + .create() + .segmentWriteOutMediumFactory(OffHeapMemorySegmentWriteOutMediumFactory.instance()) + .schema( + new IncrementalIndexSchema.Builder() + .withRollup(false) + .withTimestampSpec(new TimestampSpec("timestamp", null, null)) + .withDimensionsSpec(new DimensionsSpec(dimensions)) + .build() + ) + .inputSource( + inputSource + ) + .inputFormat(NestedDataTestUtils.DEFAULT_JSON_INPUT_FORMAT) + .inputTmpDir(new File(tmpDir, "tmpKttm")) + .buildIncrementalIndex(); + } finally { + FileUtils.deleteDirectory(tmpDir); + } + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq new file mode 100644 index 000000000000..bd3b557a5505 --- /dev/null +++ b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq @@ -0,0 +1,12 @@ +#started Thu Jun 20 12:52:57 UTC 2024 +!use druidtest:///?componentSupplier=KttmNestedComponentSupplier +!set outputformat mysql +select * from kttm_nested where "language" = 'es' +; +!ok +select json_value(event, '$.type') from kttm_nested where "language" = 'es' +; +!ok +select event, json_value(event, '$.type') from kttm_nested where "language" = 'es' +; +!ok From 724212381cf8fa7c13500fbe385f4a9c66021d7e Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 16:40:06 +0000 Subject: [PATCH 091/122] close stuff --- .../java/org/apache/druid/quidem/QuidemCaptureResource.java | 1 + .../src/main/java/org/apache/druid/quidem/QuidemRecorder.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index 5d0ad1d52846..e1d174ccd7fb 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -22,6 +22,7 @@ import com.google.inject.Inject; import org.apache.druid.guice.LazySingleton; import org.apache.druid.java.util.common.StringUtils; + import javax.inject.Named; import javax.ws.rs.GET; import javax.ws.rs.Path; diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index f40a9f55e01d..4bc149f7c3c3 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -53,6 +53,10 @@ public QuidemRecorder(URI quidemURI, File file) @Override public void close() { + if (printStream != null) { + printStream.close(); + printStream = null; + } DruidHook.unregister(DruidHook.SQL, this); } From cefdf96a26e30441967e9663d0e30870972229e6 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 16:45:39 +0000 Subject: [PATCH 092/122] prep --- .../org.apache.druid.quidem.QTest/example.iq | 40 +++++++++---------- .../org.apache.druid.quidem.QTest/kttm1.iq | 12 ------ 2 files changed, 20 insertions(+), 32 deletions(-) delete mode 100644 quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq index ec066b1733e7..3a8105927eee 100644 --- a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq +++ b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq @@ -3,30 +3,30 @@ !set outputformat mysql select * from numfoo; -+---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ -| __time | dim1 | dim2 | dim3 | dim4 | dim5 | dim6 | d1 | d2 | f1 | f2 | l1 | l2 | cnt | m1 | m2 | unique_dim1 | -+---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ -| 2000-01-01 00:00:00 | | a | ["a","b"] | a | aa | 1 | 1.0 | | 1.0 | | 7 | | 1 | 1.0 | 1.0 | "AQAAAEAAAA==" | -| 2000-01-02 00:00:00 | 10.1 | | ["b","c"] | a | ab | 2 | 1.7 | 1.7 | 0.1 | 0.1 | 325323 | 325323 | 1 | 2.0 | 2.0 | "AQAAAQAAAAHNBA==" | -| 2000-01-03 00:00:00 | 2 | | d | a | ba | 3 | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | 1 | 3.0 | 3.0 | "AQAAAQAAAAOzAg==" | -| 2001-01-01 00:00:00 | 1 | a | | b | ad | 4 | | | | | | | 1 | 4.0 | 4.0 | "AQAAAQAAAAFREA==" | -| 2001-01-02 00:00:00 | def | abc | | b | aa | 5 | | | | | | | 1 | 5.0 | 5.0 | "AQAAAQAAAACyEA==" | -| 2001-01-03 00:00:00 | abc | | | b | ab | 6 | | | | | | | 1 | 6.0 | 6.0 | "AQAAAQAAAAEkAQ==" | -+---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ ++-------------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| __time | dim1 | dim2 | dim3 | dim4 | dim5 | dim6 | d1 | d2 | f1 | f2 | l1 | l2 | cnt | m1 | m2 | unique_dim1 | ++-------------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| 2000-01-01 00:00:00.000 | | a | ["a","b"] | a | aa | 1 | 1.0 | | 1.0 | | 7 | | 1 | 1.0 | 1.0 | "AQAAAEAAAA==" | +| 2000-01-02 00:00:00.000 | 10.1 | | ["b","c"] | a | ab | 2 | 1.7 | 1.7 | 0.1 | 0.1 | 325323 | 325323 | 1 | 2.0 | 2.0 | "AQAAAQAAAAHNBA==" | +| 2000-01-03 00:00:00.000 | 2 | | d | a | ba | 3 | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | 1 | 3.0 | 3.0 | "AQAAAQAAAAOzAg==" | +| 2001-01-01 00:00:00.000 | 1 | a | | b | ad | 4 | | | | | | | 1 | 4.0 | 4.0 | "AQAAAQAAAAFREA==" | +| 2001-01-02 00:00:00.000 | def | abc | | b | aa | 5 | | | | | | | 1 | 5.0 | 5.0 | "AQAAAQAAAACyEA==" | +| 2001-01-03 00:00:00.000 | abc | | | b | ab | 6 | | | | | | | 1 | 6.0 | 6.0 | "AQAAAQAAAAEkAQ==" | ++-------------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ (6 rows) !ok select * from numfoo; -+---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ -| __time | dim1 | dim2 | dim3 | dim4 | dim5 | dim6 | d1 | d2 | f1 | f2 | l1 | l2 | cnt | m1 | m2 | unique_dim1 | -+---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ -| 2000-01-01 00:00:00 | | a | ["a","b"] | a | aa | 1 | 1.0 | | 1.0 | | 7 | | 1 | 1.0 | 1.0 | "AQAAAEAAAA==" | -| 2000-01-02 00:00:00 | 10.1 | | ["b","c"] | a | ab | 2 | 1.7 | 1.7 | 0.1 | 0.1 | 325323 | 325323 | 1 | 2.0 | 2.0 | "AQAAAQAAAAHNBA==" | -| 2000-01-03 00:00:00 | 2 | | d | a | ba | 3 | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | 1 | 3.0 | 3.0 | "AQAAAQAAAAOzAg==" | -| 2001-01-01 00:00:00 | 1 | a | | b | ad | 4 | | | | | | | 1 | 4.0 | 4.0 | "AQAAAQAAAAFREA==" | -| 2001-01-02 00:00:00 | def | abc | | b | aa | 5 | | | | | | | 1 | 5.0 | 5.0 | "AQAAAQAAAACyEA==" | -| 2001-01-03 00:00:00 | abc | | | b | ab | 6 | | | | | | | 1 | 6.0 | 6.0 | "AQAAAQAAAAEkAQ==" | -+---------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ ++-------------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| __time | dim1 | dim2 | dim3 | dim4 | dim5 | dim6 | d1 | d2 | f1 | f2 | l1 | l2 | cnt | m1 | m2 | unique_dim1 | ++-------------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ +| 2000-01-01 00:00:00.000 | | a | ["a","b"] | a | aa | 1 | 1.0 | | 1.0 | | 7 | | 1 | 1.0 | 1.0 | "AQAAAEAAAA==" | +| 2000-01-02 00:00:00.000 | 10.1 | | ["b","c"] | a | ab | 2 | 1.7 | 1.7 | 0.1 | 0.1 | 325323 | 325323 | 1 | 2.0 | 2.0 | "AQAAAQAAAAHNBA==" | +| 2000-01-03 00:00:00.000 | 2 | | d | a | ba | 3 | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | 1 | 3.0 | 3.0 | "AQAAAQAAAAOzAg==" | +| 2001-01-01 00:00:00.000 | 1 | a | | b | ad | 4 | | | | | | | 1 | 4.0 | 4.0 | "AQAAAQAAAAFREA==" | +| 2001-01-02 00:00:00.000 | def | abc | | b | aa | 5 | | | | | | | 1 | 5.0 | 5.0 | "AQAAAQAAAACyEA==" | +| 2001-01-03 00:00:00.000 | abc | | | b | ab | 6 | | | | | | | 1 | 6.0 | 6.0 | "AQAAAQAAAAEkAQ==" | ++-------------------------+------+------+-----------+------+------+------+-----+-----+-----+-----+--------+--------+-----+-----+-----+--------------------+ (6 rows) !ok diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq b/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq deleted file mode 100644 index bd3b557a5505..000000000000 --- a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/kttm1.iq +++ /dev/null @@ -1,12 +0,0 @@ -#started Thu Jun 20 12:52:57 UTC 2024 -!use druidtest:///?componentSupplier=KttmNestedComponentSupplier -!set outputformat mysql -select * from kttm_nested where "language" = 'es' -; -!ok -select json_value(event, '$.type') from kttm_nested where "language" = 'es' -; -!ok -select event, json_value(event, '$.type') from kttm_nested where "language" = 'es' -; -!ok From 0af3b910f1820d870a33915042f934262e31feda Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 17:45:01 +0000 Subject: [PATCH 093/122] update readme --- quidem-it/README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/quidem-it/README.md b/quidem-it/README.md index 0dd1b3baa58f..e5cdc048558f 100644 --- a/quidem-it/README.md +++ b/quidem-it/README.md @@ -24,6 +24,28 @@ Can be used to write tests against existing test backends (ComponentSupplier) - ## Usage +### Install java&maven (if needed) + +If you don't have java&maven - one way to set that up is by using sdkman like this: +``` +# install sdkman +curl -s "https://get.sdkman.io" | bash +# at the end of installation either open a new terminal; or follow the instructions at the end + +# install java&maven +sdk install java 11.0.23-zulu +sdk install maven + +# run mvn to see if it works +mvn --version + +# download druid sourcces (FIXME: change this to the main repo/branch before merging) +git clone --branch quidem-record https://github.com/kgyrtkirk/druid +``` + + + + ### Running these tests * CI execution happens by a standard JUnit test `QTest` in this module @@ -47,6 +69,6 @@ Can be used to write tests against existing test backends (ComponentSupplier) - * new record files can be started by calling http://localhost:12345/quidem/start * if `quidem.record.autostart` is omitted recording will not start * after finished with the usage of the broker ; a new `record-123.iq` file will be in the project's worktree - it will contain all the executed statements - * running `dev/quidem -Dquidem.overwrite` updates the resultsets of all `iq` files around there + * running `dev/quidem -Dquidem.overwrite` updates the resultsets of all `iq` files around there * rename the testfile to have a more descriptive name From 9a4d04a818291a937ec3a8a889fb2132fa8ed777 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 20 Jun 2024 17:45:08 +0000 Subject: [PATCH 094/122] Revert "Revert "Revert "add kttm tx""" This reverts commit 26a16fb4febc9348c496497d78be03b5d81c30c9. --- .../quidem/KttmNestedComponentSupplier.java | 160 ------------------ 1 file changed, 160 deletions(-) delete mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java deleted file mode 100644 index 813a14ecf706..000000000000 --- a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import com.google.inject.Injector; -import org.apache.druid.data.input.impl.DimensionSchema; -import org.apache.druid.data.input.impl.DimensionsSpec; -import org.apache.druid.data.input.impl.LocalInputSource; -import org.apache.druid.data.input.impl.LongDimensionSchema; -import org.apache.druid.data.input.impl.StringDimensionSchema; -import org.apache.druid.data.input.impl.TimestampSpec; -import org.apache.druid.java.util.common.FileUtils; -import org.apache.druid.java.util.common.Intervals; -import org.apache.druid.java.util.common.StringUtils; -import org.apache.druid.query.NestedDataTestUtils; -import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.segment.AutoTypeColumnSchema; -import org.apache.druid.segment.IndexBuilder; -import org.apache.druid.segment.IndexSpec; -import org.apache.druid.segment.QueryableIndex; -import org.apache.druid.segment.TestIndex; -import org.apache.druid.segment.incremental.IncrementalIndex; -import org.apache.druid.segment.incremental.IncrementalIndexSchema; -import org.apache.druid.segment.join.JoinableFactoryWrapper; -import org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory; -import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; -import org.apache.druid.sql.calcite.TempDirProducer; -import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; -import org.apache.druid.timeline.DataSegment; -import org.apache.druid.timeline.partition.NumberedShardSpec; - -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -public class KttmNestedComponentSupplier extends StandardComponentSupplier -{ - public KttmNestedComponentSupplier(TempDirProducer tempDirProducer) - { - super(tempDirProducer); - } - - @Override - public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, - JoinableFactoryWrapper joinableFactory, Injector injector) - { - SpecificSegmentsQuerySegmentWalker walker = super.createQuerySegmentWalker(conglomerate, joinableFactory, injector); - QueryableIndex idx = makeKttmIndex(tempDirProducer.newTempFolder()); - - walker.add( - DataSegment.builder() - .dataSource("kttm_nested") - .interval(Intervals.of("2019-08-25/2019-08-26")) - .version("1") - .shardSpec(new NumberedShardSpec(0, 0)) - .size(0) - .build(), - idx - ); - - return walker; - - } - - public static QueryableIndex makeKttmIndex(File tmpDir) - { - try { - final File directory = new File(tmpDir, StringUtils.format("kttm-index-%s", UUID.randomUUID())); - final IncrementalIndex index = makeWikipediaIncrementalIndex(); - TestIndex.INDEX_MERGER.persist(index, directory, IndexSpec.DEFAULT, null); - return TestIndex.INDEX_IO.loadIndex(directory); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static IncrementalIndex makeWikipediaIncrementalIndex() - { - final List dimensions = Arrays.asList( - new StringDimensionSchema("session"), - new StringDimensionSchema("number"), - new AutoTypeColumnSchema("event", null), - new AutoTypeColumnSchema("agent", null), - // new StringDimensionSchema("event"), - // new StringDimensionSchema("agent"), - new StringDimensionSchema("client_ip"), - new StringDimensionSchema("geo_ip"), - new StringDimensionSchema("language"), - new StringDimensionSchema("adblock_list"), - new StringDimensionSchema("app_version"), - new StringDimensionSchema("path"), - new StringDimensionSchema("loaded_image"), - new StringDimensionSchema("referrer"), - new StringDimensionSchema("referrer_host"), - new StringDimensionSchema("server_ip"), - new StringDimensionSchema("screen"), - new StringDimensionSchema("window"), - new LongDimensionSchema("session_length"), - new StringDimensionSchema("timezone"), - new LongDimensionSchema("timezone_offset") - ); - - final File tmpDir; - try { - tmpDir = FileUtils.createTempDir("test-index-input-source"); - try { - // InputSource inputSource = ResourceInputSource.of( - // TestIndex.class.getClassLoader(), - // "kttm-nested-v2-2019-08-25.json" - // ); - LocalInputSource inputSource = new LocalInputSource(new File("/home/dev/host/kttm"), "kttm*json"); - for (DimensionSchema dimensionSchema : dimensions) { - - } - return IndexBuilder - .create() - .segmentWriteOutMediumFactory(OffHeapMemorySegmentWriteOutMediumFactory.instance()) - .schema( - new IncrementalIndexSchema.Builder() - .withRollup(false) - .withTimestampSpec(new TimestampSpec("timestamp", null, null)) - .withDimensionsSpec(new DimensionsSpec(dimensions)) - .build() - ) - .inputSource( - inputSource - ) - .inputFormat(NestedDataTestUtils.DEFAULT_JSON_INPUT_FORMAT) - .inputTmpDir(new File(tmpDir, "tmpKttm")) - .buildIncrementalIndex(); - } finally { - FileUtils.deleteDirectory(tmpDir); - } - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - -} From 0d76a73c4ccef99ed179b8b0ced6a42a672475a7 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 25 Jun 2024 06:33:45 +0000 Subject: [PATCH 095/122] remove final --- .../java/org/apache/druid/sql/calcite/run/DruidHook.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index 1a1f8e09bfe6..99aa44da0a3d 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -65,10 +65,10 @@ public boolean equals(Object obj) } - final HookKey CONVERTED_PLAN = new HookKey<>("converted", RelNode.class); - final HookKey LOGICAL_PLAN = new HookKey<>("logicalPlan", RelNode.class); - final HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); - final HookKey SQL = new HookKey<>("sql", String.class); + HookKey CONVERTED_PLAN = new HookKey<>("converted", RelNode.class); + HookKey LOGICAL_PLAN = new HookKey<>("logicalPlan", RelNode.class); + HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); + HookKey SQL = new HookKey<>("sql", String.class); void invoke(HookKey key, T object); From 6c02cbdf4d5cbb798802dbef92d054dce978a19d Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 25 Jun 2024 06:38:13 +0000 Subject: [PATCH 096/122] fixes --- quidem-it/pom.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index cdbaa7b20454..0c48317ded34 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -62,6 +62,14 @@ org.apache.commons commons-lang3 + + org.apache.httpcomponents + httpcore + + + org.apache.httpcomponents + httpclient + com.github.rvesse airline @@ -287,6 +295,10 @@ jakarta.validation jakarta.validation-api + + jakarta.inject + jakarta.inject-api + org.apache.logging.log4j log4j-slf4j-impl @@ -449,6 +461,11 @@ junit-vintage-engine test + + org.junit.jupiter + junit-jupiter-api + test + junit junit From 3dfe5c4a05c4f68e50bd761d2d9c7144a1cf96ec Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 25 Jun 2024 07:08:01 +0000 Subject: [PATCH 097/122] add reflections --- extensions-contrib/tdigestsketch/pom.xml | 5 +++++ extensions-core/datasketches/pom.xml | 5 +++++ extensions-core/druid-catalog/pom.xml | 5 +++++ extensions-core/stats/pom.xml | 6 +++++- extensions-core/testing-tools/pom.xml | 5 +++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/extensions-contrib/tdigestsketch/pom.xml b/extensions-contrib/tdigestsketch/pom.xml index 489b0b995565..4c192d627462 100644 --- a/extensions-contrib/tdigestsketch/pom.xml +++ b/extensions-contrib/tdigestsketch/pom.xml @@ -164,6 +164,11 @@ junit-vintage-engine test + + org.reflections + reflections + test + org.easymock easymock diff --git a/extensions-core/datasketches/pom.xml b/extensions-core/datasketches/pom.xml index ee423909d192..75ff5a0868e0 100644 --- a/extensions-core/datasketches/pom.xml +++ b/extensions-core/datasketches/pom.xml @@ -170,6 +170,11 @@ junit-jupiter-params test + + org.reflections + reflections + test + org.junit.vintage junit-vintage-engine diff --git a/extensions-core/druid-catalog/pom.xml b/extensions-core/druid-catalog/pom.xml index a48a7f1e7b80..c5bafbeb8dc1 100644 --- a/extensions-core/druid-catalog/pom.xml +++ b/extensions-core/druid-catalog/pom.xml @@ -177,6 +177,11 @@ junit-vintage-engine test + + org.reflections + reflections + test + org.easymock easymock diff --git a/extensions-core/stats/pom.xml b/extensions-core/stats/pom.xml index 1b3a531dc421..048ad964bf8e 100644 --- a/extensions-core/stats/pom.xml +++ b/extensions-core/stats/pom.xml @@ -123,7 +123,11 @@ junit-vintage-engine test - + + org.reflections + reflections + test + org.apache.druid druid-processing diff --git a/extensions-core/testing-tools/pom.xml b/extensions-core/testing-tools/pom.xml index 086d32559d35..fd0eed880c28 100644 --- a/extensions-core/testing-tools/pom.xml +++ b/extensions-core/testing-tools/pom.xml @@ -145,6 +145,11 @@ junit-jupiter-params test + + org.reflections + reflections + test + org.junit.vintage junit-vintage-engine From 1a5faf1afbc9366231fe649a278165a131a102fe Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 25 Jun 2024 08:13:31 +0000 Subject: [PATCH 098/122] more pomxml stuff --- extensions-core/druid-bloom-filter/pom.xml | 5 +++++ extensions-core/histogram/pom.xml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/extensions-core/druid-bloom-filter/pom.xml b/extensions-core/druid-bloom-filter/pom.xml index 8ce419095de8..b57ede7b16b1 100644 --- a/extensions-core/druid-bloom-filter/pom.xml +++ b/extensions-core/druid-bloom-filter/pom.xml @@ -139,6 +139,11 @@ junit-vintage-engine test + + org.reflections + reflections + test + org.apache.druid druid-processing diff --git a/extensions-core/histogram/pom.xml b/extensions-core/histogram/pom.xml index c252cfb87d33..a1c1f91e379c 100644 --- a/extensions-core/histogram/pom.xml +++ b/extensions-core/histogram/pom.xml @@ -123,6 +123,11 @@ junit-vintage-engine test + + org.reflections + reflections + test + org.apache.druid druid-processing From 1b7dd8fd3ce76ec22379a2f4a5227892e2d37385 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 26 Jun 2024 10:07:47 +0000 Subject: [PATCH 099/122] stuff --- .../builtin/NestedDataOperatorConversions.java | 7 +++++-- .../sql/calcite/CalciteNestedDataQueryTest.java | 2 +- .../druid/sql/calcite/CalciteSysQueryTest.java | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java index 3fe049bdcb4d..266b8bb2d8f5 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java @@ -722,7 +722,9 @@ public DruidExpression toDruidExpression( public static class JsonObjectOperatorConversion implements SqlOperatorConversion { private static final String FUNCTION_NAME = "json_object"; - private static final SqlFunction SQL_FUNCTION = OperatorConversions + private static final SqlFunction SQL_FUNCTION = SqlStdOperatorTable.JSON_OBJECT; + + private static final SqlFunction SQL_FUNCTION0 = OperatorConversions .operatorBuilder(FUNCTION_NAME) .operandTypeChecker(OperandTypes.variadic(SqlOperandCountRanges.from(1))) .operandTypeInference((callBinding, returnType, operandTypes) -> { @@ -781,7 +783,8 @@ public DruidExpression toDruidExpression(PlannerContext plannerContext, RowSigna public static class ToJsonStringOperatorConversion implements SqlOperatorConversion { private static final String FUNCTION_NAME = "to_json_string"; - private static final SqlFunction SQL_FUNCTION = OperatorConversions + private static final SqlFunction SQL_FUNCTION = + OperatorConversions .operatorBuilder(StringUtils.toUpperCase(FUNCTION_NAME)) .operandTypes(SqlTypeFamily.ANY) .returnTypeCascadeNullable(SqlTypeName.VARCHAR) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java index 95a4d0c1c327..3e0e13281f29 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java @@ -4882,7 +4882,7 @@ public void testJsonQuery() public void testJsonQueryAndJsonObject() { testQuery( - "SELECT JSON_OBJECT(KEY 'n' VALUE JSON_QUERY(nester, '$.n'), KEY 'x' VALUE JSON_VALUE(nest, '$.x'))\n" + "SELECT TO_JSON_STRING(JSON_OBJECT(KEY 'n' VALUE JSON_QUERY(nester, '$.n'), KEY 'x' VALUE JSON_VALUE(nest, '$.x')))\n" + "FROM druid.nested", ImmutableList.of( Druids.newScanQueryBuilder() diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java index f03b13d8e262..c6d8307c99a3 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java @@ -97,4 +97,21 @@ public void testRoundOnAvgOnSysTableColumn() + " LogicalTableScan(table=[[sys, tasks]])\n") .run(); } + + @Test + public void testJsonObject() + { + testBuilder() + .sql( + "select JSON_OBJECT('name': COLUMN_NAME, 'type': \"DATA_TYPE\")" + + "from INFORMATION_SCHEMA.COLUMNS order by COLUMN_NAME limit 1" + ) + .expectedResults( + ImmutableList.of( + new Object[] {"{\"name\":\"CATALOG_NAME\",\"type\":\"VARCHAR\"}"} + ) + ) + .run(); + } + } From e7141e2080725cd765cfe1e13b8b90a2b9c5eaa4 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 26 Jun 2024 10:07:48 +0000 Subject: [PATCH 100/122] Revert "stuff" This reverts commit 1b7dd8fd3ce76ec22379a2f4a5227892e2d37385. --- .../builtin/NestedDataOperatorConversions.java | 7 ++----- .../sql/calcite/CalciteNestedDataQueryTest.java | 2 +- .../druid/sql/calcite/CalciteSysQueryTest.java | 17 ----------------- 3 files changed, 3 insertions(+), 23 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java index 266b8bb2d8f5..3fe049bdcb4d 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java @@ -722,9 +722,7 @@ public DruidExpression toDruidExpression( public static class JsonObjectOperatorConversion implements SqlOperatorConversion { private static final String FUNCTION_NAME = "json_object"; - private static final SqlFunction SQL_FUNCTION = SqlStdOperatorTable.JSON_OBJECT; - - private static final SqlFunction SQL_FUNCTION0 = OperatorConversions + private static final SqlFunction SQL_FUNCTION = OperatorConversions .operatorBuilder(FUNCTION_NAME) .operandTypeChecker(OperandTypes.variadic(SqlOperandCountRanges.from(1))) .operandTypeInference((callBinding, returnType, operandTypes) -> { @@ -783,8 +781,7 @@ public DruidExpression toDruidExpression(PlannerContext plannerContext, RowSigna public static class ToJsonStringOperatorConversion implements SqlOperatorConversion { private static final String FUNCTION_NAME = "to_json_string"; - private static final SqlFunction SQL_FUNCTION = - OperatorConversions + private static final SqlFunction SQL_FUNCTION = OperatorConversions .operatorBuilder(StringUtils.toUpperCase(FUNCTION_NAME)) .operandTypes(SqlTypeFamily.ANY) .returnTypeCascadeNullable(SqlTypeName.VARCHAR) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java index 3e0e13281f29..95a4d0c1c327 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java @@ -4882,7 +4882,7 @@ public void testJsonQuery() public void testJsonQueryAndJsonObject() { testQuery( - "SELECT TO_JSON_STRING(JSON_OBJECT(KEY 'n' VALUE JSON_QUERY(nester, '$.n'), KEY 'x' VALUE JSON_VALUE(nest, '$.x')))\n" + "SELECT JSON_OBJECT(KEY 'n' VALUE JSON_QUERY(nester, '$.n'), KEY 'x' VALUE JSON_VALUE(nest, '$.x'))\n" + "FROM druid.nested", ImmutableList.of( Druids.newScanQueryBuilder() diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java index c6d8307c99a3..f03b13d8e262 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java @@ -97,21 +97,4 @@ public void testRoundOnAvgOnSysTableColumn() + " LogicalTableScan(table=[[sys, tasks]])\n") .run(); } - - @Test - public void testJsonObject() - { - testBuilder() - .sql( - "select JSON_OBJECT('name': COLUMN_NAME, 'type': \"DATA_TYPE\")" - + "from INFORMATION_SCHEMA.COLUMNS order by COLUMN_NAME limit 1" - ) - .expectedResults( - ImmutableList.of( - new Object[] {"{\"name\":\"CATALOG_NAME\",\"type\":\"VARCHAR\"}"} - ) - ) - .run(); - } - } From c559bc3422bc337f97a8bd9e3de6516cdca254d6 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 26 Jun 2024 10:08:01 +0000 Subject: [PATCH 101/122] Revert "Revert "Revert "Revert "add kttm tx"""" This reverts commit 9a4d04a818291a937ec3a8a889fb2132fa8ed777. --- .../quidem/KttmNestedComponentSupplier.java | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java new file mode 100644 index 000000000000..813a14ecf706 --- /dev/null +++ b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.quidem; + +import com.google.inject.Injector; +import org.apache.druid.data.input.impl.DimensionSchema; +import org.apache.druid.data.input.impl.DimensionsSpec; +import org.apache.druid.data.input.impl.LocalInputSource; +import org.apache.druid.data.input.impl.LongDimensionSchema; +import org.apache.druid.data.input.impl.StringDimensionSchema; +import org.apache.druid.data.input.impl.TimestampSpec; +import org.apache.druid.java.util.common.FileUtils; +import org.apache.druid.java.util.common.Intervals; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.query.NestedDataTestUtils; +import org.apache.druid.query.QueryRunnerFactoryConglomerate; +import org.apache.druid.segment.AutoTypeColumnSchema; +import org.apache.druid.segment.IndexBuilder; +import org.apache.druid.segment.IndexSpec; +import org.apache.druid.segment.QueryableIndex; +import org.apache.druid.segment.TestIndex; +import org.apache.druid.segment.incremental.IncrementalIndex; +import org.apache.druid.segment.incremental.IncrementalIndexSchema; +import org.apache.druid.segment.join.JoinableFactoryWrapper; +import org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory; +import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; +import org.apache.druid.sql.calcite.TempDirProducer; +import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; +import org.apache.druid.timeline.DataSegment; +import org.apache.druid.timeline.partition.NumberedShardSpec; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class KttmNestedComponentSupplier extends StandardComponentSupplier +{ + public KttmNestedComponentSupplier(TempDirProducer tempDirProducer) + { + super(tempDirProducer); + } + + @Override + public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, + JoinableFactoryWrapper joinableFactory, Injector injector) + { + SpecificSegmentsQuerySegmentWalker walker = super.createQuerySegmentWalker(conglomerate, joinableFactory, injector); + QueryableIndex idx = makeKttmIndex(tempDirProducer.newTempFolder()); + + walker.add( + DataSegment.builder() + .dataSource("kttm_nested") + .interval(Intervals.of("2019-08-25/2019-08-26")) + .version("1") + .shardSpec(new NumberedShardSpec(0, 0)) + .size(0) + .build(), + idx + ); + + return walker; + + } + + public static QueryableIndex makeKttmIndex(File tmpDir) + { + try { + final File directory = new File(tmpDir, StringUtils.format("kttm-index-%s", UUID.randomUUID())); + final IncrementalIndex index = makeWikipediaIncrementalIndex(); + TestIndex.INDEX_MERGER.persist(index, directory, IndexSpec.DEFAULT, null); + return TestIndex.INDEX_IO.loadIndex(directory); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static IncrementalIndex makeWikipediaIncrementalIndex() + { + final List dimensions = Arrays.asList( + new StringDimensionSchema("session"), + new StringDimensionSchema("number"), + new AutoTypeColumnSchema("event", null), + new AutoTypeColumnSchema("agent", null), + // new StringDimensionSchema("event"), + // new StringDimensionSchema("agent"), + new StringDimensionSchema("client_ip"), + new StringDimensionSchema("geo_ip"), + new StringDimensionSchema("language"), + new StringDimensionSchema("adblock_list"), + new StringDimensionSchema("app_version"), + new StringDimensionSchema("path"), + new StringDimensionSchema("loaded_image"), + new StringDimensionSchema("referrer"), + new StringDimensionSchema("referrer_host"), + new StringDimensionSchema("server_ip"), + new StringDimensionSchema("screen"), + new StringDimensionSchema("window"), + new LongDimensionSchema("session_length"), + new StringDimensionSchema("timezone"), + new LongDimensionSchema("timezone_offset") + ); + + final File tmpDir; + try { + tmpDir = FileUtils.createTempDir("test-index-input-source"); + try { + // InputSource inputSource = ResourceInputSource.of( + // TestIndex.class.getClassLoader(), + // "kttm-nested-v2-2019-08-25.json" + // ); + LocalInputSource inputSource = new LocalInputSource(new File("/home/dev/host/kttm"), "kttm*json"); + for (DimensionSchema dimensionSchema : dimensions) { + + } + return IndexBuilder + .create() + .segmentWriteOutMediumFactory(OffHeapMemorySegmentWriteOutMediumFactory.instance()) + .schema( + new IncrementalIndexSchema.Builder() + .withRollup(false) + .withTimestampSpec(new TimestampSpec("timestamp", null, null)) + .withDimensionsSpec(new DimensionsSpec(dimensions)) + .build() + ) + .inputSource( + inputSource + ) + .inputFormat(NestedDataTestUtils.DEFAULT_JSON_INPUT_FORMAT) + .inputTmpDir(new File(tmpDir, "tmpKttm")) + .buildIncrementalIndex(); + } finally { + FileUtils.deleteDirectory(tmpDir); + } + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + +} From b8992434a93de5022aa7d6447b3d9eaa84306d47 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 26 Jun 2024 11:13:32 +0000 Subject: [PATCH 102/122] x --- quidem-it/pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 0c48317ded34..6147d583d423 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -464,7 +464,6 @@ org.junit.jupiter junit-jupiter-api - test junit @@ -537,4 +536,4 @@ - \ No newline at end of file + From cc4e0adcbfdfde3e4472eb18166beb387d4b0747 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 26 Jun 2024 12:06:50 +0000 Subject: [PATCH 103/122] make synch --- .../main/java/org/apache/druid/quidem/QuidemRecorder.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 4bc149f7c3c3..8a06815d6517 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -51,7 +51,7 @@ public QuidemRecorder(URI quidemURI, File file) } @Override - public void close() + public synchronized void close() { if (printStream != null) { printStream.close(); @@ -61,12 +61,14 @@ public void close() } @Override - public void invoke(HookKey key, String query) + public synchronized void invoke(HookKey key, String query) { if (DruidHook.SQL.equals(key)) { + printStream.println("# " + new Date()); printStream.print(query); printStream.println(";"); printStream.println("!ok"); + printStream.flush(); return; } } From 20c543dfc25a553186df3c967c0a7157609aba86 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 26 Jun 2024 12:27:15 +0000 Subject: [PATCH 104/122] Revert "Revert "Revert "Revert "Revert "add kttm tx""""" This reverts commit c559bc3422bc337f97a8bd9e3de6516cdca254d6. --- .../quidem/KttmNestedComponentSupplier.java | 160 ------------------ 1 file changed, 160 deletions(-) delete mode 100644 quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java b/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java deleted file mode 100644 index 813a14ecf706..000000000000 --- a/quidem-it/src/main/java/org/apache/druid/quidem/KttmNestedComponentSupplier.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.quidem; - -import com.google.inject.Injector; -import org.apache.druid.data.input.impl.DimensionSchema; -import org.apache.druid.data.input.impl.DimensionsSpec; -import org.apache.druid.data.input.impl.LocalInputSource; -import org.apache.druid.data.input.impl.LongDimensionSchema; -import org.apache.druid.data.input.impl.StringDimensionSchema; -import org.apache.druid.data.input.impl.TimestampSpec; -import org.apache.druid.java.util.common.FileUtils; -import org.apache.druid.java.util.common.Intervals; -import org.apache.druid.java.util.common.StringUtils; -import org.apache.druid.query.NestedDataTestUtils; -import org.apache.druid.query.QueryRunnerFactoryConglomerate; -import org.apache.druid.segment.AutoTypeColumnSchema; -import org.apache.druid.segment.IndexBuilder; -import org.apache.druid.segment.IndexSpec; -import org.apache.druid.segment.QueryableIndex; -import org.apache.druid.segment.TestIndex; -import org.apache.druid.segment.incremental.IncrementalIndex; -import org.apache.druid.segment.incremental.IncrementalIndexSchema; -import org.apache.druid.segment.join.JoinableFactoryWrapper; -import org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory; -import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker; -import org.apache.druid.sql.calcite.TempDirProducer; -import org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier; -import org.apache.druid.timeline.DataSegment; -import org.apache.druid.timeline.partition.NumberedShardSpec; - -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -public class KttmNestedComponentSupplier extends StandardComponentSupplier -{ - public KttmNestedComponentSupplier(TempDirProducer tempDirProducer) - { - super(tempDirProducer); - } - - @Override - public SpecificSegmentsQuerySegmentWalker createQuerySegmentWalker(QueryRunnerFactoryConglomerate conglomerate, - JoinableFactoryWrapper joinableFactory, Injector injector) - { - SpecificSegmentsQuerySegmentWalker walker = super.createQuerySegmentWalker(conglomerate, joinableFactory, injector); - QueryableIndex idx = makeKttmIndex(tempDirProducer.newTempFolder()); - - walker.add( - DataSegment.builder() - .dataSource("kttm_nested") - .interval(Intervals.of("2019-08-25/2019-08-26")) - .version("1") - .shardSpec(new NumberedShardSpec(0, 0)) - .size(0) - .build(), - idx - ); - - return walker; - - } - - public static QueryableIndex makeKttmIndex(File tmpDir) - { - try { - final File directory = new File(tmpDir, StringUtils.format("kttm-index-%s", UUID.randomUUID())); - final IncrementalIndex index = makeWikipediaIncrementalIndex(); - TestIndex.INDEX_MERGER.persist(index, directory, IndexSpec.DEFAULT, null); - return TestIndex.INDEX_IO.loadIndex(directory); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static IncrementalIndex makeWikipediaIncrementalIndex() - { - final List dimensions = Arrays.asList( - new StringDimensionSchema("session"), - new StringDimensionSchema("number"), - new AutoTypeColumnSchema("event", null), - new AutoTypeColumnSchema("agent", null), - // new StringDimensionSchema("event"), - // new StringDimensionSchema("agent"), - new StringDimensionSchema("client_ip"), - new StringDimensionSchema("geo_ip"), - new StringDimensionSchema("language"), - new StringDimensionSchema("adblock_list"), - new StringDimensionSchema("app_version"), - new StringDimensionSchema("path"), - new StringDimensionSchema("loaded_image"), - new StringDimensionSchema("referrer"), - new StringDimensionSchema("referrer_host"), - new StringDimensionSchema("server_ip"), - new StringDimensionSchema("screen"), - new StringDimensionSchema("window"), - new LongDimensionSchema("session_length"), - new StringDimensionSchema("timezone"), - new LongDimensionSchema("timezone_offset") - ); - - final File tmpDir; - try { - tmpDir = FileUtils.createTempDir("test-index-input-source"); - try { - // InputSource inputSource = ResourceInputSource.of( - // TestIndex.class.getClassLoader(), - // "kttm-nested-v2-2019-08-25.json" - // ); - LocalInputSource inputSource = new LocalInputSource(new File("/home/dev/host/kttm"), "kttm*json"); - for (DimensionSchema dimensionSchema : dimensions) { - - } - return IndexBuilder - .create() - .segmentWriteOutMediumFactory(OffHeapMemorySegmentWriteOutMediumFactory.instance()) - .schema( - new IncrementalIndexSchema.Builder() - .withRollup(false) - .withTimestampSpec(new TimestampSpec("timestamp", null, null)) - .withDimensionsSpec(new DimensionsSpec(dimensions)) - .build() - ) - .inputSource( - inputSource - ) - .inputFormat(NestedDataTestUtils.DEFAULT_JSON_INPUT_FORMAT) - .inputTmpDir(new File(tmpDir, "tmpKttm")) - .buildIncrementalIndex(); - } finally { - FileUtils.deleteDirectory(tmpDir); - } - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - -} From 82436df58565ae8eb8be2092b74a35577f081c67 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Wed, 17 Jul 2024 14:34:33 +0000 Subject: [PATCH 105/122] fix test;disable dep-check for module --- extensions-contrib/compressed-bigdecimal/pom.xml | 5 +++++ quidem-it/pom.xml | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/extensions-contrib/compressed-bigdecimal/pom.xml b/extensions-contrib/compressed-bigdecimal/pom.xml index 33b368b255eb..d6c27d888129 100644 --- a/extensions-contrib/compressed-bigdecimal/pom.xml +++ b/extensions-contrib/compressed-bigdecimal/pom.xml @@ -166,6 +166,11 @@ com.fasterxml.jackson.core jackson-annotations + + org.reflections + reflections + test + diff --git a/quidem-it/pom.xml b/quidem-it/pom.xml index 6147d583d423..9710ac4a7361 100644 --- a/quidem-it/pom.xml +++ b/quidem-it/pom.xml @@ -520,6 +520,13 @@ true + + org.apache.maven.plugins + maven-dependency-plugin + + true + + org.codehaus.mojo exec-maven-plugin From e388140b2a25787900eaa85675a00ce4f50f339a Mon Sep 17 00:00:00 2001 From: Benedict Jin Date: Thu, 18 Jul 2024 15:06:59 +0800 Subject: [PATCH 106/122] Apply suggestions from code review --- quidem-it/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/quidem-it/README.md b/quidem-it/README.md index e5cdc048558f..999a5103ceb2 100644 --- a/quidem-it/README.md +++ b/quidem-it/README.md @@ -27,7 +27,7 @@ Can be used to write tests against existing test backends (ComponentSupplier) - ### Install java&maven (if needed) If you don't have java&maven - one way to set that up is by using sdkman like this: -``` +```bash # install sdkman curl -s "https://get.sdkman.io" | bash # at the end of installation either open a new terminal; or follow the instructions at the end @@ -54,16 +54,16 @@ git clone --branch quidem-record https://github.com/kgyrtkirk/druid ### Launching a test generating broker * make sure to build the project first; one way to do that is: - ``` + ```bash mvn install -pl quidem-it/ -am -DskipTests -Pskip-static-checks ``` * launch the broker instance with: - ``` + ```bash mvn exec:exec -pl quidem-it -Dquidem.record.autostart=true ``` * the broker will be running at http://localhost:12345 * the used test configuration backend can configured by supplying `quidem.uri` - ``` + ```bash mvn exec:exec -pl quidem-it -Dquidem.uri=druidtest:///?componentSupplier=ThetaSketchComponentSupplier ``` * new record files can be started by calling http://localhost:12345/quidem/start From 76ff3f26e1e74bb9b5960e2e316b16bf2455ea5f Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Thu, 18 Jul 2024 07:25:19 +0000 Subject: [PATCH 107/122] add supress --- .../main/java/org/apache/druid/sql/calcite/run/DruidHook.java | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index 99aa44da0a3d..c790033ab7f3 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -97,6 +97,7 @@ public void close() }; } + @SuppressWarnings({"rawtypes", "unchecked"}) static void dispatch(HookKey key, T object) { List> hooks = GLOBAL.get(key); From e2a54b5758995157ad6f5b33e5ef32f1291c2429 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 19 Jul 2024 08:42:58 +0000 Subject: [PATCH 108/122] update --- .../java/org/apache/druid/sql/calcite/run/DruidHook.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index c790033ab7f3..c502e08ced4e 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -19,6 +19,7 @@ package org.apache.druid.sql.calcite.run; +import com.google.errorprone.annotations.Immutable; import org.apache.calcite.rel.RelNode; import java.io.Closeable; import java.util.ArrayList; @@ -30,10 +31,11 @@ @FunctionalInterface public interface DruidHook { + @Immutable class HookKey { - private String label; - private Class type; + private final String label; + private final Class type; public HookKey(String label, Class type) { From b38935a45065d67a90d94b531b128f008d0f64d9 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 19 Jul 2024 11:44:23 +0000 Subject: [PATCH 109/122] add test; fb --- .../druid/sql/calcite/run/DruidHook.java | 3 ++ .../druid/sql/calcite/run/DruidHookTest.java | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java index c502e08ced4e..e23d7a2c3a34 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java @@ -21,6 +21,8 @@ import com.google.errorprone.annotations.Immutable; import org.apache.calcite.rel.RelNode; +import org.apache.druid.annotations.SuppressFBWarnings; + import java.io.Closeable; import java.util.ArrayList; import java.util.HashMap; @@ -74,6 +76,7 @@ public boolean equals(Object obj) void invoke(HookKey key, T object); + @SuppressFBWarnings({"MS_OOI_PKGPROTECT"}) Map, List>> GLOBAL = new HashMap<>(); static void register(HookKey label, DruidHook hook) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java new file mode 100644 index 000000000000..f8bfb7bdfe05 --- /dev/null +++ b/sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.sql.calcite.run; + +import nl.jqno.equalsverifier.EqualsVerifier; +import org.junit.Test; + +public class DruidHookTest +{ + @Test + public void testHookKeyEquals() + { + EqualsVerifier.forClass(DruidHook.HookKey.class) + .withNonnullFields("label", "type") + .usingGetClass() + .verify(); + } +} From f7247e1bb78b87d9f13ad5ff54707ccce3446e5a Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 19 Jul 2024 15:13:17 +0000 Subject: [PATCH 110/122] use entryset --- .../org/apache/druid/quidem/Launcher.java | 8 ++++--- .../sql/calcite/CalciteTableAppendTest.java | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java index a3b8a19eeb9d..b185084e0a75 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java @@ -31,6 +31,7 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import java.util.Map.Entry; import java.util.Properties; import java.util.concurrent.TimeUnit; @@ -82,9 +83,10 @@ public static void main(String[] args) throws Exception { String quidemUri = System.getProperty(QUIDEM_URI, "druidtest:///"); Properties p = System.getProperties(); - for (Object string : p.keySet()) { - if (string.toString().startsWith("quidem")) { - log.info("[%s] -> %s", string, p.get(string)); + for (Entry entry : p.entrySet()) { + Object key = entry.getKey(); + if (key.toString().startsWith("quidem")) { + log.info("[%s] -> %s", key, entry.getValue()); } } log.info("Starting Quidem with URI[%s]", quidemUri); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java index 8b6170cbfaac..0f72925b85e2 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java @@ -216,6 +216,29 @@ public void testAppendCompatibleColumns() .run(); } + @Test + public void testAppendCompatibleColumns2() + { + // dim3 has different type (string/long) in foo/foo2 + testBuilder() + .sql("select u.dim3,f.dim3 from TABLE(APPEND('foo','foo')) u join foo f on u.dim3 is not distinct from f.dim3") + .expectedResults( + ResultMatchMode.RELAX_NULLS, + ImmutableList.of( + new Object[] {"11"}, + new Object[] {"12"}, + new Object[] {"10"}, + new Object[] {"[\"a\",\"b\"]"}, + new Object[] {"[\"b\",\"c\"]"}, + new Object[] {"d"}, + new Object[] {""}, + new Object[] {null}, + new Object[] {null} + ) + ) + .run(); + } + @Test public void testAppendNoTableIsInvalid() { From d227029b6b6317b54b7cd10ca7576feaa26c3124 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 19 Jul 2024 19:16:46 +0000 Subject: [PATCH 111/122] undo unrealted change --- .../sql/calcite/CalciteTableAppendTest.java | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java index 0f72925b85e2..8b6170cbfaac 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteTableAppendTest.java @@ -216,29 +216,6 @@ public void testAppendCompatibleColumns() .run(); } - @Test - public void testAppendCompatibleColumns2() - { - // dim3 has different type (string/long) in foo/foo2 - testBuilder() - .sql("select u.dim3,f.dim3 from TABLE(APPEND('foo','foo')) u join foo f on u.dim3 is not distinct from f.dim3") - .expectedResults( - ResultMatchMode.RELAX_NULLS, - ImmutableList.of( - new Object[] {"11"}, - new Object[] {"12"}, - new Object[] {"10"}, - new Object[] {"[\"a\",\"b\"]"}, - new Object[] {"[\"b\",\"c\"]"}, - new Object[] {"d"}, - new Object[] {""}, - new Object[] {null}, - new Object[] {null} - ) - ) - .run(); - } - @Test public void testAppendNoTableIsInvalid() { From ce667eeb5e43cd42c676ed8a577f2a85149ecc46 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 10:22:28 +0000 Subject: [PATCH 112/122] move stuff around / prepare to unglobalize --- .../apache/druid/quidem/QuidemRecorder.java | 2 +- .../calcite/planner/CalciteRulesManager.java | 2 +- .../sql/calcite/planner/PlannerFactory.java | 2 +- .../sql/calcite/planner/QueryHandler.java | 2 +- .../sql/{calcite/run => hook}/DruidHook.java | 13 ++-- .../org/apache/druid/sql/hook/DruidHook2.java | 24 ++++++ .../druid/sql/hook/DruidHookDispatcher.java | 74 +++++++++++++++++++ .../quidem/DruidQuidemCommandHandler.java | 4 +- .../druid/sql/calcite/run/DruidHookTest.java | 1 + 9 files changed, 111 insertions(+), 13 deletions(-) rename sql/src/main/java/org/apache/druid/sql/{calcite/run => hook}/DruidHook.java (98%) create mode 100644 sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java create mode 100644 sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index 8a06815d6517..a05f4fec8190 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -19,7 +19,7 @@ package org.apache.druid.quidem; -import org.apache.druid.sql.calcite.run.DruidHook; +import org.apache.druid.sql.hook.DruidHook; import java.io.File; import java.io.FileNotFoundException; diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java index 8b39be932e0f..a1855288cd21 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java @@ -68,8 +68,8 @@ import org.apache.druid.sql.calcite.rule.SortCollapseRule; import org.apache.druid.sql.calcite.rule.logical.DruidAggregateRemoveRedundancyRule; import org.apache.druid.sql.calcite.rule.logical.DruidLogicalRules; -import org.apache.druid.sql.calcite.run.DruidHook; import org.apache.druid.sql.calcite.run.EngineFeature; +import org.apache.druid.sql.hook.DruidHook; import java.util.ArrayList; import java.util.Collections; diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java index 61bf4ec8f7e7..ac369fd3f08f 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java @@ -46,10 +46,10 @@ import org.apache.druid.server.security.NoopEscalator; import org.apache.druid.sql.calcite.parser.DruidSqlParserImplFactory; import org.apache.druid.sql.calcite.planner.convertlet.DruidConvertletTable; -import org.apache.druid.sql.calcite.run.DruidHook; import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.schema.DruidSchemaName; +import org.apache.druid.sql.hook.DruidHook; import java.util.Map; import java.util.Properties; diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java index 41b03760c1c4..ed21e929f1fe 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java @@ -72,10 +72,10 @@ import org.apache.druid.sql.calcite.rel.DruidUnionRel; import org.apache.druid.sql.calcite.rel.logical.DruidLogicalConvention; import org.apache.druid.sql.calcite.rel.logical.DruidLogicalNode; -import org.apache.druid.sql.calcite.run.DruidHook; import org.apache.druid.sql.calcite.run.EngineFeature; import org.apache.druid.sql.calcite.run.QueryMaker; import org.apache.druid.sql.calcite.table.DruidTable; +import org.apache.druid.sql.hook.DruidHook; import org.apache.druid.utils.Throwables; import javax.annotation.Nullable; diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java similarity index 98% rename from sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java rename to sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java index e23d7a2c3a34..bc9226ed3f46 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/run/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.druid.sql.calcite.run; +package org.apache.druid.sql.hook; import com.google.errorprone.annotations.Immutable; import org.apache.calcite.rel.RelNode; @@ -33,6 +33,11 @@ @FunctionalInterface public interface DruidHook { + HookKey CONVERTED_PLAN = new HookKey<>("converted", RelNode.class); + HookKey LOGICAL_PLAN = new HookKey<>("logicalPlan", RelNode.class); + HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); + HookKey SQL = new HookKey<>("sql", String.class); + @Immutable class HookKey { @@ -66,14 +71,8 @@ public boolean equals(Object obj) HookKey other = (HookKey) obj; return Objects.equals(label, other.label) && Objects.equals(type, other.type); } - } - HookKey CONVERTED_PLAN = new HookKey<>("converted", RelNode.class); - HookKey LOGICAL_PLAN = new HookKey<>("logicalPlan", RelNode.class); - HookKey DRUID_PLAN = new HookKey<>("druidPlan", RelNode.class); - HookKey SQL = new HookKey<>("sql", String.class); - void invoke(HookKey key, T object); @SuppressFBWarnings({"MS_OOI_PKGPROTECT"}) diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java new file mode 100644 index 000000000000..e1bf52b74a8d --- /dev/null +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.sql.hook; + +public interface DruidHook2 +{ +} diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java new file mode 100644 index 000000000000..cfc37523a022 --- /dev/null +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.sql.hook; + +import com.google.inject.Inject; +import org.apache.druid.sql.hook.DruidHook.HookKey; + +import java.io.Closeable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DruidHookDispatcher +{ + @Inject + public DruidHookDispatcher() + { + } + + Map, List>> GLOBAL = new HashMap<>(); + + void register(HookKey label, DruidHook hook) + { + GLOBAL.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); + } + + void unregister(HookKey key, DruidHook hook) + { + GLOBAL.get(key).remove(hook); + } + + Closeable withHook(HookKey key, DruidHook hook) + { + register(key, hook); + return new Closeable() + { + @Override + public void close() + { + unregister(key, hook); + } + }; + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + void dispatch(HookKey key, T object) + { + List> hooks = GLOBAL.get(key); + if (hooks != null) { + for (DruidHook hook : hooks) { + hook.invoke(key, object); + } + } + } + +} diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java index 86876cb90ee7..58ab62a24f9f 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java @@ -34,9 +34,9 @@ import org.apache.druid.query.Query; import org.apache.druid.sql.calcite.BaseCalciteQueryTest; import org.apache.druid.sql.calcite.rel.DruidRel; -import org.apache.druid.sql.calcite.run.DruidHook; -import org.apache.druid.sql.calcite.run.DruidHook.HookKey; import org.apache.druid.sql.calcite.util.QueryLogHook; +import org.apache.druid.sql.hook.DruidHook; +import org.apache.druid.sql.hook.DruidHook.HookKey; import java.io.Closeable; import java.io.IOException; diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java index f8bfb7bdfe05..62190fb0c693 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/run/DruidHookTest.java @@ -20,6 +20,7 @@ package org.apache.druid.sql.calcite.run; import nl.jqno.equalsverifier.EqualsVerifier; +import org.apache.druid.sql.hook.DruidHook; import org.junit.Test; public class DruidHookTest From f6cc540368c54480ebaae6e9ecee5caca872e513 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 10:33:38 +0000 Subject: [PATCH 113/122] use druidhookdispatcherr#1 --- .../test/java/org/apache/druid/msq/test/MSQTestBase.java | 4 +++- .../apache/druid/sql/calcite/planner/PlannerFactory.java | 8 ++++++-- .../org/apache/druid/sql/hook/DruidHookDispatcher.java | 8 ++++---- .../test/java/org/apache/druid/sql/SqlStatementTest.java | 4 +++- .../apache/druid/sql/avatica/DruidAvaticaHandlerTest.java | 4 +++- .../org/apache/druid/sql/avatica/DruidStatementTest.java | 4 +++- .../sql/calcite/SqlVectorizedExpressionSanityTest.java | 4 +++- .../apache/druid/sql/calcite/util/SqlTestFramework.java | 4 +++- .../java/org/apache/druid/sql/http/SqlResourceTest.java | 4 +++- 9 files changed, 31 insertions(+), 13 deletions(-) diff --git a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java index 5f0bd545b7c6..cce6f14c7cc2 100644 --- a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java +++ b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java @@ -186,6 +186,7 @@ import org.apache.druid.sql.calcite.util.TestDataBuilder; import org.apache.druid.sql.calcite.view.InProcessViewManager; import org.apache.druid.sql.guice.SqlBindings; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.storage.StorageConfig; import org.apache.druid.storage.StorageConnector; import org.apache.druid.storage.StorageConnectorModule; @@ -571,7 +572,8 @@ public String getFormatString() new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), catalogResolver, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); sqlStatementFactory = CalciteTests.createSqlStatementFactory(engine, plannerFactory); diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java index ac369fd3f08f..43a67bda9fe9 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java @@ -50,6 +50,7 @@ import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.schema.DruidSchemaName; import org.apache.druid.sql.hook.DruidHook; +import org.apache.druid.sql.hook.DruidHookDispatcher; import java.util.Map; import java.util.Properties; @@ -65,6 +66,7 @@ public class PlannerFactory extends PlannerToolbox .setConformance(DruidConformance.instance()) .setParserFactory(new DruidSqlParserImplFactory()) // Custom SQL parser factory .build(); + private final DruidHookDispatcher hookDispatcher; @Inject public PlannerFactory( @@ -78,7 +80,8 @@ public PlannerFactory( final CalciteRulesManager calciteRuleManager, final JoinableFactoryWrapper joinableFactoryWrapper, final CatalogResolver catalog, - final AuthConfig authConfig + final AuthConfig authConfig, + final DruidHookDispatcher hookDispatcher ) { super( @@ -94,6 +97,7 @@ public PlannerFactory( authorizerMapper, authConfig ); + this.hookDispatcher = hookDispatcher; } /** @@ -113,7 +117,7 @@ public DruidPlanner createPlanner( queryContext, hook ); - DruidHook.dispatch(DruidHook.SQL, sql); + hookDispatcher.dispatch(DruidHook.SQL, sql); return new DruidPlanner(buildFrameworkConfig(context), context, engine, hook); } diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java index cfc37523a022..688a5e9a3e46 100644 --- a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java @@ -37,17 +37,17 @@ public DruidHookDispatcher() Map, List>> GLOBAL = new HashMap<>(); - void register(HookKey label, DruidHook hook) + public void register(HookKey label, DruidHook hook) { GLOBAL.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); } - void unregister(HookKey key, DruidHook hook) + public void unregister(HookKey key, DruidHook hook) { GLOBAL.get(key).remove(hook); } - Closeable withHook(HookKey key, DruidHook hook) + public Closeable withHook(HookKey key, DruidHook hook) { register(key, hook); return new Closeable() @@ -61,7 +61,7 @@ public void close() } @SuppressWarnings({"rawtypes", "unchecked"}) - void dispatch(HookKey key, T object) + public void dispatch(HookKey key, T object) { List> hooks = GLOBAL.get(key); if (hooks != null) { diff --git a/sql/src/test/java/org/apache/druid/sql/SqlStatementTest.java b/sql/src/test/java/org/apache/druid/sql/SqlStatementTest.java index b332b6dabfa2..1a7b6e3a7c51 100644 --- a/sql/src/test/java/org/apache/druid/sql/SqlStatementTest.java +++ b/sql/src/test/java/org/apache/druid/sql/SqlStatementTest.java @@ -58,6 +58,7 @@ import org.apache.druid.sql.calcite.planner.PrepareResult; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.sql.http.SqlQuery; import org.easymock.EasyMock; import org.hamcrest.MatcherAssert; @@ -158,7 +159,8 @@ public void setUp() new CalciteRulesManager(ImmutableSet.of()), joinableFactoryWrapper, CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); this.sqlStatementFactory = new SqlStatementFactory( diff --git a/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java b/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java index cccaab75b6f0..518e225c491b 100644 --- a/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java +++ b/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java @@ -89,6 +89,7 @@ import org.apache.druid.sql.calcite.util.CalciteTestBase; import org.apache.druid.sql.calcite.util.CalciteTests; import org.apache.druid.sql.guice.SqlModule; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.eclipse.jetty.server.Server; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; @@ -1048,7 +1049,8 @@ private SqlStatementFactory makeStatementFactory() new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ) ); } diff --git a/sql/src/test/java/org/apache/druid/sql/avatica/DruidStatementTest.java b/sql/src/test/java/org/apache/druid/sql/avatica/DruidStatementTest.java index 81cd1c692318..ed855f9c5f86 100644 --- a/sql/src/test/java/org/apache/druid/sql/avatica/DruidStatementTest.java +++ b/sql/src/test/java/org/apache/druid/sql/avatica/DruidStatementTest.java @@ -47,6 +47,7 @@ import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTestBase; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.junit.Assert; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; @@ -112,7 +113,8 @@ public void setUp() new CalciteRulesManager(ImmutableSet.of()), joinableFactoryWrapper, CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); this.sqlStatementFactory = CalciteTests.createSqlStatementFactory( CalciteTests.createMockSqlEngine(walker, conglomerate), diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/SqlVectorizedExpressionSanityTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/SqlVectorizedExpressionSanityTest.java index 304400bc3d80..07f57a5deeb3 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/SqlVectorizedExpressionSanityTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/SqlVectorizedExpressionSanityTest.java @@ -49,6 +49,7 @@ import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.testing.InitializedNullHandlingTest; import org.apache.druid.timeline.DataSegment; import org.apache.druid.timeline.partition.LinearShardSpec; @@ -152,7 +153,8 @@ public static void setupClass() new CalciteRulesManager(ImmutableSet.of()), joinableFactoryWrapper, CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); } diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java index 4374f1e86e27..84c8a2990248 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/SqlTestFramework.java @@ -68,6 +68,7 @@ import org.apache.druid.sql.calcite.view.DruidViewMacroFactory; import org.apache.druid.sql.calcite.view.InProcessViewManager; import org.apache.druid.sql.calcite.view.ViewManager; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.timeline.DataSegment; import javax.inject.Named; @@ -502,7 +503,8 @@ public PlannerFixture( new CalciteRulesManager(componentSupplier.extensionCalciteRules()), framework.injector.getInstance(JoinableFactoryWrapper.class), framework.builder.catalogResolver, - authConfig != null ? authConfig : new AuthConfig() + authConfig != null ? authConfig : new AuthConfig(), + new DruidHookDispatcher() ); componentSupplier.finalizePlanner(this); this.statementFactory = QueryFrameworkUtils.createSqlStatementFactory( diff --git a/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java b/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java index fa3c1edcea24..665d5873b461 100644 --- a/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java +++ b/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java @@ -102,6 +102,7 @@ import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTestBase; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.jupiter.api.AfterAll; @@ -259,7 +260,8 @@ public void setUp() throws Exception new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); lifecycleManager = new SqlLifecycleManager() From 78b75d3e8ee776e990094c4e4e5125816bbb6fb9 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 10:42:41 +0000 Subject: [PATCH 114/122] move more to non-static --- .../druid/msq/exec/ResultsContextSerdeTest.java | 4 +++- .../druid/sql/calcite/planner/PlannerContext.java | 6 ++++++ .../druid/sql/calcite/planner/PlannerFactory.java | 7 +++---- .../druid/sql/calcite/planner/PlannerToolbox.java | 11 ++++++++++- .../druid/sql/calcite/planner/QueryHandler.java | 3 ++- .../sql/calcite/expression/ExpressionTestHelper.java | 6 ++++-- .../calcite/external/ExternalTableScanRuleTest.java | 4 +++- .../sql/calcite/planner/CalcitePlannerModuleTest.java | 7 +++++-- .../sql/calcite/planner/DruidRexExecutorTest.java | 4 +++- 9 files changed, 39 insertions(+), 13 deletions(-) diff --git a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/ResultsContextSerdeTest.java b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/ResultsContextSerdeTest.java index b60233925762..72f2c8176223 100644 --- a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/ResultsContextSerdeTest.java +++ b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/ResultsContextSerdeTest.java @@ -43,6 +43,7 @@ import org.apache.druid.sql.calcite.schema.NamedViewSchema; import org.apache.druid.sql.calcite.schema.ViewSchema; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Before; @@ -75,7 +76,8 @@ NamedViewSchema.NAME, new NamedViewSchema(EasyMock.createMock(ViewSchema.class)) "druid", new CalciteRulesManager(ImmutableSet.of()), CalciteTests.TEST_AUTHORIZER_MAPPER, - AuthConfig.newBuilder().build() + AuthConfig.newBuilder().build(), + new DruidHookDispatcher() ); final NativeSqlEngine engine = CalciteTests.createMockSqlEngine( EasyMock.createMock(QuerySegmentWalker.class), diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerContext.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerContext.java index b7e2de3e66b2..21ad4c236633 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerContext.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerContext.java @@ -55,6 +55,7 @@ import org.apache.druid.sql.calcite.run.EngineFeature; import org.apache.druid.sql.calcite.run.QueryMaker; import org.apache.druid.sql.calcite.run.SqlEngine; +import org.apache.druid.sql.hook.DruidHook.HookKey; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.Interval; @@ -668,4 +669,9 @@ public LookupExtractor getLookup(final String lookupName) return lookupCache.getLookup(lookupName); } + + public void dispatchHook(HookKey key, T object) + { + plannerToolbox.getHookDispatcher().dispatch(key, object); + } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java index 43a67bda9fe9..514952972d39 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerFactory.java @@ -66,7 +66,6 @@ public class PlannerFactory extends PlannerToolbox .setConformance(DruidConformance.instance()) .setParserFactory(new DruidSqlParserImplFactory()) // Custom SQL parser factory .build(); - private final DruidHookDispatcher hookDispatcher; @Inject public PlannerFactory( @@ -95,9 +94,9 @@ public PlannerFactory( druidSchemaName, calciteRuleManager, authorizerMapper, - authConfig + authConfig, + hookDispatcher ); - this.hookDispatcher = hookDispatcher; } /** @@ -117,7 +116,7 @@ public DruidPlanner createPlanner( queryContext, hook ); - hookDispatcher.dispatch(DruidHook.SQL, sql); + context.dispatchHook(DruidHook.SQL, sql); return new DruidPlanner(buildFrameworkConfig(context), context, engine, hook); } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerToolbox.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerToolbox.java index f00098261189..d8e3a25f4583 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerToolbox.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerToolbox.java @@ -26,6 +26,7 @@ import org.apache.druid.server.security.AuthConfig; import org.apache.druid.server.security.AuthorizerMapper; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; +import org.apache.druid.sql.hook.DruidHookDispatcher; public class PlannerToolbox { @@ -40,6 +41,7 @@ public class PlannerToolbox protected final CalciteRulesManager calciteRuleManager; protected final AuthorizerMapper authorizerMapper; protected final AuthConfig authConfig; + protected final DruidHookDispatcher hookDispatcher; public PlannerToolbox( final DruidOperatorTable operatorTable, @@ -52,7 +54,8 @@ public PlannerToolbox( final String druidSchemaName, final CalciteRulesManager calciteRuleManager, final AuthorizerMapper authorizerMapper, - final AuthConfig authConfig + final AuthConfig authConfig, + final DruidHookDispatcher hookDispatcher ) { this.operatorTable = operatorTable; @@ -66,6 +69,7 @@ public PlannerToolbox( this.calciteRuleManager = calciteRuleManager; this.authorizerMapper = authorizerMapper; this.authConfig = authConfig; + this.hookDispatcher = hookDispatcher; } public DruidOperatorTable operatorTable() @@ -117,4 +121,9 @@ public AuthConfig getAuthConfig() { return authConfig; } + + public DruidHookDispatcher getHookDispatcher() + { + return hookDispatcher; + } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java index ed21e929f1fe..b8f25dd5dcf1 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java @@ -563,7 +563,8 @@ protected PlannerResult planWithDruidConvention() throws ValidationException .plus(DruidLogicalConvention.instance()), newRoot ); - DruidHook.dispatch(DruidHook.DRUID_PLAN, newRoot); + + plannerContext.dispatchHook(DruidHook.DRUID_PLAN, newRoot); DruidQueryGenerator generator = new DruidQueryGenerator(plannerContext, (DruidLogicalNode) newRoot, rexBuilder); DruidQuery baseQuery = generator.buildQuery(); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionTestHelper.java b/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionTestHelper.java index 6155678c8459..f4ada1f1c179 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionTestHelper.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionTestHelper.java @@ -62,6 +62,7 @@ import org.apache.druid.sql.calcite.table.RowSignatures; import org.apache.druid.sql.calcite.util.CalciteTestBase; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.easymock.EasyMock; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; @@ -97,7 +98,8 @@ NamedViewSchema.NAME, new NamedViewSchema(EasyMock.createMock(ViewSchema.class)) "druid", new CalciteRulesManager(ImmutableSet.of()), CalciteTests.TEST_AUTHORIZER_MAPPER, - AuthConfig.newBuilder().build() + AuthConfig.newBuilder().build(), + new DruidHookDispatcher() ); public static final PlannerContext PLANNER_CONTEXT = PlannerContext.create( PLANNER_TOOLBOX, @@ -336,7 +338,7 @@ void testExpression( } ExprEval result = PLANNER_CONTEXT.parseExpression(expression.getExpression()) - + .eval(expressionBindings); Assert.assertEquals("Result for: " + rexNode, expectedResult, result.value()); diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/external/ExternalTableScanRuleTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/external/ExternalTableScanRuleTest.java index 64a626f682c4..fe26ba9db8c7 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/external/ExternalTableScanRuleTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/external/ExternalTableScanRuleTest.java @@ -39,6 +39,7 @@ import org.apache.druid.sql.calcite.schema.NamedViewSchema; import org.apache.druid.sql.calcite.schema.ViewSchema; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Test; @@ -71,7 +72,8 @@ NamedViewSchema.NAME, new NamedViewSchema(EasyMock.createMock(ViewSchema.class)) "druid", new CalciteRulesManager(ImmutableSet.of()), CalciteTests.TEST_AUTHORIZER_MAPPER, - AuthConfig.newBuilder().build() + AuthConfig.newBuilder().build(), + new DruidHookDispatcher() ); final PlannerContext plannerContext = PlannerContext.create( toolbox, diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/planner/CalcitePlannerModuleTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/planner/CalcitePlannerModuleTest.java index 43d47733277f..89df405b7f1f 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/planner/CalcitePlannerModuleTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/planner/CalcitePlannerModuleTest.java @@ -50,6 +50,7 @@ import org.apache.druid.sql.calcite.schema.NamedSchema; import org.apache.druid.sql.calcite.util.CalciteTestBase; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.easymock.EasyMock; import org.easymock.EasyMockExtension; import org.easymock.Mock; @@ -192,7 +193,8 @@ public void testExtensionCalciteRule() "druid", new CalciteRulesManager(ImmutableSet.of()), CalciteTests.TEST_AUTHORIZER_MAPPER, - AuthConfig.newBuilder().build() + AuthConfig.newBuilder().build(), + new DruidHookDispatcher() ); PlannerContext context = PlannerContext.create( @@ -224,7 +226,8 @@ public void testConfigurableBloat() "druid", new CalciteRulesManager(ImmutableSet.of()), CalciteTests.TEST_AUTHORIZER_MAPPER, - AuthConfig.newBuilder().build() + AuthConfig.newBuilder().build(), + new DruidHookDispatcher() ); PlannerContext contextWithBloat = PlannerContext.create( diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/planner/DruidRexExecutorTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/planner/DruidRexExecutorTest.java index 205f3379d71b..072bdd6b6e82 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/planner/DruidRexExecutorTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/planner/DruidRexExecutorTest.java @@ -54,6 +54,7 @@ import org.apache.druid.sql.calcite.table.RowSignatures; import org.apache.druid.sql.calcite.util.CalciteTestBase; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.testing.InitializedNullHandlingTest; import org.easymock.EasyMock; import org.junit.Assert; @@ -100,7 +101,8 @@ NamedViewSchema.NAME, new NamedViewSchema(EasyMock.createMock(ViewSchema.class)) "druid", new CalciteRulesManager(ImmutableSet.of()), CalciteTests.TEST_AUTHORIZER_MAPPER, - AuthConfig.newBuilder().build() + AuthConfig.newBuilder().build(), + new DruidHookDispatcher() ); private static final PlannerContext PLANNER_CONTEXT = PlannerContext.create( PLANNER_TOOLBOX, From 9ac26e3a89ee237a38046a7d95949df82b855d4f Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 12:29:36 +0000 Subject: [PATCH 115/122] wire-in hookdispatcher thru connection/etc --- .../druid/quidem/QuidemCaptureResource.java | 6 ++++- .../apache/druid/quidem/QuidemRecorder.java | 9 ++++--- .../calcite/planner/CalciteRulesManager.java | 3 ++- .../sql/calcite/planner/QueryHandler.java | 4 ++-- .../org/apache/druid/sql/hook/DruidHook.java | 12 +++++----- .../druid/sql/hook/DruidHookDispatcher.java | 2 ++ .../druid/quidem/DruidAvaticaTestDriver.java | 5 ++-- .../druid/quidem/DruidConnectionExtras.java | 24 ++++++++++++++++++- .../quidem/DruidQuidemCommandHandler.java | 11 +++++++-- 9 files changed, 58 insertions(+), 18 deletions(-) diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index e1d174ccd7fb..557ea5f79b98 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -22,6 +22,7 @@ import com.google.inject.Inject; import org.apache.druid.guice.LazySingleton; import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.sql.hook.DruidHookDispatcher; import javax.inject.Named; import javax.ws.rs.GET; @@ -40,11 +41,13 @@ public class QuidemCaptureResource .getPathFromProjectRoot("quidem-it/src/test/quidem/org.apache.druid.quidem.QTest"); private URI quidemURI; private QuidemRecorder recorder = null; + private DruidHookDispatcher hookDispatcher; @Inject - public QuidemCaptureResource(@Named("quidem") URI quidemURI) + public QuidemCaptureResource(@Named("quidem") URI quidemURI, DruidHookDispatcher hookDispatcher) { this.quidemURI = quidemURI; + this.hookDispatcher = hookDispatcher; } @GET @@ -55,6 +58,7 @@ public synchronized String start() stopIfRunning(); recorder = new QuidemRecorder( quidemURI, + hookDispatcher, genRecordFilePath() ); return recorder.toString(); diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java index a05f4fec8190..5f2d6a192ed1 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java +++ b/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java @@ -20,6 +20,7 @@ package org.apache.druid.quidem; import org.apache.druid.sql.hook.DruidHook; +import org.apache.druid.sql.hook.DruidHookDispatcher; import java.io.File; import java.io.FileNotFoundException; @@ -34,9 +35,11 @@ public class QuidemRecorder implements AutoCloseable, DruidHook { private PrintStream printStream; private File file; + private DruidHookDispatcher hookDispatcher; - public QuidemRecorder(URI quidemURI, File file) + public QuidemRecorder(URI quidemURI, DruidHookDispatcher hookDispatcher, File file) { + this.hookDispatcher = hookDispatcher; this.file = file; try { this.printStream = new PrintStream(new FileOutputStream(file), true, StandardCharsets.UTF_8.name()); @@ -47,7 +50,7 @@ public QuidemRecorder(URI quidemURI, File file) printStream.println("#started " + new Date()); printStream.println("!use " + quidemURI); printStream.println("!set outputformat mysql"); - DruidHook.register(DruidHook.SQL, this); + hookDispatcher.register(DruidHook.SQL, this); } @Override @@ -57,7 +60,7 @@ public synchronized void close() printStream.close(); printStream = null; } - DruidHook.unregister(DruidHook.SQL, this); + hookDispatcher.unregister(DruidHook.SQL, this); } @Override diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java index a1855288cd21..c42c237ee365 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/CalciteRulesManager.java @@ -395,7 +395,8 @@ private static class SaveLogicalPlanProgram implements Program public RelNode run(RelOptPlanner planner, RelNode rel, RelTraitSet requiredOutputTraits, List materializations, List lattices) { - DruidHook.dispatch(DruidHook.LOGICAL_PLAN, rel); + PlannerContext pctx = planner.getContext().unwrapOrThrow(PlannerContext.class); + pctx.dispatchHook(DruidHook.LOGICAL_PLAN, rel); return rel; } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java index b8f25dd5dcf1..b543be135cc2 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java @@ -155,7 +155,7 @@ public void prepare() isPrepared = true; SqlNode validatedQueryNode = validatedQueryNode(); rootQueryRel = handlerContext.planner().rel(validatedQueryNode); - DruidHook.dispatch(DruidHook.CONVERTED_PLAN, rootQueryRel.rel); + handlerContext.plannerContext().dispatchHook(DruidHook.CONVERTED_PLAN, rootQueryRel.rel); handlerContext.hook().captureQueryRel(rootQueryRel); final RelDataTypeFactory typeFactory = rootQueryRel.rel.getCluster().getTypeFactory(); final SqlValidator validator = handlerContext.planner().getValidator(); @@ -592,7 +592,7 @@ protected PlannerResult planWithDruidConvention() throws ValidationException handlerContext.hook().captureDruidRel(druidRel); - DruidHook.dispatch(DruidHook.DRUID_PLAN, druidRel); + plannerContext.dispatchHook(DruidHook.DRUID_PLAN, druidRel); if (explain != null) { return planExplanation(possiblyLimitedRoot, druidRel, true); diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java index bc9226ed3f46..fd2b32ebb984 100644 --- a/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java @@ -78,31 +78,31 @@ public boolean equals(Object obj) @SuppressFBWarnings({"MS_OOI_PKGPROTECT"}) Map, List>> GLOBAL = new HashMap<>(); - static void register(HookKey label, DruidHook hook) + static void register1(HookKey label, DruidHook hook) { GLOBAL.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); } - static void unregister(HookKey key, DruidHook hook) + static void unregister1(HookKey key, DruidHook hook) { GLOBAL.get(key).remove(hook); } - static Closeable withHook(HookKey key, DruidHook hook) + static Closeable withHook1(HookKey key, DruidHook hook) { - register(key, hook); + register1(key, hook); return new Closeable() { @Override public void close() { - unregister(key, hook); + unregister1(key, hook); } }; } @SuppressWarnings({"rawtypes", "unchecked"}) - static void dispatch(HookKey key, T object) + static void dispatch12(HookKey key, T object) { List> hooks = GLOBAL.get(key); if (hooks != null) { diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java index 688a5e9a3e46..47b80ddca366 100644 --- a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java @@ -20,6 +20,7 @@ package org.apache.druid.sql.hook; import com.google.inject.Inject; +import org.apache.druid.guice.LazySingleton; import org.apache.druid.sql.hook.DruidHook.HookKey; import java.io.Closeable; @@ -28,6 +29,7 @@ import java.util.List; import java.util.Map; +@LazySingleton public class DruidHookDispatcher { @Inject diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java index be48af21b8f8..d2a7b461dfc8 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java @@ -70,6 +70,7 @@ import org.apache.druid.sql.calcite.util.SqlTestFramework.PlannerComponentSupplier; import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier; import org.apache.druid.sql.guice.SqlModule; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.http.client.utils.URIBuilder; import org.eclipse.jetty.server.Server; @@ -138,9 +139,9 @@ public DruidSchemaCatalog getLookupNodeService(QueryRunnerFactoryConglomerate co @Provides @LazySingleton - public DruidConnectionExtras getConnectionExtras(ObjectMapper objectMapper) + public DruidConnectionExtras getConnectionExtras(ObjectMapper objectMapper, DruidHookDispatcher druidHookDispatcher) { - return new DruidConnectionExtras.DruidConnectionExtrasImpl(objectMapper); + return new DruidConnectionExtras.DruidConnectionExtrasImpl(objectMapper, druidHookDispatcher); } @Provides diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java index 75bdd4280fab..2ba27bdd7fc9 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java @@ -20,18 +20,25 @@ package org.apache.druid.quidem; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.druid.sql.hook.DruidHookDispatcher; + +import java.sql.Connection; public interface DruidConnectionExtras { ObjectMapper getObjectMapper(); + DruidHookDispatcher getDruidHookDispatcher(); + class DruidConnectionExtrasImpl implements DruidConnectionExtras { private final ObjectMapper objectMapper; + private final DruidHookDispatcher druidHookDispatcher; - public DruidConnectionExtrasImpl(ObjectMapper objectMapper) + public DruidConnectionExtrasImpl(ObjectMapper objectMapper, DruidHookDispatcher druidHookDispatcher) { this.objectMapper = objectMapper; + this.druidHookDispatcher = druidHookDispatcher; } @Override @@ -39,5 +46,20 @@ public ObjectMapper getObjectMapper() { return objectMapper; } + + @Override + public DruidHookDispatcher getDruidHookDispatcher() + { + return druidHookDispatcher; + } } + + static DruidConnectionExtras unwrapOrThrow(Connection connection) + { + if(connection instanceof DruidConnectionExtras ) { + return (DruidConnectionExtras) connection; + } + throw new UnsupportedOperationException("Expected DruidConnectionExtras to be implemented by connection!"); + } + } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java index 58ab62a24f9f..141ed0b67e4e 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java @@ -37,10 +37,12 @@ import org.apache.druid.sql.calcite.util.QueryLogHook; import org.apache.druid.sql.hook.DruidHook; import org.apache.druid.sql.hook.DruidHook.HookKey; +import org.apache.druid.sql.hook.DruidHookDispatcher; import java.io.Closeable; import java.io.IOException; import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; @@ -167,10 +169,11 @@ abstract static class AbstractRelPlanCommand extends AbstractPlanCommand } @Override - protected final void executeExplain(Context x) throws IOException + protected final void executeExplain(Context x) throws IOException, SQLException { + DruidHookDispatcher dhp = unwrapDruidHookDispatcher(x); List logged = new ArrayList<>(); - try (Closeable unhook = DruidHook.withHook(hook, (key, relNode) -> { + try (Closeable unhook = dhp.withHook(hook, (key, relNode) -> { logged.add(relNode); })) { executeQuery(x); @@ -184,6 +187,10 @@ protected final void executeExplain(Context x) throws IOException x.echo(ImmutableList.of(str)); } } + + protected final DruidHookDispatcher unwrapDruidHookDispatcher(Context x) { + return DruidConnectionExtras.unwrapOrThrow(x.connection()).getDruidHookDispatcher(); + } } static class LogicalPlanCommand extends AbstractRelPlanCommand From df4224568558f07ebb672a058eeaf4e9e3e00522 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 13:14:51 +0000 Subject: [PATCH 116/122] add apidoc/etc --- .../org/apache/druid/sql/hook/DruidHook.java | 49 ++----------------- .../org/apache/druid/sql/hook/DruidHook2.java | 24 --------- .../druid/sql/hook/DruidHookDispatcher.java | 24 ++++++--- 3 files changed, 22 insertions(+), 75 deletions(-) delete mode 100644 sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java index fd2b32ebb984..5969d608f2fb 100644 --- a/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook.java @@ -21,15 +21,13 @@ import com.google.errorprone.annotations.Immutable; import org.apache.calcite.rel.RelNode; -import org.apache.druid.annotations.SuppressFBWarnings; - -import java.io.Closeable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.Objects; +/** + * Interface for hooks that can be invoked by {@link DruidHookDispatcher}. + * + * HookKey should be added at every place a new hook is needed. + */ @FunctionalInterface public interface DruidHook { @@ -74,41 +72,4 @@ public boolean equals(Object obj) } void invoke(HookKey key, T object); - - @SuppressFBWarnings({"MS_OOI_PKGPROTECT"}) - Map, List>> GLOBAL = new HashMap<>(); - - static void register1(HookKey label, DruidHook hook) - { - GLOBAL.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); - } - - static void unregister1(HookKey key, DruidHook hook) - { - GLOBAL.get(key).remove(hook); - } - - static Closeable withHook1(HookKey key, DruidHook hook) - { - register1(key, hook); - return new Closeable() - { - @Override - public void close() - { - unregister1(key, hook); - } - }; - } - - @SuppressWarnings({"rawtypes", "unchecked"}) - static void dispatch12(HookKey key, T object) - { - List> hooks = GLOBAL.get(key); - if (hooks != null) { - for (DruidHook hook : hooks) { - hook.invoke(key, object); - } - } - } } diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java deleted file mode 100644 index e1bf52b74a8d..000000000000 --- a/sql/src/main/java/org/apache/druid/sql/hook/DruidHook2.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.druid.sql.hook; - -public interface DruidHook2 -{ -} diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java index 47b80ddca366..ea0dcfc0dfc1 100644 --- a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java @@ -21,6 +21,8 @@ import com.google.inject.Inject; import org.apache.druid.guice.LazySingleton; +import org.apache.druid.quidem.DruidConnectionExtras; +import org.apache.druid.sql.calcite.planner.PlannerContext; import org.apache.druid.sql.hook.DruidHook.HookKey; import java.io.Closeable; @@ -29,24 +31,32 @@ import java.util.List; import java.util.Map; +/** + * Dispatcher for Druid hooks. + * + * A single instance should live in the system and be used to dispatch hooks. + * Usual way to dispatch should be via + * {@link PlannerContext#dispatchHook(HookKey, Object)}. Access to this class is + * also possible thru {@link DruidConnectionExtras}. + */ @LazySingleton public class DruidHookDispatcher { + Map, List>> hooks = new HashMap<>(); + @Inject public DruidHookDispatcher() { } - Map, List>> GLOBAL = new HashMap<>(); - public void register(HookKey label, DruidHook hook) { - GLOBAL.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); + hooks.computeIfAbsent(label, k -> new ArrayList<>()).add(hook); } public void unregister(HookKey key, DruidHook hook) { - GLOBAL.get(key).remove(hook); + hooks.get(key).remove(hook); } public Closeable withHook(HookKey key, DruidHook hook) @@ -65,9 +75,9 @@ public void close() @SuppressWarnings({"rawtypes", "unchecked"}) public void dispatch(HookKey key, T object) { - List> hooks = GLOBAL.get(key); - if (hooks != null) { - for (DruidHook hook : hooks) { + List> currentHooks = hooks.get(key); + if (currentHooks != null) { + for (DruidHook hook : currentHooks) { hook.invoke(key, object); } } From b345dd9d034fc86187a378f56e2e28d7ae606adf Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 13:25:40 +0000 Subject: [PATCH 117/122] updates/fix style/etc --- .../org/apache/druid/sql/calcite/planner/PlannerHook.java | 4 ++++ .../java/org/apache/druid/sql/hook/DruidHookDispatcher.java | 3 +-- .../java/org/apache/druid/quidem/DruidConnectionExtras.java | 3 +-- .../org/apache/druid/quidem/DruidQuidemCommandHandler.java | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerHook.java b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerHook.java index fd245b096d82..8158a314f511 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerHook.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerHook.java @@ -26,6 +26,7 @@ import org.apache.calcite.sql.SqlNode; import org.apache.druid.guice.annotations.UnstableApi; import org.apache.druid.sql.calcite.rel.DruidRel; +import org.apache.druid.sql.hook.DruidHookDispatcher; /** * Druid-specific version of Calcite's {@link org.apache.calcite.runtime.Hook Hook} @@ -33,8 +34,11 @@ * for test validation. Calcite's hook has multiple low-level events, but, sadly, * none at the points where tests want to verify, except for the opportunity to * capture the native query. + * + * Should be removed ; use {@link DruidHookDispatcher} instead. */ @UnstableApi +@Deprecated public interface PlannerHook { void captureSql(String sql); diff --git a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java index ea0dcfc0dfc1..0114699d638b 100644 --- a/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java +++ b/sql/src/main/java/org/apache/druid/sql/hook/DruidHookDispatcher.java @@ -21,7 +21,6 @@ import com.google.inject.Inject; import org.apache.druid.guice.LazySingleton; -import org.apache.druid.quidem.DruidConnectionExtras; import org.apache.druid.sql.calcite.planner.PlannerContext; import org.apache.druid.sql.hook.DruidHook.HookKey; @@ -37,7 +36,7 @@ * A single instance should live in the system and be used to dispatch hooks. * Usual way to dispatch should be via * {@link PlannerContext#dispatchHook(HookKey, Object)}. Access to this class is - * also possible thru {@link DruidConnectionExtras}. + * also possible thru DruidConnectionExtras. */ @LazySingleton public class DruidHookDispatcher diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java index 2ba27bdd7fc9..176411a6bb74 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidConnectionExtras.java @@ -56,10 +56,9 @@ public DruidHookDispatcher getDruidHookDispatcher() static DruidConnectionExtras unwrapOrThrow(Connection connection) { - if(connection instanceof DruidConnectionExtras ) { + if (connection instanceof DruidConnectionExtras) { return (DruidConnectionExtras) connection; } throw new UnsupportedOperationException("Expected DruidConnectionExtras to be implemented by connection!"); } - } diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java index 141ed0b67e4e..47cec261f60e 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java @@ -188,7 +188,8 @@ protected final void executeExplain(Context x) throws IOException, SQLException } } - protected final DruidHookDispatcher unwrapDruidHookDispatcher(Context x) { + protected final DruidHookDispatcher unwrapDruidHookDispatcher(Context x) + { return DruidConnectionExtras.unwrapOrThrow(x.connection()).getDruidHookDispatcher(); } } From 7f99ee24d73a67e882afb2250d5389591deee2ec Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 14:03:46 +0000 Subject: [PATCH 118/122] fix copy-pasted crap --- .../org/apache/druid/benchmark/query/InPlanningBenchmark.java | 4 +++- .../java/org/apache/druid/benchmark/query/SqlBenchmark.java | 4 +++- .../apache/druid/benchmark/query/SqlExpressionBenchmark.java | 4 +++- .../org/apache/druid/benchmark/query/SqlGroupByBenchmark.java | 4 +++- .../apache/druid/benchmark/query/SqlNestedDataBenchmark.java | 4 +++- .../apache/druid/benchmark/query/SqlVsNativeBenchmark.java | 4 +++- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/query/InPlanningBenchmark.java b/benchmarks/src/test/java/org/apache/druid/benchmark/query/InPlanningBenchmark.java index ce01324116f9..046da2574235 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/query/InPlanningBenchmark.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/query/InPlanningBenchmark.java @@ -55,6 +55,7 @@ import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.timeline.DataSegment; import org.apache.druid.timeline.partition.LinearShardSpec; import org.openjdk.jmh.annotations.Benchmark; @@ -202,7 +203,8 @@ public void setup() throws JsonProcessingException new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); String prefix = ("explain plan for select long1 from foo where long1 in "); diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java index 3441e31c0498..06ea2aa9e19d 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java @@ -89,6 +89,7 @@ import org.apache.druid.sql.calcite.util.LookylooModule; import org.apache.druid.sql.calcite.util.QueryFrameworkUtils; import org.apache.druid.sql.calcite.util.testoperator.CalciteTestOperatorModule; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.timeline.DataSegment; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; @@ -674,7 +675,8 @@ public static Pair createSqlSystem( new CalciteRulesManager(ImmutableSet.of()), new JoinableFactoryWrapper(QueryFrameworkUtils.createDefaultJoinableFactory(injector)), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); return Pair.of(plannerFactory, engine); diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlExpressionBenchmark.java b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlExpressionBenchmark.java index 8b2172182a07..d351b40f2dbf 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlExpressionBenchmark.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlExpressionBenchmark.java @@ -59,6 +59,7 @@ import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.timeline.DataSegment; import org.apache.druid.timeline.partition.LinearShardSpec; import org.openjdk.jmh.annotations.Benchmark; @@ -364,7 +365,8 @@ public void setup() new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); try { diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlGroupByBenchmark.java b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlGroupByBenchmark.java index 80b6647a0eee..7cbb620c557d 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlGroupByBenchmark.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlGroupByBenchmark.java @@ -57,6 +57,7 @@ import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.timeline.DataSegment; import org.apache.druid.timeline.partition.LinearShardSpec; import org.openjdk.jmh.annotations.Benchmark; @@ -347,7 +348,8 @@ public void setup() new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); try { diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlNestedDataBenchmark.java b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlNestedDataBenchmark.java index c329e9da30ec..b896f8df52fc 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlNestedDataBenchmark.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlNestedDataBenchmark.java @@ -63,6 +63,7 @@ import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.timeline.DataSegment; import org.apache.druid.timeline.partition.LinearShardSpec; import org.openjdk.jmh.annotations.Benchmark; @@ -402,7 +403,8 @@ public void setup() new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); try { diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlVsNativeBenchmark.java b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlVsNativeBenchmark.java index bffc03469e89..2150b2100fb0 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlVsNativeBenchmark.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlVsNativeBenchmark.java @@ -50,6 +50,7 @@ import org.apache.druid.sql.calcite.run.SqlEngine; import org.apache.druid.sql.calcite.schema.DruidSchemaCatalog; import org.apache.druid.sql.calcite.util.CalciteTests; +import org.apache.druid.sql.hook.DruidHookDispatcher; import org.apache.druid.timeline.DataSegment; import org.apache.druid.timeline.partition.LinearShardSpec; import org.openjdk.jmh.annotations.Benchmark; @@ -132,7 +133,8 @@ public void setup() new CalciteRulesManager(ImmutableSet.of()), CalciteTests.createJoinableFactoryWrapper(), CatalogResolver.NULL_RESOLVER, - new AuthConfig() + new AuthConfig(), + new DruidHookDispatcher() ); groupByQuery = GroupByQuery .builder() From 57980066b3089c4a59203d5aa3aced023a69ee40 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 13:30:52 +0000 Subject: [PATCH 119/122] rename module (cherry picked from commit 8d40cca50a3e4c8098f49f5d588c7b7220b76788) --- dev/quidem | 2 +- pom.xml | 2 +- {quidem-it => quidem-ut}/README.md | 8 ++++---- {quidem-it => quidem-ut}/pom.xml | 6 +++--- .../ExposedAsBrokerQueryComponentSupplierWrapper.java | 0 .../src/main/java/org/apache/druid/quidem/Launcher.java | 0 .../java/org/apache/druid/quidem/QuidemCaptureModule.java | 0 .../org/apache/druid/quidem/QuidemCaptureResource.java | 2 +- .../main/java/org/apache/druid/quidem/QuidemRecorder.java | 0 .../java/org/apache/druid/quidem/LauncherSmokeTest.java | 0 .../src/test/java/org/apache/druid/quidem/QTest.java | 2 +- .../test/quidem/org.apache.druid.quidem.QTest/example.iq | 0 12 files changed, 11 insertions(+), 11 deletions(-) rename {quidem-it => quidem-ut}/README.md (92%) rename {quidem-it => quidem-ut}/pom.xml (99%) rename {quidem-it => quidem-ut}/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java (100%) rename {quidem-it => quidem-ut}/src/main/java/org/apache/druid/quidem/Launcher.java (100%) rename {quidem-it => quidem-ut}/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java (100%) rename {quidem-it => quidem-ut}/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java (97%) rename {quidem-it => quidem-ut}/src/main/java/org/apache/druid/quidem/QuidemRecorder.java (100%) rename {quidem-it => quidem-ut}/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java (100%) rename {quidem-it => quidem-ut}/src/test/java/org/apache/druid/quidem/QTest.java (96%) rename {quidem-it => quidem-ut}/src/test/quidem/org.apache.druid.quidem.QTest/example.iq (100%) diff --git a/dev/quidem b/dev/quidem index dec86fc9553a..1a7d3f0ec96a 100755 --- a/dev/quidem +++ b/dev/quidem @@ -28,7 +28,7 @@ OPTS+=" -Dsurefire.rerunFailingTestsCount=0" OPTS+=" -Dorg.slf4j.simpleLogger.log.org.apache.maven.plugin.surefire.SurefirePlugin=INFO" [[ $@ =~ "-q" ]] && OPTS+=" -Dsurefire.trimStackTrace=true" -OPTS+=" -pl quidem-it -Dtest=QTest" +OPTS+=" -pl quidem-ut -Dtest=QTest" OPTS+=" org.apache.maven.plugins:maven-surefire-plugin:test" case "$1" in diff --git a/pom.xml b/pom.xml index 15b47184ff57..09d237a30059 100644 --- a/pom.xml +++ b/pom.xml @@ -242,7 +242,7 @@ integration-tests-ex/tools integration-tests-ex/image integration-tests-ex/cases - quidem-it + quidem-ut diff --git a/quidem-it/README.md b/quidem-ut/README.md similarity index 92% rename from quidem-it/README.md rename to quidem-ut/README.md index 999a5103ceb2..5b594a3c8f43 100644 --- a/quidem-it/README.md +++ b/quidem-ut/README.md @@ -17,7 +17,7 @@ ~ under the License. --> -# Quidem IT +# Quidem UT Enables to write sql level tests easily. Can be used to write tests against existing test backends (ComponentSupplier) - by doing so the testcases can be moved closer to the excercised codes. @@ -55,16 +55,16 @@ git clone --branch quidem-record https://github.com/kgyrtkirk/druid * make sure to build the project first; one way to do that is: ```bash - mvn install -pl quidem-it/ -am -DskipTests -Pskip-static-checks + mvn install -pl quidem-ut/ -am -DskipTests -Pskip-static-checks ``` * launch the broker instance with: ```bash - mvn exec:exec -pl quidem-it -Dquidem.record.autostart=true + mvn exec:exec -pl quidem-ut -Dquidem.record.autostart=true ``` * the broker will be running at http://localhost:12345 * the used test configuration backend can configured by supplying `quidem.uri` ```bash - mvn exec:exec -pl quidem-it -Dquidem.uri=druidtest:///?componentSupplier=ThetaSketchComponentSupplier + mvn exec:exec -pl quidem-ut -Dquidem.uri=druidtest:///?componentSupplier=ThetaSketchComponentSupplier ``` * new record files can be started by calling http://localhost:12345/quidem/start * if `quidem.record.autostart` is omitted recording will not start diff --git a/quidem-it/pom.xml b/quidem-ut/pom.xml similarity index 99% rename from quidem-it/pom.xml rename to quidem-ut/pom.xml index 9710ac4a7361..ac48af25c17e 100644 --- a/quidem-it/pom.xml +++ b/quidem-ut/pom.xml @@ -23,9 +23,9 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - druid-quidem-it - druid-quidem-it - druid-quidem-it + druid-quidem-ut + druid-quidem-ut + druid-quidem-ut org.apache.druid diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java similarity index 100% rename from quidem-it/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java rename to quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java b/quidem-ut/src/main/java/org/apache/druid/quidem/Launcher.java similarity index 100% rename from quidem-it/src/main/java/org/apache/druid/quidem/Launcher.java rename to quidem-ut/src/main/java/org/apache/druid/quidem/Launcher.java diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java b/quidem-ut/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java similarity index 100% rename from quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java rename to quidem-ut/src/main/java/org/apache/druid/quidem/QuidemCaptureModule.java diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java b/quidem-ut/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java similarity index 97% rename from quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java rename to quidem-ut/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java index 557ea5f79b98..68d2f31ac81a 100644 --- a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java +++ b/quidem-ut/src/main/java/org/apache/druid/quidem/QuidemCaptureResource.java @@ -38,7 +38,7 @@ public class QuidemCaptureResource { public static final File RECORD_PATH = ProjectPathUtils - .getPathFromProjectRoot("quidem-it/src/test/quidem/org.apache.druid.quidem.QTest"); + .getPathFromProjectRoot("quidem-ut/src/test/quidem/org.apache.druid.quidem.QTest"); private URI quidemURI; private QuidemRecorder recorder = null; private DruidHookDispatcher hookDispatcher; diff --git a/quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java b/quidem-ut/src/main/java/org/apache/druid/quidem/QuidemRecorder.java similarity index 100% rename from quidem-it/src/main/java/org/apache/druid/quidem/QuidemRecorder.java rename to quidem-ut/src/main/java/org/apache/druid/quidem/QuidemRecorder.java diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java b/quidem-ut/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java similarity index 100% rename from quidem-it/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java rename to quidem-ut/src/test/java/org/apache/druid/quidem/LauncherSmokeTest.java diff --git a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java b/quidem-ut/src/test/java/org/apache/druid/quidem/QTest.java similarity index 96% rename from quidem-it/src/test/java/org/apache/druid/quidem/QTest.java rename to quidem-ut/src/test/java/org/apache/druid/quidem/QTest.java index 58782af50d58..83167a18a168 100644 --- a/quidem-it/src/test/java/org/apache/druid/quidem/QTest.java +++ b/quidem-ut/src/test/java/org/apache/druid/quidem/QTest.java @@ -37,7 +37,7 @@ public QTest() @Override protected File getTestRoot() { - return ProjectPathUtils.getPathFromProjectRoot("quidem-it/src/test/quidem/" + getClass().getName()); + return ProjectPathUtils.getPathFromProjectRoot("quidem-ut/src/test/quidem/" + getClass().getName()); } @Test diff --git a/quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq b/quidem-ut/src/test/quidem/org.apache.druid.quidem.QTest/example.iq similarity index 100% rename from quidem-it/src/test/quidem/org.apache.druid.quidem.QTest/example.iq rename to quidem-ut/src/test/quidem/org.apache.druid.quidem.QTest/example.iq From ca121aa083ca01c45e6f457e56aa1a1f1616d27e Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 14:29:02 +0000 Subject: [PATCH 120/122] remove firehose --- .../quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index b7ae4b7decbe..d688144b0501 100644 --- a/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -47,7 +47,6 @@ import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.ExpressionModule; import org.apache.druid.guice.ExtensionsModule; -import org.apache.druid.guice.FirehoseModule; import org.apache.druid.guice.JacksonConfigManagerModule; import org.apache.druid.guice.JavaScriptModule; import org.apache.druid.guice.Jerseys; @@ -301,7 +300,6 @@ private void installForServerModules(CoreInjectorBuilder builder) new CoordinatorDiscoveryModule(), new LocalDataStorageDruidModule(), new TombstoneDataStorageModule(), - new FirehoseModule(), new JavaScriptModule(), new AuthenticatorModule(), new AuthorizerModule(), From a03fb49f4fa855071d3609f6838dce6a82525c3c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 30 Jul 2024 16:34:06 +0000 Subject: [PATCH 121/122] remove exception --- .../org/apache/druid/quidem/DruidQuidemCommandHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java index 47cec261f60e..7ae8f97650c9 100644 --- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java +++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemCommandHandler.java @@ -42,7 +42,6 @@ import java.io.Closeable; import java.io.IOException; import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; @@ -169,7 +168,7 @@ abstract static class AbstractRelPlanCommand extends AbstractPlanCommand } @Override - protected final void executeExplain(Context x) throws IOException, SQLException + protected final void executeExplain(Context x) throws IOException { DruidHookDispatcher dhp = unwrapDruidHookDispatcher(x); List logged = new ArrayList<>(); From bb23ace518bc2192ed8b6590e93bac5a99d6d6b2 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Mon, 5 Aug 2024 08:59:48 +0000 Subject: [PATCH 122/122] builtintypes instead nesteddata --- .../quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java b/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java index d688144b0501..f853dd317d19 100644 --- a/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java +++ b/quidem-ut/src/main/java/org/apache/druid/quidem/ExposedAsBrokerQueryComponentSupplierWrapper.java @@ -43,6 +43,7 @@ import org.apache.druid.guice.AnnouncerModule; import org.apache.druid.guice.BrokerProcessingModule; import org.apache.druid.guice.BrokerServiceModule; +import org.apache.druid.guice.BuiltInTypesModule; import org.apache.druid.guice.CoordinatorDiscoveryModule; import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.ExpressionModule; @@ -56,7 +57,6 @@ import org.apache.druid.guice.LifecycleModule; import org.apache.druid.guice.LocalDataStorageDruidModule; import org.apache.druid.guice.MetadataConfigModule; -import org.apache.druid.guice.NestedDataModule; import org.apache.druid.guice.QueryRunnerFactoryModule; import org.apache.druid.guice.SegmentWranglerModule; import org.apache.druid.guice.ServerModule; @@ -273,6 +273,7 @@ DruidNodeDiscoveryProvider getDruidNodeDiscoveryProvider() */ private void installForServerModules(CoreInjectorBuilder builder) { + builder.add( new Log4jShutterDownerModule(), new LifecycleModule(), @@ -291,7 +292,7 @@ private void installForServerModules(CoreInjectorBuilder builder) new StorageNodeModule(), new JettyServerModule(), new ExpressionModule(), - new NestedDataModule(), + new BuiltInTypesModule(), new DiscoveryModule(), new ServerViewModule(), new MetadataConfigModule(),