Skip to content

opt: better validation of column numeric references #61563

@RaduBerinde

Description

@RaduBerinde

When a query refers to a table by numeric reference (descriptor ID), it can also select a subset of columns (by column ID). It is possible that one of the specified columns is a computed column that depends on a column that is not specified. At least with virtual columns, this is not handled correctly:

  CREATE TABLE public.t (
      a INT8 NOT NULL,
      b INT8 NULL,
      c INT8 NULL AS (a + b) VIRTUAL,
      CONSTRAINT "primary" PRIMARY KEY (a ASC),
      FAMILY "primary" (a, b)
  )
> select * from [52(1,3) AS t];
ERROR: internal error: scanned virtual column depends on non-scanned column
SQLSTATE: XX000
DETAIL: stack trace:
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:560: func1()
github.com/cockroachdb/cockroach/pkg/sql/opt/colset.go:55: func1()
github.com/cockroachdb/cockroach/pkg/util/fast_int_set.go:165: ForEach()
github.com/cockroachdb/cockroach/pkg/sql/opt/colset.go:55: ForEach()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:557: buildScan()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:410: buildScanFromTableRef()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:219: buildDataSource()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:59: buildDataSource()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:1190: buildFromTablesRightDeep()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:1167: buildFromTables()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:1094: buildFrom()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:1015: buildSelectClause()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:963: buildSelectStmtWithoutParens()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:936: func1()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/with.go:29: processWiths()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:935: buildSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:265: buildStmt()

I think this operation should be disallowed.

Jira issue: CRDB-2995

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.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