Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rowenc: fix needed column families computation for secondary indexes #88174

Merged
merged 1 commit into from
Sep 20, 2022

Conversation

yuzefovich
Copy link
Member

@yuzefovich yuzefovich commented Sep 19, 2022

Previously, when determining the "minimal set of column families" required to retrieve all of the needed columns for the scan operation we could incorrectly not include the special zeroth family into the set. The KV for the zeroth column family is always present, so it might need to be fetched even when it's not explicitly needed when the "needed" column families are all nullable. Before this patch the code for determining whether all of the needed column families are nullable incorrectly assumed that all columns in a family are stored, but this is only true for the primary indexes - for the secondary indexes only those columns mentioned in STORING clause are actually stored (apart from the indexed and PK columns). As a result we could incorrectly not fetch a row if:

  • the unique secondary index is used
  • the needed column has a NULL value
  • all non-nullable columns from the same column family as the needed column are not stored in the index
  • other column families are not fetched.

This is now fixed by considering only the set of stored columns.

The bug seems relatively minor since it requires a multitude of conditions to be met, so I don't think it's a TA worthy.

Fixes: #88110.

Epic: CRDB-20535

Release note (bug fix): Previously, CockroachDB could incorrectly not fetch rows with NULL values when reading from the unique secondary index when multiple column families are defined for the table and the index doesn't store some of the NOT NULL columns.

@cockroach-teamcity
Copy link
Member

This change is Reviewable

@yuzefovich
Copy link
Member Author

This bug is similar in nature to the one fixed in #76563, so it might be good to read through the PR description of #76563 to get more context.

Copy link
Collaborator

@mgartner mgartner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Woof. Column families strike again. :lgtm:

Reviewed 2 of 2 files at r1, all commit messages.
Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (waiting on @cucaroach and @yuzefovich)


pkg/sql/logictest/testdata/logic_test/select_index line 715 at r1 (raw file):

	UNIQUE (_bool) STORING(_int),
	FAMILY (_bool),
	FAMILY (_i, _int)

nit: looks like the rest of this file (and I think most logictest files) indents with spaces

Previously, when determining the "minimal set of column families"
required to retrieve all of the needed columns for the scan operation we
could incorrectly not include the special zeroth family into the set.
The KV for the zeroth column family is always present, so it might need
to be fetched even when it's not explicitly needed when the "needed"
column families are all nullable. Before this patch the code for
determining whether all of the needed column families are nullable
incorrectly assumed that all columns in a family are stored, but this is
only true for the primary indexes - for the secondary indexes only those
columns mentioned in `STORING` clause are actually stored (apart from
the indexed and PK columns). As a result we could incorrectly not fetch
a row if:
- the unique secondary index is used
- the needed column has a NULL value
- all non-nullable columns from the same column family as the needed
column are not stored in the index
- other column families are not fetched.

This is now fixed by considering only the set of stored columns.

The bug seems relatively minor since it requires a multitude of
conditions to be met, so I don't think it's a TA worthy.

Release note (bug fix): Previously, CockroachDB could incorrectly not
fetch rows with NULL values when reading from the unique secondary index
when multiple column families are defined for the table and the index
doesn't store some of the NOT NULL columns.
Copy link
Member Author

@yuzefovich yuzefovich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TFTR!

bors r+

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach and @mgartner)

@craig
Copy link
Contributor

craig bot commented Sep 20, 2022

Build failed (retrying...):

@craig
Copy link
Contributor

craig bot commented Sep 20, 2022

Build succeeded:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

tlp: row with null regproc missing from partitioned query
3 participants