Skip to content

sql: internal type mismatch error from vectorized engine caused by recursive CTE #93371

@jordanlewis

Description

@jordanlewis

The following query produces a type mismatch error on CockroachDB. On Postgres, it returns a more pleasant user-visible error.

 WITH RECURSIVE foo(i) AS
    (SELECT i FROM (VALUES(1),(2)) t(i)
    UNION ALL
    SELECT (i+1)::numeric(10,0) FROM foo WHERE i < 10)
 SELECT * FROM foo;

CRDB:

demo@127.0.0.1:26257/defaultdb> WITH RECURSIVE foo(i) AS                                                                                                                                                                               ->     (SELECT i FROM (VALUES(1),(2)) t(i)                                                                                                                                                                ->     UNION ALL                                                                                                                                                                                          ->     SELECT (i+1)::numeric(10,0) FROM foo WHERE i < 10)                                                                                                                                                 ->  SELECT * FROM foo;

  i
-----
  1
(1 row)
(error encountered after some results were delivered)
ERROR: internal error: unexpected error from the vectorized engine: interface conversion: coldata.Column is coldata.Int64s, not coldata.Decimals
SQLSTATE: XX000
DETAIL: stack trace:
github.com/cockroachdb/cockroach/pkg/sql/colexecerror/error.go:89: func1()
GOROOT/src/runtime/panic.go:884: gopanic()
GOROOT/src/runtime/iface.go:262: panicdottypeE()
GOROOT/src/runtime/iface.go:272: panicdottypeI()
github.com/cockroachdb/cockroach/pkg/col/coldata/vec.go:245: Decimal()
github.com/cockroachdb/cockroach/bazel-out/k8-fastbuild/bin/pkg/sql/colexec/colexecprojconst/proj_const_right_ops.eg.go:2607: func1()
github.com/cockroachdb/cockroach/pkg/sql/colmem/allocator.go:441: PerformOperation()
github.com/cockroachdb/cockroach/bazel-out/k8-fastbuild/bin/pkg/sql/colexec/colexecprojconst/proj_const_right_ops.eg.go:2603: Next()
github.com/cockroachdb/cockroach/pkg/sql/colexec/colexecutils/operator.go:137: Next()
github.com/cockroachdb/cockroach/bazel-out/k8-fastbuild/bin/pkg/sql/colexec/colexecbase/cast.eg.go:7795: Next()
github.com/cockroachdb/cockroach/pkg/sql/colexec/colexecbase/simple_project.go:124: Next()
github.com/cockroachdb/cockroach/pkg/sql/colexec/materializer.go:278: next()
github.com/cockroachdb/cockroach/pkg/sql/colexec/materializer.go:303: nextAdapter()
github.com/cockroachdb/cockroach/pkg/sql/colexecerror/error.go:92: CatchVectorizedRuntimeError()
github.com/cockroachdb/cockroach/pkg/sql/colexec/materializer.go:309: Next()
github.com/cockroachdb/cockroach/pkg/sql/colflow/flow_coordinator.go:130: next()
github.com/cockroachdb/cockroach/pkg/sql/colflow/flow_coordinator.go:147: nextAdapter()
github.com/cockroachdb/cockroach/pkg/sql/colexecerror/error.go:92: CatchVectorizedRuntimeError()
github.com/cockroachdb/cockroach/pkg/sql/colflow/flow_coordinator.go:152: Next()
github.com/cockroachdb/cockroach/pkg/sql/execinfra/base.go:186: Run()
github.com/cockroachdb/cockroach/pkg/sql/execinfra/processorsbase.go:733: Run()
github.com/cockroachdb/cockroach/pkg/sql/flowinfra/flow.go:483: Run()
github.com/cockroachdb/cockroach/pkg/sql/colflow/vectorized_flow.go:296: Run()
github.com/cockroachdb/cockroach/pkg/sql/distsql_running.go:815: Run()
github.com/cockroachdb/cockroach/pkg/sql/distsql_running.go:1768: PlanAndRun()
github.com/cockroachdb/cockroach/pkg/sql/apply_join.go:334: runPlanInsidePlan()
github.com/cockroachdb/cockroach/pkg/sql/recursive_cte.go:151: Next()
github.com/cockroachdb/cockroach/pkg/sql/plan_node_to_row_source.go:218: Next()
github.com/cockroachdb/cockroach/pkg/sql/colexec/columnarizer.go:243: Next()
github.com/cockroachdb/cockroach/pkg/sql/colflow/stats.go:116: next()
github.com/cockroachdb/cockroach/pkg/sql/colexecerror/error.go:92: CatchVectorizedRuntimeError()
github.com/cockroachdb/cockroach/pkg/sql/colflow/stats.go:124: Next()

PG:

jordan=#  WITH RECURSIVE foo(i) AS
jordan-#     (SELECT i FROM (VALUES(1),(2)) t(i)
jordan(#     UNION ALL
jordan(#     SELECT (i+1)::numeric(10,0) FROM foo WHERE i < 10)
jordan-#  SELECT * FROM foo;
ERROR:  recursive query "foo" column 1 has type integer in non-recursive term but type numeric overall
LINE 2:     (SELECT i FROM (VALUES(1),(2)) t(i)
                    ^
HINT:  Cast the output of the non-recursive term to the correct type.

Jira issue: CRDB-22290

Metadata

Metadata

Assignees

Labels

C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.O-pg-regressOriginated from the pg_regress test suite.T-sql-queriesSQL Queries Team

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions