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

release-24.1: sql: support DEFAULT expressions for routine parameters #121811

Merged
merged 2 commits into from Apr 6, 2024

Conversation

blathers-crl[bot]
Copy link

@blathers-crl blathers-crl bot commented Apr 5, 2024

Backport 2/2 commits from #121082 on behalf of @yuzefovich.

/cc @cockroachdb/release


This commit adds support for DEFAULT expressions for routine parameters.
Routines can be declared with default values for some or all input
arguments. The default values are inserted whenever the routine is
called with insufficiently many actual arguments. Since arguments can
only be omitted from the end of the actual argument list, all
parameters after a parameter with a default value have to have default
values as well. For procedures additionally no OUT parameters are
allowed after the first input parameter with the DEFAULT expression. The
DEFAULT expression has to be coercible to the argument type of the
parameter.

Given that presence of DEFAULT expressions changes the overload
resolution, we need to include these into FunctionSignature proto. The
overload resolution logic has also been adjusted to try omitting some of
the input types for comparison (when applicable). In particular, UDF
dependency tracking for memo metadata has been extended to store the
"invocation signature" in addition to the overload itself given that
input types of the latter might now be different from the former.

In order to correctly track dependencies during schema changes, we
always serialize the DEFAULT expressions after having them type-checked.

Fixes: #100962.

Release note (sql change): DEFAULT expressions for input parameters of
user-defined functions and stored procedures are now supported.


Release justification: important new functionality.

@blathers-crl blathers-crl bot requested a review from a team as a code owner April 5, 2024 01:55
@blathers-crl blathers-crl bot force-pushed the blathers/backport-release-24.1-121082 branch from 6c8e0df to 5b87fbd Compare April 5, 2024 01:55
@blathers-crl blathers-crl bot requested review from a team as code owners April 5, 2024 01:55
@blathers-crl blathers-crl bot requested review from rytaft and removed request for a team April 5, 2024 01:55
@blathers-crl blathers-crl bot added blathers-backport This is a backport that Blathers created automatically. O-robot Originated from a bot. labels Apr 5, 2024
Copy link
Author

blathers-crl bot commented Apr 5, 2024

Thanks for opening a backport.

Please check the backport criteria before merging:

  • Backports should only be created for serious
    issues
    or test-only changes.
  • Backports should not break backwards-compatibility.
  • Backports should change as little code as possible.
  • Backports should not change on-disk formats or node communication protocols.
  • Backports should not add new functionality (except as defined
    here).
  • Backports must not add, edit, or otherwise modify cluster versions; or add version gates.
  • All backports must be reviewed by the owning areas TL and one additional
    TL. For more information as to how that review should be conducted, please consult the backport
    policy
    .
If your backport adds new functionality, please ensure that the following additional criteria are satisfied:
  • There is a high priority need for the functionality that cannot wait until the next release and is difficult to address in another way.
  • The new functionality is additive-only and only runs for clusters which have specifically “opted in” to it (e.g. by a cluster setting).
  • New code is protected by a conditional check that is trivial to verify and ensures that it only runs for opt-in clusters. State changes must be further protected such that nodes running old binaries will not be negatively impacted by the new state (with a mixed version test added).
  • The PM and TL on the team that owns the changed code have signed off that the change obeys the above rules.
  • Your backport must be accompanied by a post to the appropriate Slack
    channel (#db-backports-point-releases or #db-backports-XX-X-release) for awareness and discussion.

Also, please add a brief release justification to the body of your PR to justify this
backport.

@blathers-crl blathers-crl bot added the backport Label PR's that are backports to older release branches label Apr 5, 2024
Copy link
Author

blathers-crl bot commented Apr 5, 2024

Your pull request contains more than 1000 changes. It is strongly encouraged to split big PRs into smaller chunks.

🦉 Hoot! I am a Blathers, a bot for CockroachDB. My owner is dev-inf.

@cockroach-teamcity
Copy link
Member

This change is Reviewable

@yuzefovich yuzefovich removed request for a team, rytaft and yuzefovich April 5, 2024 01:57
Copy link
Collaborator

@DrewKimball DrewKimball left a comment

Choose a reason for hiding this comment

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

Reviewed 22 of 22 files at r1, 43 of 43 files at r2, all commit messages.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (waiting on @fqazi, @mgartner, and @rafiss)

There is no advantage to tracking the DEFAULT expression of routine
parameters as a separate element since this expression can only be
changed when modifying the whole function (and cannot be dropped once
added). Instead, we'll simply store the expressions in the serialized
form within the function parameters.

Release note: None
This commit adds support for DEFAULT expressions for routine parameters.
Routines can be declared with default values for some or all input
arguments. The default values are inserted whenever the routine is
called with insufficiently many actual arguments. Since arguments can
only be omitted from the end of the actual argument list, all
parameters after a parameter with a default value have to have default
values as well. For procedures additionally no OUT parameters are
allowed after the first input parameter with the DEFAULT expression. The
DEFAULT expression has to be coercible to the argument type of the
parameter.

Given that presence of DEFAULT expressions changes the overload
resolution, we need to include these into `FunctionSignature` proto. The
overload resolution logic has also been adjusted to try omitting some of
the input types for comparison (when applicable). In particular, UDF
dependency tracking for memo metadata has been extended to store the
"invocation signature" in addition to the overload itself given that
input types of the latter might now be different from the former.

In order to correctly track dependencies during schema changes, we
always serialize the DEFAULT expressions after having them type-checked.

Release note (sql change): DEFAULT expressions for input parameters of
user-defined functions and stored procedures are now supported.
@yuzefovich yuzefovich force-pushed the blathers/backport-release-24.1-121082 branch from 5b87fbd to 0cc964d Compare April 5, 2024 22:13
@yuzefovich yuzefovich merged commit 711f07c into release-24.1 Apr 6, 2024
18 of 20 checks passed
@yuzefovich yuzefovich deleted the blathers/backport-release-24.1-121082 branch April 6, 2024 19:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport Label PR's that are backports to older release branches blathers-backport This is a backport that Blathers created automatically. O-robot Originated from a bot.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants