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
release-24.1: sql: support DEFAULT expressions for routine parameters #121811
Conversation
6c8e0df
to
5b87fbd
Compare
Thanks for opening a backport. Please check the backport criteria before merging:
If your backport adds new functionality, please ensure that the following additional criteria are satisfied:
Also, please add a brief release justification to the body of your PR to justify this |
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. |
There was a problem hiding this 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: 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.
5b87fbd
to
0cc964d
Compare
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. Theoverload 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.