From ef355a75099bf6a3bdfea5424bf4553d2c83ea05 Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 2 Aug 2023 07:12:21 +0000 Subject: [PATCH] bugfix : json_value mismatch func fix & json object wild star fix --- src/sql/engine/expr/ob_expr_json_value.cpp | 3 ++- src/sql/resolver/dml/ob_dml_resolver.cpp | 5 +++-- src/sql/resolver/expr/ob_raw_expr_printer.cpp | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/sql/engine/expr/ob_expr_json_value.cpp b/src/sql/engine/expr/ob_expr_json_value.cpp index 5d709068a1..8685b63a11 100644 --- a/src/sql/engine/expr/ob_expr_json_value.cpp +++ b/src/sql/engine/expr/ob_expr_json_value.cpp @@ -1103,6 +1103,7 @@ int ObExprJsonValue::cast_to_datetime(ObIJsonBase *j_base, } else if (type_cast_to_string(json_string, allocator, j_base, accuracy) && json_string.length() > 0) { ObJsonString json_str(json_string.ptr(),json_string.length()); if (CAST_FAIL(json_str.to_datetime(val, &cvrt_ctx))) { + is_type_cast = 1; LOG_WARN("wrapper to datetime failed.", K(ret), K(*j_base)); } } else if (CAST_FAIL(j_base->to_datetime(val, &cvrt_ctx))) { @@ -1676,7 +1677,7 @@ bool ObExprJsonValue::try_set_error_val(const ObExpr &expr, for(size_t i = 0; i < mismatch_val.size(); i++) { // 目前不支持UDT,因此只考虑第一个参数中的 error 和 null。 if (mismatch_val[i] == OB_JSON_ON_MISMATCH_ERROR) { mismatch_error = false; - } else if (mismatch_val[i] == OB_JSON_ON_MISMATCH_NULL) { + } else if (mismatch_val[i] == OB_JSON_ON_MISMATCH_NULL || mismatch_val[i] == OB_JSON_ON_MISMATCH_IGNORE) { is_null_res = true; } } diff --git a/src/sql/resolver/dml/ob_dml_resolver.cpp b/src/sql/resolver/dml/ob_dml_resolver.cpp index e37afa0979..ca8412c3c9 100755 --- a/src/sql/resolver/dml/ob_dml_resolver.cpp +++ b/src/sql/resolver/dml/ob_dml_resolver.cpp @@ -1429,6 +1429,7 @@ int ObDMLResolver::get_target_column_list(ObSEArray &target_list, } for (int64_t i = 0; OB_SUCC(ret) && i < num; i++) { const TableItem *tmp_table_item = stmt->get_table_item(i); + column_items.reuse(); if (OB_ISNULL(tmp_table_item)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("table item is null"); @@ -1463,8 +1464,8 @@ int ObDMLResolver::get_target_column_list(ObSEArray &target_list, LOG_WARN("unexpected table type", K_(tmp_table_item->type)); } - for (int64_t i = 0; OB_SUCC(ret) && i < column_items.count(); ++i) { - const ColumnItem &col_item = column_items.at(i); + for (int64_t j = 0; OB_SUCC(ret) && j < column_items.count(); ++j) { + const ColumnItem &col_item = column_items.at(j); if (!is_col || (is_col && col_item.column_name_ == tab_name)) { if (OB_FAIL(target_list.push_back(col_item))) { LOG_WARN("push back target list failed", K(ret)); diff --git a/src/sql/resolver/expr/ob_raw_expr_printer.cpp b/src/sql/resolver/expr/ob_raw_expr_printer.cpp index d0562e56fe..3233f9cd38 100644 --- a/src/sql/resolver/expr/ob_raw_expr_printer.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_printer.cpp @@ -1869,7 +1869,6 @@ int ObRawExprPrinter::print_json_value(ObSysFunRawExpr *expr) not_first_node = false; break; case 1: - case 3: if (not_first_node) { DATA_PRINTF(")"); } @@ -1883,6 +1882,8 @@ int ObRawExprPrinter::print_json_value(ObSysFunRawExpr *expr) DATA_PRINTF(" ignore "); not_first_node = false; break; + case 3: + break; case 4: if (not_first_node) { DATA_PRINTF(", "); @@ -1919,7 +1920,7 @@ int ObRawExprPrinter::print_json_value(ObSysFunRawExpr *expr) LOG_WARN("invalid type value.", K(type)); break; } - if (OB_SUCC(ret) && type <= 3) { + if (OB_SUCC(ret) && type < 3) { DATA_PRINTF(" on mismatch "); } }