diff --git a/src/sql/resolver/cmd/ob_load_data_resolver.cpp b/src/sql/resolver/cmd/ob_load_data_resolver.cpp index 4e99c836ce..86db9081bb 100644 --- a/src/sql/resolver/cmd/ob_load_data_resolver.cpp +++ b/src/sql/resolver/cmd/ob_load_data_resolver.cpp @@ -190,6 +190,8 @@ int ObLoadDataResolver::resolve(const ParseNode &parse_tree) LOG_USER_ERROR(OB_NOT_SUPPORTED, "load data to the view is"); } else if (OB_FAIL(check_trigger_constraint(tschema))) { LOG_WARN("check trigger constraint failed", K(ret), KPC(tschema)); + } else if (OB_FAIL(check_collection_sql_type(tschema))) { + LOG_WARN("check collection sql type column failed", K(ret), KPC(tschema)); } else { load_args.table_id_ = tschema->get_table_id(); load_args.table_name_ = table_name; @@ -1638,5 +1640,30 @@ int ObLoadDataResolver::check_trigger_constraint(const ObTableSchema *table_sche return ret; } +int ObLoadDataResolver::check_collection_sql_type(const ObTableSchema *table_schema) +{ + int ret = OB_SUCCESS; + if (OB_ISNULL(table_schema) + || OB_ISNULL(schema_checker_) + || OB_ISNULL(session_info_) + || OB_ISNULL(schema_checker_->get_schema_guard())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("object is null", K(ret), K(table_schema), K(schema_checker_), + K(session_info_), K(schema_checker_->get_schema_guard())); + } else { + for (int64_t i = 0; OB_SUCC(ret) && i < table_schema->get_column_count(); i++) { + const ObColumnSchemaV2 *col_schema = nullptr; + if (OB_ISNULL(col_schema = table_schema->get_column_schema_by_idx(i))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected col_schema, is nullptr", K(ret), K(i), KPC(table_schema)); + } else if (col_schema->get_meta_type().is_collection_sql_type()) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("not support load data if table has array/vector column", K(ret), KPC(col_schema)); + } + } + } + return ret; +} + } // sql } // oceanbase diff --git a/src/sql/resolver/cmd/ob_load_data_resolver.h b/src/sql/resolver/cmd/ob_load_data_resolver.h index e1719b25d9..d3a5f9bb6e 100644 --- a/src/sql/resolver/cmd/ob_load_data_resolver.h +++ b/src/sql/resolver/cmd/ob_load_data_resolver.h @@ -62,6 +62,7 @@ public: int local_infile_enabled(bool &enabled) const; int check_trigger_constraint(const ObTableSchema *table_schema); + int check_collection_sql_type(const ObTableSchema *table_schema); private: int pattern_match(const ObString& str, const ObString& pattern, bool &matched); bool exist_wildcard(const ObString& str);