cockroachdb / cockroachdb/cockroach
opt: internal error for virtual column with cast
- 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
Assessment
This issue has not been assessed yet.