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

UDF: Support CREATE FUNCTION sql statement parsing #83218

Closed
chengxiong-ruan opened this issue Jun 22, 2022 · 0 comments
Closed

UDF: Support CREATE FUNCTION sql statement parsing #83218

chengxiong-ruan opened this issue Jun 22, 2022 · 0 comments
Assignees
Labels
A-sql-routine UDFs and Stored Procedures C-enhancement Solution expected to add code/behavior + preserve backward-compat (pg compat issues are exception) T-sql-foundations SQL Foundations Team (formerly SQL Schema + SQL Sessions)

Comments

@chengxiong-ruan
Copy link
Contributor

chengxiong-ruan commented Jun 22, 2022

Is your feature request related to a problem? Please describe.
A child of #58356

Describe the solution you'd like

  1. Add grammar support in sql.y so that CRDB parser understands proper keywords and tokens similar to Postgres. reference: https://www.postgresql.org/docs/current/sql-createfunction.html
  2. Properly designed AST data structures, so that CREATE FUNCTION statement can be parsed into the AST node.

Jira issue: CRDB-16924

Epic CRDB-3405

@chengxiong-ruan chengxiong-ruan added C-enhancement Solution expected to add code/behavior + preserve backward-compat (pg compat issues are exception) T-sql-schema-deprecated Use T-sql-foundations instead labels Jun 22, 2022
@chengxiong-ruan chengxiong-ruan self-assigned this Jun 22, 2022
craig bot pushed a commit that referenced this issue Jul 11, 2022
74342: storage: short-circuit in recordIteratorStats if not recording r=nvanbenschoten a=nvanbenschoten

This commit adds a short-circuit fast-path in recordIteratorStats that
avoids a call to `tracing.Span.RecordStructured` when the tracing span
is not recording. This avoids a heap allocation in the common case where
tracing is not enabled.

```
name                      old time/op    new time/op    delta
KV/Scan/Native/rows=1-10    18.8µs ± 2%    18.5µs ± 3%  -1.14%  (p=0.003 n=20+19)
KV/Scan/SQL/rows=1-10       95.4µs ± 3%    95.7µs ± 5%    ~     (p=0.602 n=20+20)

name                      old alloc/op   new alloc/op   delta
KV/Scan/Native/rows=1-10    7.42kB ± 1%    7.35kB ± 1%  -1.01%  (p=0.000 n=20+20)
KV/Scan/SQL/rows=1-10       23.5kB ± 0%    23.4kB ± 0%  -0.31%  (p=0.000 n=19+20)

name                      old allocs/op  new allocs/op  delta
KV/Scan/Native/rows=1-10      58.0 ± 0%      57.0 ± 0%  -1.72%  (p=0.000 n=19+20)
KV/Scan/SQL/rows=1-10          279 ± 0%       278 ± 0%  -0.36%  (p=0.000 n=18+19)
```
----

This is part of a collection of assorted micro-optimizations:
- #74336
- #74337
- #74338
- #74339
- #74340
- #74341
- #74342
- #74343
- #74344
- #74345
- #74346
- #74347
- #74348

Combined, these changes have the following effect on end-to-end SQL query performance:
```
name                      old time/op    new time/op    delta
KV/Scan/SQL/rows=1-10       94.4µs ±10%    92.3µs ±11%   -2.20%  (p=0.000 n=93+93)
KV/Scan/SQL/rows=10-10       102µs ±10%      99µs ±10%   -2.16%  (p=0.000 n=94+94)
KV/Update/SQL/rows=10-10     378µs ±15%     370µs ±11%   -2.04%  (p=0.003 n=95+91)
KV/Insert/SQL/rows=1-10      133µs ±14%     132µs ±12%     ~     (p=0.738 n=95+93)
KV/Insert/SQL/rows=10-10     197µs ±14%     196µs ±13%     ~     (p=0.902 n=95+94)
KV/Update/SQL/rows=1-10      186µs ±14%     185µs ±14%     ~     (p=0.351 n=94+93)
KV/Delete/SQL/rows=1-10      132µs ±13%     132µs ±14%     ~     (p=0.473 n=94+94)
KV/Delete/SQL/rows=10-10     254µs ±16%     250µs ±16%     ~     (p=0.086 n=100+99)

name                      old alloc/op   new alloc/op   delta
KV/Scan/SQL/rows=1-10       20.1kB ± 0%    19.1kB ± 1%   -4.91%  (p=0.000 n=96+96)
KV/Scan/SQL/rows=10-10      21.7kB ± 0%    20.7kB ± 1%   -4.61%  (p=0.000 n=96+97)
KV/Delete/SQL/rows=10-10    64.0kB ± 3%    63.7kB ± 3%   -0.55%  (p=0.000 n=100+100)
KV/Update/SQL/rows=1-10     45.8kB ± 1%    45.5kB ± 1%   -0.55%  (p=0.000 n=97+98)
KV/Update/SQL/rows=10-10     105kB ± 1%     105kB ± 1%   -0.10%  (p=0.008 n=97+98)
KV/Delete/SQL/rows=1-10     40.8kB ± 0%    40.7kB ± 0%   -0.08%  (p=0.001 n=95+96)
KV/Insert/SQL/rows=1-10     37.4kB ± 1%    37.4kB ± 0%     ~     (p=0.698 n=97+96)
KV/Insert/SQL/rows=10-10    76.4kB ± 1%    76.4kB ± 0%     ~     (p=0.822 n=99+98)

name                      old allocs/op  new allocs/op  delta
KV/Scan/SQL/rows=1-10          245 ± 0%       217 ± 0%  -11.43%  (p=0.000 n=95+92)
KV/Scan/SQL/rows=10-10         280 ± 0%       252 ± 0%  -10.11%  (p=0.000 n=75+97)
KV/Delete/SQL/rows=10-10       478 ± 0%       459 ± 0%   -4.04%  (p=0.000 n=94+97)
KV/Delete/SQL/rows=1-10        297 ± 1%       287 ± 1%   -3.34%  (p=0.000 n=97+97)
KV/Update/SQL/rows=1-10        459 ± 0%       444 ± 0%   -3.27%  (p=0.000 n=97+97)
KV/Insert/SQL/rows=1-10        291 ± 0%       286 ± 0%   -1.72%  (p=0.000 n=82+86)
KV/Update/SQL/rows=10-10       763 ± 1%       750 ± 1%   -1.68%  (p=0.000 n=96+98)
KV/Insert/SQL/rows=10-10       489 ± 0%       484 ± 0%   -1.03%  (p=0.000 n=98+98)
```


83796: sql/stats: convert between histograms and quantile functions r=mgartner,rytaft,yuzefovich a=michae2

To predict histograms in statistics forecasts, we will use linear
regression over quantile functions. (Quantile functions are another
representation of histogram data, in a form more amenable to statistical
manipulation.)

This commit defines quantile functions and adds methods to convert
between histograms and quantile functions.

This code was originally part of #77070 but has been pulled out to
simplify that PR. A few changes have been made:
- Common code has been factored into closures.
- More checks have been added for positive values.
- In `makeQuantile` we now trim leading empty buckets as well as
  trailing empty buckets.
- The logic in `quantile.toHistogram` to steal from `NumRange` if
  `NumEq` is zero now checks that `NumRange` will still be >= 1.
- More tests have been added.

Assists: #79872

Release note: None

83827: asim: update range size split threshold, more keys r=kvoli a=kvoli

This patch updates the range size split threshold to 512mb by default.
Additionally it adds support for initializing a testing replica
distribution, where the ranges contain an equal span of the keyspace.

Release note: None

83891: sql: sql parser for `CREATE FUNCTION` statement r=chengxiong-ruan a=chengxiong-ruan

handles #83218

This commit added parser support for `CREATE FUNCTION` sql
statement. Scanner was extended so that it can recognize the
`BEGIN ATOMIC` context so that it doesnot return early when it
sees `;` charater which normally indicates the end of a
statement.

Release note (sql change): `CREATE FUNCTION` statement now
can be parsed by crdb, but an unimplemented error would be
thrown since the statement processing is not done yet.

83913: pkg/ui: Don't force tracez tags to uppercase. r=benbardin a=benbardin

Also, deprecate uses of db-console/.../Badge in favor of the identical version
in cluster-ui.

<img width="1476" alt="Screen Shot 2022-07-06 at 1 21 50 PM" src="https://user-images.githubusercontent.com/261508/177608120-e7360b9e-d2dd-4e50-8bfe-de97a0d61adf.png">

Release note: None

83929: pgwire: use better error for invalid Describe message r=ZhouXing19 a=rafiss

fixes #82785

Release note: None

84165: gc: fix NumKeysAffected counting more than collected r=erikgrinaker a=aliher1911

Previously if key is not collected after a GC batch is sent out
it would still be included as affected in GC stats.
Those stats are mostly used for logging and tests, the unfortunate
effect is that randomized test could fail.
This commit fixes the bug.

Release note: None

Fixes #84164

Co-authored-by: Nathan VanBenschoten <[email protected]>
Co-authored-by: Michael Erickson <[email protected]>
Co-authored-by: Austen McClernon <[email protected]>
Co-authored-by: Chengxiong Ruan <[email protected]>
Co-authored-by: Ben Bardin <[email protected]>
Co-authored-by: Rafi Shamim <[email protected]>
Co-authored-by: Oleg Afanasyev <[email protected]>
@postamar postamar added the A-sql-routine UDFs and Stored Procedures label Jul 12, 2022
@exalate-issue-sync exalate-issue-sync bot added T-sql-foundations SQL Foundations Team (formerly SQL Schema + SQL Sessions) and removed T-sql-schema-deprecated Use T-sql-foundations instead labels May 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-sql-routine UDFs and Stored Procedures C-enhancement Solution expected to add code/behavior + preserve backward-compat (pg compat issues are exception) T-sql-foundations SQL Foundations Team (formerly SQL Schema + SQL Sessions)
Projects
None yet
Development

No branches or pull requests

2 participants