fix raw type null error and forbid lock table in dblink.
This commit is contained in:
@ -831,7 +831,9 @@ int ObMySQLResultImpl::get_obj(const int64_t col_idx, ObObj &obj,
|
|||||||
case ObRawType:
|
case ObRawType:
|
||||||
if (OB_SUCC(get_raw(col_idx, obj_str)))
|
if (OB_SUCC(get_raw(col_idx, obj_str)))
|
||||||
{
|
{
|
||||||
if (OB_ISNULL(allocator)) {
|
if (obj_str.empty()) {
|
||||||
|
obj.set_null();
|
||||||
|
} else if (OB_ISNULL(allocator)) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("allocator is NULL", K(ret));
|
LOG_WARN("allocator is NULL", K(ret));
|
||||||
} else if (OB_FAIL(ObHexUtilsBase::unhex(obj_str, *allocator, obj))) {
|
} else if (OB_FAIL(ObHexUtilsBase::unhex(obj_str, *allocator, obj))) {
|
||||||
|
|||||||
@ -41,6 +41,7 @@ int ObLockTableResolver::resolve(const ParseNode &parse_tree)
|
|||||||
int ObLockTableResolver::resolve_mysql_mode(const ParseNode &parse_tree)
|
int ObLockTableResolver::resolve_mysql_mode(const ParseNode &parse_tree)
|
||||||
{
|
{
|
||||||
// TODO: yanyuan.cxf deal with mysql mode later.
|
// TODO: yanyuan.cxf deal with mysql mode later.
|
||||||
|
// TODO: forbid dblink lock table after yanyuan.cxf deal with mysql mode.
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
ObLockTableStmt *lock_stmt = NULL;
|
ObLockTableStmt *lock_stmt = NULL;
|
||||||
|
|
||||||
@ -117,14 +118,29 @@ int ObLockTableResolver::resolve_table_list(const ParseNode &table_list)
|
|||||||
} else if (OB_ISNULL(lock_stmt)) {
|
} else if (OB_ISNULL(lock_stmt)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("invalid lock table stmt", K(lock_stmt));
|
LOG_WARN("invalid lock table stmt", K(lock_stmt));
|
||||||
|
} else if (OB_ISNULL(session_info_)) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("unexpected null ptr", K(ret));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int64_t i = 0; OB_SUCC(ret) && i < table_list.num_child_; ++i) {
|
for (int64_t i = 0; OB_SUCC(ret) && i < table_list.num_child_; ++i) {
|
||||||
const ParseNode *table_node = table_list.children_[i];
|
const ParseNode *table_node = table_list.children_[i];
|
||||||
const ObTableSchema *table_schema = nullptr;
|
const ObTableSchema *table_schema = nullptr;
|
||||||
|
ObString dblink_name; //no use
|
||||||
|
bool is_reverse_link = false; //no use
|
||||||
|
bool has_dblink_node = false;
|
||||||
if (OB_ISNULL(table_node)) {
|
if (OB_ISNULL(table_node)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("table node is null");
|
LOG_WARN("table node is null");
|
||||||
|
} else if (OB_FAIL(ObStmtResolver::resolve_dblink_name(table_node->children_[0],
|
||||||
|
session_info_->get_effective_tenant_id(),
|
||||||
|
dblink_name,
|
||||||
|
is_reverse_link,
|
||||||
|
has_dblink_node))) {
|
||||||
|
LOG_WARN("failed to resolve dblink", K(ret));
|
||||||
|
} else if (has_dblink_node) {
|
||||||
|
ret = OB_NOT_SUPPORTED;
|
||||||
|
LOG_WARN("dblink not support lock table", K(dblink_name), K(is_reverse_link), K(ret));
|
||||||
} else if (OB_FAIL(ObDMLResolver::resolve_table(*table_node, table_item))) {
|
} else if (OB_FAIL(ObDMLResolver::resolve_table(*table_node, table_item))) {
|
||||||
LOG_WARN("failed to resolve table", K(ret));
|
LOG_WARN("failed to resolve table", K(ret));
|
||||||
} else if (table_item->is_function_table() || table_item->is_json_table()) {//兼容oracle行为
|
} else if (table_item->is_function_table() || table_item->is_json_table()) {//兼容oracle行为
|
||||||
|
|||||||
Reference in New Issue
Block a user