add lbt in check_malloc
This commit is contained in:
parent
ecbc194fc0
commit
a5e33d700d
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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] != '\'') {
|
||||
|
@ -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];
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user