diff --git a/src/sql/ob_dml_stmt_printer.cpp b/src/sql/ob_dml_stmt_printer.cpp index 4a23026440..91d77515b6 100644 --- a/src/sql/ob_dml_stmt_printer.cpp +++ b/src/sql/ob_dml_stmt_printer.cpp @@ -1216,8 +1216,13 @@ int ObDMLStmtPrinter::print_json_table_nested_column(const TableItem *table_item DATA_PRINTF(" null on empty"); } else if (col_info.on_empty_ == 2) { DATA_PRINTF(" default "); - if (OB_SUCC(ret) - && OB_FAIL(expr_printer_.do_print(cur_def->empty_expr_, T_NONE_SCOPE))) { + if (OB_FAIL(ret)) { + } else if (T_BOOL == cur_def->empty_expr_->get_expr_type()) { // bool need print 'true' or 'false' int json_table, not 1=1' + ObConstRawExpr *con_expr = static_cast(cur_def->empty_expr_); + if (OB_FAIL(databuff_printf(buf_, buf_len_, *pos_, con_expr->get_value().get_bool() ? "true" : "false"))) { + LOG_WARN("fail to print startup filter", K(ret)); + } + } else if (OB_FAIL(expr_printer_.do_print(cur_def->empty_expr_, T_NONE_SCOPE))) { LOG_WARN("fail to print default value col", K(ret)); } DATA_PRINTF(" on empty"); @@ -1230,8 +1235,13 @@ int ObDMLStmtPrinter::print_json_table_nested_column(const TableItem *table_item DATA_PRINTF(" null on error"); } else if (col_info.on_error_ == 2) { DATA_PRINTF(" default "); - if (OB_SUCC(ret) - && OB_FAIL(expr_printer_.do_print(cur_def->error_expr_, T_NONE_SCOPE))) { + if (OB_FAIL(ret)) { + } else if (T_BOOL == cur_def->error_expr_->get_expr_type()) { // bool need print 'true' or 'false' int json_table, not 1=1' + ObConstRawExpr *con_expr = static_cast(cur_def->error_expr_); + if (OB_FAIL(databuff_printf(buf_, buf_len_, *pos_, con_expr->get_value().get_bool() ? "true" : "false"))) { + LOG_WARN("fail to print startup filter", K(ret)); + } + } else if (OB_FAIL(expr_printer_.do_print(cur_def->error_expr_, T_NONE_SCOPE))) { LOG_WARN("fail to print default value col", K(ret)); } DATA_PRINTF(" on error"); diff --git a/src/sql/resolver/dml/ob_del_upd_resolver.cpp b/src/sql/resolver/dml/ob_del_upd_resolver.cpp index afed49891a..57cbf70c00 100644 --- a/src/sql/resolver/dml/ob_del_upd_resolver.cpp +++ b/src/sql/resolver/dml/ob_del_upd_resolver.cpp @@ -1016,6 +1016,9 @@ int ObDelUpdResolver::set_base_table_for_view(TableItem &table_item, const bool } else if (base->is_values_table()) { ret = OB_ERR_NON_UPDATABLE_TABLE; LOG_WARN("non update table", K(ret)); + } else if (base->is_json_table()) { + ret = is_mysql_mode() ? OB_ERR_NON_UPDATABLE_TABLE : OB_ERR_O_DELETE_VIEW_NON_KEY_PRESERVED; + LOG_WARN("non update json table", K(ret)); } else { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected table type in view", K(ret), K(*base)); diff --git a/src/sql/resolver/dml/ob_dml_resolver.cpp b/src/sql/resolver/dml/ob_dml_resolver.cpp index ec5e82dcc6..2a8800e548 100755 --- a/src/sql/resolver/dml/ob_dml_resolver.cpp +++ b/src/sql/resolver/dml/ob_dml_resolver.cpp @@ -8805,9 +8805,12 @@ int ObDMLResolver::generate_json_table_output_column_item(TableItem *table_item, } OX (col_expr->set_database_name(table_item->database_name_)); - if (OB_SUCC(ret) && lib::is_oracle_mode() && ob_is_enumset_tc(col_expr->get_data_type())) { + if (OB_FAIL(ret)) { + } else if (lib::is_oracle_mode() && ob_is_enumset_tc(col_expr->get_data_type())) { ret = OB_NOT_SUPPORTED; LOG_WARN("not support enum set in table function", K(ret)); + } else { + col_expr->unset_result_flag(NOT_NULL_FLAG); } OX (column_item.expr_ = col_expr); OX (column_item.table_id_ = col_expr->get_table_id());