DBZ-4780 Introduce support of LATERAL operator
This commit is contained in:
parent
5ab416c86d
commit
5bbc32c896
@ -131,6 +131,7 @@ JOIN: 'JOIN';
|
||||
KEY: 'KEY';
|
||||
KEYS: 'KEYS';
|
||||
KILL: 'KILL';
|
||||
LATERAL: 'LATERAL';
|
||||
LEADING: 'LEADING';
|
||||
LEAVE: 'LEAVE';
|
||||
LEFT: 'LEFT';
|
||||
|
@ -881,6 +881,7 @@ selectStatement
|
||||
queryExpression
|
||||
)?
|
||||
orderByClause? limitClause? lockClause? #unionParenthesisSelect
|
||||
| querySpecificationNointo (',' lateralStatement)+ #withLateralStatement
|
||||
;
|
||||
|
||||
updateStatement
|
||||
@ -1006,13 +1007,13 @@ indexHintType
|
||||
;
|
||||
|
||||
joinPart
|
||||
: (INNER | CROSS)? JOIN tableSourceItem
|
||||
: (INNER | CROSS)? JOIN LATERAL? tableSourceItem
|
||||
(
|
||||
ON expression
|
||||
| USING '(' uidList ')'
|
||||
)? #innerJoin
|
||||
| STRAIGHT_JOIN tableSourceItem (ON expression)? #straightJoin
|
||||
| (LEFT | RIGHT) OUTER? JOIN tableSourceItem
|
||||
| (LEFT | RIGHT) OUTER? JOIN LATERAL? tableSourceItem
|
||||
(
|
||||
ON expression
|
||||
| USING '(' uidList ')'
|
||||
@ -1053,6 +1054,11 @@ unionStatement
|
||||
(querySpecificationNointo | queryExpressionNointo)
|
||||
;
|
||||
|
||||
lateralStatement
|
||||
: LATERAL (querySpecificationNointo | queryExpressionNointo)
|
||||
| LATERAL '(' (querySpecificationNointo | queryExpressionNointo) ')' (AS? uid)?
|
||||
;
|
||||
|
||||
// details
|
||||
|
||||
selectSpec
|
||||
|
@ -475,3 +475,10 @@ WITH RECURSIVE cte (n) AS
|
||||
)
|
||||
SELECT * FROM cte;
|
||||
#end
|
||||
|
||||
#begin
|
||||
CREATE VIEW `invoice_payments_stats` AS
|
||||
SELECT
|
||||
`i`.`id` AS `id`
|
||||
FROM (`invoices` `i` JOIN lateral (SELECT MAX(`ip`.`date`) AS `latest_payment` FROM `invoice_payments` `ip`) `ps`);
|
||||
#end
|
||||
|
@ -194,4 +194,20 @@ SELECT
|
||||
GROUP_CONCAT(bin_volume order by id) AS `rank`
|
||||
FROM table2
|
||||
WINDOW w AS (PARTITION BY id, bin_volume ORDER BY id ROWS UNBOUNDED PRECEDING),
|
||||
w2 AS (PARTITION BY id, bin_volume ORDER BY id DESC ROWS 10 PRECEDING);
|
||||
w2 AS (PARTITION BY id, bin_volume ORDER BY id DESC ROWS 10 PRECEDING);
|
||||
|
||||
#begin
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/lateral-derived-tables.html
|
||||
SELECT
|
||||
salesperson.name,
|
||||
max_sale.amount,
|
||||
max_sale.customer_name
|
||||
FROM
|
||||
salesperson,
|
||||
LATERAL
|
||||
(SELECT amount, customer_name
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id
|
||||
ORDER BY amount DESC LIMIT 1)
|
||||
AS max_sale;
|
||||
#end
|
||||
|
Loading…
Reference in New Issue
Block a user