diff --git a/src/sql/parser/parse_node.c b/src/sql/parser/parse_node.c index e1df5509743404afd99f56d85b8d759b32a5eb5e..fef2af133fbe9d9992459e01c1189c280633c0a3 100644 --- a/src/sql/parser/parse_node.c +++ b/src/sql/parser/parse_node.c @@ -129,7 +129,7 @@ int count_child(ParseNode* root, void* malloc_pool, int* count) do { ParseNode *tree = NULL; if (NULL == stack_top || NULL == (tree = (ParseNode *)stack_top->val_)) { - ret = OB_PARSER_ERR_NO_MEMORY; + ret = OB_PARSER_ERR_UNEXPECTED; (void)fprintf(stderr, "ERROR invalid null argument\n"); } else { stack_top = stack_top->next_; @@ -142,7 +142,7 @@ int count_child(ParseNode* root, void* malloc_pool, int* count) // do nothing } else { if (NULL == tree->children_) { - ret = OB_PARSER_ERR_NO_MEMORY; + ret = OB_PARSER_ERR_UNEXPECTED; (void)fprintf(stderr, "ERROR invalid null children\n"); } ParserLinkNode* tmp_node = NULL; @@ -171,7 +171,7 @@ int merge_child(ParseNode* node, void* malloc_pool, ParseNode* source_tree, int* int ret = 0; ParserLinkNode* stack_top = NULL; if (OB_UNLIKELY(NULL == node || NULL == index)) { - ret = OB_PARSER_ERR_NO_MEMORY; + ret = OB_PARSER_ERR_UNEXPECTED; (void)fprintf(stderr, "ERROR node%p or index:%p is NULL\n", node, index); } else if (NULL == source_tree) { // do nothing @@ -184,7 +184,7 @@ int merge_child(ParseNode* node, void* malloc_pool, ParseNode* source_tree, int* do { ParseNode *tree = NULL; if (NULL == stack_top || NULL == (tree = (ParseNode *)stack_top->val_)) { - ret = OB_PARSER_ERR_NO_MEMORY; + ret = OB_PARSER_ERR_UNEXPECTED; (void)fprintf(stderr, "ERROR invalid null argument\n"); } else { // pop stack @@ -194,11 +194,11 @@ int merge_child(ParseNode* node, void* malloc_pool, ParseNode* source_tree, int* // do nothing } else if (T_LINK_NODE != tree->type_) { if (OB_UNLIKELY(*index < 0 || *index >= node->num_child_)) { - ret = OB_PARSER_ERR_NO_MEMORY; + ret = OB_PARSER_ERR_UNEXPECTED; (void)fprintf( stderr, "ERROR invalid index: %d, num_child:%d\n tree: %d", *index, node->num_child_, tree->type_); } else if (NULL == node->children_) { - ret = OB_PARSER_ERR_NO_MEMORY; + ret = OB_PARSER_ERR_UNEXPECTED; (void)fprintf(stderr, "ERROR invalid null children pointer\n"); } else { node->children_[*index] = tree; @@ -207,7 +207,7 @@ int merge_child(ParseNode* node, void* malloc_pool, ParseNode* source_tree, int* } else if (tree->num_child_ <= 0) { // do nothing } else if (NULL == tree->children_) { - ret = OB_PARSER_ERR_NO_MEMORY; + ret = OB_PARSER_ERR_UNEXPECTED; (void)fprintf(stderr, "ERROR invalid children pointer\n"); } else { ParserLinkNode* tmp_node = NULL; diff --git a/src/sql/rewrite/ob_transform_utils.cpp b/src/sql/rewrite/ob_transform_utils.cpp index 12ef04f70f1ff6132119105b8dc2a5fcf262f8ac..c4f9dfc734d60c4b101dfa184ca4317a6c2679ee 100644 --- a/src/sql/rewrite/ob_transform_utils.cpp +++ b/src/sql/rewrite/ob_transform_utils.cpp @@ -256,23 +256,28 @@ int ObTransformUtils::add_new_joined_table(ObTransformerCtx* ctx, ObDMLStmt& stm ret = OB_ERR_UNEXPECTED; LOG_WARN("transform context is invalid", K(ret), K(ctx), K(stmt), K(left_table), K(right_table)); } else { - JoinedTable* joined_table = static_cast(ctx->allocator_->alloc(sizeof(JoinedTable))); - joined_table = new (joined_table) JoinedTable(); - joined_table->type_ = TableItem::JOINED_TABLE; - joined_table->table_id_ = stmt.get_query_ctx()->available_tb_id_--; - joined_table->joined_type_ = join_type; - joined_table->left_table_ = left_table; - joined_table->right_table_ = right_table; - if (OB_FAIL(joined_table->join_conditions_.assign(joined_conds))) { - LOG_WARN("failed to push back join conditions", K(ret)); - } else if (OB_FAIL(ObTransformUtils::add_joined_table_single_table_ids(*joined_table, *left_table))) { - LOG_WARN("failed to add left table ids", K(ret)); - } else if (OB_FAIL(ObTransformUtils::add_joined_table_single_table_ids(*joined_table, *right_table))) { - LOG_WARN("failed to add right table ids", K(ret)); - } else if (add_table && OB_FAIL(stmt.add_joined_table(joined_table))) { - LOG_WARN("failed to add joined table into stmt", K(ret)); + JoinedTable *joined_table = static_cast(ctx->allocator_->alloc(sizeof(JoinedTable))); + if (OB_ISNULL(joined_table)) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_WARN("fail to allocate memory", K(ret)); } else { - new_join_table = joined_table; + joined_table = new (joined_table) JoinedTable(); + joined_table->type_ = TableItem::JOINED_TABLE; + joined_table->table_id_ = stmt.get_query_ctx()->available_tb_id_--; + joined_table->joined_type_ = join_type; + joined_table->left_table_ = left_table; + joined_table->right_table_ = right_table; + if (OB_FAIL(joined_table->join_conditions_.assign(joined_conds))) { + LOG_WARN("failed to push back join conditions", K(ret)); + } else if (OB_FAIL(ObTransformUtils::add_joined_table_single_table_ids(*joined_table, *left_table))) { + LOG_WARN("failed to add left table ids", K(ret)); + } else if (OB_FAIL(ObTransformUtils::add_joined_table_single_table_ids(*joined_table, *right_table))) { + LOG_WARN("failed to add right table ids", K(ret)); + } else if (add_table && OB_FAIL(stmt.add_joined_table(joined_table))) { + LOG_WARN("failed to add joined table into stmt", K(ret)); + } else { + new_join_table = joined_table; + } } } return ret;