add lbt in check_malloc

This commit is contained in:
jingtaoye35 2024-10-12 04:04:40 +00:00 committed by ob-robot
parent ecbc194fc0
commit a5e33d700d
5 changed files with 174 additions and 8 deletions

View File

@ -994,3 +994,12 @@ ParseNode *adjust_inner_join_inner(int *error_code, ParseNode *inner_join, Parse
}
return ret_node;
}
extern int ob_backtrace_c(void **buffer, int size);
extern char *parray_c(char *buf, int64_t len, int64_t *array, int size);
char *parser_lbt(void **addr_buff, const size_t addr_size,
char *str_buff, const size_t str_size)
{
int size = ob_backtrace_c(addr_buff, addr_size);
return parray_c(str_buff, str_size, (int64_t *)addr_buff, size);
}

View File

@ -69,6 +69,7 @@ extern bool check_real_escape(const struct ObCharsetInfo *cs, char *str, int64_t
int64_t last_escape_check_pos);
int add_alias_name(ParseNode *node, ParseResult *result, int end);
extern char *parser_lbt(void **addr_buff, const size_t addr_size, char *str_buff, const size_t str_size);
#define ISSPACE(c) ((c) == ' ' || (c) == '\n' || (c) == '\r' || (c) == '\t' || (c) == '\f' || (c) == '\v')
@ -140,7 +141,10 @@ do {
if (OB_UNLIKELY(NULL == val_ptr)) \
{ \
((ParseResult *)yyextra)->extra_errno_ = OB_PARSER_ERR_NO_MEMORY; \
yyerror(yylloc, yyextra, "No more space for malloc\n"); \
void *addrs[100]; \
char buf[1024]; \
char *print_str = parser_lbt(addrs, 100, buf, 1024); \
yyerror(yylloc, yyextra, "No more space for malloc, lbt: %s", print_str); \
return ERROR; \
} \
} while (0);

View File

@ -33,6 +33,7 @@
#include "../../../src/sql/parser/sql_parser_base.h"
extern void obsql_oracle_parse_fatal_error(int32_t errcode, yyscan_t yyscanner, yyconst char *msg, ...);
extern int easy_vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
#define GEN_EXPLAN_STMT(no_use, explain_stmt, explain_type, display_type, stmt, into_table, set_statement_id) \
(void)(no_use); \
@ -11091,6 +11092,9 @@ global_hint
}
| error
{
if (OB_PARSER_ERR_NO_MEMORY == result->extra_errno_) {
YYABORT_NO_MEMORY;
}
$$ = NULL;
}
;
@ -24664,13 +24668,7 @@ void yyerror(void *yylloc, ParseResult *p, char *s, ...)
p->result_tree_ = 0;
va_list ap;
va_start(ap, s);
char *escaped_s = NULL;
ESCAPE_PERCENT(p, s, escaped_s);
if (OB_NOT_NULL(escaped_s)) {
vsnprintf(p->error_msg_, MAX_ERROR_MSG, escaped_s, ap);
} else {
vsnprintf(p->error_msg_, MAX_ERROR_MSG, s, ap);
}
easy_vsnprintf(p->error_msg_, MAX_ERROR_MSG, s, ap);
if (OB_LIKELY(NULL != yylloc)) {
YYLTYPE *yylloc_pointer = (YYLTYPE *)yylloc;
if (OB_LIKELY(NULL != p->input_sql_) && p->input_sql_[yylloc_pointer->first_column - 1] != '\'') {

View File

@ -65,6 +65,17 @@ bool check_stack_overflow_c()
{
return 0;
}
int ob_backtrace_c(void **buffer, int size)
{
return 0;
}
char *parray_c(char *buf, int64_t len, int64_t *array, int size)
{
snprintf(buf, 0, "oceanbase");
return buf;
}
}
using namespace oceanbase::sql;
@ -284,6 +295,9 @@ void start_test_token_offset(const char *test_sqls[],
ParseResult parse_result;
int tmp_ptr = 1;
setup_parse_result(parse_result, tmp_ptr);
if (2151678466 == sql_mode) {
parse_result.connection_collation_ = 45;
}
parse_result.sql_mode_ = sql_mode;
const char *input_sql = test_sqls[i];

View File

@ -136,3 +136,144 @@ T_STMT_LIST (null) off: -1 len: -1
--------T_IDENT (primary) off: 25 len: 7
Oracle mode:
/*+ c1 */ /* c2 */ select /* ignored */ /*+ no_rewrite, index(t1 primary) */ /* ignored */ c1 from t1;
T_STMT_LIST (null) off: -1 len: -1
--T_SELECT (null) off: 19 len: 6
----T_PROJECT_LIST (null) off: -1 len: -1
------T_PROJECT_STRING (C1) off: -1 len: -1
--------T_OBJ_ACCESS_REF (c1) off: 95 len: 2
----------T_IDENT (C1) off: 95 len: 2
----T_FROM_LIST (null) off: 98 len: 4
------T_ORG (null) off: -1 len: -1
--------T_RELATION_FACTOR (T1) off: -1 len: -1
----------T_IDENT (T1) off: 103 len: 2
----T_HINT_OPTION_LIST (null) off: 78 len: 37
------T_NO_REWRITE (null) off: -1 len: -1
------T_INDEX_HINT (null) off: -1 len: -1
--------T_RELATION_FACTOR_IN_HINT (null) off: -1 len: -1
----------T_RELATION_FACTOR (t1) off: -1 len: -1
------------T_IDENT (t1) off: 62 len: 2
--------T_IDENT (primary) off: 65 len: 7
i: 0, off: 0, len: 9
i: 1, off: 10, len: 8
select * from t1 where c1 = c2+1*2/3-4 and rownum < 1 order by c1 + 2;
T_STMT_LIST (null) off: -1 len: -1
--T_SELECT (null) off: 0 len: 6
----T_PROJECT_LIST (null) off: -1 len: -1
------T_PROJECT_STRING (*) off: 7 len: 1
--------T_STAR (null) off: -1 len: -1
----T_FROM_LIST (null) off: 9 len: 4
------T_ORG (null) off: -1 len: -1
--------T_RELATION_FACTOR (T1) off: -1 len: -1
----------T_IDENT (T1) off: 14 len: 2
----T_WHERE_CLAUSE (null) off: -1 len: -1
------T_OP_AND (null) off: -1 len: -1
--------T_OP_EQ (c1 = c2+1*2/3-4) off: 23 len: 15
----------T_OBJ_ACCESS_REF (c1) off: 23 len: 2
------------T_IDENT (C1) off: 23 len: 2
----------T_OP_MINUS (c2+1*2/3-4) off: 28 len: 10
------------T_OP_ADD (c2+1*2/3) off: 28 len: 8
--------------T_OBJ_ACCESS_REF (c2) off: 28 len: 2
----------------T_IDENT (C2) off: 28 len: 2
--------------T_OP_DIV (1*2/3) off: 31 len: 5
----------------T_OP_MUL (1*2) off: 31 len: 3
------------------T_INT (1) off: 31 len: 1
------------------T_INT (2) off: 33 len: 1
----------------T_INT (3) off: 35 len: 1
------------T_INT (4) off: 37 len: 1
--------T_OP_LT (rownum < 1) off: 43 len: 10
----------T_FUN_SYS (rownum) off: 43 len: 6
------------T_IDENT (rownum) off: -1 len: -1
----------T_INT (1) off: 52 len: 1
----T_ORDER_BY (null) off: 54 len: 8
------T_SORT_LIST (null) off: -1 len: -1
--------T_SORT_KEY (null) off: -1 len: -1
----------T_OP_ADD (c1 + 2) off: 63 len: 6
------------T_OBJ_ACCESS_REF (c1) off: 63 len: 2
--------------T_IDENT (C1) off: 63 len: 2
------------T_INT (2) off: 68 len: 1
----------T_SORT_ASC (null) off: -1 len: -1
select * from t1 where c1 = c2+1*2/3-4 and rownum < 1+1 order by c1 + 2;
T_STMT_LIST (null) off: -1 len: -1
--T_SELECT (null) off: 0 len: 6
----T_PROJECT_LIST (null) off: -1 len: -1
------T_PROJECT_STRING (*) off: 7 len: 1
--------T_STAR (null) off: -1 len: -1
----T_FROM_LIST (null) off: 9 len: 4
------T_ORG (null) off: -1 len: -1
--------T_RELATION_FACTOR (T1) off: -1 len: -1
----------T_IDENT (T1) off: 14 len: 2
----T_WHERE_CLAUSE (null) off: -1 len: -1
------T_OP_AND (null) off: -1 len: -1
--------T_OP_EQ (c1 = c2+1*2/3-4) off: 23 len: 15
----------T_OBJ_ACCESS_REF (c1) off: 23 len: 2
------------T_IDENT (C1) off: 23 len: 2
----------T_OP_MINUS (c2+1*2/3-4) off: 28 len: 10
------------T_OP_ADD (c2+1*2/3) off: 28 len: 8
--------------T_OBJ_ACCESS_REF (c2) off: 28 len: 2
----------------T_IDENT (C2) off: 28 len: 2
--------------T_OP_DIV (1*2/3) off: 31 len: 5
----------------T_OP_MUL (1*2) off: 31 len: 3
------------------T_INT (1) off: 31 len: 1
------------------T_INT (2) off: 33 len: 1
----------------T_INT (3) off: 35 len: 1
------------T_INT (4) off: 37 len: 1
--------T_OP_LT (rownum < 1+1) off: 43 len: 12
----------T_FUN_SYS (rownum) off: 43 len: 6
------------T_IDENT (rownum) off: -1 len: -1
----------T_OP_ADD (1+1) off: 52 len: 3
------------T_INT (1) off: 52 len: 1
------------T_INT (1) off: 54 len: 1
----T_ORDER_BY (null) off: 56 len: 8
------T_SORT_LIST (null) off: -1 len: -1
--------T_SORT_KEY (null) off: -1 len: -1
----------T_OP_ADD (c1 + 2) off: 65 len: 6
------------T_OBJ_ACCESS_REF (c1) off: 65 len: 2
--------------T_IDENT (C1) off: 65 len: 2
------------T_INT (2) off: 70 len: 1
----------T_SORT_ASC (null) off: -1 len: -1
select /*+ index(t1.c1 primary) */* from t1 where "name" = 'abc';
T_STMT_LIST (null) off: -1 len: -1
--T_SELECT (null) off: 0 len: 6
----T_PROJECT_LIST (null) off: -1 len: -1
------T_PROJECT_STRING (*) off: 34 len: 1
--------T_STAR (null) off: -1 len: -1
----T_FROM_LIST (null) off: 36 len: 4
------T_ORG (null) off: -1 len: -1
--------T_RELATION_FACTOR (T1) off: -1 len: -1
----------T_IDENT (T1) off: 41 len: 2
----T_WHERE_CLAUSE (null) off: -1 len: -1
------T_OP_EQ ("name" = 'abc') off: 50 len: 14
--------T_OBJ_ACCESS_REF ("name") off: 50 len: 6
----------T_IDENT (name) off: 51 len: 4
--------T_CHAR ('abc') off: 59 len: 5
----------T_VARCHAR (abc) off: 60 len: 3
----T_HINT_OPTION_LIST (null) off: 33 len: 25
------T_INDEX_HINT (null) off: -1 len: -1
--------T_RELATION_FACTOR_IN_HINT (null) off: -1 len: -1
----------T_RELATION_FACTOR (c1) off: -1 len: -1
------------T_IDENT (t1) off: 17 len: 2
------------T_IDENT (c1) off: 20 len: 2
--------T_IDENT (primary) off: 23 len: 7
select /*+ index(t1.name primary) */* from t1 where "c1" = 'abc';
T_STMT_LIST (null) off: -1 len: -1
--T_SELECT (null) off: 0 len: 6
----T_PROJECT_LIST (null) off: -1 len: -1
------T_PROJECT_STRING (*) off: 36 len: 1
--------T_STAR (null) off: -1 len: -1
----T_FROM_LIST (null) off: 38 len: 4
------T_ORG (null) off: -1 len: -1
--------T_RELATION_FACTOR (T1) off: -1 len: -1
----------T_IDENT (T1) off: 43 len: 2
----T_WHERE_CLAUSE (null) off: -1 len: -1
------T_OP_EQ ("c1" = 'abc') off: 52 len: 12
--------T_OBJ_ACCESS_REF ("c1") off: 52 len: 4
----------T_IDENT (c1) off: 53 len: 2
--------T_CHAR ('abc') off: 59 len: 5
----------T_VARCHAR (abc) off: 60 len: 3
----T_HINT_OPTION_LIST (null) off: 35 len: 27
------T_INDEX_HINT (null) off: -1 len: -1
--------T_RELATION_FACTOR_IN_HINT (null) off: -1 len: -1
----------T_RELATION_FACTOR (name) off: -1 len: -1
------------T_IDENT (t1) off: 17 len: 2
------------T_IDENT (name) off: 20 len: 4
--------T_IDENT (primary) off: 25 len: 7