From 41518e57b88b1a309d2167a3884306792036382d Mon Sep 17 00:00:00 2001 From: Tommy Reilly Date: Mon, 27 Mar 2023 15:33:00 -0400 Subject: [PATCH] fixup! opt: fixup CTE stats on placeholder queries Not sure if this is better/necessary/correct... --- pkg/sql/opt/norm/factory.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/sql/opt/norm/factory.go b/pkg/sql/opt/norm/factory.go index e3bf46077eef..93915ceafce1 100644 --- a/pkg/sql/opt/norm/factory.go +++ b/pkg/sql/opt/norm/factory.go @@ -16,7 +16,6 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/opt" "github.com/cockroachdb/cockroach/pkg/sql/opt/cat" "github.com/cockroachdb/cockroach/pkg/sql/opt/memo" - "github.com/cockroachdb/cockroach/pkg/sql/opt/props" "github.com/cockroachdb/cockroach/pkg/sql/opt/props/physical" _ "github.com/cockroachdb/cockroach/pkg/sql/sem/builtins" // register all builtins in builtins:init() for memo package "github.com/cockroachdb/cockroach/pkg/sql/sem/builtins/builtinsregistry" @@ -358,16 +357,18 @@ func (f *Factory) AssignPlaceholders(from *memo.Memo) (err error) { if rcte, ok := e.(*memo.RecursiveCTEExpr); ok { newInitial := f.CopyAndReplaceDefault(rcte.Initial, replaceFn).(memo.RelExpr) if newInitial != rcte.Initial { + newCardinality := newInitial.Relational().Cardinality.Union(rcte.Recursive.Relational().Cardinality) newBinding := f.ConstructFakeRel(&memo.FakeRelPrivate{ Props: MakeBindingPropsForRecursiveCTE( - props.AnyCardinality, rcte.Binding.Relational().OutputCols, newInitial.Relational().Statistics().RowCount)}) + newCardinality, rcte.Binding.Relational().OutputCols, newInitial.Relational().Statistics().RowCount)}) if id := rcte.WithBindingID(); id != 0 { f.Metadata().AddWithBinding(id, newBinding) } + newRecursive := f.CopyAndReplaceDefault(rcte.Recursive, replaceFn).(memo.RelExpr) return f.ConstructRecursiveCTE( newBinding, newInitial, - f.invokeReplace(rcte.Recursive, replaceFn).(memo.RelExpr), + newRecursive, &rcte.RecursiveCTEPrivate, ) }