-
Notifications
You must be signed in to change notification settings - Fork 4.1k
sql: internal type mismatch error from vectorized engine caused by recursive CTE #93371
Copy link
Copy link
Closed
Labels
C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.O-pg-regressOriginated from the pg_regress test suite.Originated from the pg_regress test suite.T-sql-queriesSQL Queries TeamSQL Queries Team
Description
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.O-pg-regressOriginated from the pg_regress test suite.Originated from the pg_regress test suite.T-sql-queriesSQL Queries TeamSQL Queries Team
Type
Projects
Status
Done