cockroachdb / cockroachdb/cockroach

opt: internal error for virtual column with cast

Open
#102,908 1 comment 0 reactions 0 assignees View on GitHub
A-sql-optimizer C-bug T-sql-queries
Dominant language
Go
Stars
32.5k
Forks
4.1k
PR merge metrics
PR metrics pending

Description

**Describe the problem**

There's a nil-pointer exception happening on [this line](https://github.com/cockroachdb/cockroach/blob/a195cc1ec123fd4e06bee6e1468b64cf967fd1e8/pkg/sql/opt/memo/logical_props_builder.go#L1583) in the logical props builder. Either a `*ProjectionsItem` is nil, or its `Element` field is nil.

**To Reproduce**
```
exec-ddl
CREATE TABLE t (
id INT PRIMARY KEY,
ts TIMESTAMP NULL DEFAULT timezone(NULL, current_timestamp()),
computed STRING AS (extract('year', ts)::STRING) VIRTUAL,
ts2 TIMESTAMP NULL
);
----

norm
INSERT INTO t(id)
SELECT * FROM (SELECT 0 AS id) AS input_table
ON CONFLICT (id) DO UPDATE SET ts2 = timezone(NULL, current_timestamp());
----

runtime error: invalid memory address or nil pointer dereference
(1) assertion failure
Wraps: (2) attached stack trace
-- stack trace:
| github.com/cockroachdb/cockroach/pkg/util/errorutil.ShouldCatch
| github.com/cockroachdb/cockroach/pkg/util/errorutil/catch.go:29
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build.func1
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:212
| runtime.gopanic
| GOROOT/src/runtime/panic.go:884
| runtime.panicmem
| GOROOT/src/runtime/panic.go:260
| runtime.sigpanic
| GOROOT/src/runtime/signal_unix.go:835
| github.com/cockroachdb/cockroach/pkg/sql/opt/memo.(*logicalPropsBuilder).buildProjectionsItemProps
| github.com/cockroachdb/cockroach/pkg/sql/opt/memo/logical_props_builder.go:1583
| github.com/cockroachdb/cockroach/pkg/sql/opt/memo.(*ProjectionsItem).PopulateProps
| github.com/cockroachdb/cockroach/bazel-out/darwin_arm64-fastbuild/bin/pkg/sql/opt/memo/expr.og.go:9067
| github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*Factory).ConstructProjectionsItem
| github.com/cockroachdb/cockroach/bazel-out/darwin_arm64-fastbuild/bin/pkg/sql/opt/norm/factory.og.go:12860
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildScan.func1
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:723
| github.com/cockroachdb/cockroach/pkg/sql/opt.ColSet.ForEach.func1
| github.com/cockroachdb/cockroach/pkg/sql/opt/colset.go:83
| github.com/cockroachdb/cockroach/pkg/util/intsets.Fast.ForEach
| github.com/cockroachdb/cockroach/pkg/util/intsets/fast.go:154
| github.com/cockroachdb/cockroach/pkg/sql/opt.ColSet.ForEach
| github.com/cockroachdb/cockroach/pkg/sql/opt/colset.go:83
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildScan
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:722
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*mutationBuilder).buildLeftJoinForUpsertArbiter
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/mutation_builder_arbiter.go:370
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*mutationBuilder).buildInputForUpsert.func1
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/insert.go:792
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*arbiterSet).ForEach.func1
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/arbiter_set.go:123
| github.com/cockroachdb/cockroach/pkg/util/intsets.Fast.ForEach
| github.com/cockroachdb/cockroach/pkg/util/intsets/fast.go:154
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*arbiterSet).ForEach
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/arbiter_set.go:112
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*mutationBuilder).buildInputForUpsert
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/insert.go:763
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildInsert
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/insert.go:331
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt.func2
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:344
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).processWiths
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/with.go:116
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:343
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRoot
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:272
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:246
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester.(*OptTester).buildExpr
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester/opt_tester.go:2256
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester.(*OptTester).optimizeExpr
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester/opt_tester.go:2281
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester.(*OptTester).OptNorm
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester/opt_tester.go:1172
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester.(*OptTester).RunCommand
| github.com/cockroachdb/cockroach/pkg/sql/opt/testutils/opttester/opt_tester.go:619
| github.com/cockroachdb/cockroach/pkg/sql/opt/norm_test.TestNormRules.func1.1
| github.com/cockroachdb/cockroach/pkg/sql/opt/norm_test/pkg/sql/opt/norm/norm_test.go:54
| github.com/cockroachdb/datadriven.RunTest.func1
| github.com/cockroachdb/datadriven/external/com_github_cockroachdb_datadriven/datadriven.go:117
| github.com/cockroachdb/datadriven.runDirective.func1
| github.com/cockroachdb/datadriven/external/com_github_cockroachdb_datadriven/datadriven.go:336
Wraps: (3) runtime error: invalid memory address or nil pointer dereference
| -- cause hidden behind barrier
| runtime error: invalid memory address or nil pointer dereference
| (1) runtime error: invalid memory address or nil pointer dereference
| Error types: (1) runtime.errorString
Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr
norm_test.go:57: -- test log scope end -
```

**Additional context**
Found while trying to reproduce a different error.

Jira issue: CRDB-27722

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.