[FEAT MERGE]Query Interface Enhancement

Co-authored-by: chinaxing <chen.yack@gmail.com>
This commit is contained in:
obdev
2023-04-28 02:41:45 +00:00
committed by ob-robot
parent d48cc591bd
commit 23b365a0a7
74 changed files with 2611 additions and 330 deletions

View File

@ -825,7 +825,7 @@ inline void ObFastParserBase::reset_parser_node(ParseNode *node)
node->value_ = INT64_MAX;
node->str_value_ = nullptr;
node->str_len_ = 0;
node->str_off_ = 0;
node->pl_str_off_ = 0;
node->raw_text_ = nullptr;
node->text_len_ = 0;
node->pos_ = 0;

View File

@ -183,7 +183,7 @@ ParseNode *new_node(void *malloc_pool, ObItemType type, int num)
node->type_ = type;
node->num_child_ = num;
node->value_ = INT64_MAX;
node->str_off_ = -1;
node->pl_str_off_ = -1;
#ifdef SQL_PARSER_COMPILATION
node->token_off_ = -1;
node->token_len_ = -1;

View File

@ -160,7 +160,10 @@ typedef struct _ParseNode
};
const char *str_value_;
int64_t str_len_;
int64_t str_off_; // 记录str在原始字符串中的起始偏移
union {
int64_t pl_str_off_; // pl层, 记录str在原始字符串中的起始偏移
int64_t sql_str_off_; // sql层, 记录str在原始字符串中的起始偏移
};
/* 用于存放在词法阶段被特殊处理后丢失的文本串 eg: NULL, Date '2010-10-11',
* 该文本串在fast parse参数化后,如果该参数作为plan cache中stmtkey的一部分,

View File

@ -139,6 +139,7 @@ NULL {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return NULLX;
}
}
@ -162,6 +163,7 @@ NULL {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
node->sql_str_off_ = yylloc->first_column - 1;
setup_token_pos_info(node, yylloc->first_column - 1, node->text_len_);
return token_ret;
}
@ -209,6 +211,7 @@ NULL {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
node->sql_str_off_ = yylloc->first_column - 1;
return DECIMAL_VAL;
}
}
@ -227,6 +230,7 @@ NULL {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
node->sql_str_off_ = yylloc->first_column - 1;
return DECIMAL_VAL;
}
}
@ -241,6 +245,7 @@ TRUE {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return BOOL_VALUE;
}
}
@ -265,6 +270,7 @@ FALSE {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return BOOL_VALUE;
}
}
@ -304,6 +310,7 @@ FALSE {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column;
setup_token_pos_info(yylval->node, yylloc->first_column, yylval->node->text_len_ - 2);
return STRING_VALUE;
}
@ -453,6 +460,7 @@ FALSE {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column;
setup_token_pos_info(yylval->node, yylloc->first_column, yylval->node->str_len_);
return STRING_VALUE;
}
@ -579,6 +587,7 @@ FALSE {
}
check_malloc(dup_value);
yylval->node->str_value_ = dup_value;
yylval->node->sql_str_off_ = yylloc->first_column;
setup_token_pos_info(yylval->node, yylloc->first_column, yylval->node->str_len_);
return NAME_OB;
}
@ -648,6 +657,7 @@ FALSE {
}
check_malloc(dup_value);
yylval->node->str_value_ = dup_value;
yylval->node->sql_str_off_ = yylloc->first_column;
setup_token_pos_info(yylval->node, yylloc->first_column, yylval->node->str_len_);
return NAME_OB;
}
@ -696,6 +706,7 @@ X'([0-9A-F])*'|0X([0-9A-F])+ {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return HEX_STRING_VALUE;
}
}
@ -732,6 +743,7 @@ B'([01])*'|0B([01])+ {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return HEX_STRING_VALUE;
}
}
@ -746,6 +758,7 @@ Date{whitespace}?'[^']*' {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return DATE_VALUE;
}
}
@ -760,6 +773,7 @@ Time{whitespace}?'[^']*' {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return DATE_VALUE;
}
}
@ -774,6 +788,7 @@ Timestamp{whitespace}?'[^']*' {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return DATE_VALUE;
}
}
@ -787,6 +802,7 @@ Date{whitespace}?\"[^\"]*\" {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return DATE_VALUE;
}
}
@ -801,6 +817,7 @@ Time{whitespace}?\"[^\"]*\" {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return DATE_VALUE;
}
}
@ -815,6 +832,7 @@ Timestamp{whitespace}?\"[^\"]*\" {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return DATE_VALUE;
}
}
@ -1080,6 +1098,7 @@ Timestamp{whitespace}?\"[^\"]*\" {
check_malloc(dup_value);
node->str_value_ = str_tolower(dup_value, strlen(dup_value));
node->str_len_ = out_len;
node->sql_str_off_ = yylloc->first_column - 1;
setup_token_pos_info(node, yylloc->first_column - 1, yylval->node->str_len_);
}
return NAME_OB;
@ -1112,6 +1131,7 @@ Timestamp{whitespace}?\"[^\"]*\" {
if (IS_FAST_PARAMETERIZE) {
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column;
setup_token_pos_info(yylval->node, yylloc->first_column, yylval->node->text_len_ - 2);
return STRING_VALUE;
}
@ -1171,6 +1191,7 @@ Timestamp{whitespace}?\"[^\"]*\" {
}
check_malloc(dup_value);
yylval->node->str_value_ = dup_value;
yylval->node->sql_str_off_ = yylloc->first_column;
setup_token_pos_info(yylval->node, yylloc->first_column, yylval->node->str_len_);
return NAME_OB;
}
@ -1359,6 +1380,7 @@ BEGIN(in_c_comment);
check_malloc(yylval->node->raw_text_);
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return QUESTIONMARK;
}
}
@ -1378,6 +1400,7 @@ BEGIN(in_c_comment);
check_malloc(yylval->node->raw_text_);
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return QUESTIONMARK;
}
}
@ -1402,6 +1425,7 @@ BEGIN(in_c_comment);
check_malloc(yylval->node->raw_text_);
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
yylval->node->pos_ = yylloc->first_column - 1;
return QUESTIONMARK;
}
@ -1420,6 +1444,7 @@ BEGIN(in_c_comment);
check_malloc(yylval->node->raw_text_);
STORE_PARAM_NODE();
} else {
yylval->node->sql_str_off_ = yylloc->first_column - 1;
return QUESTIONMARK;
}
} else {
@ -1508,6 +1533,7 @@ BEGIN(in_c_comment);
node->str_value_ = parse_strdup(yytext, p->malloc_pool_, &(node->str_len_));
}
check_malloc(node->str_value_);
node->sql_str_off_ = yylloc->first_column-1;
setup_token_pos_info(node, yylloc->first_column - 1, node->str_len_);
ret = NAME_OB;
} else {

View File

@ -724,6 +724,7 @@ expr opt_as column_label
dup_expr_string($$, result, @3.first_column, @3.last_column);
dup_node_string($3, alias_node, result->malloc_pool_);
alias_node->param_num_ = 0;
alias_node->sql_str_off_ = @2.first_column;
}
}
| expr opt_as STRING_VALUE
@ -743,8 +744,10 @@ expr opt_as column_label
if (0 == $3->str_len_) {
alias_name_node->str_value_ = NULL;
alias_name_node->str_len_ = 0;
alias_name_node->sql_str_off_ = $3->sql_str_off_;
} else {
dup_node_string($3, alias_name_node, result->malloc_pool_);
alias_name_node->sql_str_off_ = $3->sql_str_off_;
}
malloc_non_terminal_node(alias_node, result->malloc_pool_, T_ALIAS, 2, $1, alias_name_node);
@ -753,8 +756,10 @@ expr opt_as column_label
if (0 == $3->str_len_) {
alias_node->str_value_ = NULL;
alias_node->str_len_ = 0;
alias_node->sql_str_off_ = @2.first_column;
} else {
dup_node_string($3, alias_node, result->malloc_pool_);
alias_node->sql_str_off_ = @2.first_column;
}
alias_node->param_num_ = 1;
}
@ -893,6 +898,7 @@ STRING_VALUE %prec LOWER_THAN_COMP
$$->str_len_ = $1->str_len_;
$$->raw_text_ = $1->raw_text_;
$$->text_len_ = $1->text_len_;
$$->sql_str_off_ = @1.first_column;
@$.first_column = @1.first_column;
@$.last_column = @1.last_column;
}
@ -903,6 +909,7 @@ STRING_VALUE %prec LOWER_THAN_COMP
$$->str_len_ = $2->str_len_;
$$->raw_text_ = $2->raw_text_;
$$->text_len_ = $2->text_len_;
$$->sql_str_off_ = $2->sql_str_off_;
}
| charset_introducer HEX_STRING_VALUE
{
@ -912,6 +919,7 @@ STRING_VALUE %prec LOWER_THAN_COMP
$$->str_len_ = $2->str_len_;
$$->raw_text_ = $2->raw_text_;
$$->text_len_ = $2->text_len_;
$$->sql_str_off_ = $2->sql_str_off_;
}
| STRING_VALUE string_val_list %prec LOWER_THAN_COMP
{
@ -1017,14 +1025,15 @@ complex_string_literal { $$ = $1; }
;
number_literal:
INTNUM { $$ = $1; $$->param_num_ = 1;}
| DECIMAL_VAL { $$ = $1; $$->param_num_ = 1;}
INTNUM { $$ = $1; $$->param_num_ = 1; $$->sql_str_off_=$1->sql_str_off_;}
| DECIMAL_VAL { $$ = $1; $$->param_num_ = 1;$$->sql_str_off_=$1->sql_str_off_;}
;
expr_const:
literal
{
$$ = $1;
$$->sql_str_off_ = $1->sql_str_off_;
CHECK_MYSQL_COMMENT(result, $$);
}
| SYSTEM_VARIABLE { $$ = $1; }
@ -1243,6 +1252,7 @@ bit_expr IN in_expr
malloc_terminal_node(node, result->malloc_pool_, T_VARCHAR);
node->str_value_ = "\\";
node->str_len_ = 1;
node->sql_str_off_ = @5.first_column;
malloc_non_terminal_node($$, result->malloc_pool_, T_OP_LIKE, 3, $1, $3, node);
} else {
malloc_non_terminal_node($$, result->malloc_pool_, T_OP_LIKE, 3, $1, $3, $5);
@ -1263,6 +1273,7 @@ bit_expr IN in_expr
malloc_terminal_node(node, result->malloc_pool_, T_VARCHAR);
node->str_value_ = "\\";
node->str_len_ = 1;
node->sql_str_off_ = @6.first_column;
malloc_non_terminal_node($$, result->malloc_pool_, T_OP_NOT_LIKE, 3, $1, $4, node);
} else {
malloc_non_terminal_node($$, result->malloc_pool_, T_OP_NOT_LIKE, 3, $1, $4, $6);
@ -1434,7 +1445,10 @@ simple_expr collation %prec NEG
malloc_non_terminal_node($$, result->malloc_pool_, T_FUN_SYS, 2, $$, params);
}
| column_ref { $$ = $1; }
| expr_const { $$ = $1; }
| expr_const {
$$ = $1;
$$->sql_str_off_ = $1->sql_str_off_;
}
| simple_expr CNNOP simple_expr
{
malloc_non_terminal_node($$, result->malloc_pool_, T_OP_CNN, 2, $1, $3);
@ -2928,6 +2942,7 @@ NOW '(' ')'
malloc_terminal_node(params, result->malloc_pool_, T_INT);
params->value_ = $2[0];
malloc_non_terminal_node($$, result->malloc_pool_, T_FUN_SYS_CUR_TIMESTAMP, 1, params);
params->sql_str_off_ = @$.first_column;
}
else
{
@ -2959,6 +2974,7 @@ CURTIME '(' ')'
ParseNode *params = NULL;
malloc_terminal_node(params, result->malloc_pool_, T_INT);
params->value_ = $2[0];
params->sql_str_off_ = @1.first_column;
malloc_non_terminal_node($$, result->malloc_pool_, T_FUN_SYS_CUR_TIME, 1, params);
}
else
@ -3137,6 +3153,7 @@ ws_level_list_item
malloc_terminal_node($$, result->malloc_pool_, T_WEIGHT_STRING_LEVEL_PARAM);
$$->value_ = $3->value_ | $1->value_;
$$->param_num_ = $1->param_num_ + $3->param_num_;
$$->sql_str_off_ = $1->sql_str_off_;
}
;
@ -3146,6 +3163,7 @@ ws_level_number ws_level_flags
malloc_terminal_node($$, result->malloc_pool_, T_INT);
$$->value_ = (1 | $2->value_) << $1->value_ ;
$$->param_num_ = 1;
$$->sql_str_off_ = $1->sql_str_off_;
}
;
@ -3153,6 +3171,7 @@ ws_level_range:
ws_level_number '-' ws_level_number
{
malloc_terminal_node($$, result->malloc_pool_, T_WEIGHT_STRING_LEVEL_PARAM);
$$->sql_str_off_ = $1->sql_str_off_;
uint32_t res = 0;
uint32_t start = $1->value_ ;
uint32_t end = $3->value_ ;
@ -3171,6 +3190,7 @@ ws_level_number:
INTNUM
{
malloc_terminal_node($$, result->malloc_pool_, T_INT);
$$->sql_str_off_ = $1->sql_str_off_;
if ($1->value_ < 1) {
$$->value_ = 1;
} else if ($1->value_ > OB_STRXFRM_NLEVELS) {
@ -3199,6 +3219,7 @@ ws_level_flags:
malloc_terminal_node($$, result->malloc_pool_, T_INT);
$$->value_ = $1->value_ | $2->value_;
$$->param_num_ = 1;
$$->sql_str_off_ = $1->sql_str_off_;
}
| ws_level_flag_reverse
{
@ -3696,6 +3717,7 @@ LOGONLY_REPLICA_NUM opt_equal_mark INTNUM
malloc_terminal_node($$, result->malloc_pool_, T_CHARSET);
$$->str_value_ = $3->str_value_;
$$->str_len_ = $3->str_len_;
$$->sql_str_off_ = $3->sql_str_off_;
}
| COLLATE opt_equal_mark collation_name
{
@ -3704,6 +3726,7 @@ LOGONLY_REPLICA_NUM opt_equal_mark INTNUM
$$->str_value_ = $3->str_value_;
$$->str_len_ = $3->str_len_;
$$->param_num_ = $3->param_num_;
$$->sql_str_off_ = $3->sql_str_off_;
}
| read_only_or_write
{
@ -3929,6 +3952,7 @@ opt_default_mark charset_key opt_equal_mark charset_name
malloc_terminal_node($$, result->malloc_pool_, T_CHARSET);
$$->str_value_ = $4->str_value_;
$$->str_len_ = $4->str_len_;
$$->sql_str_off_ = $4->sql_str_off_;
}
| opt_default_mark COLLATE opt_equal_mark collation_name
{
@ -3938,12 +3962,14 @@ opt_default_mark charset_key opt_equal_mark charset_name
$$->str_value_ = $4->str_value_;
$$->str_len_ = $4->str_len_;
$$->param_num_ = $4->param_num_;
$$->sql_str_off_ = $4->sql_str_off_;
}
| REPLICA_NUM opt_equal_mark INTNUM
{
(void)($2);
malloc_terminal_node($$, result->malloc_pool_, T_REPLICA_NUM);
$$->value_ = $3->value_;
$$->sql_str_off_ = $3->sql_str_off_;
}
| read_only_or_write
{
@ -4687,11 +4713,13 @@ NOT NULLX
{
(void)($2) ; /* make bison mute */
malloc_terminal_node($$, result->malloc_pool_, T_CONSTR_NOT_NULL);
$$->sql_str_off_ = $2->sql_str_off_;
}
| NULLX
{
(void)($1) ; /* make bison mute */
malloc_terminal_node($$, result->malloc_pool_, T_CONSTR_NULL);
$$->sql_str_off_ = $1->sql_str_off_;
}
| UNIQUE KEY
{
@ -4780,6 +4808,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_COLL_IDX] = BINARY_COLLATION; /* is binary */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = $2[0]; /* length */
$$->param_num_ = $2[1];
$$->sql_str_off_ = @1.first_column;
}
| CHARACTER opt_string_length_i_v2 opt_binary
{
@ -4790,6 +4819,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_COLL_IDX] = INVALID_COLLATION; /* is char */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = $2[0]; /* length */
$$->param_num_ = $2[1]; /* opt_binary的常数个数一定为0 */
$$->sql_str_off_ = @1.first_column;
}
| CHARACTER opt_string_length_i_v2 charset_key charset_name
{
@ -4801,6 +4831,7 @@ BINARY opt_string_length_i_v2
$$->param_num_ = $2[1];
$$->str_value_ = $4->str_value_;
$$->str_len_ = $4->str_len_;
$$->sql_str_off_ = @1.first_column;
}
| cast_datetime_type_i opt_datetime_fsp_i
{
@ -4809,6 +4840,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_TYPE_IDX] = $1[0];
$$->int16_values_[OB_NODE_CAST_N_SCALE_IDX] = $2[0];
$$->param_num_ = $1[1] + $2[1];
$$->sql_str_off_ = @1.first_column;
}
| NUMBER opt_number_precision
{
@ -4819,6 +4851,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_N_PREC_IDX] = $2->int16_values_[0]; /* precision */
$$->int16_values_[OB_NODE_CAST_N_SCALE_IDX] = $2->int16_values_[1]; /* scale */
$$->param_num_ = $2->param_num_;
$$->sql_str_off_ = $2->sql_str_off_;
}
}
| DECIMAL opt_number_precision
@ -4830,6 +4863,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_N_PREC_IDX] = $2->int16_values_[0]; /* precision */
$$->int16_values_[OB_NODE_CAST_N_SCALE_IDX] = $2->int16_values_[1]; /* scale */
$$->param_num_ = $2->param_num_;
$$->sql_str_off_ = $2->sql_str_off_;
}
}
| FIXED opt_number_precision
@ -4841,6 +4875,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_N_PREC_IDX] = $2->int16_values_[0]; /* precision */
$$->int16_values_[OB_NODE_CAST_N_SCALE_IDX] = $2->int16_values_[1]; /* scale */
$$->param_num_ = $2->param_num_;
$$->sql_str_off_ = $2->sql_str_off_;
}
}
| NUMERIC opt_number_precision
@ -4852,6 +4887,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_N_PREC_IDX] = $2->int16_values_[0]; /* precision */
$$->int16_values_[OB_NODE_CAST_N_SCALE_IDX] = $2->int16_values_[1]; /* scale */
$$->param_num_ = $2->param_num_;
$$->sql_str_off_ = $2->sql_str_off_;
}
}
| SIGNED opt_integer
@ -4861,6 +4897,7 @@ BINARY opt_string_length_i_v2
$$->value_ = 0;
$$->int16_values_[OB_NODE_CAST_TYPE_IDX] = T_INT;
$$->param_num_ = $2[1];
$$->sql_str_off_ = @1.first_column;
}
| UNSIGNED opt_integer
{
@ -4868,6 +4905,7 @@ BINARY opt_string_length_i_v2
$$->value_ = 0;
$$->int16_values_[OB_NODE_CAST_TYPE_IDX] = T_UINT64;
$$->param_num_ = $2[1];
$$->sql_str_off_ = @1.first_column;
}
| DOUBLE
{
@ -4877,6 +4915,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_N_PREC_IDX] = -1; /* precision */
$$->int16_values_[OB_NODE_CAST_N_SCALE_IDX] = -1; /* scale */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| FLOAT opt_cast_float_precision
{ /* If p is provided and 0 <= < p <= 24, the result is of type FLOAT. */
@ -4887,6 +4926,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_N_PREC_IDX] = $2[0]; /* precision */
$$->int16_values_[OB_NODE_CAST_N_SCALE_IDX] = -1; /* scale */
$$->param_num_ = $2[1]; /* param only use to choose float or double convert */
$$->sql_str_off_ = @1.first_column;
}
| JSON
{
@ -4896,6 +4936,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_COLL_IDX] = INVALID_COLLATION;
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| POINT
{
@ -4905,6 +4946,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_GEO_TYPE_IDX] = 1; /* point */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| LINESTRING
{
@ -4914,6 +4956,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_GEO_TYPE_IDX] = 2; /* linestring */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| POLYGON
{
@ -4923,6 +4966,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_GEO_TYPE_IDX] = 3; /* polygon */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| MULTIPOINT
{
@ -4932,6 +4976,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_GEO_TYPE_IDX] = 4; /* multipoint */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| MULTILINESTRING
{
@ -4941,6 +4986,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_GEO_TYPE_IDX] = 5; /* multilinestring */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| MULTIPOLYGON
{
@ -4950,6 +4996,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_GEO_TYPE_IDX] = 6; /* multipolygon */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
| GEOMETRYCOLLECTION
{
@ -4959,6 +5006,7 @@ BINARY opt_string_length_i_v2
$$->int16_values_[OB_NODE_CAST_GEO_TYPE_IDX] = 7; /* geometrycollection */
$$->int32_values_[OB_NODE_CAST_C_LEN_IDX] = 0; /* length */
$$->param_num_ = 0;
$$->sql_str_off_ = @1.first_column;
}
;
@ -5007,6 +5055,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
malloc_terminal_node($$, result->malloc_pool_, ($3[0] || $4[0]) ? $1[0] + (T_UTINYINT - T_TINYINT) : $1[0]);
$$->int16_values_[0] = $2[0];
$$->int16_values_[2] = $4[0]; /* 2 is the same index as float or number. */
$$->sql_str_off_ = @1.first_column;
}
| float_type_i opt_float_precision opt_unsigned_i opt_zerofill_i
{
@ -5021,6 +5070,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
/* malloc_terminal_node() has set memory to 0 filled, so there is no else. */
$$->int16_values_[2] = $4[0];
$$->sql_str_off_ = @$.first_column;
}
| NUMBER opt_number_precision opt_unsigned_i opt_zerofill_i
{
@ -5031,6 +5081,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
/* malloc_terminal_node() has set memory to 0 filled, so there is no else. */
$$->int16_values_[2] = $4[0];
$$->sql_str_off_ = $2->sql_str_off_;
}
| DECIMAL opt_number_precision opt_unsigned_i opt_zerofill_i
{
@ -5041,6 +5092,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
/* malloc_terminal_node() has set memory to 0 filled, so there is no else. */
$$->int16_values_[2] = $4[0];
$$->sql_str_off_ = $2->sql_str_off_;
}
| FIXED opt_number_precision opt_unsigned_i opt_zerofill_i
{
@ -5051,6 +5103,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
/* malloc_terminal_node() has set memory to 0 filled, so there is no else. */
$$->int16_values_[2] = $4[0];
$$->sql_str_off_ = $2->sql_str_off_;
}
| NUMERIC opt_number_precision opt_unsigned_i opt_zerofill_i
{
@ -5061,6 +5114,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
/* malloc_terminal_node() has set memory to 0 filled, so there is no else. */
$$->int16_values_[2] = $4[0];
$$->sql_str_off_ = $2->sql_str_off_;
}
| BOOL
{
@ -5078,16 +5132,19 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
{
malloc_terminal_node($$, result->malloc_pool_, $1[0]);
$$->int16_values_[1] = $2[0];
$$->sql_str_off_ = @1.first_column;
}
| date_year_type_i
{
malloc_terminal_node($$, result->malloc_pool_, $1[0]);
$$->sql_str_off_ = @1.first_column;
}
| CHARACTER opt_string_length_i opt_binary opt_charset opt_collation
{
malloc_non_terminal_node($$, result->malloc_pool_, T_CHAR, 3, $4, $5, $3);
$$->int32_values_[0] = $2[0];
$$->int32_values_[1] = 0; /* is char */
$$->sql_str_off_ = @1.first_column;
}
/* | TEXT opt_binary opt_charset opt_collation
// {
@ -5119,6 +5176,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
$$->int32_values_[0] = $2[0];
$$->int32_values_[1] = 1; /* is binary */
$$->sql_str_off_ = @1.first_column;
}
| text_type_i opt_string_length_i_v2 opt_binary opt_charset opt_collation
{
@ -5140,18 +5198,21 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
$$->int32_values_[0] = $2[0];
$$->int32_values_[1] = 1; /* is binary */
$$->sql_str_off_ = @1.first_column;
}
| VARBINARY string_length_i
{
malloc_terminal_node($$, result->malloc_pool_, T_VARCHAR);
$$->int32_values_[0] = $2[0];
$$->int32_values_[1] = 1; /* is binary */
$$->sql_str_off_ = @1.first_column;
}
| STRING_VALUE /* wrong or unsupported data type */
{
malloc_terminal_node($$, result->malloc_pool_, T_INVALID);
$$->str_value_ = $1->str_value_;
$$->str_len_ = $1->str_len_;
$$->sql_str_off_ = $1->sql_str_off_;
}
| BIT opt_bit_length_i
{
@ -5162,6 +5223,7 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
} else {
malloc_terminal_node($$, result->malloc_pool_, T_BIT);
$$->int16_values_[0] = $2[0];
$$->sql_str_off_ = @1.first_column;
}
}
| ENUM '(' string_list ')' opt_binary opt_charset opt_collation
@ -5329,12 +5391,14 @@ opt_float_precision:
malloc_terminal_node($$, result->malloc_pool_, T_LINK_NODE);
$$->int16_values_[0] = $2->value_;
$$->int16_values_[1] = $4->value_;
$$->sql_str_off_ = $2->sql_str_off_;
}
| '(' INTNUM ')'
{
malloc_terminal_node($$, result->malloc_pool_, T_LINK_NODE);
$$->int16_values_[0] = $2->value_;
$$->int16_values_[1] = -1;
$$->sql_str_off_ = $2->sql_str_off_;
}
| '(' DECIMAL_VAL ')'
{
@ -5343,6 +5407,7 @@ opt_float_precision:
$2->value_ = ob_strntoll($2->str_value_, $2->str_len_, 10, NULL, &err_no);
$$->int16_values_[0] = $2->value_;
$$->int16_values_[1] = -1;
$$->sql_str_off_ = $2->sql_str_off_;
}
| /*EMPTY*/
{
@ -5364,6 +5429,7 @@ opt_number_precision:
} else {
$$->int16_values_[1] = $4->value_;
}
$$->sql_str_off_ = $2->sql_str_off_;
$$->param_num_ = 2;
}
| '(' INTNUM ')'
@ -5373,6 +5439,7 @@ opt_number_precision:
$$->int16_values_[0] = OB_MAX_PARSER_INT16_VALUE;
} else {
$$->int16_values_[0] = $2->value_;
$$->sql_str_off_ = $2->sql_str_off_;
}
$$->int16_values_[1] = 0;
$$->param_num_ = 1;
@ -5561,6 +5628,7 @@ charset_key charset_name
malloc_terminal_node($$, result->malloc_pool_, T_CHARSET);
$$->str_value_ = $2->str_value_;
$$->str_len_ = $2->str_len_;
$$->sql_str_off_ = $2->sql_str_off_;
}
| /*EMPTY*/
{ $$ = NULL; }
@ -5573,6 +5641,7 @@ COLLATE collation_name
$$->str_value_ = $2->str_value_;
$$->str_len_ = $2->str_len_;
$$->param_num_ = $2->param_num_;
$$->sql_str_off_ = $2->sql_str_off_;
};
opt_collation:
@ -5597,11 +5666,13 @@ not NULLX
(void)($1) ;
(void)($2) ; /* make bison mute */
malloc_terminal_node($$, result->malloc_pool_, T_CONSTR_NOT_NULL);
$$->sql_str_off_ = $2->sql_str_off_;
}
| NULLX
{
(void)($1) ; /* make bison mute */
malloc_terminal_node($$, result->malloc_pool_, T_CONSTR_NULL);
$$->sql_str_off_ = $1->sql_str_off_;
}
| DEFAULT now_or_signed_literal
{
@ -5843,6 +5914,7 @@ TABLE_MODE opt_equal_mark STRING_VALUE
$$->str_value_ = $4->str_value_;
$$->str_len_ = $4->str_len_;
$$->param_num_ = $4->param_num_;
$$->sql_str_off_ = $4->sql_str_off_;
}
| COMMENT opt_equal_mark STRING_VALUE
{
@ -6842,6 +6914,7 @@ opt_default_mark TABLEGROUP opt_equal_mark relation_name
malloc_terminal_node($$, result->malloc_pool_, T_DEFAULT_TABLEGROUP);
$$->str_value_ = $4->str_value_;
$$->str_len_ = $4->str_len_;
$$->sql_str_off_ = $4->sql_str_off_;
}
| opt_default_mark TABLEGROUP opt_equal_mark NULLX
{
@ -6849,6 +6922,7 @@ opt_default_mark TABLEGROUP opt_equal_mark relation_name
(void)($3) ; /* make bison mute */
(void)($4) ; /* make bison mute */
malloc_terminal_node($$, result->malloc_pool_, T_DEFAULT_TABLEGROUP);
$$->sql_str_off_ = $4->sql_str_off_;
}
;
@ -7945,6 +8019,7 @@ select_with_parens order_by
// from_list
ParseNode *alias_node = NULL;
make_name_node(alias_node, result->malloc_pool_, "");
alias_node->sql_str_off_ = @1.first_column;
malloc_non_terminal_node(alias_node, result->malloc_pool_, T_ALIAS, 2, $1, alias_node);
ParseNode *from_list = NULL;
@ -7975,6 +8050,7 @@ select_with_parens order_by
// from_list
ParseNode *alias_node = NULL;
make_name_node(alias_node, result->malloc_pool_, "");
alias_node->sql_str_off_ = @1.first_column;
malloc_non_terminal_node(alias_node, result->malloc_pool_, T_ALIAS, 2, $1, alias_node);
ParseNode *from_list = NULL;
@ -9222,22 +9298,26 @@ opt_for_update_wait:
malloc_terminal_node($$, result->malloc_pool_, T_SFU_DECIMAL);
$$->str_value_ = $2->str_value_;
$$->str_len_ = $2->str_len_;
$$->sql_str_off_ = $2->sql_str_off_;
}
| WAIT INTNUM
{
malloc_terminal_node($$, result->malloc_pool_, T_SFU_INT);
$$->value_ = $2->value_;
$$->sql_str_off_ = $2->sql_str_off_;
}
| NOWAIT
{
malloc_terminal_node($$, result->malloc_pool_, T_SFU_INT);
$$->value_ = 0;
$$->sql_str_off_ = @1.first_column;
$$->is_hidden_const_ = 1;
}
| NO_WAIT
{
malloc_terminal_node($$, result->malloc_pool_, T_SFU_INT);
$$->value_ = 0;
$$->sql_str_off_ = @1.first_column;
$$->is_hidden_const_ = 1;
};
@ -9510,6 +9590,7 @@ expr %prec LOWER_PARENS
dup_expr_string($$, result, @1.first_column, @1.last_column);
dup_node_string($2, alias_node, result->malloc_pool_);
alias_node->param_num_ = 0;
alias_node->sql_str_off_ = @1.first_column;
}
}
| expr AS column_label
@ -9528,6 +9609,7 @@ expr %prec LOWER_PARENS
dup_expr_string($$, result, @1.first_column, @1.last_column);
dup_node_string($3, alias_node, result->malloc_pool_);
alias_node->param_num_ = 0;
alias_node->sql_str_off_ = @1.first_column;
}
}
| expr opt_as STRING_VALUE
@ -9556,8 +9638,10 @@ expr %prec LOWER_PARENS
if (NULL == $3->str_value_) {
alias_node->str_value_ = NULL;
alias_node->str_len_ = 0;
alias_node->sql_str_off_ = $3->sql_str_off_;
} else {
dup_node_string($3, alias_node, result->malloc_pool_);
alias_node->sql_str_off_ = $3->sql_str_off_;
}
alias_node->param_num_ = 1;
}
@ -9641,12 +9725,14 @@ tbl_name
ParseNode *unname_node = NULL;
make_name_node(unname_node, result->malloc_pool_, "");
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 2, $1, unname_node);
unname_node->sql_str_off_ = @1.first_column;
}
| 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, $1, unname_node, unname_node, unname_node, unname_node, $2);
unname_node->sql_str_off_ = @1.first_column;
}
| '(' table_references ')'
{
@ -9732,22 +9818,27 @@ relation_factor %prec LOWER_PARENS
| relation_factor AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $3, NULL, NULL, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, NULL, $2, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_flashback AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $1, $4, NULL, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition use_flashback AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $1, $5, NULL, $2, NULL, $3);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor sample_clause AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor sample_clause seed AS relation_name
{
@ -9755,10 +9846,12 @@ relation_factor %prec LOWER_PARENS
$2->children_[2] = $3;
}
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $5, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition sample_clause AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $5, NULL, $2, $3);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition sample_clause seed AS relation_name
{
@ -9766,22 +9859,26 @@ relation_factor %prec LOWER_PARENS
$3->children_[2] = $4;
}
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $6, NULL, $2, $3);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor AS relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $4);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $3, $$, NULL, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition AS relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $5);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, $$, $2, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor sample_clause AS relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $5);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, $$, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor sample_clause seed AS relation_name index_hint_list
{
@ -9790,11 +9887,13 @@ relation_factor %prec LOWER_PARENS
}
merge_nodes($$, result, T_INDEX_HINT_LIST, $6);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $5, $$, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition sample_clause AS relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $6);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $5, $$, $2, $3);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition sample_clause seed AS relation_name index_hint_list
{
@ -9803,36 +9902,44 @@ relation_factor %prec LOWER_PARENS
}
merge_nodes($$, result, T_INDEX_HINT_LIST, $7);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $6, $$, $2, $3);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $2, NULL, NULL, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $3, NULL, $2, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_flashback relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $1, $3, NULL, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition use_flashback relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $1, $4, NULL, $2, NULL, $3);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $3);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $2, $$, NULL, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $4);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $3, $$, $2, NULL);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor sample_clause seed relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
if ($2 != NULL) {
$2->children_[2] = $3;
}
@ -9840,6 +9947,7 @@ relation_factor %prec LOWER_PARENS
| relation_factor use_partition sample_clause seed relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $5, NULL, $2, $3);
$$->sql_str_off_ = @1.first_column;
if ($3 != NULL) {
$3->children_[2] = $4;
}
@ -9848,6 +9956,7 @@ relation_factor %prec LOWER_PARENS
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $5);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, $$, NULL, $2);
$$->sql_str_off_ = @1.first_column;
if ($2 != NULL) {
$2->children_[2] = $3;
}
@ -9856,6 +9965,7 @@ relation_factor %prec LOWER_PARENS
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $6);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $5, $$, $2, $3);
$$->sql_str_off_ = @1.first_column;
if ($3 != NULL) {
$3->children_[2] = $4;
}
@ -9863,20 +9973,24 @@ relation_factor %prec LOWER_PARENS
| relation_factor sample_clause relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $3, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition sample_clause relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, NULL, $2, $3);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor sample_clause relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $4);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $3, $$, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| relation_factor use_partition sample_clause relation_name index_hint_list
{
merge_nodes($$, result, T_INDEX_HINT_LIST, $5);
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 5, $1, $4, $$, $2, $3);
$$->sql_str_off_ = @1.first_column;
}
| TABLE '(' simple_expr ')' %prec LOWER_PARENS
{
@ -9906,6 +10020,7 @@ SEED '(' INTNUM ')'
/* USE T_SFU_XXX to avoid being parsed by plan cache as template var */
malloc_terminal_node($$, result->malloc_pool_, T_SFU_INT);
$$->value_ = $3->value_;
$$->sql_str_off_ = $3->sql_str_off_;
};
sample_percent:
@ -9914,6 +10029,7 @@ INTNUM
/* USE T_SFU_XXX to avoid being parsed by plan cache as template var */
malloc_terminal_node($$, result->malloc_pool_, T_SFU_INT);
$$->value_ = $1->value_;
$$->sql_str_off_ = $1->sql_str_off_;
}
|
DECIMAL_VAL
@ -9922,6 +10038,7 @@ DECIMAL_VAL
malloc_terminal_node($$, result->malloc_pool_, T_SFU_DECIMAL);
$$->str_len_ = $1->str_len_;
$$->str_value_ = $1->str_value_;
$$->sql_str_off_ = $1->sql_str_off_;
};
opt_sample_scope:
@ -9966,18 +10083,22 @@ table_subquery:
select_with_parens relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 2, $1, $2);
$$->sql_str_off_ = @1.first_column;
}
| select_with_parens AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 2, $1, $3);
$$->sql_str_off_ = @1.first_column;
}
| select_with_parens use_flashback relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $1, $3, NULL, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
| select_with_parens use_flashback AS relation_name
{
malloc_non_terminal_node($$, result->malloc_pool_, T_ALIAS, 6, $1, $4, NULL, NULL, NULL, $2);
$$->sql_str_off_ = @1.first_column;
}
;
@ -10404,6 +10525,7 @@ table_reference inner_join_type opt_full_table_factor %prec LOWER_ON
$$->children_[i] = $1->children_[i - 1];
}
}
$$->sql_str_off_ = @1.first_column;
}
} else if ($1->type_ == T_ALIAS && $1->children_[1] != NULL &&
strlen($1->children_[1]->str_value_) == 0) {
@ -10451,6 +10573,7 @@ table_factor %prec LOWER_COMMA
$$->children_[i] = $1->children_[i - 1];
}
}
$$->sql_str_off_ = @1.first_column;
}
} else if ($1->type_ == T_ALIAS && $1->children_[1] != NULL &&
strlen($1->children_[1]->str_value_) == 0) {
@ -10988,6 +11111,7 @@ INTNUM
| BOOL_VALUE
{
malloc_terminal_node($$, result->malloc_pool_, T_INT);
$$->sql_str_off_ = $1->sql_str_off_;
$$->value_ = $1->value_;
}
| QUESTIONMARK
@ -11824,11 +11948,13 @@ MAX_CONNECTIONS_PER_HOUR INTNUM
{
malloc_terminal_node($$, result->malloc_pool_, T_MAX_CONNECTIONS_PER_HOUR);
$$->value_ = $2->value_;
$$->sql_str_off_ = $2->sql_str_off_;
}
| MAX_USER_CONNECTIONS INTNUM
{
malloc_terminal_node($$, result->malloc_pool_, T_MAX_USER_CONNECTIONS);
$$->value_ = $2->value_;
$$->sql_str_off_ = $2->sql_str_off_;
}
/*
| MAX_QUERIES_PER_HOUR INTNUM
@ -14846,12 +14972,14 @@ relation_name_or_string
malloc_terminal_node($$, result->malloc_pool_, T_TENANT_NAME);
$$->str_value_ = $1->str_value_;
$$->str_len_ = $1->str_len_;
$$->sql_str_off_ = $1->sql_str_off_;
}
| TENANT_ID opt_equal_mark INTNUM
{
(void)($2);
malloc_terminal_node($$, result->malloc_pool_, T_TENANT_ID);
$$->value_ = $3->value_;
$$->sql_str_off_ = $3->sql_str_off_;
}
;
@ -15451,6 +15579,7 @@ TENANT_ID opt_equal_mark INTNUM
(void)($2);
malloc_terminal_node($$, result->malloc_pool_, T_TENANT_ID);
$$->value_ = $3->value_;
$$->sql_str_off_ = $3->sql_str_off_;
}
|
TENANT opt_equal_mark relation_name_or_string
@ -15459,6 +15588,7 @@ TENANT opt_equal_mark relation_name_or_string
malloc_terminal_node($$, result->malloc_pool_, T_TENANT_NAME);
$$->str_value_ = $3->str_value_;
$$->str_len_ = $3->str_len_;
$$->sql_str_off_ = $3->sql_str_off_;
}
| /* EMPTY */
{
@ -16104,6 +16234,7 @@ SAVEPOINT var_name
malloc_terminal_node($$, result->malloc_pool_, T_CREATE_SAVEPOINT);
$$->str_value_ = $2->str_value_;
$$->str_len_ = $2->str_len_;
$$->sql_str_off_ = $2->sql_str_off_;
}
;
rollback_savepoint_stmt:
@ -16112,18 +16243,21 @@ ROLLBACK TO var_name
malloc_terminal_node($$, result->malloc_pool_, T_ROLLBACK_SAVEPOINT);
$$->str_value_ = $3->str_value_;
$$->str_len_ = $3->str_len_;
$$->sql_str_off_ = $3->sql_str_off_;
}
| ROLLBACK WORK TO var_name
{
malloc_terminal_node($$, result->malloc_pool_, T_ROLLBACK_SAVEPOINT);
$$->str_value_ = $4->str_value_;
$$->str_len_ = $4->str_len_;
$$->sql_str_off_ = $4->sql_str_off_;
}
| ROLLBACK TO SAVEPOINT var_name
{
malloc_terminal_node($$, result->malloc_pool_, T_ROLLBACK_SAVEPOINT);
$$->str_value_ = $4->str_value_;
$$->str_len_ = $4->str_len_;
$$->sql_str_off_ = $4->sql_str_off_;
}
;
release_savepoint_stmt:
@ -16132,6 +16266,7 @@ RELEASE SAVEPOINT var_name
malloc_terminal_node($$, result->malloc_pool_, T_RELEASE_SAVEPOINT);
$$->str_value_ = $3->str_value_;
$$->str_len_ = $3->str_len_;
$$->sql_str_off_ = $3->sql_str_off_;
}
;
@ -16652,10 +16787,12 @@ ERROR_P
malloc_terminal_node(type_node, result->malloc_pool_, T_NULLX_CLAUSE);
type_node->value_ = 1;
type_node->param_num_ = 1;
type_node->sql_str_off_ = $1->sql_str_off_;
ParseNode *v_node = NULL;
malloc_terminal_node(v_node, result->malloc_pool_, T_NULL);
v_node->is_hidden_const_ = 1;
v_node->sql_str_off_ = $1->sql_str_off_;
malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, type_node, v_node);
}