[FEAT MERGE] cp lateral derived table to master

This commit is contained in:
ChangerR
2024-04-11 10:20:03 +00:00
committed by ob-robot
parent 263b3806fa
commit acb0d73a97
49 changed files with 2585 additions and 562 deletions

View File

@ -413,6 +413,7 @@ static const NonReservedKeyword Mysql_none_reserved_keywords[] =
{"language", LANGUAGE},
{"last", LAST},
{"last_value", LAST_VALUE},
{"lateral", LATERAL},
{"lead", LEAD},
{"leader", LEADER},
{"leading", LEADING},

View File

@ -1147,6 +1147,8 @@ Timestamp{whitespace}?\"[^\"]*\" {
<hint>DYNAMIC_SAMPLING { return DYNAMIC_SAMPLING; }
<hint>BLOCKING { return BLOCKING; }
<hint>PUSHDOWN { return PUSHDOWN; }
<hint>DECORRELATE { return DECORRELATE; }
<hint>NO_DECORRELATE { return NO_DECORRELATE; }
<hint>{identifier} {
if (!(IS_FAST_PARAMETERIZE)) {
check_value(yylval);

View File

@ -175,6 +175,7 @@ PROJECT_PRUNE NO_PROJECT_PRUNE SIMPLIFY_SET NO_SIMPLIFY_SET OUTER_TO_INNER NO_OU
COALESCE_SQ NO_COALESCE_SQ COUNT_TO_EXISTS NO_COUNT_TO_EXISTS LEFT_TO_ANTI NO_LEFT_TO_ANTI
ELIMINATE_JOIN NO_ELIMINATE_JOIN PUSH_LIMIT NO_PUSH_LIMIT PULLUP_EXPR NO_PULLUP_EXPR
WIN_MAGIC NO_WIN_MAGIC AGGR_FIRST_UNNEST NO_AGGR_FIRST_UNNEST JOIN_FIRST_UNNEST NO_JOIN_FIRST_UNNEST
DECORRELATE NO_DECORRELATE
// optimize hint
INDEX_HINT FULL_HINT NO_INDEX_HINT USE_DAS_HINT NO_USE_DAS_HINT
INDEX_SS_HINT INDEX_SS_ASC_HINT INDEX_SS_DESC_HINT
@ -299,7 +300,7 @@ END_P SET_VAR DELIMITER
KEY_BLOCK_SIZE KEY_VERSION KVCACHE KV_ATTRIBUTES
LAG LANGUAGE LAST LAST_VALUE LEAD LEADER LEAVES LESS LEAK LEAK_MOD LEAK_RATE LIB LINESTRING LIST_
LAG LANGUAGE LAST LAST_VALUE LATERAL LEAD LEADER LEAVES LESS LEAK LEAK_MOD LEAK_RATE LIB LINESTRING LIST_
LISTAGG LOB_INROW_THRESHOLD LOCAL LOCALITY LOCATION LOCKED LOCKS LOGFILE LOGONLY_REPLICA_NUM LOGS LOCK_ LOGICAL_READS
LEVEL LN LOG LS LINK LOG_RESTORE_SOURCE LINE_DELIMITER
@ -10437,6 +10438,14 @@ NO_REWRITE opt_qb_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_NO_JOIN_FIRST_UNNEST, 1, $2);
}
| DECORRELATE opt_qb_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_DECORRELATE, 1, $2);
}
| NO_DECORRELATE opt_qb_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_NO_DECORRELATE, 1, $2);
}
;
multi_qb_name_list:
@ -11414,6 +11423,11 @@ tbl_name
{
$$ = $1;
}
| LATERAL table_subquery
{
$$ = $2;
$$->value_ = 1; //lateral
}
| select_with_parens %prec LOWER_PARENS
{
ParseNode *unname_node = NULL;
@ -11421,6 +11435,14 @@ tbl_name
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 2, $1, unname_node);
unname_node->sql_str_off_ = @1.first_column;
}
| LATERAL select_with_parens %prec LOWER_PARENS
{
ParseNode *unname_node = NULL;
make_name_node(unname_node, result->malloc_pool_, "");
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 2, $2, unname_node);
unname_node->sql_str_off_ = @2.first_column;
$$->value_ = 1; //lateral
}
| select_with_parens use_flashback %prec LOWER_PARENS
{
ParseNode *unname_node = NULL;
@ -11428,6 +11450,14 @@ tbl_name
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $1, unname_node, unname_node, unname_node, unname_node, $2);
unname_node->sql_str_off_ = @1.first_column;
}
| LATERAL select_with_parens use_flashback %prec LOWER_PARENS
{
ParseNode *unname_node = NULL;
make_name_node(unname_node, result->malloc_pool_, "");
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $2, unname_node, unname_node, unname_node, unname_node, $3);
unname_node->sql_str_off_ = @2.first_column;
$$->value_ = 1; //lateral
}
| '(' table_references ')'
{
$$ = $2;
@ -20147,6 +20177,7 @@ ACCOUNT
| KEY_BLOCK_SIZE
| KEY_VERSION
| LAG
| LATERAL %prec LOWER_PARENS
| LANGUAGE
| LAST
| LAST_VALUE